receiptCheck.js 22 KB

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