pickuporder.html 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462
  1. {extend name="base"/}
  2. {block name="resources"}
  3. <link rel="stylesheet" href="SHOP_CSS/order_list.css"/>
  4. <style>
  5. .table-tab .layui-tab-content {padding-top: 0;}
  6. .line-hiding{ cursor : default; -webkit-line-clamp: 2 !important;}
  7. .layui-layout-admin.admin-style-2 .layui-form-item .layui-input-inline{background-color: #fff;}
  8. .layui-layout-admin.admin-style-2 .layui-table-cell{height: 32px;line-height: 32px;}
  9. </style>
  10. {/block}
  11. {block name="main"}
  12. <div class="screen layui-collapse" lay-filter="selection_panel">
  13. <div class="layui-colla-item">
  14. <form class="layui-colla-content layui-form layui-show" lay-filter="order_list">
  15. <div class="layui-form-item">
  16. <div class="layui-inline">
  17. <label class="layui-form-label">搜索方式</label>
  18. <div class="layui-input-inline">
  19. <select name="order_label" >
  20. {foreach $order_label_list as $k => $label_val}
  21. <option value="{$k}">{$label_val}</option>
  22. {/foreach}
  23. </select>
  24. </div>
  25. <div class="layui-input-inline">
  26. <input type="text" name="search" autocomplete="off" class="layui-input" />
  27. </div>
  28. </div>
  29. <div class="layui-inline">
  30. <label class="layui-form-label">营销类型</label>
  31. <div class="layui-input-inline">
  32. <select name="promotion_type" lay-filter="promotion_type">
  33. <option value="">全部</option>
  34. {foreach $promotion_type as $promotion_type_k => $promotion_type_val}
  35. <option value="{$promotion_type_val.type}">{$promotion_type_val.name}</option>
  36. {/foreach}
  37. </select>
  38. </div>
  39. </div>
  40. <div class="layui-inline">
  41. <label class="layui-form-label">订单来源</label>
  42. <div class="layui-input-inline">
  43. <select name="order_from">
  44. <option value="">全部</option>
  45. {foreach $order_from_list as $order_from_k => $order_from_v}
  46. <option value="{$order_from_k}">{$order_from_v['name']}</option>
  47. {/foreach}
  48. </select>
  49. </div>
  50. </div>
  51. </div>
  52. <div class="layui-form-item">
  53. <div class="layui-inline">
  54. <label class="layui-form-label">下单时间</label>
  55. <div class="layui-input-inline">
  56. <input type="text" class="layui-input" name="start_time" placeholder="开始时间" id="start_time" readonly>
  57. <i class=" iconrili iconfont calendar"></i>
  58. </div>
  59. <div class="layui-form-mid">-</div>
  60. <div class="layui-input-inline">
  61. <input type="text" class="layui-input" name="end_time" placeholder="结束时间" id="end_time" readonly>
  62. <i class=" iconrili iconfont calendar"></i>
  63. </div>
  64. <button class="layui-btn layui-btn-primary date-picker-btn date-picker-btn-seven" onclick="datePick(7, this);return false;">近7天</button>
  65. <button class="layui-btn layui-btn-primary date-picker-btn date-picker-btn-thirty" onclick="datePick(30, this);return false;">近30天</button>
  66. </div>
  67. <div class="layui-inline">
  68. <label class="layui-form-label">付款方式</label>
  69. <div class="layui-input-inline">
  70. <select name="pay_type" >
  71. <option value="">全部</option>
  72. {foreach pay_type_list as $pay_type_k => $pay_type_v}
  73. <option value="{$pay_type_k}">{$pay_type_v}</option>
  74. {/foreach}
  75. </select>
  76. </div>
  77. </div>
  78. </div>
  79. <div class="form-row">
  80. <button class="layui-btn" lay-submit id="btn_search"lay-filter="btn_search">筛选</button>
  81. <button type="reset" class="layui-btn layui-btn-primary">重置</button>
  82. <button class="layui-btn layui-btn-primary" lay-submit lay-filter="batch_export_order_goods">导出订单商品</button>
  83. <button class="layui-btn layui-btn-primary" lay-submit lay-filter="batch_export_order" >导出订单</button>
  84. <a class="layui-btn layui-btn-primary" href="{:addon_url('shop/order/export')}" target="_blank">查看已生成报表</a>
  85. </div>
  86. <input type="hidden" name="status"/>
  87. <input type="hidden" name="page"/>
  88. </form>
  89. </div>
  90. </div>
  91. <div class="layui-tab table-tab" lay-filter="order_tab">
  92. <ul class="layui-tab-title">
  93. <li class="layui-this" lay-id="">全部订单</li>
  94. </ul>
  95. <div class="layui-tab-content">
  96. <!-- 列表 -->
  97. <div id="order_list"></div>
  98. </div>
  99. </div>
  100. <div id="order_page"></div>
  101. <div id="order_operation"></div>
  102. {/block}
  103. {block name="script"}
  104. {include file="order/order_common_action" /}
  105. <!-- 修改订单收货地址 -->
  106. {include file="order/order_action" /}
  107. <!-- 发货 -->
  108. {include file="order/order_delivery_action" /}
  109. <!-- 外卖发货 -->
  110. {include file="localorder/local_order_delivery_action" /}
  111. <!-- 主动退款 -->
  112. {include file="order/shop_active_refund" /}
  113. <script src="SHOP_JS/pickuporder.js"></script>
  114. <script>
  115. var laypage,element, form, hash_url;
  116. var is_refresh = false;
  117. var laypage_util;
  118. var order_type_status_json = {:json_encode($order_type_list)};
  119. /**
  120. *通过hash获取页数
  121. */
  122. function getHashPage(){
  123. var page = 1;
  124. var hash = location.hash;
  125. var startTime = '';
  126. var endTime = '';
  127. var hash_arr = hash.split("&");
  128. $.each(hash_arr,function(index, itemobj){
  129. var item_arr = itemobj.split("=");
  130. if(item_arr.length == 2){
  131. if(item_arr[0].indexOf("page") != "-1"){
  132. page = item_arr[1];
  133. }
  134. if (item_arr[0].indexOf("start_time") != "-1") {
  135. startTime = ns.date_to_time(item_arr[1].split("%")[0]);
  136. }
  137. if (item_arr[0].indexOf("end_time") != "-1") {
  138. endTime = ns.date_to_time(item_arr[1].split("%")[0]);
  139. }
  140. }
  141. });
  142. var _time = (endTime - startTime) / (24 * 60 * 60);
  143. if (_time == 6) {
  144. $(".date-picker-btn-seven").addClass("selected");
  145. $(".date-picker-btn-thirty").removeClass("selected");
  146. } else if (_time == 29) {
  147. $(".date-picker-btn-thirty").addClass("selected");
  148. $(".date-picker-btn-seven").removeClass("selected");
  149. } else {
  150. $(".date-picker-btn-seven").removeClass("selected");
  151. $(".date-picker-btn-thirty").removeClass("selected");
  152. }
  153. return page;
  154. }
  155. //从hash中获取数据
  156. function getHashData(){
  157. var hash = ns.urlReplace(location.hash);
  158. var hash_arr = hash.split("&");
  159. var form_json = {
  160. "end_time" : "",
  161. "order_from" : "",
  162. "order_label" : $("select[name=order_label]").val(),
  163. "order_name" : "",
  164. "order_status" : "",
  165. "promotion_type" : "",
  166. "pay_type" : "",
  167. "search" : "",
  168. "start_time" : "",
  169. "order_type" : 'all',
  170. 'page_size':'',
  171. "page" : ""
  172. };
  173. if(hash_arr.length > 0){
  174. // page = hash_arr[0].replace('#!page=', '');
  175. $.each(hash_arr,function(index, itemobj){
  176. var item_arr = itemobj.split("=");
  177. if(item_arr.length == 2){
  178. $.each(form_json,function(key, form_val){
  179. if(item_arr[0].indexOf(key) != "-1"){
  180. form_json[key] = item_arr[1];
  181. }
  182. })
  183. }
  184. })
  185. }
  186. resetOrderStatus(2, 2);
  187. form.val("order_list", form_json);
  188. return form_json;
  189. }
  190. /**
  191. * 获取哈希值order_type
  192. */
  193. function getHashOrderType(){
  194. var hash = ns.urlReplace(location.hash);
  195. var hash_arr = hash.split("&");
  196. var order_type = "all";
  197. if(hash_arr.length > 0){
  198. // page = hash_arr[0].replace('#!page=', '');
  199. $.each(hash_arr,function(index, itemobj){
  200. var item_arr = itemobj.split("=");
  201. if(item_arr.length == 2){
  202. if(item_arr[0].indexOf("order_type") != "-1") {
  203. order_type = item_arr[1];
  204. }
  205. }
  206. })
  207. }
  208. return order_type;
  209. }
  210. layui.use(['laypage','laydate','form', 'element'], function(){
  211. form = layui.form;
  212. laypage = layui.laypage;
  213. element = layui.element;
  214. var laydate = layui.laydate;
  215. form.render();
  216. //渲染时间
  217. laydate.render({
  218. elem: '#start_time'
  219. ,type: 'datetime'
  220. ,change: function(value, date, endDate){
  221. $(".date-picker-btn").removeClass("selected");
  222. }
  223. });
  224. laydate.render({
  225. elem: '#end_time'
  226. ,type: 'datetime'
  227. ,change: function(value, date, endDate){
  228. $(".date-picker-btn").removeClass("selected");
  229. }
  230. });
  231. //监听筛选事件
  232. form.on('submit(btn_search)', function(data){
  233. is_refresh = true;
  234. data.field.page = 1;
  235. if (!data.field.order_type){
  236. data.field.order_type = 'all'
  237. }
  238. resetOrderStatus(data.field.order_type, 2);
  239. setHashOrderList(data.field);
  240. setOrderStatusTab(data.field.order_status);
  241. return false;
  242. });
  243. //批量导出(订单项)
  244. form.on('submit(batch_export_order_goods)', function(data){
  245. $.ajax({
  246. type: 'post',
  247. dataType: 'json',
  248. url: ns.url("shop/order/exportpickupordergoods"),
  249. data: data.field,
  250. success: function (res) {
  251. }
  252. })
  253. window.open(ns.url("shop/order/export",{}))
  254. return false;
  255. });
  256. //批量导出(订单)
  257. form.on('submit(batch_export_order)', function(data){
  258. $.ajax({
  259. type: 'post',
  260. dataType: 'json',
  261. url: ns.url("shop/order/exportpickuporder"),
  262. data: data.field,
  263. success: function (res) {
  264. }
  265. });
  266. window.open(ns.url("shop/order/export",{}));
  267. return false;
  268. });
  269. //订单类型
  270. form.on('select(order_type)', function(data){
  271. resetOrderStatus(data.value, 1);
  272. return false;
  273. });
  274. //监听Tab切换,以改变地址hash值
  275. element.on('tab(order_tab)', function(){
  276. var status = this.getAttribute('lay-id');
  277. form.val("order_list", {"order_status":status});
  278. var hash_data = getHashList();
  279. hash_data.order_status = status;
  280. hash_data.page = 1;
  281. setHashOrderList(hash_data);
  282. });
  283. getHashData();
  284. getOrderList();//筛选
  285. });
  286. function setOrderStatusTab(order_status){
  287. $(".layui-tab-title li").removeClass("layui-this");
  288. $(".layui-tab-title li").each(function(){
  289. var status = $(this).attr("lay-id");
  290. if(status == order_status){
  291. $(this).addClass("layui-this")
  292. }
  293. });
  294. }
  295. //重置状态tab 选项卡
  296. function resetOrderStatus(order_type, is_tab){
  297. var hash_order_type = getHashOrderType();
  298. if(hash_order_type != order_type || is_refresh == false){
  299. if(is_tab != 1 || is_refresh == false) {
  300. $(".layui-tab-title li").not(':first').remove();
  301. $(".layui-tab-title li").find(":first").addClass("layui-this");
  302. }
  303. if(is_tab != 2 || is_refresh == false){
  304. $("select[name=order_status] option").not(':first').remove();
  305. }
  306. var status_item = order_type_status_json[order_type]["status"];
  307. $.each(status_item,function(index, itemobj){
  308. if(is_tab != 1 || is_refresh == false) {
  309. $(".layui-tab-title").append('<li lay-id="' + index + '">' + itemobj + '</li>');
  310. }
  311. if(is_tab != 2 || is_refresh == false) {
  312. $("select[name=order_status]").append('<option value="' + index + '">' + itemobj + '</option>');
  313. }
  314. });
  315. form.render('select');
  316. }
  317. }
  318. //哈希值 订单数据
  319. function setHashOrderList(data){
  320. var hash = "";
  321. $.each(data,function(index, itemobj){
  322. if(itemobj != "" && itemobj != "all"){
  323. if(hash == ""){
  324. hash += "#!"+index +"="+itemobj;
  325. }else{
  326. hash += "&"+index +"="+itemobj;
  327. }
  328. }
  329. });
  330. // window.location.href = hash;
  331. hash_url = hash;
  332. location.hash = hash;
  333. getOrderList();
  334. }
  335. function getHashList(){
  336. var hash = ns.urlReplace(location.hash);
  337. var hash_arr = hash.split("&");
  338. var form_json = {
  339. "end_time" : "",
  340. "order_from" : "",
  341. "order_label" : $("select[name=order_label]").val(),
  342. "order_name" : "",
  343. "order_status" : "",
  344. "promotion_type" : "",
  345. "pay_type" : "",
  346. "search" : "",
  347. "start_time" : "",
  348. "order_type" : 'all',
  349. 'page_size':'',
  350. "page" : ""
  351. };
  352. if(hash_arr.length > 0){
  353. // page = hash_arr[0].replace('#!page=', '');
  354. $.each(hash_arr,function(index, itemobj){
  355. var item_arr = itemobj.split("=");
  356. if(item_arr.length == 2){
  357. $.each(form_json,function(key, form_val){
  358. if(item_arr[0].indexOf(key) != "-1"){
  359. form_json[key] = item_arr[1];
  360. }
  361. })
  362. }
  363. })
  364. }
  365. return form_json;
  366. }
  367. var order = new Order();
  368. function getOrderList(){
  369. var url = ns.url("shop/order/pickuporder", ns.urlReplace(location.hash.replace('#!', '')));
  370. $.ajax({
  371. type : 'get',
  372. dataType: 'json',
  373. url :url,
  374. success : function(res){
  375. if(res.code == 0){
  376. setOrderInfo(res.data.list);
  377. order.setData(res.data);
  378. $("#order_list").html(order.fetch());
  379. //执行一个laypage实例
  380. laypage_util = new Page({
  381. elem: 'order_page',
  382. count: res.data.count,
  383. curr: getHashPage(),
  384. limit:getHashData()['page_size'] || 10,
  385. callback: function(obj){
  386. var hash_data = getHashData();
  387. hash_data.page = obj.curr;
  388. hash_data.page_size = obj.limit;
  389. setHashOrderList(hash_data);
  390. }
  391. });
  392. }else{
  393. layer.msg(res.message);
  394. }
  395. }
  396. });
  397. }
  398. /**
  399. * 七天时间
  400. */
  401. function datePick(date_num,event_obj){
  402. $(".date-picker-btn").removeClass("selected");
  403. $(event_obj).addClass('selected');
  404. // alert(new Date().format("yyyy-MM-dd hh:mm"));
  405. var now_date = new Date();
  406. Date.prototype.Format = function (fmt,date_num) { //author: meizz
  407. this.setDate(this.getDate()-date_num);
  408. var o = {
  409. "M+": this.getMonth() + 1, //月份
  410. "d+": this.getDate(), //日
  411. "H+": this.getHours(), //小时
  412. "m+": this.getMinutes(), //分
  413. "s+": this.getSeconds(), //秒
  414. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  415. "S": this.getMilliseconds() //毫秒
  416. };
  417. if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  418. for (var k in o)
  419. if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  420. return fmt;
  421. };
  422. // var now_time = new Date().Format("yyyy-MM-dd HH:mm:ss",0);//当前日期
  423. var now_time = new Date().Format("yyyy-MM-dd 23:59:59",0);//当前日期
  424. var before_time = new Date().Format("yyyy-MM-dd 00:00:00",date_num-1);//前几天日期
  425. $("input[name=start_time]").val(before_time,0);
  426. $("input[name=end_time]").val(now_time,date_num-1);
  427. }
  428. </script>
  429. {/block}