1
0

receiptCheck.js 22 KB

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