lockup_list.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. {extend name="base"/}
  2. {block name="resources"}
  3. <style>
  4. .contraction{display: inline-block;margin-right: 5px;}
  5. .contraction span{cursor: pointer;display: inline-block;width: 17px;height: 17px;text-align: center;line-height: 14px;border: 1px solid #e9e9e9;user-select: none;background: #fff;}
  6. .sku-list{overflow: hidden;padding: 0 45px;}
  7. .sku-list li{float: left;display: flex;padding: 10px;margin-right: 10px;margin-bottom: 10px;border: 1px solid #EFEFEF;width: 294px;height: 140px;align-items: center;}
  8. .sku-list li .img-wrap{vertical-align: middle;margin-right: 8px;width: 120px;height: 120px;text-align: center;line-height: 120px;}
  9. .sku-list li .img-wrap img{max-width: 100%;max-height: 100%;}
  10. .sku-list li .info-wrap span{margin-bottom: 5px;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;white-space: normal;word-break: break-all;-webkit-box-orient: vertical;-webkit-line-clamp: 1;}
  11. .sku-list li .info-wrap span.sku-name{-webkit-line-clamp: 2;margin-bottom: 5px;font-weight: bold;}
  12. .sku-list li .info-wrap span:last-child{margin-bottom: 0;}
  13. </style>
  14. {/block}
  15. {block name="main"}
  16. <div class="layui-collapse ns-tips">
  17. <div class="layui-colla-item">
  18. <h2 class="layui-colla-title">操作提示</h2>
  19. <ul class="layui-colla-content layui-show">
  20. <li>当前显示的是已经违规下架的商品,当商品处于上架状态时前台显示。</li>
  21. <li>当前商品违规下架,说明商家的商品不符个规范,需要商家重新编辑进行重新审核。</li>
  22. </ul>
  23. </div>
  24. </div>
  25. <div class="ns-screen layui-collapse">
  26. <div class="layui-colla-item">
  27. <h2 class="layui-colla-title">筛选</h2>
  28. <form class="layui-colla-content layui-form layui-show">
  29. <div class="layui-form-item">
  30. <div class="layui-inline">
  31. <label class="layui-form-label">搜索方式:</label>
  32. <div class="layui-input-inline">
  33. <select name="search_text_type">
  34. <option value="goods_name">商品名称</option>
  35. <option value="site_name">店铺名称</option>
  36. <!--<option value="brand_name">品牌名称</option>-->
  37. </select>
  38. </div>
  39. <div class="layui-input-inline">
  40. <input type="text" name="search_text" autocomplete="off" class="layui-input" placeholder="输入商品名称/店铺名称" />
  41. </div>
  42. </div>
  43. </div>
  44. <div class="layui-form-item">
  45. <div class="layui-inline">
  46. <label class="layui-form-label">商品分类:</label>
  47. <div class="layui-input-inline">
  48. {include file="goods/category_select" /}
  49. </div>
  50. </div>
  51. <div class="layui-inline">
  52. <label class="layui-form-label">商品品牌:</label>
  53. <div class="layui-input-inline">
  54. <select name="goods_brand" lay-search="">
  55. </select>
  56. </div>
  57. </div>
  58. <div class="layui-inline">
  59. <label class="layui-form-label">商品类型:</label>
  60. <div class="layui-input-inline">
  61. <select name="goods_attr_class" lay-search="">
  62. </select>
  63. </div>
  64. </div>
  65. </div>
  66. <div class="ns-form-row">
  67. <button class="layui-btn ns-bg-color" lay-submit lay-filter="btn_search">筛选</button>
  68. <button type="reset" class="layui-btn layui-btn-primary">重置</button>
  69. </div>
  70. </form>
  71. </div>
  72. </div>
  73. <!-- 列表 -->
  74. <table id="goods_list" lay-filter="goods_list"></table>
  75. <!-- 商品信息 -->
  76. <script type="text/html" id="goods_info">
  77. <div class="ns-table-tuwen-box">
  78. <div class="contraction" data-goods-id="{{d.goods_id}}" data-open="0">
  79. <span>+</span>
  80. </div>
  81. <div class="ns-img-box">
  82. <img layer-src src="{{ns.img(d.goods_image.split(',')[0])}}"/>
  83. </div>
  84. <div class="ns-font-box">
  85. <a href="javascript:;" class="ns-multi-line-hiding ns-text-color">{{d.goods_name}}</a>
  86. </div>
  87. </div>
  88. </script>
  89. <!-- 操作 -->
  90. <script type="text/html" id="operation">
  91. <div class="ns-table-btn">
  92. <a class="layui-btn" lay-event="lockup_close">取消</a>
  93. </div>
  94. </script>
  95. <!-- 批量操作 -->
  96. <script type="text/html" id="batchOperation">
  97. <button class="layui-btn layui-btn-primary" lay-event="lockup_close">取消</button>
  98. </script>
  99. <!-- SKU商品列表 -->
  100. <script type="text/html" id="skuList">
  101. <tr class="js-sku-list-{{d.index}}">
  102. <td></td>
  103. <td colspan="9">
  104. <ul class="sku-list">
  105. {{# for(var i=0;i<d.list.length;i++){ }}
  106. <li>
  107. <div class="img-wrap">
  108. <img src="{{ns.img(d.list[i].sku_image)}}">
  109. </div>
  110. <div class="info-wrap">
  111. <span class="sku-name">{{d.list[i].sku_name}}</span>
  112. <span class="price">价格:¥{{d.list[i].price}}</span>
  113. <span class="stock">库存:{{d.list[i].stock}}</span>
  114. <span class="sale_num">销量:{{d.list[i].sale_num}}</span>
  115. </div>
  116. </li>
  117. {{# } }}
  118. </ul>
  119. </td>
  120. </tr>
  121. </script>
  122. {/block}
  123. {block name="script"}
  124. <script>
  125. var laytpl, form;
  126. $(function() {
  127. $("body").on("click", ".contraction", function() {
  128. var goods_id = $(this).attr("data-goods-id");
  129. var open = $(this).attr("data-open");
  130. var tr = $(this).parent().parent().parent().parent();
  131. var index = tr.attr("data-index");
  132. if (open == 1) {
  133. $(this).children("span").text("+");
  134. $(".js-sku-list-" + index).remove();
  135. } else {
  136. $(this).children("span").text("-");
  137. $.ajax({
  138. url: ns.url("admin/goods/getGoodsSkuList"),
  139. data: {
  140. goods_id: goods_id
  141. },
  142. dataType: 'JSON',
  143. type: 'POST',
  144. async: false,
  145. success: function(res) {
  146. var list = res.data;
  147. var sku_list = $("#skuList").html();
  148. var data = {
  149. list: list,
  150. index: index
  151. };
  152. laytpl(sku_list).render(data, function(html) {
  153. tr.after(html);
  154. });
  155. }
  156. });
  157. }
  158. $(this).attr("data-open", (open == 0 ? 1 : 0));
  159. });
  160. //商品品牌
  161. goodsBrand();
  162. //商品类型
  163. goodsSattr();
  164. });
  165. layui.use(['form', 'laytpl'], function() {
  166. form = layui.form;
  167. repeat_flag = false; //防重复标识
  168. laytpl = layui.laytpl;
  169. form.render();
  170. var table = new Table({
  171. elem: '#goods_list',
  172. url: ns.url("admin/goods/lockupList"),
  173. cols: [
  174. [{
  175. type: 'checkbox',
  176. unresize: 'false',
  177. width: '3%'
  178. },
  179. {
  180. title: '商品信息',
  181. unresize: 'false',
  182. width: '20%',
  183. templet: '#goods_info'
  184. },
  185. {
  186. field: 'site_name',
  187. title: '店铺名称',
  188. unresize: 'false',
  189. width: '10%',
  190. },
  191. {
  192. field: 'price',
  193. title: '价格(元)',
  194. unresize: 'false',
  195. width: '10%'
  196. },
  197. {
  198. field: 'goods_stock',
  199. title: '库存',
  200. unresize: 'false',
  201. width: '9%'
  202. },
  203. {
  204. field: 'sale_num',
  205. title: '销量',
  206. unresize: 'false',
  207. width: '6%'
  208. },
  209. {
  210. title: '商品状态',
  211. unresize: 'false',
  212. width: '8%',
  213. templet: function(data) {
  214. var str = '';
  215. if (data.goods_state == 1) {
  216. str = '上架';
  217. } else if (data.goods_state == 0) {
  218. str = '下架';
  219. }
  220. return str;
  221. }
  222. },
  223. {
  224. title: '审核状态',
  225. unresize: 'false',
  226. width: '8%',
  227. templet: function(data) {
  228. var str = '';
  229. if (data.verify_state == 1) {
  230. str = '已审核';
  231. } else if (data.verify_state == 0) {
  232. str = '待审核';
  233. } else if (data.verify_state == 10) {
  234. str = '<a href="javascript:getVerifyStateRemark(' + data.goods_id + ');" class="ns-text-color">违规下架</a>';
  235. } else if (data.verify_state == -1) {
  236. str = '审核中';
  237. } else if (data.verify_state == -2) {
  238. str = '审核失败';
  239. }
  240. return str;
  241. }
  242. },
  243. {
  244. title: '创建时间',
  245. unresize: 'false',
  246. width: '14%',
  247. templet: function(data) {
  248. return ns.time_to_date(data.create_time);
  249. }
  250. },
  251. {
  252. title: '操作',
  253. toolbar: '#operation',
  254. unresize: 'false',
  255. width: '12%'
  256. }
  257. ]
  258. ],
  259. bottomToolbar: "#batchOperation"
  260. });
  261. /**
  262. * 监听工具栏操作
  263. */
  264. table.tool(function(obj) {
  265. var data = obj.data;
  266. switch (obj.event) {
  267. case 'lockup_close':
  268. //取消违规下架
  269. lockupClose(data.goods_id);
  270. break;
  271. }
  272. });
  273. //取消违规下架商品
  274. function lockupClose(goods_ids) {
  275. if (repeat_flag) return;
  276. repeat_flag = true;
  277. $.ajax({
  278. url: ns.url("admin/goods/lockupClose"),
  279. data: {
  280. goods_ids: goods_ids.toString()
  281. },
  282. dataType: 'JSON',
  283. type: 'POST',
  284. success: function(res) {
  285. layer.msg(res.message);
  286. repeat_flag = false;
  287. if (res.code == 0) {
  288. table.reload();
  289. }
  290. }
  291. });
  292. }
  293. /**
  294. * 批量操作
  295. */
  296. table.bottomToolbar(function(obj) {
  297. if (obj.data.length < 1) {
  298. layer.msg('请选择要操作的数据');
  299. return;
  300. }
  301. var id_array = new Array();
  302. for (i in obj.data) id_array.push(obj.data[i].goods_id);
  303. switch (obj.event) {
  304. case 'lockup_close':
  305. //取消违规下架
  306. lockupClose(id_array.toString());
  307. break;
  308. }
  309. });
  310. /**
  311. * 搜索功能
  312. */
  313. form.on('submit(btn_search)', function(data) {
  314. console.log(data);
  315. table.reload({
  316. page: {
  317. curr: 1
  318. },
  319. where: data.field
  320. });
  321. return false;
  322. });
  323. });
  324. /**
  325. * 获取违规下架原因
  326. * @param goods_id
  327. */
  328. function getVerifyStateRemark(goods_id) {
  329. $.ajax({
  330. url: ns.url("admin/goods/getVerifyStateRemark"),
  331. data: {
  332. goods_id: goods_id
  333. },
  334. dataType: 'JSON',
  335. type: 'POST',
  336. success: function(res) {
  337. var data = res.data;
  338. if (data) {
  339. layer.open({
  340. title: '违规下架原因',
  341. content: data.verify_state_remark
  342. });
  343. }
  344. }
  345. });
  346. }
  347. //商品品牌
  348. function goodsBrand() {
  349. var brandHtml = "";
  350. $.ajax({
  351. url: ns.url("admin/goodsbrand/lists"),
  352. type: 'POST',
  353. dataType: 'JSON',
  354. success: function (res) {
  355. brandHtml += '<option value="">直接选择或搜索选择</option>';
  356. $.each(res.data.list, function (key, val) {
  357. brandHtml += `<option value="${val.brand_id}">${val.brand_name}</option>`;
  358. });
  359. $("select[name='goods_brand']").html(brandHtml);
  360. form.render('select');
  361. }
  362. });
  363. }
  364. //商品类型
  365. function goodsSattr() {
  366. var sattrHtml = "";
  367. $.ajax({
  368. url: ns.url("admin/goodsattr/lists"),
  369. type: 'POST',
  370. dataType: 'JSON',
  371. success: function (res) {
  372. sattrHtml += '<option value="">直接选择或搜索选择</option>';
  373. $.each(res.data.list, function (key, val) {
  374. sattrHtml += `<option value="${val.class_id}">${val.class_name}</option>`;
  375. });
  376. $("select[name='goods_attr_class']").html(sattrHtml);
  377. form.render('select');
  378. }
  379. });
  380. }
  381. </script>
  382. {/block}