receiptCheck.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559
  1. $(function () {
  2. let shippingStatus = getQueryString("shippingStatus");
  3. let payStatus = getQueryString("payStatus");
  4. let orderStatus = getQueryString("orderStatus");
  5. let orderType = getQueryString("orderType");
  6. let url = '../order/offilineOrderList?1';
  7. if (shippingStatus) {
  8. url += '&shippingStatus=' + shippingStatus;
  9. }
  10. if (payStatus) {
  11. url += '&payStatus=' + payStatus;
  12. }
  13. if (orderStatus) {
  14. url += '&orderStatus=' + orderStatus;
  15. }
  16. if (orderType) {
  17. url += '&orderType=' + orderType;
  18. }
  19. $("#jqGrid").jqGrid({
  20. url: url,
  21. datatype: "json",
  22. colModel: [
  23. {label: 'id', name: 'id', index: 'id', key: true, hidden: true},
  24. {label: '订单号', name: 'orderSn', index: 'order_sn', align: 'center',width: 120},
  25. {label: '操作店员', name: 'userName', index: 'user_name', align: 'center',width: 80},
  26. {
  27. label: '订单状态', name: 'orderStatus', index: 'order_status', align: 'center',width: 180,
  28. formatter: function (value) {
  29. if (value == '0') {
  30. return '订单创建成功等待付款';
  31. } else if (value == '100') {
  32. return '订单付款中';
  33. } else if (value == '101') {
  34. return '订单已取消';
  35. } else if (value == '102') {
  36. return '订单已删除';
  37. } else if (value == '201') {
  38. return '订单已付款';
  39. } else if (value == '300') {
  40. return '订单已发货';
  41. } else if (value == '301') {
  42. return '用户确认收货';
  43. } else if (value == '401') {
  44. return '没有发货,退款';
  45. } else if (value == '402') {
  46. return '已收货,退款退货';
  47. }
  48. return value;
  49. }
  50. },
  51. {label: '订单总价', name: 'orderPrice', index: 'order_price',align: 'center', width: 80},
  52. {
  53. label: '下单时间', name: 'addTime', index: 'add_time', width: 140,align: 'center',
  54. formatter: function (value) {
  55. return transDate(value, 'yyyy-MM-dd hh:mm:ss');
  56. }
  57. },
  58. {
  59. label: '付款时间', name: 'payTime', index: 'pay_time', width: 140, align: 'center',
  60. formatter: function (value) {
  61. return transDate(value, 'yyyy-MM-dd hh:mm:ss');
  62. }
  63. },
  64. // {label: '快递公司', name: 'shippingName', index: 'shipping_name', width: 80},
  65. // {label: '配送单号', name: 'shippingNo', index: 'shipping_No', width: 80},
  66. // {label: '快递费用', name: 'shippingFee', index: 'shipping_fee', width: 80},
  67. {
  68. label: '操作', width: 180, sortable: false,align: 'center',
  69. formatter: function (value, col, row) {
  70. let htmlStr = '<button class="btn btn-outline btn-info" onclick="vm.lookDetail(' + row.id + ')"><i class="fa fa-info-circle"></i>详情</button>&nbsp;';
  71. if (row.orderStatus == 201 && (row.orderBizType == '11')) {
  72. htmlStr += '<button class="btn btn-outline btn-primary" onclick="vm.printDetail(' + row.id + ')"><i class="fa fa-print"></i>打印</button>&nbsp;';
  73. }
  74. if (row.orderStatus == 0) {
  75. htmlStr += '<button class="btn btn-outline btn-danger" onclick="vm.cancelUpdate(' + row.id + ')"><i class="fa fa-times-circle-o"></i>&nbsp;取消</button>&nbsp;';
  76. }
  77. if (row.orderStatus == 201) {
  78. htmlStr += '<button class="btn btn-outline btn-danger" onclick="vm.refundUpdate(' + row.id + ')"><i class="fa fa-times-circle-o"></i>&nbsp;退款</button>&nbsp;';
  79. }
  80. return htmlStr;
  81. }
  82. }
  83. ],
  84. viewrecords: true,
  85. height: 675,
  86. rowNum: 10,
  87. rowList: [10, 30, 50],
  88. rownumbers: true,
  89. rownumWidth: 25,
  90. autowidth: true,
  91. shrinkToFit: false,
  92. autoScroll: true, //开启水平滚动条
  93. width: 1500,
  94. multiselect: true,
  95. pager: "#jqGridPager",
  96. jsonReader: {
  97. root: "page.list",
  98. page: "page.currPage",
  99. total: "page.totalPage",
  100. records: "page.totalCount"
  101. },
  102. prmNames: {
  103. page: "page",
  104. rows: "limit",
  105. order: "order"
  106. },
  107. gridComplete: function () {
  108. $("#jqGrid").closest(".ui-jqgrid-bdiv").css({"overflow-x": "scroll"});
  109. }
  110. });
  111. });
  112. let vm = new Vue({
  113. el: '#rrapp',
  114. data: {
  115. showDiv: 1, // 1查询 2编辑 3发货 4选择骑手 5退款
  116. title: null,
  117. order: {},
  118. shippings: [],
  119. q: {
  120. orderSn: '',
  121. orderStatus: '',
  122. orderType: ''
  123. },
  124. refundMoney: 0,
  125. shipping: {},
  126. logisticsInfo: {
  127. tracesList: [],
  128. logisticCode: '',
  129. shipperCode: ''
  130. },
  131. macros: [],
  132. orderProcessRecordEntity: {},
  133. orderGoodsList: [],
  134. payRecordList:[]
  135. },
  136. methods: {
  137. query: function () {
  138. vm.reload(1);
  139. },
  140. getMacro: function () {
  141. $.get("../sys/macro/queryMacrosByValue?value=goodsBizType", function (r) {
  142. vm.macros = r.list;
  143. });
  144. },
  145. shippingChange: function (opt) {
  146. vm.order.shippingName = opt.label;
  147. vm.order.shippingCode = opt.value;
  148. },
  149. saveOrUpdate: function (event) {
  150. $.ajax({
  151. type: "POST",
  152. url: '../order/sendGoods',
  153. contentType: "application/json",
  154. data: JSON.stringify(vm.order),
  155. success: function (r) {
  156. if (r.code === 0) {
  157. alert('操作成功', function (index) {
  158. vm.reload();
  159. });
  160. } else {
  161. alert(r.msg);
  162. }
  163. }
  164. });
  165. },
  166. reload: function (event) {
  167. vm.showDiv = 1;
  168. let page = event;
  169. if (event != 1) {
  170. page = $("#jqGrid").jqGrid('getGridParam', 'page');
  171. }
  172. $("#jqGrid").jqGrid('setGridParam', {
  173. postData: {
  174. 'orderSn': vm.q.orderSn,
  175. 'orderStatus': vm.q.orderStatus,
  176. 'orderType': vm.q.orderType
  177. },
  178. page: page
  179. }).trigger("reloadGrid");
  180. },
  181. reloadSearch: function () {
  182. vm.q = {
  183. orderSn: '',
  184. orderStatus: '',
  185. orderType: ''
  186. };
  187. },
  188. lookDetail: function (rowId) { //第三步:定义编辑操作
  189. vm.showDiv = 2;
  190. vm.title = "订单详情";
  191. $.get("../order/offlineInfos/" + rowId, function (r) {
  192. vm.order = r.order;
  193. vm.orderGoodsList = r.order.orderGoodsEntityList;
  194. vm.payRecordList = r.order.payRecordList;
  195. });
  196. vm.getMacro();
  197. },
  198. printDetail: function (rowId) {
  199. confirm('确定连接打票机打印出票?', function () {
  200. $.ajax({
  201. type: "POST",
  202. url: "../order/printMsg",
  203. contentType: "application/json",
  204. data: JSON.stringify(rowId),
  205. success: function (r) {
  206. if (r.ticket != null) {
  207. // printArea(r.ticket);
  208. var content = getPrintContent(r.ticket);
  209. printArea(content);
  210. alert('打印小票完成');
  211. }else{
  212. alert("打印小票失败");
  213. }
  214. }
  215. });
  216. })
  217. },
  218. confirm: function (event) {
  219. let id = getSelectedRow();
  220. if (id == null) {
  221. return;
  222. }
  223. var rowData = $("#jqGrid").jqGrid('getRowData', id);
  224. if(rowData.orderStatus == '订单已付款'){
  225. alert('该订单已支付');
  226. }else if(rowData.orderStatus == '订单已取消'){
  227. alert('该订单已取消');
  228. }else if(rowData.orderStatus == '订单已删除'){
  229. alert('该订单已删除');
  230. }else {
  231. confirm('确定付款?', function () {
  232. $.ajax({
  233. type: "POST",
  234. url: "../order/confirmPay",
  235. contentType: "application/json",
  236. data: JSON.stringify(id),
  237. dataType: "json",
  238. success: function (r) {
  239. if (r.code == 0) {
  240. alert('操作成功', function (index) {
  241. $("#jqGrid").trigger("reloadGrid");
  242. });
  243. } else {
  244. alert(r.msg);
  245. }
  246. }
  247. });
  248. });
  249. }
  250. },
  251. showInputAuthCode: function (event) {
  252. let id = getSelectedRow();
  253. if (id == null) {
  254. return;
  255. }
  256. var rowData = $("#jqGrid").jqGrid('getRowData', id);
  257. if(rowData.orderStatus == '订单已付款'){
  258. alert('该订单已支付');
  259. }else if(rowData.orderStatus == '订单已取消'){
  260. alert('该订单已取消');
  261. }else if(rowData.orderStatus == '订单已删除'){
  262. alert('该订单已删除');
  263. }else{
  264. var layer_index = layer.prompt({title: '请输入微信付款码',
  265. formType: 3, //隐藏用户输入内容
  266. // 这个是确定按钮的事件
  267. "success":function(layero,index){
  268. // 键盘事件,判断回车
  269. $("input.layui-layer-input").on('keydown',function(e){
  270. if (e.which == 13) {
  271. var authCode = $(this).val();
  272. if (authCode == null || authCode == "") {
  273. iview.Message.error("请输入微信付款码");
  274. return;
  275. }
  276. layer.close(layer_index);
  277. var msg_index = layer.msg('支付中', {
  278. icon: 16
  279. ,shade: 0.01
  280. });
  281. wxPay(authCode,id,msg_index);
  282. }
  283. });
  284. },
  285. // 点击确定按钮事件
  286. yes : function(index,layero){
  287. // 取输入框数据
  288. var authCode =$(document.getElementsByClassName('layui-layer-input')[0]).val();
  289. if (authCode == null || authCode == "") {
  290. iview.Message.error("请输入微信付款码");
  291. return;
  292. }
  293. layer.close(layer_index);
  294. var msg_index = layer.msg('支付中', {
  295. icon: 16,
  296. shade: 0.01
  297. });
  298. wxPay(authCode,id,msg_index);
  299. }
  300. });
  301. }
  302. // layer.prompt({title: '请输入微信付款码', formType: 3}, function(pass, index){
  303. // var authCode= pass;
  304. // if (authCode == null || authCode == "") {
  305. // iview.Message.error("请输入微信付款码");
  306. // return;
  307. // }
  308. //
  309. // $.ajax({
  310. // type: "POST",
  311. // url: '../order/wxMicropayPay',
  312. // data: {auth_code: authCode, id: id},
  313. // success: function (r) {
  314. // if (r.code === 0) {
  315. // alert('支付成功', function (index) {
  316. // vm.reload();
  317. // });
  318. // } else {
  319. // alert(r.msg);
  320. // }
  321. // }
  322. // });
  323. //
  324. // layer.close(index);
  325. // });
  326. },
  327. refundUpdate: function (rowId) {
  328. let params = {};
  329. params.orderId = rowId;
  330. confirm("确认退款吗?",function () {
  331. $.ajax({
  332. type: "POST",
  333. url: '../order/offilineRefund',
  334. data: params,
  335. success: function (r) {
  336. if (r.code === 0) {
  337. alert('退款成功', function (index) {
  338. vm.reload();
  339. });
  340. } else {
  341. alert(r.msg);
  342. }
  343. }
  344. });
  345. })
  346. },
  347. shippingBind: function (event) {
  348. let orderId = vm.order.id;
  349. $.ajax({
  350. type: "POST",
  351. url: '../order/shippingBind',
  352. data: {orderId: orderId, shippingCode: vm.shipping},
  353. success: function (r) {
  354. if (r.code === 0) {
  355. alert('操作成功', function (index) {
  356. vm.reload();
  357. });
  358. } else {
  359. alert(r.msg);
  360. }
  361. }
  362. });
  363. },
  364. refund: function (rowId) {
  365. vm.showDiv = 5;
  366. vm.refundMoney = 0;
  367. Ajax.request({
  368. url: "../order/info/" + rowId,
  369. async: true,
  370. successCallback: function (r) {
  371. vm.order = r.order;
  372. vm.refundMoney = r.order.actualPrice;
  373. }
  374. });
  375. },
  376. cancelUpdate: function (rowId) {
  377. let params = {};
  378. params.orderId = rowId;
  379. confirm("是否取消订单?",function(){
  380. $.ajax({
  381. type: "POST",
  382. url: '../order/cancel',
  383. data: params,
  384. success: function (r) {
  385. if (r.code === 0) {
  386. alert('取消成功', function (index) {
  387. vm.reload();
  388. });
  389. } else {
  390. alert(r.msg);
  391. }
  392. }
  393. });
  394. });
  395. }
  396. },
  397. created: function () {
  398. $.get("../shipping/queryAll", function (r) {
  399. vm.shippings = r.list;
  400. });
  401. }
  402. });
  403. function getPrintContent(ticket) {
  404. var content = "<div style=\"width: 250px;font-family: 微软雅黑;font-size: 8px;\">";
  405. //小票头
  406. content += "<div style=\"text-align: center;width: 100%;font-weight:bold;font-size: 13px;\">";
  407. content += ticket.ticketHead.title;
  408. content += "</div>";
  409. // content += "<div style=\"width: 100%;\">";
  410. // content += "会员:" + ticket.ticketHead.memberId;
  411. // content += "</div>";
  412. content += "<div style=\"width: 100%;\">";
  413. content += "订单号:" + ticket.ticketHead.orderId;
  414. content += "</div>";
  415. content += "<div style=\"width: 100%;\">";
  416. content += "交易时间:" + ticket.ticketHead.tradeTime;
  417. content += "</div>";
  418. content += "<div style=\"width: 100%;overflow:hidden;white-space: nowrap;\">--------------------------------------------------</div>";
  419. //商品信息
  420. content += "<table style=\"width: 100%;\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
  421. content += "<tr>";
  422. content += "<td style=\"width: 50%;text-align: left;font-size: 10px;font-weight: bold;\">商品名称</td>";
  423. content += "<td style=\"width: 17%;text-align: right;font-size: 10px;font-weight: bold;\">单价</td>";
  424. content += "<td style=\"width: 15%;text-align: right;font-size: 10px;font-weight: bold;\">数量</td>";
  425. content += "<td style=\"width: 18%;text-align: right;font-size: 10px;font-weight: bold;\">小计</td>";
  426. content += "</tr>";
  427. content += "</table>";
  428. content += "<div style=\"width: 100%;overflow:hidden;white-space: nowrap;\">--------------------------------------------------</div>";
  429. content += "<table style=\"width: 100%;\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
  430. for (var i=0;i< ticket.goods.length;i++){
  431. content += "<tr>";
  432. content += "<td style=\"width: 50%;text-align: left;font-size: 8px;padding-top: 8px;\">";
  433. content += "<table style=\"width: 100%;\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
  434. content += "<tr>";
  435. content += "<td style=\"text-align: left;font-size: 8px;vertical-align:top;\">#</td>";
  436. content += "<td style=\"text-align: left;font-size: 8px;\">" + ticket.goods[i].gname + "</td>";
  437. content += "</tr>";
  438. content += "</table>";
  439. content += "</td>";
  440. content += "<td style=\"width: 17%;text-align: right;font-size: 8px;vertical-align:bottom;padding-top: 8px;\">" + ticket.goods[i].uprice + "</td>";
  441. content += "<td style=\"width: 15%;text-align: right;font-size: 8px;vertical-align:bottom;padding-top: 8px;\">" + ticket.goods[i].num + "</td>";
  442. content += "<td style=\"width: 18%;text-align: right;font-size: 8px;vertical-align:bottom;padding-top: 8px;\">" + ticket.goods[i].subtotal + "元</td>";
  443. content += "</tr>";
  444. }
  445. content += "</table>";
  446. content += "<div style=\"width: 100%;overflow:hidden;white-space: nowrap;\">--------------------------------------------------</div>";
  447. //收银信息
  448. content += "<div style=\"width: 100%;\">";
  449. content += "<span style=\"float: left;width: 50%;text-align: left;\">商品合计:</span>";
  450. content += "<span style=\"float: left;width: 17%;text-align: left;\">" + ticket.cashInfo.goodsTotal + "件</span>";
  451. content += "<span style=\"float: right;width: 33%;text-align: right;\">" + ticket.cashInfo.total + "元</span>";
  452. content += "</div>";
  453. content += "<div style=\"width: 100%;\">";
  454. content += "<span style=\"float: left;width: 50%;text-align: left;\">实收:</span>";
  455. content += "<span style=\"float: right;width: 50%;text-align: right;\">" + ticket.cashInfo.receipts + "元</span>";
  456. content += "</div>";
  457. content += "<div style=\"width: 100%;\">";
  458. content += "<span style=\"float: left;width: 50%;text-align: left;\">找零:</span>";
  459. content += "<span style=\"float: right;width: 50%;text-align: right;\">" + ticket.cashInfo.oddChange + "元</span>";
  460. content += "</div>";
  461. content += "<div style=\"width: 100%;\">";
  462. content += "<span style=\"float: left;width: 50%;text-align: left;\">优惠券:</span>";
  463. content += "<span style=\"float: right;width: 50%;text-align: right;\">" + ticket.cashInfo.coupon + "元</span>";
  464. content += "</div>";
  465. content += "<div style=\"width: 100%;\">";
  466. content += "<span style=\"float: left;width: 50%;text-align: left;\">运费:</span>";
  467. content += "<span style=\"float: right;width: 50%;text-align: right;\">" + ticket.cashInfo.freight + "元</span>";
  468. content += "</div>";
  469. content += "<div style=\"width: 100%;\">";
  470. content += "<span style=\"float: left;width: 50%;text-align: left;\">支付渠道:</span>";
  471. content += "<span style=\"float: right;width: 50%;text-align: right;\">" + ticket.cashInfo.paymentMode + "</span>";
  472. content += "</div>";
  473. content += "<div style=\"width: 100%;overflow:hidden;white-space: nowrap;\">--------------------------------------------------</div>";
  474. //海关清单信息
  475. content += "<div style=\"width: 100%;\">";
  476. content += "订单号:" + ticket.cusListing.orderId;
  477. content += "</div>";
  478. // content += "<div style=\"width: 100%;\">";
  479. // content += "始发地:" + ticket.cusListing.originAddress;
  480. // content += "</div>";
  481. // content += "<div style=\"width: 100%;\">";
  482. // content += "交货地:" + ticket.cusListing.deliveryAddress;
  483. // content += "</div>";
  484. content += "<div style=\"width: 100%;overflow:hidden;white-space: nowrap;\">--------------------------------------------------</div>";
  485. content += "<div style=\"width: 100%;\">";
  486. content += ticket.ticketFoot.summary;
  487. content += "</div>";
  488. content += "<div style=\"width: 100%;\">";
  489. content += "客服电话:" + ticket.ticketFoot.serviceTel;
  490. content += "</div>";
  491. content += "<div style=\"width: 100%;\">";
  492. content += "网址:" + ticket.ticketFoot.url1;
  493. content += "</div>";
  494. content += "<div style=\"width: 100%;\">";
  495. content += ticket.ticketFoot.welcome;
  496. content += "</div>";
  497. return content;
  498. }
  499. function wxPay(authCode,id,msg_index){
  500. $.ajax({
  501. type: "POST",
  502. url: '../order/wxMicropayPay',
  503. data: {auth_code: authCode, id: id},
  504. success: function (r) {
  505. layer.close(msg_index);
  506. if (r.code === 0) {
  507. alert('支付成功', function (index) {
  508. vm.reload();
  509. });
  510. } else {
  511. alert(r.msg);
  512. }
  513. }
  514. });
  515. }
  516. var printAreaCount = 0;
  517. function printArea(content) {
  518. var idPrefix = "printArea_";
  519. removePrintArea(idPrefix + printAreaCount);
  520. printAreaCount++;
  521. var iframeId = idPrefix + printAreaCount;
  522. var iframeStyle = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;';
  523. iframe = document.createElement('IFRAME');
  524. $(iframe).attr({
  525. style: iframeStyle,
  526. id: iframeId
  527. });
  528. document.body.appendChild(iframe);
  529. var doc = iframe.contentWindow.document;
  530. doc.open();
  531. //$(document).find("link").filter(function () {
  532. //return $(this).attr("rel").toLowerCase() == "stylesheet";
  533. //}).each(
  534. //function () {
  535. //doc.write('<link type="text/css" rel="stylesheet" href="'
  536. //+ $(this).attr("href") + '" >');
  537. //});
  538. doc.write('<div class="">' + content
  539. + '</div>');
  540. doc.close();
  541. var frameWindow = iframe.contentWindow;
  542. frameWindow.close();
  543. frameWindow.focus();
  544. frameWindow.print();
  545. }
  546. var removePrintArea = function (id) {
  547. $("iframe#" + id).remove();
  548. };