edit.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. {extend name="app/shop/view/base.html"/}
  2. {block name="resources"}
  3. <style>
  4. .forbidden{cursor:not-allowed;background-color: #eee;}
  5. .layui-table-body{max-height: 480px !important;}
  6. .layui-form-item .layui-input-inline.end-time{float: none;}
  7. .goods-title{display: flex;align-items: center;}
  8. .goods-title .goods-img{display: flex;align-items: center;justify-content: center;width: 55px;height: 55px;margin-right: 5px;}
  9. .goods-title .goods-img img{max-height: 100%;max-width: 100%;}
  10. .goods-title .goods-name{flex: 1;line-height: 1.6;}
  11. </style>
  12. {/block}
  13. {block name="main"}
  14. <div class="layui-form form-wrap">
  15. <div class="layui-form-item">
  16. <label class="layui-form-label"><span class="required">*</span>活动名称:</label>
  17. <div class="layui-input-block">
  18. <input type="text" name="discount_name" value="{$discount_info.discount_name}" autocomplete="off" class="layui-input len-long" maxlength="40">
  19. </div>
  20. <div class="word-aux">
  21. <p>活动名称将显示在限时折扣活动列表中,方便商家管理使用</p>
  22. </div>
  23. </div>
  24. <div class="layui-form-item layui-form-text">
  25. <label class="layui-form-label">备注:</label>
  26. <div class="layui-input-block">
  27. <textarea name="remark" class="layui-textarea len-long" maxlength="150">{$discount_info.remark}</textarea>
  28. </div>
  29. <div class="word-aux">
  30. <p>备注是商家对限时折扣活动的补充说明文字,在商品详情页-优惠信息位置显示;非必填选项</p>
  31. </div>
  32. </div>
  33. <div class="layui-form-item">
  34. <label class="layui-form-label"><span class="required">*</span>活动时间:</label>
  35. <div class="layui-inline">
  36. <div class="layui-input-inline len-mid">
  37. <input type="text" id="start_time" name="start_time" value="{:date('Y-m-d H:i:s', $discount_info.start_time)}" lay-verify="required" autocomplete="off" class="layui-input">
  38. <i class=" iconrili iconfont calendar"></i>
  39. </div>
  40. <span class="layui-form-mid">-</span>
  41. <div class="layui-input-inline len-mid end-time">
  42. <input type="text" id="end_time" lay-verify="required|time" name="end_time" value="{:date('Y-m-d H:i:s', $discount_info.end_time)}" autocomplete="off" class="layui-input">
  43. <i class=" iconrili iconfont calendar"></i>
  44. </div>
  45. </div>
  46. </div>
  47. <div class="layui-form-item goods_list">
  48. <label class="layui-form-label"><span class="required">*</span>商品选择:</label>
  49. <div class="layui-input-block">
  50. <table id="selected_goods_list" lay-filter="selected_goods_list"></table>
  51. </div>
  52. </div>
  53. <div class="form-row">
  54. <button class="layui-btn" lay-submit lay-filter="save">保存</button>
  55. <button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
  56. </div>
  57. <!-- 操作 -->
  58. <script type="text/html" id="operation">
  59. <div class="table-btn">
  60. {{# if (d.is_select == 1){ }}
  61. <a class="layui-btn no-participation">不参与</a>
  62. {{# }else{ }}
  63. <a class="layui-btn participation">参与</a>
  64. {{# } }}
  65. </div>
  66. </script>
  67. <input type="hidden" name="discount_id" value="{$discount_info.discount_id}" />
  68. <input type="hidden" name="goods_id" value="{$discount_info.goods_id}" />
  69. </div>
  70. <!-- 操作 -->
  71. <script type="text/html" id="operation">
  72. <div class="table-btn">
  73. <a class="layui-btn" onclick="delGoods(this,{{d.sku_id}})">删除</a>
  74. </div>
  75. </script>
  76. <script type="text/html" id="discountPrice">
  77. {{# if (d.is_select == 1){ }}
  78. <input type="number" class="layui-input len-input discount_price" onchange="setGoodsSku('discount_price', {{d.sku_id}}, this)" value="{{d.discount_price}}" lay-verify="discount_price" min="0.00"/>
  79. {{# }else{ }}
  80. <input type="number" class="layui-input len-input forbidden discount_price" readonly value="{{d.discount_price}}" lay-verify="discount_price" min="0.00"/>
  81. {{# } }}
  82. </script>
  83. {/block}
  84. {block name="script"}
  85. <script type="text/html" id="toolbarOperation">
  86. <button class="layui-btn layui-btn-primary" lay-event="discount-price">折扣价</button>
  87. </script>
  88. <script>
  89. var goods_id = [], selectedGoodsId = [], sku_list = {:json_encode($discount_info.goods_sku, JSON_UNESCAPED_UNICODE)}
  90. ,info = {:json_encode($discount_info, JSON_UNESCAPED_UNICODE)};
  91. layui.use(['form', 'laydate'], function() {
  92. var form = layui.form,
  93. laydate = layui.laydate,
  94. repeat_flag = false; //防重复标识
  95. form.render();
  96. renderTable(sku_list);
  97. // 时间模块
  98. if (info.status == 0){
  99. laydate.render({
  100. elem: '#start_time', //指定元素
  101. type: 'datetime'
  102. });
  103. }
  104. laydate.render({
  105. elem: '#end_time', //指定元素
  106. type: 'datetime'
  107. });
  108. /**
  109. * 监听提交
  110. */
  111. form.on('submit(save)', function(data) {
  112. var goods_list = [];
  113. var cancel_goods_list = [];
  114. for (var i in sku_list){
  115. if(sku_list[i]['is_select'] == 1){
  116. goods_list.push(sku_list[i]);
  117. }else{
  118. cancel_goods_list.push(sku_list[i]);
  119. }
  120. }
  121. //活动开始中时间限制
  122. if (info.status == 1){
  123. if ((Date.parse(data.field.start_time)/1000) != info.start_time){
  124. layer.msg('活动进行中禁止修改开始时间', {icon: 5, anim: 6});
  125. return false;
  126. }
  127. if ((Date.parse(data.field.end_time)/1000) < info.end_time){
  128. layer.msg('活动进行中只能延长结束时间,不能缩短时间', {icon: 5, anim: 6});
  129. return false;
  130. }
  131. }
  132. if(goods_list.length == 0){
  133. layer.msg('请选择商品', {icon: 5, anim: 6});
  134. return false;
  135. }
  136. data.field.sku_list = goods_list;
  137. data.field.cancel_sku_list = cancel_goods_list;
  138. if (repeat_flag) return;
  139. repeat_flag = true;
  140. $.ajax({
  141. url: ns.url("discount://shop/discount/edit"),
  142. data: data.field,
  143. dataType: 'JSON',
  144. type: 'POST',
  145. success: function(res) {
  146. repeat_flag = false;
  147. if (res.code == 0) {
  148. layer.confirm('编辑成功', {
  149. title: '操作提示',
  150. btn: ['返回列表', '继续操作'],
  151. yes: function() {
  152. location.href = ns.url("discount://shop/discount/lists")
  153. },
  154. btn2: function() {
  155. location.reload();
  156. }
  157. });
  158. } else {
  159. layer.msg(res.message);
  160. }
  161. }
  162. });
  163. });
  164. /**
  165. * 表单验证
  166. */
  167. form.verify({
  168. time: function(value) {
  169. var now_time = (new Date()).getTime();
  170. var start_time = (new Date($("#start_time").val())).getTime();
  171. var end_time = (new Date(value)).getTime();
  172. if (now_time > end_time) {
  173. return '结束时间不能小于当前时间!'
  174. }
  175. if (start_time > end_time) {
  176. return '结束时间不能小于开始时间!';
  177. }
  178. },
  179. });
  180. });
  181. function setSelect(status,id) {
  182. for (var i = 0; i < sku_list.length; i++){
  183. if (sku_list[i].sku_id == parseInt(id)){
  184. sku_list[i]['is_select'] = status;
  185. }
  186. }
  187. renderTable(sku_list);
  188. return false;
  189. }
  190. // 表格渲染
  191. function renderTable(sku_list) {
  192. //展示已知数据
  193. table = new Table({
  194. elem: '#selected_goods_list',
  195. page: false,
  196. limit: Number.MAX_VALUE,
  197. cols: [
  198. [{
  199. width: "3%",
  200. type: 'checkbox',
  201. unresize: 'false'
  202. },{
  203. field: 'sku_name',
  204. title: '商品名称',
  205. width: '23%',
  206. unresize: 'false',
  207. templet: function(data) {
  208. var html = '';
  209. html += `
  210. <div class="goods-title">
  211. <div class="goods-img">
  212. <img layer-src src="${data.sku_image ? ns.img(data.sku_image) : ''}" alt="">
  213. </div>
  214. <p class="multi-line-hiding goods-name" data-goods_id="${data.goods_id}" data-sku_id="${data.sku_id}" title="${data.sku_name}">${data.sku_name}</p>
  215. </div>
  216. `;
  217. return html;
  218. }
  219. }, {
  220. field: 'price',
  221. title: '商品价格',
  222. unresize: 'false',
  223. align: 'left',
  224. width: '15%',
  225. templet: function(data) {
  226. return '<p class="line-hiding" title="'+ data.price +'">¥<span>' + data.price +'</span></p>';
  227. }
  228. }, {
  229. field: 'stock',
  230. title: '库存',
  231. unresize: 'false',
  232. width: '10%',
  233. templet: function(data) {
  234. return '<p class="stock">' + data.stock +'</p>';
  235. }
  236. }, {
  237. title: '<span title="折扣价">折扣价</span>',
  238. unresize: 'false',
  239. width: '13%',
  240. templet: '#discountPrice'
  241. }, {
  242. title: '是否参与活动',
  243. toolbar: '#operation',
  244. width: '10%',
  245. unresize: 'false'
  246. }]
  247. ],
  248. data: sku_list,
  249. toolbar: '#toolbarOperation'
  250. });
  251. /**
  252. * 批量操作
  253. */
  254. table.toolbar(function(obj) {
  255. if (obj.data.length < 1) {
  256. layer.msg('请选择要操作的数据');
  257. return;
  258. }
  259. switch (obj.event) {
  260. case "discount-price":
  261. editInput(0,obj);
  262. break;
  263. }
  264. });
  265. return false;
  266. }
  267. function editInput(textIndex=0,data) {
  268. var text = [{
  269. name: '折扣价',
  270. value: 'discount_price'
  271. }];
  272. layer.open({
  273. type: 1,
  274. title:"修改"+text[textIndex].name,
  275. area:['600px'],
  276. btn:["保存","返回"],
  277. content: `
  278. <div class="layui-form-item">
  279. <label class="layui-form-label"><span class="required">*</span>${text[textIndex].name}:</label>
  280. <div class="layui-input-block">
  281. <input type="text" name="bargain_edit_input" lay-verify="required" autocomplete="off" class="layui-input len-mid" placeholder="请输入${text[textIndex].name}">
  282. </div>
  283. </div>
  284. `,
  285. yes: function(index, layero){
  286. var val = $("input[name='bargain_edit_input']").val();
  287. if (!val){
  288. layer.msg("请输入" + text[textIndex].name);
  289. return false;
  290. }
  291. data.data.forEach(function (item,index) {
  292. sku_list.forEach(function (skuItem,skuIndex) {
  293. if (item.sku_id == skuItem.sku_id){
  294. sku_list[skuIndex][text[textIndex].value] = val;
  295. }
  296. })
  297. });
  298. renderTable(sku_list);
  299. layer.closeAll();
  300. }
  301. });
  302. }
  303. function setGoodsSku(type, sku_id, obj){
  304. $.each(sku_list, function (i, e) {
  305. if(sku_id == e.sku_id){
  306. if(sku_list[i]['price']<$(obj).val()){
  307. $(obj).val(sku_list[i]['price']);
  308. return layer.msg('折扣价格不能大于商品价格');
  309. }else if($(obj).val()<0){
  310. $(obj).val(sku_list[i]['price']);
  311. return layer.msg('折扣价格不能小于0');
  312. }else{
  313. sku_list[i][type] = $(obj).val();
  314. }
  315. }
  316. })
  317. }
  318. $("body").on("click",".no-participation",function(){
  319. $(this).text("参与");
  320. $(this).parents("tr").find("input").each(function (index,item) {
  321. $(item).attr("readonly",true);
  322. $(item).attr("disabled",true);
  323. $(item).addClass("forbidden");
  324. $(item).attr("lay-verify","");
  325. });
  326. $(this).addClass("participation").removeClass("no-participation");
  327. sku_list[$(this).parents("tr").attr("data-index")].is_select = 0;
  328. });
  329. $("body").on("click",".participation",function(){
  330. $(this).text("不参与");
  331. $(this).parents("tr").find("input").each(function (index,item) {
  332. $(item).attr("readonly",false);
  333. $(item).attr("disabled",false);
  334. $(item).removeClass("forbidden");
  335. });
  336. $(this).removeClass("participation").addClass("no-participation");
  337. sku_list[$(this).parents("tr").attr("data-index")].is_select = 1;
  338. });
  339. function back() {
  340. location.href = ns.url("discount://shop/discount/lists");
  341. }
  342. </script>
  343. {/block}