add.html 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. {extend name="app/shop/view/base.html"/}
  2. {block name="resources"}
  3. <style type="text/css">
  4. .goods_num {padding-left: 20px;}
  5. </style>
  6. {/block}
  7. {block name="main"}
  8. <div class="layui-form form-wrap">
  9. <div class="layui-form-item">
  10. <label class="layui-form-label"><span class="required">*</span>活动名称:</label>
  11. <div class="layui-input-block">
  12. <input type="text" name="name" lay-verify="required|len" class="layui-input len-long" autocomplete="off" maxlength="40">
  13. </div>
  14. <div class="word-aux">
  15. <p>活动名称最多为25个字符</p>
  16. </div>
  17. </div>
  18. <div class="layui-form-item">
  19. <label class="layui-form-label"><span class="required">*</span>开始时间:</label>
  20. <div class="layui-input-block len-mid">
  21. <input type="text" class="layui-input" name="start_time" lay-verify="required" id="start_time" autocomplete="off" readonly>
  22. <i class=" iconrili iconfont calendar"></i>
  23. </div>
  24. </div>
  25. <div class="layui-form-item">
  26. <label class="layui-form-label"><span class="required">*</span>结束时间:</label>
  27. <div class="layui-input-block len-mid end_time">
  28. <input type="text" class="layui-input" name="end_time" lay-verify="required|time" id="end_time" autocomplete="off" readonly>
  29. <i class=" iconrili iconfont calendar"></i>
  30. </div>
  31. <div class="word-aux">
  32. <p>结束时间不能小于开始时间,也不能小于当前时间</p>
  33. </div>
  34. </div>
  35. <div class="layui-form-item">
  36. <label class="layui-form-label"><span class="required">*</span>活动商品:</label>
  37. <div class="layui-input-block">
  38. <table id="selected_goods_list"></table>
  39. <button class="layui-btn" onclick="addGoods()">选择商品</button>
  40. <span class="goods_num">已选商品(<span id="goods_num" class="text-color">0</span>)</span>
  41. <input type="hidden" name="sku_ids" lay-verify="goods_ids">
  42. </div>
  43. </div>
  44. <div class="layui-form-item">
  45. <label class="layui-form-label"><span class="required">*</span>活动规则:</label>
  46. <div class="layui-input-block">
  47. <div class="layui-input-inline len-short">
  48. <input type="number" name="price" value="" placeholder="" autocomplete="off" class="layui-input len-short" lay-verify="price">
  49. </div>
  50. <div class="layui-form-mid">元 任选</div>
  51. <div class="layui-input-inline len-short">
  52. <input type="number" name="num" value="" placeholder="" autocomplete="off" class="layui-input len-short" lay-verify="num">
  53. </div>
  54. <div class="layui-form-mid">件</div>
  55. </div>
  56. </div>
  57. <div class="layui-form-item">
  58. <label class="layui-form-label">运费承担:</label>
  59. <div class="layui-input-block">
  60. <input type="radio" name="shipping_fee_type" value="0" title="卖家承担运费" checked>
  61. <input type="radio" name="shipping_fee_type" value="1" title="买家承担运费(快递)">
  62. </div>
  63. </div>
  64. <div class="form-row">
  65. <button class="layui-btn" lay-submit lay-filter="save">提交</button>
  66. <button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
  67. </div>
  68. </div>
  69. {/block}
  70. {block name="script"}
  71. <script type="text/javascript">
  72. var sku_list = [], selectedGoodsId = [], sku_id = [], form, laydate, currentDate = new Date(), minDate = "", repeat_flag = false;
  73. layui.use(['form', 'laydate', 'laytpl'], function() {
  74. form = layui.form,
  75. laydate = layui.laydate;
  76. form.render();
  77. currentDate.setDate(currentDate.getDate() + 30); //当前时间+30之后的时间戳
  78. // 开始时间
  79. laydate.render({
  80. elem: '#start_time' ,//指定元素
  81. type: 'datetime',
  82. value: new Date(),
  83. done: function(value){
  84. minDate = value;
  85. reRender();
  86. }
  87. });
  88. //结束时间
  89. laydate.render({
  90. elem: '#end_time' ,//指定元素
  91. type: 'datetime',
  92. value: new Date(currentDate)
  93. });
  94. /**
  95. * 重新渲染结束时间
  96. * */
  97. function reRender(){
  98. $("#end_time").remove();
  99. $(".end_time").html('<input type="text" id="end_time" name="end_time" placeholder="请输入结束时间" lay-verify="required|time" class="layui-input len-mid" autocomplete="off">');
  100. laydate.render({
  101. elem: '#end_time',
  102. type: 'datetime',
  103. min: minDate
  104. });
  105. }
  106. renderTable(sku_list); // 初始化表格
  107. /**
  108. * 表单验证
  109. */
  110. form.verify({
  111. len: function(value) {
  112. if (value.length > 25) {
  113. return "活动名称最多为25个字符!";
  114. }
  115. },
  116. time: function(value) {
  117. var now_time = (new Date()).getTime();
  118. var start_time = (new Date($("#start_time").val())).getTime();
  119. var end_time = (new Date(value)).getTime();
  120. if (now_time > end_time) {
  121. return '结束时间不能小于当前时间!'
  122. }
  123. if (start_time > end_time) {
  124. return '结束时间不能小于开始时间!';
  125. }
  126. },
  127. goods_ids: function(value){
  128. if (!/[\S]+/.test(value)) {
  129. return '请选择活动商品';
  130. }
  131. },
  132. num: function(value) {
  133. if (!/[\S]+/.test(value)) {
  134. return '请输入商品件数';
  135. }
  136. if (value <= 0) {
  137. return '商品件数不能小于等于0!';
  138. }
  139. },
  140. price: function(value) {
  141. if (!/[\S]+/.test(value)) {
  142. return '请输入活动金额';
  143. }
  144. if (value <= 0) {
  145. return '活动金额不能小于等于0!';
  146. }
  147. }
  148. });
  149. /**
  150. * 监听提交
  151. */
  152. form.on('submit(save)', function(data) {
  153. if (repeat_flag) return;
  154. repeat_flag = true;
  155. data.field.goods_ids = [];
  156. sku_list.forEach(function(item){
  157. if (jQuery.inArray(item.goods_id, data.field.goods_ids) == -1) {
  158. data.field.goods_ids.push(item.goods_id)
  159. }
  160. });
  161. data.field.goods_ids = data.field.goods_ids.toString();
  162. $.ajax({
  163. type: 'POST',
  164. url: ns.url("bale://shop/bale/add"),
  165. data: data.field,
  166. dataType: 'JSON',
  167. success: function (res) {
  168. repeat_flag = false;
  169. if (res.code == 0) {
  170. layer.confirm('添加成功', {
  171. title:'操作提示',
  172. btn: ['返回列表', '继续添加'],
  173. closeBtn: 0,
  174. yes: function(){
  175. location.href = ns.url("bale://shop/bale/lists")
  176. },
  177. btn2: function() {
  178. location.href = ns.url("bale://shop/bale/add")
  179. }
  180. });
  181. } else {
  182. layer.msg(res.message);
  183. }
  184. }
  185. });
  186. });
  187. });
  188. /**
  189. * 添加商品
  190. */
  191. function addGoods(){
  192. goodsSelect(function (res) {
  193. if (!res.length) return false;
  194. sku_id = [];
  195. sku_list = [];
  196. for(var i=0;i<res.length;i++) {
  197. for (var k = 0; k < res[i].selected_sku_list.length; k++) {
  198. var item = res[i].selected_sku_list[k];
  199. sku_id.push(item.sku_id);
  200. sku_list.push(item);
  201. }
  202. }
  203. renderTable(sku_list);
  204. $("input[name='sku_ids']").val(sku_id.toString());
  205. selectedGoodsId = sku_id;
  206. $("#goods_num").html(sku_list.length)
  207. }, selectedGoodsId, {mode: "sku", is_virtual: 0});
  208. sku_list.splice(0,sku_list.length);
  209. }
  210. function delRow(obj,id) {
  211. for (var i = 0; i < sku_list.length; i++){
  212. if (sku_list[i].sku_id == parseInt(id)){
  213. sku_list.splice(i,1);
  214. }
  215. }
  216. $("#goods_num").html(sku_list.length);
  217. //删除选中的id
  218. selectedGoodsId.splice(selectedGoodsId.indexOf(id),1);
  219. $("input[name='sku_ids']").val(selectedGoodsId.toString());
  220. $(obj).parents("tr").remove();
  221. }
  222. function back() {
  223. location.href = ns.url("bale://shop/bale/lists");
  224. }
  225. function renderTable(sku_list) {
  226. //展示已知数据
  227. table = new Table({
  228. elem: '#selected_goods_list',
  229. cols: [
  230. [{
  231. field: 'sku_name',
  232. title: '商品名称',
  233. unresize: 'false',
  234. width: '50%'
  235. }, {
  236. field: 'price',
  237. title: '商品价格(元)',
  238. unresize: 'false',
  239. align: 'right',
  240. width: '20%',
  241. templet: function(data) {
  242. return '¥' + data.price;
  243. }
  244. }, {
  245. field: 'stock',
  246. title: '库存',
  247. unresize: 'false',
  248. align: 'center',
  249. width: '20%'
  250. }, {
  251. title: '操作',
  252. toolbar: '#operation',
  253. unresize: 'false',
  254. align:'right'
  255. }],
  256. ],
  257. data: sku_list,
  258. });
  259. }
  260. </script>
  261. <script type="text/html" id="operation">
  262. <div class="table-btn">
  263. <a class="layui-btn" onclick="delRow(this,{{d.sku_id}})">删除</a>
  264. </div>
  265. </script>
  266. {/block}