order_verify.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. {extend name="base"/}
  2. {block name="resources"}
  3. <style>
  4. .screen{margin-bottom: 15px;}
  5. .contraction span{cursor: pointer;display: inline-block;width: 17px;height: 17px;text-align: center;line-height: 14px;user-select: none;}
  6. .verify-list{overflow: hidden;padding: 0 45px;}
  7. .verify-list li .img-wrap{vertical-align: middle;margin-right: 8px;width: 80px;height: 80px;text-align: center;border: 1px solid #e2e2e2;}
  8. .verify-list li .img-wrap img{max-width: 100%;max-height: 100%;}
  9. .verify-list li .info-wrap{flex: 1;display: flex;flex-direction: column;}
  10. .verify-list li .name-wrap{flex: 1;}
  11. .verify-list li .info-wrap span.sku-name{-webkit-line-clamp: 2;margin-bottom: 5px;line-height: 1.3;margin-top: 0;color: #333;font-size: 14px;}
  12. .verify-list li .info-wrap span{display: -webkit-box;margin-top: 5px;overflow: hidden;text-overflow: ellipsis;white-space: normal;word-break: break-all;-webkit-box-orient: vertical;-webkit-line-clamp: 1;line-height: 1;font-size: 12px;}
  13. .verify-list li{float: left;display: flex;padding: 10px;margin-right: 10px;margin-bottom: 10px;border: 1px solid #EFEFEF;width: 294px;align-items: center;}
  14. .table-title .title-content p{overflow: hidden;text-overflow:ellipsis;white-space: nowrap;}
  15. .goods-box{display: flex;padding: 10px;justify-content: space-between;margin-bottom: 20px;}
  16. .goods-box .goods-info{width: 340px;}
  17. .goods-box .goods-info .goods-name{text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;display: -moz-box;-moz-line-clamp: 2;-moz-box-orient: vertical;overflow-wrap: break-word;word-break: break-all;white-space: normal;overflow: hidden;height: 38px;}
  18. .goods-box .goods-info .goods-desc{margin-top: 5px;}
  19. .goods-box .goods-img{margin-right: 15px;display: flex;align-items: center;}
  20. .goods-box .goods-img img{width: 80px;max-height: 80px;}
  21. .goods-box .box-left{display: flex;}
  22. .goods-box .box-right{display: flex;align-items: center;}
  23. .user-detail{cursor: pointer;}
  24. .table-title .title-content{overflow: unset;}
  25. .table-title .title-content p{overflow: hidden;text-overflow:ellipsis;white-space: nowrap;}
  26. .table-title .title-content .verify-type{font-size:12px;margin-right: 4px;padding: 0px 6px;display: inline-block; border: 1px solid;border-radius: 3px;line-height: 18px}
  27. .table-title .title-content .verify-code{display:inline-block;width:200px}
  28. .layui-table-box .layui-table-body .laytable-cell-1-0-0{padding-top: 5px;padding-bottom: 5px}
  29. .layui-layout-admin.admin-style-2 .stat-box{background-color: #F2F3F5;margin-bottom: 15px;}
  30. .card-common:first-of-type{margin-top: 0;}
  31. .layui-card-body{display: flex;padding-bottom: 0 !important;padding-right: 50px !important;padding-left: 50px !important;flex-wrap: wrap;}
  32. .layui-card-body .content{flex: 1;display: flex;flex-direction: column;margin-bottom: 30px;justify-content: center;}
  33. .layui-card-body .content:first-child {flex: unset;margin-right: 30px}
  34. .layui-card-body .content .title{color: #909399;font-size: 14px;}
  35. .layui-card-body .money{color: #303133;font-size: 26px;margin-top: 10px;max-width: 250px;}
  36. .layui-card-body .bottom-title{color: #909399;font-size: 14px;margin-top: 5px;}
  37. .layui-laydate-content tr{border: none;}
  38. </style>
  39. {/block}
  40. {block name="main"}
  41. <div class="layui-card card-common card-brief">
  42. <div class="layui-card-header">
  43. <div>
  44. <span class="card-title">核销概况</span>
  45. </div>
  46. </div>
  47. <div class="layui-card-body">
  48. <div class="content">
  49. <p class="title">核销码总数(个)<a class="text-color" target="_blank" href="{:url('shop/verify/verifycard')}">核销台</a></p>
  50. <p class="money">{$total_count}</p>
  51. <p class="bottom-title">
  52. <span>虚拟商品:{$verify_goods_count}</span> &nbsp;&nbsp;
  53. <span>订单自提:{$pickup_count}</span>
  54. <span>卡项商品:{$card_goods_count}</span>
  55. </p>
  56. </div>
  57. <div class="content">
  58. <p class="title">已核销(次)</p>
  59. <p class="money">{$verify_use_num}</p>
  60. <p class="bottom-title">
  61. <span>&nbsp;</span>
  62. <span>&nbsp;</span>
  63. </p>
  64. </div>
  65. <div class="content">
  66. <p class="title">待核销(虚拟商品)</p>
  67. <p class="money">{$verify_goods_num}</p>
  68. <p class="bottom-title">
  69. <span>&nbsp;</span>
  70. <span>&nbsp;</span>
  71. </p>
  72. </div>
  73. <div class="content">
  74. <p class="title">待核销(订单自提)</p>
  75. <p class="money">{$pickup_num}</p>
  76. <p class="bottom-title">
  77. <span>&nbsp;</span>
  78. <span>&nbsp;</span>
  79. </p>
  80. </div>
  81. <div class="content">
  82. <p class="title">待核销(卡项商品)</p>
  83. <p class="money">{$card_goods_num}</p>
  84. <p class="bottom-title">
  85. <span>&nbsp;</span>
  86. <span>&nbsp;</span>
  87. </p>
  88. </div>
  89. </div>
  90. </div>
  91. <!-- 搜索框 -->
  92. <div class="screen layui-collapse" lay-filter="selection_panel">
  93. <div class="layui-colla-item">
  94. <form class="layui-colla-content layui-form layui-show">
  95. <div class="layui-form-item">
  96. <div class="layui-inline">
  97. <label class="layui-form-label">核销码</label>
  98. <div class="layui-input-inline">
  99. <input type="text" name="verify_code" placeholder="请输入核销码" autocomplete="off" class="layui-input">
  100. </div>
  101. </div>
  102. <div class="layui-inline">
  103. <label class="layui-form-label">核销码类型</label>
  104. <div class="layui-input-inline">
  105. <select name="verify_type">
  106. <option value="">全部</option>
  107. {foreach $verify_type as $k => $v}
  108. <option value="{$k}">{$v.name}</option>
  109. {/foreach}
  110. </select>
  111. </div>
  112. </div>
  113. <div class="layui-inline">
  114. <label class="layui-form-label">核销码状态</label>
  115. <div class="layui-input-inline">
  116. <select name="is_verify">
  117. <option value="">全部</option>
  118. <option value="0">待核销</option>
  119. <option value="1">已核销</option>
  120. <option value="-1">已过期</option>
  121. </select>
  122. </div>
  123. </div>
  124. </div>
  125. <div class="form-row">
  126. <button class="layui-btn" lay-submit lay-filter="search">筛选</button>
  127. <button type="reset" class="layui-btn layui-btn-primary">重置</button>
  128. </div>
  129. </form>
  130. </div>
  131. </div>
  132. <!-- 列表 -->
  133. <table id="verify_list" lay-filter="verify_list"></table>
  134. <!-- 工具栏操作 -->
  135. <script type="text/html" id="operation">
  136. <div class="table-btn">
  137. <a class="layui-btn" lay-event="record">核销记录</a>
  138. </div>
  139. </script>
  140. <script type="text/html" id="userdetail">
  141. <div class='table-title user-detail' onclick="memberDetail({{d.member_id}})">
  142. <div class='title-pic'>
  143. <img layer-src src="{{ns.img(d.headimg)}}" onerror="this.src = '{:img('public/static/img/default_img/head.png')}' ">
  144. </div>
  145. <div class='title-content'>{{d.nickname}}</div>
  146. </div>
  147. </script>
  148. <!-- 核销信息 -->
  149. <script type="text/html" id="verify_code">
  150. <div class="table-title">
  151. <div class="contraction" data-id="{{d.id}}" data-open="0">
  152. <span>+</span>
  153. </div>
  154. <div class="title-content table-title" style="overflow: unset;">
  155. {{# if(d.verify_type == "pickup"){ }}
  156. <div class="title-pic"><img src="{{ns.img(d.sku_image)}}" onerror="this.src = 'SHOP_IMG/hexiao_dindan.png' "></div>
  157. {{# } }}
  158. {{# if(d.verify_type == "virtualgoods"){ }}
  159. <div class="title-pic"><img src="{{ns.img(d.sku_image)}}"></div>
  160. {{# } }}
  161. {{# if(d.verify_type == "pickup" || d.verify_type == "virtualgoods"){ }}
  162. <div class="title-content" style="overflow: unset;">
  163. <p title="{{ d.order_info.order_name }}">{{ d.order_info.order_name }}</p>
  164. <span class="verify-type text-color border-color">{{ d.verify_type_name}}</span>
  165. <span class="verify-code">核销码:{{ d.verify_code }}</span>
  166. </div>
  167. {{# } }}
  168. {{# if(d.verify_type == "cardgoods"){ }}
  169. <div class="title-pic"><img src="{{ns.img(d.sku_image)}}"></div>
  170. <div class="title-content" style="overflow: unset;">
  171. <p title="{{ d.name }}">{{ d.sku_name }}</p>
  172. <span class="verify-type text-color border-color">{{ d.verify_type_name}}</span>
  173. <span class="verify-code">核销码:{{ d.verify_code }}</span>
  174. </div>
  175. {{# } }}
  176. </div>
  177. </div>
  178. </script>
  179. <!-- 核销内容 -->
  180. <script type="text/html" id="verifyList">
  181. <tr class="js-list-{{d.index}}" id="sku_img_{{d.index}}">
  182. <td colspan="8">
  183. <ul class="verify-list">
  184. {{# for(var i=0; i<d.list.length; i++){ }}
  185. <li>
  186. <div class="img-wrap">
  187. <img layer-src src="{{ns.img(d.list[i].img, 'mid')}}">
  188. </div>
  189. <div class="info-wrap">
  190. <div class="name-wrap">
  191. <span class="sku-name">{{d.list[i].name}}</span>
  192. </div>
  193. <span class="price">价格:¥{{d.list[i].price}}</span>
  194. <span class="sale_num">数量:{{d.list[i].num}}</span>
  195. </div>
  196. </li>
  197. {{# } }}
  198. </ul>
  199. </td>
  200. </tr>
  201. </script>
  202. {/block}
  203. {block name="script"}
  204. <script>
  205. var laytpl;
  206. $(function () {
  207. $("body").on("click", ".contraction", function () {
  208. var id = $(this).attr("data-id");
  209. var open = $(this).attr("data-open");
  210. var tr = $(this).parent().parent().parent().parent();
  211. var index = tr.attr("data-index");
  212. if (open == 1) {
  213. $(this).children("span").text("+");
  214. $(".js-list-" + index).remove();
  215. } else {
  216. $(this).children("span").text("-");
  217. $.ajax({
  218. url: ns.url("shop/verify/verifyInfo"),
  219. data: {id: id},
  220. dataType: 'JSON',
  221. type: 'POST',
  222. async: false,
  223. success: function (res) {
  224. var verify_list = $("#verifyList").html();
  225. var data = {
  226. list: res.data.data.item_array,
  227. index: index
  228. };
  229. laytpl(verify_list).render(data, function (html) {
  230. tr.after(html);
  231. });
  232. layer.photos({
  233. photos: '.img-wrap',
  234. anim: 5
  235. });
  236. }
  237. });
  238. }
  239. $(this).attr("data-open", (open == 0 ? 1 : 0));
  240. });
  241. layui.use(['form', 'laydate','laytpl'], function () {
  242. laytpl = layui.laytpl;
  243. var table,
  244. form = layui.form,
  245. laydate = layui.laydate;
  246. form.render();
  247. //渲染时间
  248. laydate.render({
  249. elem: '#start_time',
  250. type: 'datetime'
  251. });
  252. laydate.render({
  253. elem: '#end_time',
  254. type: 'datetime'
  255. });
  256. /**
  257. * 加载表格
  258. */
  259. table = new Table({
  260. elem: '#verify_list',
  261. url: ns.url("shop/verify/orderverify"), //数据接口
  262. cols: [
  263. [{
  264. title: '核销信息',
  265. width: '30%',
  266. templet: '#verify_code'
  267. },{
  268. field: 'name',
  269. title: '买家姓名',
  270. width: '15%',
  271. align: 'center',
  272. },{
  273. field: '',
  274. title: '已核销/可核销',
  275. align: 'center',
  276. templet: function (data) {
  277. return data.verify_use_num + '/' + (data.verify_total_count ? data.verify_total_count : '不限次');
  278. }
  279. },{
  280. field: '',
  281. title: '核销状态',
  282. align: 'center',
  283. templet: function (data) {
  284. return data.is_verify ? '已核销' : '待核销';
  285. }
  286. },{
  287. field: 'verify_time',
  288. title: '创建时间',
  289. templet: function (data) {
  290. return ns.time_to_date(data.create_time); //创建时间转换方法
  291. }
  292. },{
  293. title: '操作',
  294. toolbar: '#operation',
  295. unresize: 'false',
  296. align : 'right'
  297. }]
  298. ]
  299. });
  300. /**
  301. * 监听工具栏操作
  302. */
  303. table.tool(function(obj) {
  304. var data = obj.data;
  305. switch (obj.event) {
  306. case 'record':
  307. window.open(ns.url("shop/verify/records?verify_code=" + data.verify_code));
  308. break;
  309. }
  310. });
  311. /**
  312. * 搜索功能
  313. */
  314. form.on('submit(search)', function (data) {
  315. table.reload({
  316. page: {
  317. curr: 1
  318. },
  319. where: data.field
  320. });
  321. return false;
  322. });
  323. //批量导出
  324. form.on('submit(export_verify)', function (data) {
  325. location.href = ns.url("shop/verify/exportVerify", data.field);
  326. return false;
  327. });
  328. });
  329. });
  330. function memberDetail(member_id){
  331. window.open(ns.url("shop/member/editmember", {'member_id':member_id}))
  332. }
  333. </script>
  334. {/block}