manage.html 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. {extend name="app/shop/view/base.html"/}
  2. {block name="resources"}
  3. <style>
  4. .shop-account {
  5. display: flex;
  6. align-items: center;
  7. position: relative;
  8. padding: 15px;
  9. box-sizing: border-box;
  10. }
  11. .shop-detail p {
  12. display: inline-block;
  13. width: 300px;
  14. line-height: 30px;
  15. }
  16. .shop-account>a {
  17. position: absolute;
  18. right: 15px;
  19. bottom: 15px;
  20. cursor: pointer;
  21. }
  22. </style>
  23. {/block}
  24. {block name="main"}
  25. <!-- 搜索框 -->
  26. <div class="single-filter-box">
  27. <button class="layui-btn" onclick="addGoods()" data-num="{$discount_info.discount_id}">添加商品</button>
  28. </div>
  29. <!-- 列表 -->
  30. <table id="good_list" lay-filter="good_list"></table>
  31. <input type="hidden" value="{$discount_info.discount_id}" name="discount_id" id="discount_id" />
  32. <!-- 操作 -->
  33. <script type="text/html" id="operation">
  34. <div class="table-btn">
  35. <a class="layui-btn" lay-event="delete">删除商品</a>
  36. </div>
  37. </script>
  38. <!-- 商品 -->
  39. <script type="text/html" id="goodIntro">
  40. <div class="table-title">
  41. <div class="title-pic">
  42. <img layer-src src="{{ns.img(d.sku_image.split(',')[0],'small')}}" />
  43. </div>
  44. <div class="title-content">
  45. <a href="javascript:;" class="multi-line-hiding text-color">{{ d.sku_name }}</a>
  46. </div>
  47. </div>
  48. </script>
  49. <!-- 编辑价格 -->
  50. <script type="text/html" id="editSort">
  51. <input name="sort" type="number" onchange="editSort({{d.sku_id}}, this)" value="{{d.discount_price}}" autocomplete="off" placeholder="请输入价格" class="layui-input edit-sort len-short">
  52. </script>
  53. {/block}
  54. {block name="script"}
  55. <script>
  56. var form, table, laytpl, selectedGoodsSkuId = [], repeat_flag = false, //防重复标识
  57. discount_id = $("#discount_id").val();
  58. layui.use(['form', 'laytpl'], function() {
  59. form = layui.form;
  60. laytpl = layui.laytpl;
  61. form.render();
  62. table = new Table({
  63. elem: '#good_list',
  64. url: '{:addon_url("discount://shop/discount/manage")}',
  65. async : false,
  66. where: {discount_id},
  67. parseData: function(res) {
  68. for (var i in res.data.list) {
  69. selectedGoodsSkuId.push(res.data.list[i].sku_id);
  70. }
  71. removeDuplicates(selectedGoodsSkuId);
  72. return {
  73. "code": res.code,
  74. "msg": res.message,
  75. "count": res.data.count,
  76. "data": res.data.list
  77. };
  78. },
  79. cols: [
  80. [{
  81. type: 'checkbox',
  82. unresize: 'false',
  83. width: '3%'
  84. }, {
  85. title: '商品',
  86. unresize: 'false',
  87. width: '38%',
  88. templet: '#goodIntro'
  89. }, {
  90. field: 'price',
  91. title: '商品价格',
  92. unresize: 'false',
  93. width: '14%',
  94. align: 'right',
  95. templet: function(data) {
  96. return '¥<span class="goods-price">'+ data.price +'</span>';
  97. }
  98. }, {
  99. title: '折扣价格(可编辑)',
  100. unresize: 'false',
  101. width: '18%',
  102. align: 'center',
  103. templet: '#editSort'
  104. }, {
  105. field: 'discount_rate',
  106. title: '折扣率(%)',
  107. unresize: 'false',
  108. width: '14%'
  109. }, {
  110. title: '操作',
  111. toolbar: '#operation',
  112. align: 'right',
  113. unresize: 'false',
  114. }]
  115. ]
  116. });
  117. /**
  118. * 监听工具栏操作
  119. */
  120. table.tool(function(obj) {
  121. var data = obj.data;
  122. switch (obj.event) {
  123. case 'delete': //删除
  124. delMember(data.sku_id);
  125. break;
  126. }
  127. });
  128. /**
  129. * 删除
  130. */
  131. function delMember(sku_id) {
  132. if (repeat_flag) return false;
  133. repeat_flag = true;
  134. layer.confirm('确定要删除该商品吗?', function() {
  135. $.ajax({
  136. url: '{:addon_url("discount://shop/discount/deleteGoods")}',
  137. data: {sku_id,discount_id},
  138. dataType: 'JSON',
  139. type: 'POST',
  140. success: function(res) {
  141. layer.msg(res.message);
  142. repeat_flag = false;
  143. if (res.code == 0) {
  144. for (var i in selectedGoodsSkuId){
  145. if(selectedGoodsSkuId[i] == sku_id){
  146. selectedGoodsSkuId.splice(i,1);
  147. }
  148. }
  149. table.reload();
  150. }
  151. }
  152. });
  153. }, function() {
  154. repeat_flag = false;
  155. });
  156. }
  157. });
  158. // 监听单元格编辑
  159. function editSort(sku_id, event){
  160. var data = $(event).val();
  161. if(data <= 0){
  162. layer.msg("折扣价格必须大于0");
  163. $(event).val(1);
  164. return;
  165. }
  166. var goods_price = $(event).parents("tr").find(".goods-price").text();
  167. if (data > Number(goods_price)) {
  168. layer.msg("折扣价格不能大于商品价格");
  169. $(event).val(Number(goods_price));
  170. return;
  171. }
  172. $.ajax({
  173. type: 'POST',
  174. dataType: 'JSON',
  175. url: ns.url("discount://shop/discount/updateGoods"),
  176. data: {
  177. sku_id,
  178. discount_id,
  179. "discount_price": data
  180. },
  181. success: function(res) {
  182. layer.msg(res.message);
  183. table.reload();
  184. }
  185. });
  186. }
  187. /**
  188. * 添加商品
  189. */
  190. function addGoods () {
  191. goodsSelect(function (res) {
  192. if (!res.length) return false;
  193. var sku_ids = [];
  194. for (var i = 0; i < res.length; i++) {
  195. for (var k = 0; k < res[i].selected_sku_list.length; k++) {
  196. sku_ids.push(res[i].selected_sku_list[k].sku_id);
  197. }
  198. }
  199. $.ajax({
  200. type: 'POST',
  201. async: false,
  202. url: '{:addon_url("discount://shop/discount/addGoods")}',
  203. data: {
  204. 'sku_ids': sku_ids.toString(),
  205. discount_id
  206. },
  207. dataType: 'JSON',
  208. success: function (res) {
  209. layer.msg(res.message);
  210. table.reload();
  211. }
  212. });
  213. }, selectedGoodsSkuId, {mode: "sku", disabled: 1});
  214. }
  215. function removeDuplicates(arr){
  216. if (!Array.isArray(arr)) {
  217. console.log('type error!');
  218. return
  219. }
  220. var array = [];
  221. for (var i = 0; i < arr.length; i++) {
  222. if (array.indexOf(arr[i]) === -1) {
  223. array.push(arr[i])
  224. }
  225. }
  226. return array;
  227. }
  228. </script>
  229. {/block}