cashier.html 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>INSPINIA | Dashboard v.4</title>
  7. <link href="/static/admin/cmsStyle/css/bootstrap.min.css" rel="stylesheet">
  8. <link href="/static/admin/cmsStyle/font-awesome/css/font-awesome.css" rel="stylesheet">
  9. <link href="/static/admin/cmsStyle/css/animate.css" rel="stylesheet">
  10. <link href="/static/admin/cmsStyle/css/style.css" rel="stylesheet">
  11. <!-- Toastr style -->
  12. <link href="/static/admin/cmsStyle/css/plugins/toastr/toastr.min.css" rel="stylesheet">
  13. <!-- Gritter -->
  14. <link href="/static/admin/cmsStyle/js/plugins/gritter/jquery.gritter.css" rel="stylesheet">
  15. <link rel="stylesheet" href="/static/admin/layui/css/layui.css">
  16. </head>
  17. <body class="top-navigation">
  18. <div id="wrapper">
  19. <div id="page-wrapper" class="gray-bg" style="padding-top: 2rem">
  20. <div class="wrapper wrapper-content animated fadeInRight">
  21. <div class="row">
  22. <div class="col-lg-9">
  23. <div class="ibox float-e-margins">
  24. <div class="ibox-title">
  25. <h5>信谊微信线下收银控制台</h5>
  26. <div class="ibox-tools">
  27. <a class="collapse-link">
  28. <i class="fa fa-chevron-up"></i>
  29. </a>
  30. <a class="close-link">
  31. <i class="fa fa-times"></i>
  32. </a>
  33. </div>
  34. </div>
  35. <div class="ibox-content">
  36. <div class="row">
  37. <div class="col-sm-6 b-r">
  38. <h3 class="m-t-none m-b" style="color: #1ab394">使用扫描枪扫描会员微信中的付款码即可付款</h3>
  39. <!--<p>Sign in today for more expirience.</p>-->
  40. <div role="form">
  41. <input type="number" placeholder="请输入下单金额" name="total_fee" class="form-control input-lg m-b">
  42. <input type="text" maxlength="18" placeholder="请输入付款码" name="auth_code" class="form-control input-lg m-b">
  43. <input type="text" placeholder="请输入付款备注信息 选填" name="note" class="form-control input-lg m-b">
  44. <!--<div class="form-group"><input type="number" placeholder="请输入下单金额" class="form-control"></div>-->
  45. <!--<div class="form-group"><input type="number" placeholder="请输入付款码" class="form-control"></div>-->
  46. <div>
  47. <button class="btn btn-primary col-sm-12" id="pay_money" type="button"><strong> 结 账 </strong></button>
  48. </div>
  49. </div>
  50. </div>
  51. <div class="col-sm-6 order_info" style="display: none">
  52. <div class="contact-box">
  53. <div class="col-sm-4">
  54. <div class="text-center">
  55. <img alt="image" class="img-circle m-t-xs img-responsive head_img" src="/static/index/images/logo.jpg">
  56. <div class="m-t-xs font-bold user_name">上海信谊天一药业有限公司</div>
  57. </div>
  58. </div>
  59. <div class="col-sm-8" style="line-height: 2.8rem;margin: .4rem 0">
  60. <h3 style="line-height: 3rem;"><strong>收款订单信息:</strong></h3>
  61. <p class="order_no">订单编号:12321321323</p>
  62. <p class="price">应付金额:¥ 1200</p>
  63. <p class="pay_price">实付金额:¥ 1200</p>
  64. <p class="add_ts">交易时间:2018-01-14 19:00</p>
  65. <!--<p>是否会员:<span style="color: #FF5722">非会员</span></p>-->
  66. <p class="status">订单状态:<span style="color: #1ab394">成功</span></p>
  67. <button class="btn btn-primary col-sm-12" style="display: none" data-order_no="" id="print" type="button"><strong> 打 印 </strong></button>
  68. </div>
  69. <div class="clearfix"></div>
  70. </div>
  71. </div>
  72. <div class="col-sm-6 none_data"><h4>暂无数据</h4>
  73. <p class="text-center">
  74. <i class="fa fa-sign-in big-icon"></i>
  75. </p>
  76. </div>
  77. </div>
  78. </div>
  79. </div>
  80. </div>
  81. <div class="col-lg-3">
  82. <div class="ibox float-e-margins">
  83. <div class="ibox-title">
  84. <!--<span class="label label-success pull-right">Monthly</span>-->
  85. <h5>今日收款总金额</h5>
  86. </div>
  87. <div class="ibox-content">
  88. <h1 class="no-margins" style="line-height: 5rem">¥ {$cashierData['new_day']}</h1>
  89. <!--<div class="stat-percent font-bold text-success">¥ 2000 <i class="fa fa-bolt"></i></div>-->
  90. <!--<small>同比前一天增长:</small>-->
  91. </div>
  92. </div>
  93. <div class="ibox float-e-margins">
  94. <div class="ibox-title">
  95. <!--<span class="label label-success pull-right">Monthly</span>-->
  96. <h5>昨日收款总金额</h5>
  97. </div>
  98. <div class="ibox-content">
  99. <h1 class="no-margins" style="line-height: 5rem">¥ {$cashierData['old_day']}</h1>
  100. <!--<div class="stat-percent font-bold text-success">98% <i class="fa fa-bolt"></i></div>-->
  101. <!--<small>同比前一天</small>-->
  102. </div>
  103. </div>
  104. </div>
  105. <div class="col-lg-12">
  106. <div class="ibox float-e-margins">
  107. <div class="ibox-title">
  108. <h5>收银订单日志列表 </h5>
  109. <div class="ibox-tools">
  110. <a class="collapse-link">
  111. <i class="fa fa-chevron-up"></i>
  112. </a>
  113. <a class="close-link">
  114. <i class="fa fa-times"></i>
  115. </a>
  116. </div>
  117. </div>
  118. <div class="ibox-content">
  119. <blockquote class="layui-elem-quote layui-text">
  120. <div class="demoTable layui-form">
  121. <div class="layui-input-inline">
  122. <input type="text" name="datetime" class="layui-input" id="dateScope" placeholder=" 订单的时间段 ">
  123. </div>
  124. <button class="layui-btn" data-type="reload"><i class="layui-icon">&#xe615;</i>搜索</button>
  125. <button class="layui-btn" lay-submit lay-filter="excel_derivation" ><i class="layui-icon">&#xe654;</i> 导出订单</button>
  126. <div class="layui-upload" style="float: right">
  127. <button type="button" class="layui-btn cashierTotal">金额统计:0 元</button>
  128. </div>
  129. </div>
  130. </blockquote>
  131. <!--表格信息-->
  132. <div class="demoTable">
  133. <table class="layui-table" lay-data="{height: 'full-200', url:'{:url('admin/WechatPay/ApiGetCashierPage')}', page:true, id:'testReload',loading:true}" lay-filter="demo">
  134. <thead>
  135. <tr>
  136. <th lay-data="{field:'add_ts', width:200, fixed: true}">交易时间</th>
  137. <th lay-data="{field:'order_no', width:200, fixed: true}">订单编号</th>
  138. <th lay-data="{field:'price', width:200, fixed: true}">应付金额</th>
  139. <th lay-data="{field:'pay_price', width:200}">实付金额</th>
  140. <th lay-data="{field:'refund_price', width:200}">退款金额</th>
  141. <th lay-data="{field:'status', width:120,templet: '#status'}">支付状态</th>
  142. <th lay-data="{field:'pay_type', width:120,templet: '#pay_type'}">支付类型</th>
  143. <th lay-data="{field:'admin_name'}">收银员</th>
  144. <th lay-data="{field:'note',templet: '#erCode',edit:'text'}">备注信息</th>
  145. <th lay-data="{fixed: 'is_hot', width:100,fixed: 'right', align:'center', toolbar: '#barDemo'}">操作</th>
  146. </tr>
  147. </thead>
  148. </table>
  149. <script type="text/html" id="barDemo">
  150. {{# if(d.status == 20){ }}
  151. <a class="layui-btn layui-btn-xs" lay-event="refund">退款</a>
  152. {{# } }}
  153. </script>
  154. <script type="text/html" id="status">
  155. {{# if(d.status == 10){ }}
  156. <span style="color: #FF5722;">未支付</span>
  157. {{# } else if(d.status == 20) { }}
  158. <span style="color: #5FB878;">付款成功</span>
  159. {{# } else if(d.status == 30) { }}
  160. <span style="color: #FF5722;">付款异常</span>
  161. {{# } else if(d.status == 40) { }}
  162. <span style="color: #FF5722;">已退款</span>
  163. {{# } }}
  164. </script>
  165. <script type="text/html" id="pay_type">
  166. {{# if(d.pay_type == 1){ }}
  167. <span style="color: #5FB878;">微信付款</span>
  168. {{# } else if(d.pay_type == 2) { }}
  169. <span style="color: #FF5722;">支付宝</span>
  170. {{# } else if(d.pay_type == 3) { }}
  171. <span style="color: #FF5722;">其他</span>
  172. {{# } }}
  173. </script>
  174. </div>
  175. </div>
  176. </div>
  177. </div>
  178. </div>
  179. </div>
  180. </div>
  181. </div>
  182. <div id="form2" style="display: none;font-size: 10px;">
  183. <br><br>
  184. <p>付款金额:<span style="font-size: 1.2rem;font-weight: bold;" class="fkje">¥</span></p>
  185. <p class="fkzt">当前状态:</p>
  186. <p>商户简称:上海信谊天一药业有限公司</p>
  187. <p class="zfsj">支付时间:</p>
  188. <p>支付方式:微信付款</p>
  189. <p class="zfdh">交易单号:</p>
  190. <p style="font-size: 12px;" class="shbh">商户单号:</p>
  191. <p>地址:九龙路775号&nbsp;&nbsp;&nbsp;&nbsp;电话:63244470</p>
  192. </div>
  193. <a href="javascript:prn1_preview()"><center><button class="layui-btn" lay-submit lay-filter="demo1">打 印</button></center></a>
  194. <script src="/static/admin/layui/layui.js"></script>
  195. <script src="/static/common/js/jquery.min.js"></script>
  196. <script src="/static/admin/LodopFuncs/LodopFuncs.js"></script>
  197. <script>
  198. layui.use(['table','laydate'], function(){
  199. var table = layui.table
  200. ,laydate = layui.laydate
  201. ,layer=layui.layer
  202. ,form = layui.form;
  203. // 搜索
  204. var $ = layui.$, active = {
  205. reload: function(){
  206. var datetime=$('input[name="datetime"]').val();
  207. //执行重载
  208. table.reload('testReload', {
  209. where: {
  210. datetime:datetime,
  211. }
  212. });
  213. $.post('{:url("WechatPay/getCashierTotal")}',{datetime:datetime},function (obj) {
  214. if(obj.code==200){
  215. $('.cashierTotal').text('金额统计:'+obj.data+'元');
  216. }
  217. },"JSON")
  218. }
  219. };
  220. laydate.render({
  221. elem: '#dateScope'
  222. ,type: 'date'
  223. ,range: ','
  224. ,format: 'yyyy-M-d',
  225. value: '{$time["start"]} , {$time["end"]}',
  226. });
  227. table.on('edit(demo)', function(obj){ //注:edit是固定事件名,test是table原始容器的属性 lay-filter="对应的值"
  228. $.get('{:url("WechatPay/ApiSaveCashierNote")}',{order_no:obj.data.order_no,note:obj.value},function (res) {
  229. console.log(res)
  230. if(res.code==200){
  231. layer.msg('更新成功')
  232. }else{
  233. layer.msg('数据异常')
  234. }
  235. },'JSON')
  236. console.log(obj.value); //得到修改后的值
  237. console.log(obj.field); //当前编辑的字段名
  238. console.log(obj.data); //所在行的所有相关数据
  239. });
  240. //监听表格复选框选择
  241. form.on('submit(excel_derivation)', function(obj){
  242. var data=obj.field;
  243. window.location.href='{:url("WechatPay/cashierExcel")}?datetime='+data.datetime;
  244. });
  245. $('.demoTable .layui-btn').on('click', function(){
  246. var type = $(this).data('type');
  247. active[type] ? active[type].call(this) : '';
  248. });
  249. $('#pay_money').on('click',function () {
  250. var total_fee=$('input[name="total_fee"]').val();
  251. var auth_code=$('input[name="auth_code"]').val();
  252. var note=$('input[name="note"]').val();
  253. var checkVal=true;
  254. if(total_fee.length==0 || total_fee<=0){
  255. layer.msg('输入的金额有误');
  256. checkVal= false;
  257. return false;
  258. }
  259. if(auth_code.length<18){
  260. layer.msg('支付码不正确');
  261. checkVal= false;
  262. return false;
  263. }
  264. if(checkVal){
  265. $.post('{:url("admin/WechatPay/weChatSweepPay")}',{total_fee:total_fee,auth_code:auth_code,note:note},function (obj) {
  266. if(obj.code==200){
  267. var data=obj.data;
  268. layer.msg(obj.msg);
  269. $('.order_info').show();
  270. $('.none_data').hide();
  271. getPayDate(data);
  272. automaticPrint();
  273. $('.order_no').text('订单编号:'+data.order_no);
  274. $('.price').text('应付金额:¥ '+data.price);
  275. $('.pay_price').text('实付金额:¥ '+data.pay_price);
  276. $('.add_ts').text('交易时间:'+data.add_ts);
  277. $('#print').data('order_no',data.order_no).show();
  278. $('input[name="total_fee"]').val('');
  279. $('input[name="auth_code"]').val('');
  280. if(data.status==20){
  281. $('.status').html('订单状态:<span style="color: #1ab394">成功</span>');
  282. }else{
  283. $('.status').html('订单状态:<span style="color: #FF5722">异常</span>');
  284. }
  285. if(data.head_img!=''){
  286. $('.head_img').attr('src',data.head_img);
  287. $('.user_name').text(data.user_name);
  288. }else{
  289. $('.head_img').attr('src','/static/index/images/logo.jpg');
  290. $('.user_name').text('上海信谊天一药业有限公司');
  291. }
  292. table.reload('testReload');
  293. }else if(obj.code=='404') {
  294. var data=obj.data;
  295. layer.msg('等待付款', {
  296. icon: 16
  297. ,shade: 0.01
  298. ,time:5000
  299. });
  300. var i=setInterval(function () {
  301. getCashier()
  302. }, 3000);
  303. function getCashier() {
  304. $.post('{:url("admin/WechatPay/ApiGetCashierInfo")}', {order_no:data.order_no},function (obj) {
  305. if(obj.code==404){
  306. $('.order_info').hide();
  307. $('.none_data').show();
  308. layer.msg('支付未完成,客户取消支付', {icon: 5,time: 2000});
  309. layer.closeAll('loading');
  310. clearInterval(i);
  311. return true;
  312. }
  313. if(obj.code==200){
  314. var data=obj.data;
  315. layer.msg('收款成功');
  316. getPayDate(data);
  317. automaticPrint();
  318. $('.order_info').show();
  319. $('.none_data').hide();
  320. $('.order_no').text('订单编号:'+data.order_no);
  321. $('.price').text('应付金额:¥ '+data.price);
  322. $('.pay_price').text('实付金额:¥ '+data.pay_price);
  323. $('.add_ts').text('交易时间:'+data.add_ts);
  324. $('#print').data('order_no',data.order_no).show();
  325. $('input[name="total_fee"]').val('');
  326. $('input[name="auth_code"]').val('');
  327. if(data.status==20){
  328. $('.status').html('订单状态:<span style="color: #1ab394">成功</span>');
  329. }else{
  330. $('.status').html('订单状态:<span style="color: #FF5722">异常</span>');
  331. }
  332. if(data.head_img!=''){
  333. $('.head_img').attr('src',data.head_img);
  334. $('.user_name').text(data.user_name);
  335. }else{
  336. $('.head_img').attr('src','/static/index/images/logo.jpg');
  337. $('.user_name').text('上海信谊天一药业有限公司');
  338. }
  339. layer.closeAll('loading');
  340. clearInterval(i);
  341. table.reload('testReload');
  342. return true;
  343. }
  344. if(obj.code==400){
  345. layer.msg(obj.msg, {
  346. icon: 16
  347. ,shade: 0.01
  348. ,time:2000
  349. });
  350. }
  351. },"JSON")
  352. }
  353. }else if(obj.code=='403') {
  354. $('input[name="auth_code"]').val(' ');
  355. $('input[name="auth_code"]').focus();
  356. //加载层-风格4
  357. layer.msg('扫码失效,请会员刷新后重试', {
  358. icon: 5
  359. ,time:2000
  360. });
  361. }
  362. },"JSON")
  363. }
  364. })
  365. //订单退款操作
  366. table.on('tool(demo)', function(obj){
  367. var pay_key='{$pay_key|default=0}';
  368. var data = obj.data;
  369. if(obj.event === 'refund'){
  370. //配置一个透明的询问框
  371. layer.confirm('商户编号:' + data.pay_no + '<br>' + '<span style="color: red">退款金额:' + data.pay_price + '</span>',
  372. {
  373. btn: ['确认退款', '关闭'], //按钮
  374. }, function () {
  375. layer.prompt({title: '填写支付秘钥', formType: 1}, function (text, index) {
  376. if (text == pay_key) {
  377. $.post('{:url("Order/ApiSaveAshierRefund")}', {data:data}, function (obj) {
  378. console.log(obj)
  379. if (obj.code == 200) {
  380. layer.msg('数据更新成功', {icon: 6,time: 1000});
  381. table.reload('testReload');
  382. }else {
  383. layer.msg(obj.msg);
  384. }
  385. }, "JSON")
  386. layer.closeAll()
  387. } else {
  388. layer.msg('您填写的信息不对');
  389. }
  390. });
  391. });
  392. }
  393. });
  394. //打印小票
  395. $('#print').on('click', function() {
  396. var order_no=$(this).data('order_no');
  397. layer.open({
  398. type: 2,
  399. title: '打印小票信息确认',
  400. shadeClose: true,
  401. shade: false,
  402. maxmin: true, //开启最大化最小化按钮
  403. area: ['50%', '100%'],
  404. content: '{:url("Dashboard/set_ticket")}?order_no='+order_no,
  405. });
  406. });
  407. });
  408. function getPayDate(data) {
  409. $('.zfdh').text('交易单号:'+data.auth_code);
  410. $('.price').text('应付金额:¥ '+data.price);
  411. $('.fkje').text('¥ '+data.pay_price);
  412. $('.zfsj').text('交易时间:'+data.add_ts);
  413. $('.fkzt').text('交易付款成功');
  414. $('.shbh').text('商户单号:'+data.pay_no);
  415. }
  416. //自动答应
  417. function automaticPrint() {
  418. var LODOP; //声明为全局变量
  419. //打印预览
  420. // function prn1_preview() {
  421. // CreateOneFormPage();
  422. // LODOP.PREVIEW();
  423. // };
  424. // //直接打印
  425. // function prn1_print() {
  426. // CreateOneFormPage();
  427. // };
  428. // function CreateOneFormPage(){
  429. LODOP=getLodop();
  430. LODOP.PRINT_INIT("答应收款订单信息");
  431. LODOP.SET_PRINT_STYLE("FontSize",14);
  432. LODOP.SET_PRINT_STYLE("Bold",1);
  433. LODOP.ADD_PRINT_TEXT(50,20,500,30,"上海信谊天一药业有限公司");
  434. LODOP.SET_PRINT_STYLE("FontSize",12);
  435. LODOP.ADD_PRINT_HTM(88,4,500,400,document.getElementById("form2").innerHTML);
  436. LODOP.PRINT();
  437. // };
  438. }
  439. </script>
  440. <script>
  441. layui.use('element', function(){
  442. var $ = layui.jquery
  443. ,element = layui.element; //Tab的切换功能,切换事件监听等,需要依赖element模块
  444. //触发事件
  445. var active = {
  446. tabAdd: function(){
  447. //新增一个Tab项
  448. element.tabAdd('demo', {
  449. title: '新选项'+ (Math.random()*1000|0) //用于演示
  450. ,content: '内容'+ (Math.random()*1000|0)
  451. ,id: new Date().getTime() //实际使用一般是规定好的id,这里以时间戳模拟下
  452. })
  453. }
  454. ,tabDelete: function(othis){
  455. //删除指定Tab项
  456. element.tabDelete('demo', '44'); //删除:“商品管理”
  457. othis.addClass('layui-btn-disabled');
  458. }
  459. ,tabChange: function(){
  460. //切换到指定Tab项
  461. element.tabChange('demo', '22'); //切换到:用户管理
  462. }
  463. };
  464. $('.site-demo-active').on('click', function(){
  465. var othis = $(this), type = othis.data('type');
  466. active[type] ? active[type].call(this, othis) : '';
  467. });
  468. //Hash地址的定位
  469. var layid = location.hash.replace(/^#test=/, '');
  470. element.tabChange('test', layid);
  471. element.on('tab(test)', function(elem){
  472. location.hash = 'test='+ $(this).attr('lay-id');
  473. });
  474. });
  475. </script>
  476. </body>
  477. </html>