product-order.html 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. <style type="text/css">
  2. .xm-label-block {
  3. background-color: #287bd2
  4. }
  5. </style>
  6. <!-- 正文开始 -->
  7. <div class="layui-fluid">
  8. <div class="layui-card">
  9. <div class="layui-card-body">
  10. <div class="layui-form toolbar" id="tbToolBar">
  11. <div class="layui-form-item">
  12. <div class="layui-inline">
  13. <label class="layui-form-label">关键词:</label>
  14. <div class="layui-input-inline mr0">
  15. <input name="keywords" placeholder="关键词" class="layui-input"/>
  16. </div>
  17. </div>
  18. <div class="layui-inline">
  19. <label class="layui-form-label">所属区域:</label>
  20. <div class="layui-input-inline mr0">
  21. <input id="areaChoose" name="area" class="layui-input"/>
  22. </div>
  23. </div>
  24. <div class="layui-inline">
  25. <label class="layui-form-label">是否拼团:</label>
  26. <div class="layui-input-inline mr0">
  27. <select name="status">
  28. <option value="">请选择</option>
  29. <option value="0">否</option>
  30. <option value="1">是</option>
  31. </select>
  32. </div>
  33. </div>
  34. <div class="layui-inline">
  35. <label class="layui-form-label">状 态:</label>
  36. <div class="layui-input-inline mr0">
  37. <!-- 0: 已关闭 1:待支付, 2:待发货,3:待收货 , 4: 已完成 , 5: 待开团 , 6: 未中团-->
  38. <select name="status">
  39. <option value="">所有</option>
  40. <option value="0">已关闭</option>
  41. <option value="1">待支付</option>
  42. <option value="2">待发货</option>
  43. <option value="3">待收货</option>
  44. <option value="4">已完成</option>
  45. <option value="5">待开团</option>
  46. <option value="6">未中团</option>
  47. </select>
  48. </div>
  49. </div>
  50. <div class="layui-inline">
  51. <label class="layui-form-label">下单时间:</label>
  52. <div class="layui-input-inline">
  53. <input id="tbAdvSelDate" name="created_at" class="layui-input icon-date" placeholder="选择下单时间"
  54. autocomplete="off">
  55. </div>
  56. </div>
  57. <div class="layui-inline" style="padding-right: 110px;">
  58. <button class="layui-btn icon-btn" lay-filter="formSubSearchOrder" lay-submit>
  59. <i class="layui-icon">&#xe615;</i>查询
  60. </button>
  61. <button class="layui-btn icon-btn" lay-filter="formExportOrder" lay-submit="">
  62. <i class="layui-icon">&#xe66d;</i>导出
  63. </button>
  64. </div>
  65. </div>
  66. </div>
  67. <div class="layui-tab layui-tab-brief">
  68. <table id="dataTable" lay-filter="dataTable"></table>
  69. </div>
  70. </div>
  71. </div>
  72. </div>
  73. <script type="text/html" id="toolBarTpl">
  74. <div class="layui-btn-group fl">
  75. <a table-data="{'url':'store/product/order/plectron','action':'put',param:{'status': 4}}" class="layui-btn layui-btn-sm layui-icon layui-icon-chart table-toolbar-btn">&nbsp;结束</a >
  76. <a table-data="{'url':'store/product/order/plectron','action':'put',param:{'status': 3}}" class="layui-btn layui-btn-sm layui-icon layui-icon-service table-toolbar-btn">&nbsp;发货</a >
  77. <a table-data="{'url':'store/product/order/plectron','action':'put',param:{'status': 0}}" confirm class="layui-btn layui-btn-sm layui-icon layui-icon-engine table-toolbar-btn">&nbsp;关闭</a>
  78. <a table-data="{'url':'store/product/order/plectron','action':'delete'}" confirm class="layui-btn layui-btn-sm layui-icon layui-icon-close table-toolbar-btn">&nbsp;删除</a>
  79. </div>
  80. </script>
  81. <!-- 表格操作列 -->
  82. <script type="text/html" id="tableBarUser">
  83. {{# if(d.status > 0){ }}
  84. <a class="layui-btn layui-btn-xs" lay-event="view">订单详情</a>
  85. {{# if(d.status == 2){ }}
  86. <a class="layui-btn layui-btn-normal layui-btn-xs" lay-event="ship">确认发货</a>
  87. {{# }else{ }}
  88. <a class="layui-btn layui-btn-xs layui-btn-disabled">确认发货</a>
  89. {{# } }}
  90. {{# if(d.status == 3){ }}
  91. <a class="layui-btn layui-btn-warm layui-btn-xs" lay-event="confirm">确认结单</a>
  92. {{# }else{ }}
  93. <a class="layui-btn layui-btn-xs layui-btn-disabled">确认结单</a>
  94. {{# } }}
  95. {{# }else{ }}
  96. <a class="layui-btn layui-btn-xs" lay-event="view">订单详情</a>
  97. <a class="layui-btn layui-btn-xs layui-btn-disabled">确认发货</a>
  98. <a class="layui-btn layui-btn-xs layui-btn-disabled">确认结单</a>
  99. {{# } }}
  100. <a class="layui-btn layui-btn-danger layui-btn-xs" perm-show="delete:/store/product/order/delete/<id>" lay-event="del">删除订单</a>
  101. </script>
  102. <!-- 表格状态列 -->
  103. <script type="text/html" id="tableStateUser">
  104. <!-- 0: 已关闭 1:待支付, 2:待发货,3:待收货 , 4: 已完成 , 5: 待开团 , 6: 未中团-->
  105. {{# if(d.status == 1){ }}
  106. <span class="layui-badge layui-bg-red">待支付</span>
  107. {{# }else if(d.status == 2){ }}
  108. <span class="layui-badge layui-bg-orange">待发货</span>
  109. {{# }else if(d.status == 3){ }}
  110. <span class="layui-badge layui-bg-blue">待收货</span>
  111. {{# }else if(d.status == 4){ }}
  112. <span class="layui-badge layui-bg-green">已完成</span>
  113. {{# }else if(d.status == 5){ }}
  114. <span class="layui-badge layui-bg-cyan">待开团</span>
  115. {{# }else if(d.status == 6){ }}
  116. <span class="layui-badge layui-bg-gray">未中团</span>
  117. {{# }else{ }}
  118. <span class="layui-badge layui-bg-black">订单关闭</span>
  119. {{# } }}
  120. </script>
  121. <!--详情列表-->
  122. <script type="text/html" id="modelOrderDetail">
  123. <table class="layui-table" id="OrderDetailTb" lay-filter="OrderDetailTb"></table>
  124. </script>
  125. <!-- js部分 -->
  126. <script type="text/javascript" src="../../assets/module/cascader/citys-data.js"></script>
  127. <script>
  128. layui.use(['layer', 'form', 'table', 'util', 'notice','md5', 'admin', 'setter', 'xmSelect', 'laydate', 'cascader'], function () {
  129. var $ = layui.jquery;
  130. var layer = layui.layer;
  131. var form = layui.form;
  132. var table = layui.table;
  133. var util = layui.util;
  134. var admin = layui.admin;
  135. var notice = layui.notice;
  136. var setter = layui.setter;
  137. var md5 = layui.md5;
  138. var xmSelect = layui.xmSelect;
  139. var laydate = layui.laydate;
  140. var cascader = layui.cascader;
  141. // 时间选择
  142. laydate.render({
  143. elem: '#tbAdvSelDate',
  144. type: 'date',
  145. format: 'yyyy/MM/dd',
  146. calendar: true,
  147. theme: '#ec6c44',
  148. range: true,
  149. trigger: 'click'
  150. });
  151. form.render('select');
  152. // 省市区选择
  153. var cas = cascader.render({
  154. elem: '#areaChoose',
  155. data: citysData,
  156. itemHeight: '200px',
  157. filterable: true
  158. });
  159. form.render('select');
  160. // 渲染表格
  161. var insTb = table.render({
  162. elem: '#dataTable',
  163. url: setter.baseServer + 'store/product/order',
  164. page: true,
  165. title: "商品订单表",
  166. // toolbar: true,
  167. toolbar: '#toolBarTpl',
  168. cellMinWidth: 100,
  169. cols: [[
  170. {type: 'checkbox'},
  171. {field: 'order_no', title: '订单号', width: 200},
  172. {field: 'selller', title: '所属商家', templet: function (d) {
  173. return '<a href="javascript:;" class="order-seller-view" style="color: #35cc98;border-bottom: 1px solid;"> ' +
  174. ((d.seller !== null) ? d.seller.seller_name : '商家已删除') + ' </a>';
  175. }, width: 200},
  176. {field: 'user', title: '下单用户', templet: function (d) {
  177. return '<a href="javascript:;" class="order-user-view" style="color: #35cc98;border-bottom: 1px solid;"> ' +
  178. ((d.user !== null) ? d.user.nickname : '用户已删除') + ' </a>';
  179. }, width: 200},
  180. {field: 'addr', title: '配送地址', templet: function (d) {
  181. return '<a href="javascript:;" class="order-user-view" style="color: #35cc98;border-bottom: 1px solid;"> '
  182. + ((d.addr !== null) ? d.addr.province + d.addr.city + d.addr.country + d.addr.detail + '(' + d.addr.name + d.addr.mobile + ')' : '地址已删除') + ' </a>';
  183. }, width: 500},
  184. {field: 'total_price', title: '订单总价', templet: function (d) {
  185. return "<p style='color:red'>&yen;" + d.total_price + "</p>";
  186. }, width: 100},
  187. {field: 'pay_price', title: '实际支付', templet: function (d) {
  188. return "<p style='color:red'>&yen;" + d.pay_price + "</p>";
  189. }, width: 100},
  190. {field: 'is_pin', title: '是否拼团', templet:function(d){
  191. return d.is_pin ? '<span class="layui-badge">是</span>' : '<span class="layui-badge layui-bg-gray">否</span>'
  192. },width: 100},
  193. {field: 'pin_rebate', title: '拼团返现', width: 200},
  194. {field: 'pin_rebate_expired', templet: function (d) {
  195. if(d.status > 0){
  196. return d.pin_rebate_expired > 0 &7 && d.pin_rebate > 0 ? util.toDateString(d.pin_rebate_expired * 1e3) : "";
  197. }
  198. return "订单关闭";
  199. }, title: '拼团返现过期', width: 180
  200. },
  201. {field: 'pin_rebate_rec', templet: function (d) {
  202. if(d.status > 0){
  203. return d.pin_rebate_rec > 0 ? "已领取" : "";
  204. }
  205. return "订单关闭";
  206. }, title: '返现领取', width: 200},
  207. {field: 'paid_at', sort: true, templet: function (d) {
  208. if(d.status > 0){
  209. return d.paid_at > 0 ? util.toDateString(d.paid_at * 1e3) : "待支付"
  210. }
  211. return "订单关闭";
  212. }, title: '支付时间', width: 180
  213. },
  214. {field: 'shipping_at', sort: true, templet: function (d) {
  215. if(d.status > 0){
  216. return d.shipping_at > 0 ? util.toDateString(d.shipping_at * 1e3) : "等待发货";
  217. }
  218. return "订单关闭";
  219. }, title: '发货时间', width: 180
  220. },
  221. {field: 'received_at', sort: true, templet: function (d) {
  222. if(d.status > 0){
  223. return d.received_at > 0 ? util.toDateString(d.received_at * 1e3) : "待收货物";
  224. }
  225. return "订单关闭";
  226. }, title: '收货时间', width: 180
  227. },
  228. {field: 'in_service', templet: function (d) {
  229. if(d.status == 4){
  230. return d.in_service == 2 ? "售后已处理" : d.in_service == 1 ? "售后申请中" : "无";
  231. }
  232. return "订单关闭";
  233. }, title: '售后状态', width: 200},
  234. {field: 'service_rec', templet: function (d) {
  235. if(d.status == 4){
  236. return d.service_rec == 1 ? "已处理" : "无";
  237. }
  238. return "订单关闭";
  239. }, title: '是否处理', width: 200},
  240. {field: 'created_at', sort: true, templet: function (d) {
  241. return util.toDateString(d.created_at * 1e3);
  242. }, title: '创建时间', width: 180
  243. },
  244. {field: 'status', templet: '#tableStateUser', title: '状态', width: 120},
  245. {align: 'center', toolbar: '#tableBarUser', title: '操作', minWidth: 360}
  246. ]],
  247. done:function () {
  248. admin.renderPerm()
  249. }
  250. });
  251. // 划过产品显示
  252. $(document).on('click','.order-goods-view', function () {
  253. console.log('goods')
  254. });
  255. // 划过用户显示
  256. $(document).on('click','.order-user-view', function () {
  257. console.log('user')
  258. });
  259. // 搜索
  260. form.on('submit(formSubSearchOrder)', function (data) {
  261. // 省市区地址处理
  262. var values = cas.getValue().split(",");
  263. data.field.area = values[values.length - 1];
  264. insTb.reload({where: data.field,page: {curr: 1}}, 'data');
  265. });
  266. // 导出
  267. form.on('submit(formExportOrder)', function (data) {
  268. admin.req("export/order",data.field,function (r) {
  269. if (r.code === 10000) {
  270. // 跳转
  271. window.open(r.data.url)
  272. } else {
  273. notice.msg(r.message, {icon: 2});
  274. }
  275. });
  276. });
  277. // 工具条点击事件
  278. table.on('tool(dataTable)', function (obj) {
  279. var data = obj.data;
  280. var layEvent = obj.event;
  281. if (layEvent === 'view') { // 查看
  282. showDetailModel(data);
  283. } else if (layEvent === 'del') { // 删除
  284. layer.confirm('确定要删除“' + data.order_no + '”吗?', {
  285. skin: 'layui-layer-admin',
  286. shade: .1
  287. }, function (i) {
  288. layer.close(i);
  289. layer.load(2);
  290. admin.req('store/product/order/' + data.id + '/delete', function (r) {
  291. layer.closeAll('loading');
  292. if (r.code === 10000) {
  293. notice.msg(r.message, {icon: 1});
  294. insTb.reload({}, 'data');
  295. } else {
  296. notice.msg(r.message, {icon: 2});
  297. }
  298. }, 'POST');
  299. });
  300. } else if (layEvent === 'confirm') { // 结束订单
  301. layer.confirm('确定要结束“' + data.order_no + '”吗?', {
  302. skin: 'layui-layer-admin',
  303. shade: .1
  304. }, function (i) {
  305. layer.close(i);
  306. layer.load(2);
  307. admin.req('store/product/order/' + data.id + '/confirm',function (r) {
  308. layer.closeAll('loading');
  309. if (r.code === 10000) {
  310. notice.msg(r.message, {icon: 1});
  311. insTb.reload({}, 'data');
  312. } else {
  313. notice.msg(r.message, {icon: 2});
  314. }
  315. }, 'POST');
  316. });
  317. } else if (layEvent === 'ship') { // 订单发货
  318. layer.confirm('确定要发货“' + data.order_no + '”吗?', {
  319. skin: 'layui-layer-admin',
  320. shade: .1
  321. }, function (i) {
  322. layer.close(i);
  323. layer.load(2);
  324. admin.req('store/product/order/' + data.id + '/ship',function (r) {
  325. layer.closeAll('loading');
  326. if (r.code === 10000) {
  327. notice.msg(r.message, {icon: 1});
  328. insTb.reload({}, 'data');
  329. } else {
  330. notice.msg(r.message, {icon: 2});
  331. }
  332. }, 'POST');
  333. });
  334. }
  335. });
  336. function showDetailModel(data){
  337. admin.open({
  338. id: 'LAY_OrderDetail',
  339. type: 1,
  340. area: '900px', //宽高
  341. title: '订单商品列表',
  342. content: $('#modelOrderDetail').html(),
  343. success: function (layero, dIndex) {
  344. $(layero).children('.layui-layer-content').css('overflow', 'visible');
  345. // 渲染表格
  346. var orderDetailTb = table.render({
  347. elem: '#OrderDetailTb',
  348. url: setter.baseServer + 'store/product/order/' + data.id + '/detail',
  349. page: true,
  350. title: "订单详情表",
  351. toolbar: false,
  352. // toolbar: '#toolBarTpl',
  353. cellMinWidth: 100,
  354. cols: [[
  355. {type: 'numbers'},
  356. {field: 'title', title: '商品', width: 200},
  357. {field: 'spec', title: '规格', width: 200},
  358. {field: 'count', title: '数量', width: 200},
  359. {field: 'price', title: '单价', width: 200},
  360. {field: 'total_price', title: '总价', width: 200}
  361. ]]
  362. });
  363. }
  364. })
  365. }
  366. });
  367. </script>