goods_select.html 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835
  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{display: none;border-bottom: 1px solid #e6e6e6;}
  7. .sku-list td:nth-of-type(2){display: flex;align-items: center;}
  8. .sku-list td{border-bottom: 0;padding: 5px 15px !important;}
  9. .select-goods .screen .layui-colla-content{padding-left: 15px;}
  10. .select-goods{display: flex;border-bottom: 1px solid #f2f2f2;height: 615px;}
  11. .select-goods .select-goods-left{width: 135px;margin: 20px;padding-right: 10px;border-right: 1px solid #f2f2f2;box-sizing: border-box;overflow-y: auto;}
  12. /* 滚动条整体部分*/.select-goods .select-goods-left::-webkit-scrollbar{width:5px;background-color:#d0cdc7;}
  13. /* scroll轨道背景*/.select-goods .select-goods-left::-webkit-scrollbar-track{-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);border-radius: 50%;background-color:#d0cdc7;}
  14. /* 滚动条中能上下移动的小块*/.select-goods .select-goods-left::-webkit-scrollbar-thumb{border-radius: 10px;-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);background-color:#a09d9d;}
  15. .select-goods .select-goods-left dl{height: auto;overflow: hidden;}
  16. .select-goods .select-goods-left dt,.select-goods .select-goods-left dd{position: relative;height: 32px;font-size: 12px;line-height: 32px;cursor: pointer;}
  17. .select-goods .select-goods-left dt{padding-left: 13px;}
  18. .select-goods .select-goods-left dd{padding-left: 20px;}
  19. .select-goods .select-goods-left dt:after{content: '';position: absolute;border: 4px solid transparent;border-right-color: #333;border-bottom-color: #333;left: 0;top: 50%;transform: translateY(-50%);transition: all .3s;}
  20. .select-goods .select-goods-left dl.fold{height: 32px;}
  21. .select-goods .select-goods-left .fold dt:after{transform:translateY(-50%) rotate(-45deg);}
  22. .select-goods .select-goods-left .active{background-color: #f7f7f7;}
  23. .select-goods .select-goods-left .text-color{background-color: transparent;}
  24. .select-goods .select-goods-right{flex: 1;margin-top: 20px;margin-right: 20px;}
  25. .select-goods .select-goods-right .layui-table-body{height: 425px;}
  26. .select-goods .select-goods-right .single-filter-box{padding: 0;}
  27. .select-goods .select-goods-right .single-filter-box .layui-form{margin: inherit;}
  28. .select-goods .select-goods-right .single-filter-box .layui-form div{margin: 0;}
  29. .select-goods .select-goods-classification{border: 0;}
  30. .select-goods .select-goods-classification .layui-colla-title{height: 32px;background-color: #fff;border: 0;line-height: 32px;font-size: 12px;padding-left: 15px; }
  31. .select-goods .select-goods-classification .layui-colla-title i{font-size: 0;}
  32. .select-goods .select-goods-classification .layui-colla-title.arrow.active:after{transform: rotate(0) translateY(-50%);}
  33. .select-goods .select-goods-classification .layui-colla-title.arrow:after{content: '';border: 4px solid #333;position: absolute;border-top-color: transparent !important;border-left-color: transparent !important;left: 3px;top: 50%;transition: all .3s;transform: rotate(-45deg) translateY(-50%);}
  34. .select-goods .select-goods-classification .layui-colla-content{padding: 0;font-size: 12px;border-top: 0;}
  35. .select-goods .select-goods-classification .layui-colla-item{border: 0;font-size: 12px;}
  36. .select-goods .select-goods-classification .classification-item{cursor: pointer;border: 0;font-size: 14px;}
  37. .select-goods .select-goods-classification .select-goods-classification .classification-item{padding-left: 26px;}
  38. .select-goods .select-goods-classification .select-goods-classification .classification-item.arrow:after{left: 15px;}
  39. .select-goods .select-goods-classification .select-goods-classification .layui-colla-content.classification-item{padding-left: 38px;}
  40. .select-goods .select-goods-classification .classification-item:hover{background-color: #f7f7f7;}
  41. /* 筛选下拉框宽度调整 */
  42. .layui-form-select{width:150px !important;}
  43. </style>
  44. {/block}
  45. {block name="body"}
  46. <div class="select-goods">
  47. <!-- 左侧固定展示商品分类 -->
  48. <div class="select-goods-left">
  49. <div class="select-goods-classification layui-collapse" lay-accordion lay-filter="oneCategory">
  50. <div class="layui-colla-item">
  51. <h2 class="layui-colla-title classification-item text-color" data-category_id="">全部分类</h2>
  52. </div>
  53. {foreach $category_list as $category_one_item}
  54. <div class="layui-colla-item">
  55. <h2 class="layui-colla-title classification-item {notempty name="$category_one_item.children"}arrow{/notempty}" data-category_id="{$category_one_item.category_id}">{$category_one_item.title}</h2>
  56. {notempty name="category_one_item.children"}
  57. {foreach $category_one_item.children as $category_two_item}
  58. <div class="layui-colla-content">
  59. <div class="select-goods-classification layui-collapse" lay-accordion lay-filter="twoCategory">
  60. <div class="layui-colla-item">
  61. <h2 class="layui-colla-title classification-item {notempty name="category_two_item.children"}arrow{/notempty}" data-category_id="{$category_two_item.category_id}">{$category_two_item.title}</h2>
  62. {notempty name="category_two_item.children"}
  63. {foreach $category_two_item.children as $category_three_item}
  64. <div class="layui-colla-content classification-item" data-category_id="{$category_three_item.category_id}">{$category_three_item.title}</div>
  65. {/foreach}
  66. {/notempty}
  67. </div>
  68. </div>
  69. </div>
  70. {/foreach}
  71. {/notempty}
  72. </div>
  73. {/foreach}
  74. </div>
  75. </div>
  76. <!-- 右侧固定展示筛选和商品列表 -->
  77. <div class="select-goods-right">
  78. <!-- 筛选 -->
  79. <div class="single-filter-box">
  80. <div></div>
  81. <div class="layui-form">
  82. <div class="layui-inline">
  83. <div class="layui-input-inline">
  84. <select name="select_type" lay-filter="select_type">
  85. <option value="all">全部商品</option>
  86. <option value="selected">已选择商品</option>
  87. </select>
  88. </div>
  89. </div>
  90. <div class="layui-inline">
  91. <div class="layui-input-inline">
  92. <select name="label_id" lay-filter="label_id">
  93. <option value="">选择商品标签</option>
  94. {foreach name="$label_list" item="vo"}
  95. <option value="{$vo['id']}">{$vo['label_name']}</option>
  96. {/foreach}
  97. </select>
  98. </div>
  99. </div>
  100. {if $is_disabled_goods_type == 0}
  101. <div class="layui-input-inline">
  102. <select name="goods_class" lay-filter="goods_class">
  103. <option value="">选择商品类型</option>
  104. {foreach name="all_goodsclass" item="vo"}
  105. {if empty($usable_goods_class) || (!empty($usable_goods_class) && in_array($vo.goods_class, $usable_goods_class)) }
  106. <option value="{$vo.goods_class}" {if $goods_type == $vo.goods_class} selected{/if}>{$vo.goods_class_name}</option>
  107. {/if}
  108. {/foreach}
  109. </select>
  110. </div>
  111. {/if}
  112. <div class="layui-input-inline">
  113. <input type="text" name="search_text" placeholder="请输入商品名称{if in_array($promotion, ['', 'all', 'module'])}或编码{/if}" autocomplete="off" class="layui-input">
  114. <button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
  115. <i class="layui-icon">&#xe615;</i>
  116. </button>
  117. </div>
  118. <!-- 分类id -->
  119. <input type="hidden" name="category_id" value=""/>
  120. </div>
  121. </div>
  122. <!-- 列表 -->
  123. <table id="goods_list" lay-filter="goods_list"></table>
  124. </div>
  125. </div>
  126. {/block}
  127. {block name="script"}
  128. <script type="text/html" id="checkbox">
  129. {{# if('{$promotion}' == "pintuan"){ }}
  130. <div class="layui-hide">{{ d.goods_name = d.pintuan_name }}</div>
  131. {{# } }}
  132. <input type="checkbox" data-goods-id="{{d.goods_id}}" name="goods_checkbox" lay-skin="primary" lay-filter="goods_checkbox">
  133. <input type="hidden" data-goods-id="{{d.goods_id}}" name="goods_json" value='{{ JSON.stringify(d) }}' />
  134. <input type="hidden" data-goods-id="{{d.goods_id}}" name="goods_sku_list_json" value='{{ JSON.stringify(d.sku_list) }}' />
  135. </script>
  136. <!-- 商品信息 -->
  137. <script type="text/html" id="goods_info">
  138. <div class="table-title">
  139. {{# if(mode == "sku"){ }}
  140. <div class="contraction" data-goods-id="{{d.goods_id}}" data-open="0">
  141. <span>+</span>
  142. </div>
  143. {{# } }}
  144. <div class="title-pic" id="goods_img_{{d.goods_id}}">
  145. <img layer-src src="{{ns.img(d.goods_image.split(',')[0], 'small')}}"/>
  146. </div>
  147. <div class="title-content">
  148. <a href="javascript:;" class="multi-line-hiding text-color" title="{{d.goods_name}}">{{d.goods_name}}</a>
  149. {{# if('{$promotion}' != 'pintuan' && '{$promotion}' != 'groupbuy' && '{$promotion}' != 'fenxiao'){ }}
  150. <a href="javascript:;" class="multi-line-hiding text-color" >¥{{d.price}}</a>
  151. {{# } }}
  152. </div>
  153. </div>
  154. </script>
  155. <!-- SKU商品列表 -->
  156. <script type="text/html" id="skuList">
  157. {{# for(var i=0;i<d.list.length;i++){ }}
  158. <tr class="sku-list js-sku-list-{{d.list[i].goods_id}}" id="sku_img_{{d.list[i].goods_id}}">
  159. <td></td>
  160. <td>
  161. <input type="checkbox" data-goods-id="{{d.list[i].goods_id}}" data-sku-id="{{d.list[i].sku_id}}" name="goods_sku_checkbox" lay-skin="primary" lay-filter="goods_sku_checkbox">
  162. <input type="hidden" data-sku-id="{{d.list[i].sku_id}}" value='{{ JSON.stringify(d.list[i]) }}' name="goods_sku_json" />
  163. <div class="table-title">
  164. <div class="title-pic" id="sku_img_{{d.sku_id}}">
  165. <img layer-src src="{{ns.img(d.list[i].sku_image, 'small')}}"/>
  166. </div>
  167. <div class="title-content">
  168. <a href="javascript:;" class="multi-line-hiding text-color" title="{{d.list[i].sku_name}}" lay-event="preview">{{d.list[i].sku_name}}</a>
  169. <a href="javascript:;" class="multi-line-hiding text-color" >¥{{d.list[i].price}}</a>
  170. </div>
  171. </div>
  172. </td>
  173. <td>{{d.list[i].stock}}</td>
  174. <td>{{d.list[i].goods_class_name}}</td>
  175. </tr>
  176. {{# } }}
  177. </script>
  178. <script>
  179. var select_id = localStorage.getItem('goods_select_id') || '', // "{$select_id}", //选中商品id
  180. select_list = [], //选中商品所有数据res
  181. mode = "{$mode}", //商品类型
  182. max_num = "{$max_num}", //最大商品数量
  183. min_num = "{$min_num}", //最小商品数量
  184. disabled = "{$disabled}", //不可选中
  185. goodsCols = [], //数据源
  186. filterData = {promotion_type: '',label_id: '',goods_name:''}, //筛选数据
  187. goodsIdArr = [],
  188. skuIdAll = [],
  189. //------新代码
  190. table, form,laytpl,element,
  191. selected_id_arr = select_id.length ? select_id.split(',') : [], //已选中的商品id
  192. //设置项
  193. setItem = {
  194. mode: "{$mode}", //商品类型
  195. max_num: "{$max_num}", //最大商品数量
  196. min_num: "{$min_num}", //最小商品数量
  197. disabled: "{$disabled}", //不可选中
  198. promotion: "{$promotion}",// 营销标识
  199. };
  200. if(setItem.mode == 'spu'){
  201. goodsIdArr = selected_id_arr;
  202. }else{
  203. skuIdAll = selected_id_arr;
  204. }
  205. //获取表格显示内容
  206. switch(setItem.promotion){
  207. case '':
  208. case 'all':
  209. case 'module':
  210. case 'fenxiao':
  211. case 'bargain':
  212. goodsCols = [
  213. [
  214. {
  215. title:'<input type="checkbox" name="goods_checkbox_all" lay-skin="primary" lay-filter="goods_checkbox_all">',
  216. unresize: 'false',
  217. width: '8%',
  218. templet: '#checkbox',
  219. },
  220. {
  221. title: '商品',
  222. unresize: 'false',
  223. width: '62%',
  224. templet: '#goods_info'
  225. },
  226. {
  227. field: 'goods_stock',
  228. title: '库存',
  229. unresize: 'false',
  230. width: '15%'
  231. },
  232. {
  233. field: 'goods_class_name',
  234. title: '商品类型',
  235. unresize: 'false',
  236. width: '15%'
  237. }
  238. ]
  239. ];
  240. break;
  241. case 'pintuan':
  242. goodsCols = [
  243. [{
  244. title:'<input type="checkbox" name="goods_checkbox_all" lay-skin="primary" lay-filter="goods_checkbox_all">',
  245. unresize: 'false',
  246. width: '8%',
  247. templet: '#checkbox'
  248. }, {
  249. field: 'pintuan_name',
  250. title: '拼团活动',
  251. unresize: 'false',
  252. width: '20%',
  253. },{
  254. title: '拼团商品',
  255. unresize: 'false',
  256. width: '33%',
  257. templet: '#goods_info'
  258. },{
  259. field: 'pintuan_num',
  260. title: '参团人数',
  261. unresize: 'false',
  262. width: '13%'
  263. },{
  264. field: 'group_num',
  265. title: '开团团队',
  266. unresize: 'false',
  267. width: '13%'
  268. },{
  269. field: 'order_num',
  270. title: '购买人数',
  271. unresize: 'false',
  272. width: '13%'
  273. }]
  274. ];
  275. break;
  276. case 'groupbuy':
  277. goodsCols = [
  278. [{
  279. title:'<input type="checkbox" name="goods_checkbox_all" lay-skin="primary" lay-filter="goods_checkbox_all">',
  280. unresize: 'false',
  281. width: '8%',
  282. templet: '#checkbox'
  283. },{
  284. title: '团购商品',
  285. unresize: 'false',
  286. width: '47%',
  287. templet: '#goods_info'
  288. }, {
  289. field: 'price',
  290. title: '商品原价',
  291. unresize: 'false',
  292. width: '15%',
  293. templet: function(data) {
  294. return '¥'+ data.price;
  295. }
  296. }, {
  297. field: 'groupbuy_price',
  298. title: '团购价格',
  299. unresize: 'false',
  300. width: '15%',
  301. templet: function(data) {
  302. return '¥'+ data.groupbuy_price;
  303. }
  304. }, {
  305. field: 'buy_num',
  306. title: '起购量',
  307. unresize: 'false',
  308. width: '15%'
  309. }]
  310. ];
  311. break;
  312. case 'presale':
  313. goodsCols = [
  314. [{
  315. title:'<input type="checkbox" name="goods_checkbox_all" lay-skin="primary" lay-filter="goods_checkbox_all">',
  316. unresize: 'false',
  317. width: '8%',
  318. templet: '#checkbox'
  319. }, {
  320. field: 'presale_name',
  321. title: '活动名称',
  322. unresize: 'false',
  323. width: '20%',
  324. },{
  325. title: '预售商品',
  326. unresize: 'false',
  327. width: '50%',
  328. templet: '#goods_info'
  329. },{
  330. field: 'presale_stock',
  331. title: '库存',
  332. unresize: 'false',
  333. width: '13%'
  334. }]
  335. ];
  336. break;
  337. case 'pinfan':
  338. goodsCols = [
  339. [{
  340. title:'<input type="checkbox" name="goods_checkbox_all" lay-skin="primary" lay-filter="goods_checkbox_all">',
  341. unresize: 'false',
  342. width: '8%',
  343. templet: '#checkbox'
  344. }, {
  345. field: 'pintuan_name',
  346. title: '拼团返利',
  347. unresize: 'false',
  348. width: '20%',
  349. },{
  350. title: '拼团商品',
  351. unresize: 'false',
  352. width: '33%',
  353. templet: '#goods_info'
  354. },{
  355. field: 'pintuan_num',
  356. title: '参团人数',
  357. unresize: 'false',
  358. width: '13%'
  359. },{
  360. field: 'group_num',
  361. title: '开团团队',
  362. unresize: 'false',
  363. width: '13%'
  364. },{
  365. field: 'order_num',
  366. title: '购买人数',
  367. unresize: 'false',
  368. width: '13%'
  369. }]
  370. ];
  371. break;
  372. }
  373. $(function () {
  374. layui.use(['form', 'laytpl', 'element'], function () {
  375. form = layui.form;
  376. laytpl = layui.laytpl;
  377. element = layui.element;
  378. table = new Table({
  379. elem: '#goods_list',
  380. url: '{:addon_url("shop/goods/goodsselect")}',
  381. where: {
  382. is_virtual: "{$is_virtual}",
  383. promotion: setItem.promotion,
  384. goods_class: "{$goods_type}",
  385. usable_goods_class: "{:implode(',', $usable_goods_class)}",
  386. is_weigh:"{$is_weigh}"
  387. },
  388. cols: goodsCols,
  389. callback: function (res) {
  390. if (setItem.mode == "sku") {
  391. //存储这sku的具体id
  392. $("input[name='goods_checkbox'][data-goods-id]").each(function () {
  393. var goods_id = $(this).attr("data-goods-id");
  394. var tr = $(this).parent().parent().parent();
  395. var data = getGoodsSkuData(goods_id);
  396. laytpl(data.sku_list).render(data, function (html) {
  397. tr.after(html);
  398. form.render();
  399. layer.photos({
  400. photos: '.img-wrap',
  401. anim: 5
  402. });
  403. });
  404. });
  405. }
  406. // 更新商品复选框状态
  407. if (setItem.mode == 'spu') {
  408. for (var i = 0; i < goodsIdArr.length; i++) {
  409. var selected_goods = $("input[name='goods_checkbox'][data-goods-id='" + goodsIdArr[i] + "']");
  410. if (selected_goods.length) {
  411. $("input[name='goods_checkbox'][data-goods-id='" + goodsIdArr[i] + "']").prop("checked", true);
  412. var json = {};
  413. json = JSON.parse($("input[name='goods_json'][data-goods-id="+ goodsIdArr[i] +"]").val());
  414. json.selected_sku_list = $("input[name='goods_sku_list_json'][data-goods-id="+ goodsIdArr[i] +"]").val() == "undefined" ? [] : JSON.parse($("input[name='goods_sku_list_json'][data-goods-id="+ goodsIdArr[i] +"]").val());
  415. select_list.push(json);
  416. if (setItem.disabled == 1) {
  417. $("input[name='goods_checkbox'][data-goods-id='" + goodsIdArr[i] + "']").attr("disabled", "disabled");
  418. }
  419. }
  420. }
  421. }
  422. if (setItem.mode == 'sku') {
  423. for (var i = 0; i < skuIdAll.length; i++) {
  424. var selected_goods_sku = $("input[name='goods_sku_checkbox'][data-sku-id='" + skuIdAll[i] + "']");
  425. $("input[name='goods_sku_checkbox'][data-sku-id='" + skuIdAll[i] + "']").prop("checked", true);
  426. if (selected_goods_sku.length) {
  427. $("input[name='goods_checkbox'][data-goods-id='" + selected_goods_sku.attr("data-goods-id") + "']").prop("checked", true);
  428. if (setItem.disabled == 1) {
  429. $("input[name='goods_checkbox'][data-goods-id='" + selected_goods_sku.attr("data-goods-id") + "']").attr("disabled", "disabled");
  430. }
  431. }
  432. }
  433. }
  434. form.render();
  435. initData();
  436. dealWithTableSelectedNum();
  437. }
  438. });
  439. //修改一级分类箭头切换
  440. element.on('collapse(oneCategory)', function (data) {
  441. $(".layui-colla-title").removeClass("active");
  442. if (data.show) {
  443. $(data.title).addClass("active");
  444. }
  445. });
  446. //修改二级分类箭头切换
  447. element.on('collapse(twoCategory)', function (data) {
  448. $(".select-goods-classification .select-goods-classification .layui-colla-title").removeClass("active");
  449. if (data.show) {
  450. $(data.title).addClass("active");
  451. }
  452. });
  453. //搜索商品名称或编码
  454. form.on('submit(search)', function (data) {
  455. formSearch();
  456. });
  457. //搜索类型切换
  458. form.on('select(select_type)', function (data) {
  459. formSearch();
  460. });
  461. //商品标签筛选
  462. form.on('select(label_id)', function (data) {
  463. formSearch();
  464. });
  465. //商品类型筛选
  466. form.on('select(goods_class)', function (data) {
  467. formSearch();
  468. });
  469. //公共搜索方法
  470. function formSearch() {
  471. var data = {};
  472. data.search_text = $("input[name='search_text']").val();
  473. data.select_type = $("select[name='select_type']").val();
  474. data.label_id = $("select[name='label_id']").val();
  475. data.goods_class = $("select[name='goods_class']").val();
  476. data.category_id = $("input[name='category_id']").val();
  477. data.goods_ids = goodsIdArr.toString();
  478. table.reload({
  479. page: {
  480. curr: 1
  481. },
  482. where: data
  483. });
  484. }
  485. // 勾选商品
  486. form.on('checkbox(goods_checkbox_all)', function (data) {
  487. var all_checked = data.elem.checked;
  488. $("input[name='goods_checkbox']").each(function () {
  489. var checked = $(this).prop('checked');
  490. if (all_checked != checked) {
  491. $(this).next().click();
  492. }
  493. });
  494. dealWithTableSelectedNum();
  495. });
  496. // 勾选商品
  497. form.on('checkbox(goods_checkbox)', function (data) {
  498. var goods_id = $(data.elem).attr("data-goods-id"),
  499. json = {};
  500. $("input[name='goods_sku_checkbox'][data-goods-id='" + goods_id + "']").prop("checked", data.elem.checked);
  501. form.render();
  502. var spuLen = $("input[name='goods_checkbox'][data-goods-id=" + goods_id + "]:checked").length;
  503. if (spuLen) {
  504. json = JSON.parse($("input[name='goods_json'][data-goods-id=" + goods_id + "]").val());
  505. json.selected_sku_list = $("input[name='goods_sku_list_json'][data-goods-id=" + goods_id + "]").val() == "undefined" ? [] : JSON.parse($("input[name='goods_sku_list_json'][data-goods-id=" + goods_id + "]").val());
  506. delete json.LAY_INDEX;
  507. delete json.LAY_TABLE_INDEX;
  508. delete json.create_time;
  509. select_list.push(json);
  510. goodsIdArr.push(goods_id);
  511. $.unique(goodsIdArr);
  512. } else {
  513. for (var g = 0; g < select_list.length; g++) {
  514. if (select_list[g].goods_id == goods_id) {
  515. select_list.splice(g, 1);
  516. }
  517. }
  518. goodsIdArr.remove(goods_id);
  519. $.unique(goodsIdArr);
  520. }
  521. var skuLen = $("input[name='goods_sku_checkbox'][data-goods-id=" + goods_id + "]").length;
  522. if (!skuLen) {
  523. skuIdAll = [];
  524. }
  525. for (var i = 0; i < skuLen; i++) {
  526. var skuId = $("input[name='goods_sku_checkbox'][data-goods-id=" + goods_id + "]").eq(i).attr("data-sku-id");
  527. if (spuLen)
  528. skuIdAll.push(skuId);
  529. else {
  530. skuIdAll.remove(skuId);
  531. }
  532. }
  533. dealWithTableSelectedNum();
  534. });
  535. // 勾选商品SKU
  536. form.on('checkbox(goods_sku_checkbox)', function (data) {
  537. var goods_id = $(data.elem).attr("data-goods-id"),
  538. sku_id = $(data.elem).attr("data-sku-id"),
  539. json = {};
  540. if ($("input[name='goods_sku_checkbox'][data-goods-id='" + goods_id + "']:checked").length) {
  541. var skuNoSelect = $("input[name='goods_sku_checkbox'][data-goods-id='" + goods_id + "']:checked").length - 1;
  542. var skuSelect = $("input[name='goods_sku_checkbox'][data-goods-id='" + goods_id + "']").length;
  543. if (skuNoSelect < skuSelect) {
  544. goodsIdArr.push(goods_id);
  545. json = JSON.parse($("input[name='goods_json'][data-goods-id=" + goods_id + "]").val());
  546. delete json.LAY_INDEX;
  547. delete json.LAY_TABLE_INDEX;
  548. delete json.create_time;
  549. json.selected_sku_list = [];
  550. select_list.push(json);
  551. }
  552. $("input[name='goods_checkbox'][data-goods-id='" + goods_id + "']").prop("checked", true);
  553. } else {
  554. $("input[name='goods_checkbox'][data-goods-id='" + goods_id + "']").prop("checked", false);
  555. goodsIdArr.remove(goods_id);
  556. select_list.remove(goods_id);
  557. }
  558. if (!select_list.length) {
  559. skuIdAll = [];
  560. }
  561. for (var i = 0; i < select_list.length; i++) {
  562. if (select_list[i].goods_id == goods_id) {
  563. // var skuLen = $("input[name='goods_sku_checkbox'][data-sku-id="+ sku_id +"]:checked").length;
  564. if (data.elem.checked) {
  565. skuIdAll.push(sku_id);
  566. var skuVal = $("input[name='goods_sku_json'][data-sku-id=" + sku_id + "]").val()
  567. select_list[i].selected_sku_list.push(JSON.parse(skuVal));
  568. } else {
  569. skuIdAll.remove(sku_id);
  570. select_list[i].selected_sku_list.remove(sku_id);
  571. }
  572. break;
  573. }
  574. }
  575. form.render();
  576. });
  577. //初始化数据
  578. function initData() {
  579. var goodsLen = $("input[name='goods_checkbox'][data-goods-id]:checked").length;
  580. //父级
  581. for (var i = 0; i < goodsLen; i++) {
  582. var goodsId = $("input[name='goods_checkbox'][data-goods-id]:checked").eq(i).attr("data-goods-id");
  583. var ident = false;
  584. for (var k = 0; k < select_list.length; k++) {
  585. if (select_list[k].goods_id == goodsId) {
  586. ident = true;
  587. break;
  588. }
  589. }
  590. if (ident) return;
  591. json = JSON.parse($("input[name='goods_json'][data-goods-id=" + goodsId + "]").val());
  592. delete json.LAY_INDEX;
  593. delete json.LAY_TABLE_INDEX;
  594. delete json.create_time;
  595. //子级
  596. var goodsSkuLen = $("input[name='goods_sku_checkbox'][data-goods-id=" + goodsId + "]:checked").length;
  597. json.selected_sku_list = [];
  598. for (var j = 0; j < goodsSkuLen; j++) {
  599. var goodsSkuId = $("input[name='goods_sku_checkbox'][data-goods-id=" + goodsId + "]:checked").eq(j).attr("data-sku-id");
  600. var skuVal = $("input[name='goods_sku_json'][data-sku-id=" + goodsSkuId + "]").val();
  601. json.selected_sku_list.push(JSON.parse(skuVal));
  602. }
  603. select_list.push(json);
  604. }
  605. // 查询其他页的商品
  606. var goods_ids = [];
  607. for (var i = 0; i < goodsIdArr.length; i++) {
  608. var is_not = true;
  609. for (var j = 0; j < select_list.length; j++) {
  610. if (goodsIdArr[i] == select_list[j].goods_id) {
  611. is_not = false;
  612. }
  613. }
  614. if (is_not) goods_ids.push([goodsIdArr[i]]);
  615. }
  616. if (mode == 'spu') {
  617. if (goods_ids.length > 0) {
  618. $.ajax({
  619. url: ns.url("shop/goods/goodsselect"),
  620. data: {goods_ids: goods_ids.toString(), select_type: 'selected'},
  621. dataType: 'JSON',
  622. type: 'POST',
  623. success: function (res) {
  624. var list = res.data.list;
  625. for (var i = 0; i < list.length; i++) select_list.push(list[i]);
  626. }
  627. });
  628. }
  629. }
  630. }
  631. $(".select-goods .select-goods-left dd").hover(function () {
  632. $(this).addClass("active");
  633. }, function () {
  634. $(this).removeClass("active");
  635. });
  636. $("body").on("click", ".select-goods-left .marketing-campaign dd", function () {
  637. $(this).addClass("text-color").siblings().removeClass("text-color");
  638. filterData.promotion_type = $(this).attr("data-type");
  639. table.reload({
  640. page: {
  641. curr: 1
  642. },
  643. where: filterData
  644. });
  645. });
  646. $("body").on("click", ".select-goods-left .commodity-group dd", function () {
  647. $(this).addClass("text-color").siblings().removeClass("text-color");
  648. filterData.label_id = $(this).attr("data-group-id");
  649. table.reload({
  650. page: {
  651. curr: 1
  652. },
  653. where: filterData
  654. });
  655. });
  656. $("body").on("click", ".select-goods-left dl", function () {
  657. if ($(this).hasClass("fold")) {
  658. $(this).removeClass("fold");
  659. } else {
  660. $(this).addClass("fold");
  661. }
  662. });
  663. $("body").on("click", ".select-goods-left dd", function (event) {
  664. $(this).parents("dl").removeClass("fold");
  665. $(this).parents("dl").siblings().addClass("fold");
  666. event.stopPropagation();
  667. });
  668. //分类切换
  669. $("body").on("click", ".classification-item", function (event) {
  670. var categoryId = $(this).attr("data-category_id");
  671. $(".classification-item").removeClass("text-color border-after-color");
  672. $(this).addClass("text-color border-after-color");
  673. $("input[name='category_id']").val(categoryId);
  674. formSearch();
  675. event.stopPropagation();
  676. });
  677. });
  678. //商品信息展开
  679. $("body").on("click", ".contraction", function () {
  680. var goods_id = $(this).attr("data-goods-id");
  681. var open = $(this).attr("data-open");
  682. if (open == 1) {
  683. $(this).children("span").text("+");
  684. $(".js-sku-list-" + goods_id).hide();
  685. } else {
  686. $(this).children("span").text("-");
  687. $(".js-sku-list-" + goods_id).show();
  688. }
  689. $(this).attr("data-open", (open == 0 ? 1 : 0));
  690. });
  691. });
  692. function getGoodsSkuData(goods_id) {
  693. var list = JSON.parse($("input[name='goods_sku_list_json'][data-goods-id='" + goods_id + "']").val().toString());
  694. var sku_list = $("#skuList").html();
  695. var checked = $("input[name='goods_checkbox'][data-goods-id='" + goods_id + "']:checked").length ? true : false;
  696. var data = {
  697. checked : checked,
  698. sku_list : sku_list,
  699. list: list
  700. };
  701. return data;
  702. }
  703. function selectGoods(callback) {
  704. var res = select_list;
  705. var num = 0;
  706. if (mode == "spu") {
  707. num = goodsIdArr.length;
  708. if (setItem.promotion){
  709. res = goodsIdArr;
  710. }
  711. } else if (mode == "sku") {
  712. num = skuIdAll.length;
  713. if (setItem.promotion){
  714. res = skuIdAll;
  715. }
  716. }
  717. if(num == 0) {
  718. layer.msg('请选择商品');
  719. return;
  720. }
  721. if (max_num && max_num > 0 && num > max_num) {
  722. layer.msg("所选商品数量不能超过" + max_num + '件');
  723. return;
  724. }
  725. if (min_num && min_num > 0 && num < min_num) {
  726. layer.msg("所选商品数量最少不能少于" + min_num + '件');
  727. return;
  728. }
  729. callback(res);
  730. }
  731. Array.prototype.indexOf = function(val) {
  732. for (var i = 0; i < this.length; i++) {
  733. if (this[i].goods_id && !this[i].sku_id){
  734. if (this[i].goods_id == parseInt(val)) return i;
  735. }
  736. else if(this[i].sku_id){
  737. if (this[i].sku_id == parseInt(val)) return i;
  738. }
  739. else{
  740. if (this[i] == val) return i;
  741. }
  742. }
  743. return -1;
  744. };
  745. Array.prototype.remove = function(val) {
  746. var index = this.indexOf(val);
  747. if (index > -1) {
  748. this.splice(index, 1);
  749. }
  750. };
  751. select_list.__proto__ = Array.prototype;
  752. function removeDuplicates(arr){
  753. if (!Array.isArray(arr)) {
  754. console.log('type error!');
  755. return
  756. }
  757. var array = [];
  758. for (var i = 0; i < arr.length; i++) {
  759. if (array.indexOf(arr[i]) === -1) {
  760. array.push(arr[i])
  761. }
  762. }
  763. return array;
  764. }
  765. //在表格底部增加了一个容器
  766. function dealWithTableSelectedNum() {
  767. if(setItem.mode == 'spu'){
  768. $(".layui-table-bottom-left-container").html('已选择 '+ goodsIdArr.length +' 个商品');
  769. }else{
  770. $(".layui-table-bottom-left-container").html('已选择 '+ skuIdAll.length +' 个商品');
  771. }
  772. }
  773. </script>
  774. {/block}