index.html 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. {extend name="app/shop/view/base.html"/}
  2. {block name="resources"}
  3. <style>
  4. .width-wrap {width: 115px;}
  5. .layui-block {overflow: hidden; margin-bottom: 20px;}
  6. .layui-table+button {margin-top: 15px;}
  7. .empty-wrap {text-align: center;}
  8. .layui-table[lay-size=lg] td, .layui-table[lay-size=lg] th {
  9. padding: 15px;
  10. }
  11. </style>
  12. {/block}
  13. {block name="main"}
  14. <div class="layui-form form-wrap signin">
  15. <div class="layui-form-item">
  16. <label class="layui-form-label">是否启用:</label>
  17. <div class="layui-input-block">
  18. <input type="checkbox" name="is_use" lay-filter="is_use" value="1" lay-skin="switch" {if !empty($config) && $config.is_use==1 }checked{/if}>
  19. </div>
  20. </div>
  21. <div class="reward-wrap {if !empty($config) && $config.is_use!=1 }layui-hide{/if}">
  22. <div class="layui-form-item">
  23. <label class="layui-form-label"><span class="required">*</span>签到周期:</label>
  24. <div class="layui-input-block">
  25. <div class="layui-input-inline">
  26. <input type="number" name="cycle" lay-verify="required|number|int|cycle" value="{$config['value']['cycle'] ?: 30}" autocomplete="off" class="layui-input len-short"><input type="hidden" value="签到周期" />
  27. </div>
  28. <div class="layui-form-mid">天</div>
  29. </div>
  30. <div class="word-aux">
  31. <p>签到周期需在7-100天内</p>
  32. </div>
  33. </div>
  34. <div class="layui-form-item">
  35. <div class="layui-block">
  36. <label class="layui-form-label"><span class="required">*</span>每日签到:</label>
  37. <label class="layui-form-mid width-wrap">每日签到赠送奖励</label>
  38. <div class="layui-input-inline len-short">
  39. <input type="number" name="point" lay-verify="everyday|number|int" value="{$config['value']['reward'][0]['point'] ?: ''}" autocomplete="off" class="layui-input ">
  40. </div>
  41. <span class="layui-form-mid">积分</span>
  42. </div>
  43. <div class="layui-block">
  44. <label class="layui-form-label"></label>
  45. <label class="layui-form-mid width-wrap"></label>
  46. <div class="layui-input-inline len-short">
  47. <input type="number" name="growth" lay-verify="everyday|number|flnum" value="{$config['value']['reward'][0]['growth'] ?: ''}" autocomplete="off" class="layui-input ">
  48. </div>
  49. <span class="layui-form-mid">成长值</span>
  50. </div>
  51. </div>
  52. <div class="word-aux">用户可在签到页每日签到一次,签到后可获得每日签到奖励</div>
  53. <div class="layui-form-item">
  54. <label class="layui-form-label">连续签到:</label>
  55. <div class="layui-input-block">
  56. <table class="layui-table" id="sign" lay-skin="line" lay-size="lg">
  57. <colgroup>
  58. <col width="40%">
  59. <col width="20%">
  60. <col width="20%">
  61. <col width="20%">
  62. </colgroup>
  63. <thead>
  64. <tr>
  65. <th>连续签到天数</th>
  66. <th>奖励积分</th>
  67. <th>奖励成长值</th>
  68. <th class="operation" style="text-align: right;">操作</th>
  69. </tr>
  70. </thead>
  71. <tbody>
  72. {if count($config.value.reward) > 1}
  73. {foreach $config.value.reward as $k =>$v}
  74. {if $k>0}
  75. <tr>
  76. <td><input type="number" class="layui-input len-short day" value="{$v.day}" lay-verify="required|int|day" autocomplete="off" /><input type="hidden" value="连续签到天数" /></td>
  77. <td><input type="number" class="layui-input len-short point" value="{$v.point}" lay-verify="signDay|number|int" autocomplete="off" /></td>
  78. <td><input type="number" class="layui-input len-short growth" value="{$v.growth}" lay-verify="signDay|number|int" autocomplete="off" /></td>
  79. <td><div class="table-btn"><a href="javascript:;" class="layui-btn" onclick="deleteSign(this)">删除</a></div></td>
  80. </tr>
  81. {/if}
  82. {/foreach}
  83. {else/}
  84. <tr class="empty-box">
  85. <td colspan="5">
  86. <div class="empty-wrap">暂无数据</div>
  87. </td>
  88. </tr>
  89. {/if}
  90. </tbody>
  91. </table>
  92. <button class="layui-btn" onclick="addSign()">添加连续签到奖励</button>
  93. </div>
  94. </div>
  95. <div class="word-aux">连续签到天数达到连签奖励的当天,可额外获得连签奖励;连续签到天数签满一个周期或者签到中断,将清空连签天数重新计算签到天数</div>
  96. </div>
  97. <div class="form-row">
  98. <button class="layui-btn" lay-submit lay-filter="save">保存</button>
  99. <button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
  100. </div>
  101. </div>
  102. {/block}
  103. {block name="script"}
  104. <script>
  105. layui.use('form', function() {
  106. var form = layui.form,
  107. repeat_flag = false; //防重复标识
  108. form.render();
  109. form.on('submit(save)', function(data) {
  110. var arr = [];
  111. arr.push({point: data.field.point, growth:data.field.growth, day: 1});
  112. $(".layui-table tbody tr").each(function () {
  113. if (!$(this).hasClass("empty-box")) {
  114. var point = $(this).find(".point").val(),
  115. growth = $(this).find(".growth").val(),
  116. day = $(this).find(".day").val();
  117. arr.push({point: point, growth: growth, day: day});
  118. }
  119. });
  120. data.field.json = JSON.stringify(arr);
  121. if (repeat_flag) return;
  122. repeat_flag = true;
  123. $.ajax({
  124. type: 'POST',
  125. url: ns.url("membersignin://shop/config/index"),
  126. dataType: 'JSON',
  127. data: data.field,
  128. success: function (res) {
  129. repeat_flag = false;
  130. if (res.code == 0) {
  131. layer.confirm('编辑成功', {
  132. title: '操作提示',
  133. btn: ['返回列表', '继续操作'],
  134. yes: function () {
  135. location.href = ns.url("shop/promotion/member")
  136. },
  137. btn2: function () {
  138. location.reload();
  139. }
  140. });
  141. } else {
  142. layer.msg(res.message);
  143. }
  144. }
  145. })
  146. });
  147. var isEnable = $('.signin [name="is_use"]').is(':checked');
  148. form.on('switch(is_use)', function(data) {
  149. isEnable = $(data.elem).is(':checked');
  150. if (isEnable) {
  151. $('.reward-wrap').removeClass('layui-hide');
  152. } else {
  153. $('.reward-wrap').addClass('layui-hide');
  154. }
  155. })
  156. form.verify({
  157. everyday: function(){
  158. var point = $('[name="point"]').val(),
  159. growth = $('[name="growth"]').val();
  160. if (isEnable && (!/[\S]+/.test(point) && !/[\S]+/.test(growth))) {
  161. return "每日签到奖励至少设置一项";
  162. }
  163. },
  164. number: function (value, item) {
  165. if (isEnable) {
  166. var str = $(item).parents(".layui-block").find("span").text();
  167. var _str = $(item).siblings().val();
  168. if (value != '' && value <= 0) {
  169. if (str) {
  170. return str + "不能小于等于0";
  171. } else {
  172. return _str + "不能小于等于0";
  173. }
  174. }
  175. }
  176. },
  177. int: function (value, item) {
  178. if (isEnable && value != '') {
  179. var str = $(item).parents(".layui-block").find("span").text();
  180. var _str = $(item).siblings().val();
  181. if (value%1 != 0) {
  182. if (str) {
  183. return str + "必须为整数";
  184. } else {
  185. return _str + "必须为整数";
  186. }
  187. }
  188. }
  189. },
  190. flnum: function (value, item) {
  191. if (isEnable && value != '') {
  192. var str = $(item).parents(".layui-block").find("span").text();
  193. var _str = $(item).siblings().val();
  194. var arrMen = value.split(".");
  195. var val = 0;
  196. if (arrMen.length == 2) {
  197. val = arrMen[1];
  198. }
  199. if (val.length > 2) {
  200. if (str) {
  201. return str + "最多可保留两位小数";
  202. } else {
  203. return _str + "最多可保留两位小数";
  204. }
  205. }
  206. }
  207. },
  208. required: function (value, item) {
  209. if (isEnable) {
  210. var str = $(item).parents(".layui-block").find("span").text();
  211. var _str = $(item).siblings().val();
  212. if (value == null || value.trim() == "" || value == undefined || value == null) {
  213. if (str) {
  214. return str + "不能为空";
  215. } else {
  216. return _str + "不能为空";
  217. }
  218. }
  219. }
  220. },
  221. day: function(value, item){
  222. if (isEnable) {
  223. var cycle = $('[name="cycle"]').val();
  224. if (parseInt(value) < 2) {
  225. return "连签天数不能小于2天";
  226. }
  227. if (parseInt(value) > parseInt(cycle)) {
  228. return "最大连签天数不能大于签到周期";
  229. }
  230. var index = $(item).parents('tr').index();
  231. if (index) {
  232. var agoDay = $('.signin tbody tr:eq('+ (index - 1) +') .day').val();
  233. if (parseInt(value) <= parseInt(agoDay)) {
  234. return "连续签到天数不能相同或者小于上一个连签天数";
  235. }
  236. }
  237. }
  238. },
  239. signDay: function(value, item){
  240. if (isEnable) {
  241. var point = $(item).parents('tr').find('.point').val(),
  242. growth = $(item).parents('tr').find('.growth').val();
  243. if (isEnable && (!/[\S]+/.test(point) && !/[\S]+/.test(growth))) {
  244. return "连签奖励至少设置一项";
  245. }
  246. }
  247. },
  248. cycle: function(value) {
  249. if (isEnable) {
  250. if (parseInt(value) < 7 || parseInt(value) > 100) {
  251. return '签到周期需在7-100天内';
  252. }
  253. }
  254. }
  255. });
  256. });
  257. function addSign() {
  258. $("#sign").find("tbody .empty-box").remove();
  259. var html = '';
  260. html += `<tr>`+
  261. `<td><input type="number" class="layui-input len-short day" lay-verify="required|int|day" autocomplete="off" /><input type="hidden" value="连续签到天数" /></td>`+
  262. `<td><input type="number" class="layui-input len-short point" lay-verify="signDay|number|int" autocomplete="off" /></td>`+
  263. `<td><input type="number" class="layui-input len-short growth" lay-verify="signDay|number|int" autocomplete="off" /></td>`+
  264. `<td><div class="table-btn"><a href="javascript:;" class="layui-btn" onclick="deleteSign(this)">删除连续签到</a></div></td>`+
  265. `</tr>`;
  266. $("#sign").find("tbody").append(html);
  267. }
  268. function deleteSign(e) {
  269. $(e).parents("tr").remove();
  270. if ($(".layui-table tbody tr").length == 0) {
  271. $(".layui-table tbody").html('<tr class="empty-box"><td colspan="5"><div class="empty-wrap">暂无数据</div></td></tr>');
  272. }
  273. }
  274. function back(){
  275. location.href = ns.url("shop/promotion/member");
  276. }
  277. </script>
  278. {/block}