add_cluster.html 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721
  1. {extend name="base"/}
  2. {block name="resources"}
  3. <style>
  4. .form-wrap {margin-top: 0;}
  5. .layui-btn+.layui-btn {margin-left: 0;}
  6. .layui-btn {margin-right: 10px; margin-bottom: 15px;}
  7. .weight-list span{display: inline-block;width: 60px;line-height: 30px;border:1px solid #eee;border-radius: 4px;text-align: center;font-size: 12px;cursor: pointer;}
  8. .weight-list span.active{border-color: #ff8143; }
  9. .weight-list span.disabled{background:#f1f1f1;cursor: not-allowed; }
  10. </style>
  11. {/block}
  12. {block name="main"}
  13. <div class="layui-form form-wrap">
  14. <!-- 基础上传 -->
  15. <div class="layui-card card-common card-brief">
  16. <div class="layui-card-header">
  17. <span class="card-title">基础设置</span>
  18. </div>
  19. <div class="layui-card-body">
  20. <div class="layui-form-item">
  21. <label class="layui-form-label"><span class="required">*</span>群体名称:</label>
  22. <div class="layui-input-block">
  23. <input type="text" name="cluster_name" lay-verify="required" autocomplete="off" class="layui-input len-mid">
  24. </div>
  25. </div>
  26. </div>
  27. </div>
  28. <div class="layui-card card-common card-brief">
  29. <div class="layui-card-header">
  30. <span class="card-title">选项设置</span>
  31. </div>
  32. <div class="layui-card-body">
  33. <div class="layui-form-item">
  34. <label class="layui-form-label">会员基本信息</label>
  35. <div class="layui-input-block">
  36. <button class="layui-btn layui-btn-primary cluster-btn">会员等级<input type="hidden" value="0" /></button>
  37. <button class="layui-btn layui-btn-primary cluster-btn">会员标签<input type="hidden" value="1" /></button>
  38. <button class="layui-btn layui-btn-primary cluster-btn">性别<input type="hidden" value="2" /></button>
  39. <button class="layui-btn layui-btn-primary cluster-btn">生日<input type="hidden" value="3" /></button>
  40. <button class="layui-btn layui-btn-primary cluster-btn">注册时间<input type="hidden" value="4" /></button>
  41. <button class="layui-btn layui-btn-primary cluster-btn">当前积分<input type="hidden" value="5" /></button>
  42. <button class="layui-btn layui-btn-primary cluster-btn">当前余额<input type="hidden" value="6" /></button>
  43. <button class="layui-btn layui-btn-primary cluster-btn">当前成长值<input type="hidden" value="7" /></button>
  44. <button class="layui-btn layui-btn-primary cluster-btn">连续签到次数<input type="hidden" value="8" /></button>
  45. <button class="layui-btn layui-btn-primary cluster-btn">会员手机<input type="hidden" value="9" /></button>
  46. </div>
  47. </div>
  48. <div class="layui-form-item">
  49. <label class="layui-form-label">会员消费情况</label>
  50. <div class="layui-input-block">
  51. <button class="layui-btn layui-btn-primary cluster-btn">付款金额<input type="hidden" value="10" /></button>
  52. <button class="layui-btn layui-btn-primary cluster-btn">消费金额<input type="hidden" value="11" /></button>
  53. <button class="layui-btn layui-btn-primary cluster-btn">付款次数<input type="hidden" value="12" /></button>
  54. <button class="layui-btn layui-btn-primary cluster-btn">消费次数<input type="hidden" value="13" /></button>
  55. </div>
  56. </div>
  57. </div>
  58. </div>
  59. <div class="layui-card card-common card-brief">
  60. <div class="layui-card-header">
  61. <span class="card-title">群体设置</span>
  62. </div>
  63. <div class="layui-card-body">
  64. <div class="layui-form-item">
  65. <div class="layui-input-block">
  66. <table class="layui-table" id="goods" lay-skin="line" lay-size="lg">
  67. <colgroup>
  68. <col width="15%">
  69. <col width="20%">
  70. <col width="50%">
  71. <col width="10%">
  72. </colgroup>
  73. <thead>
  74. <tr>
  75. <th>选项</th>
  76. <th>范围</th>
  77. <th>条件</th>
  78. <th class="operation">操作</th>
  79. </tr>
  80. </thead>
  81. <tbody>
  82. <tr class="cluster-content layui-hide">
  83. <td>会员等级</td>
  84. <td>
  85. <input type="radio" class="include" name="basic[member_level][include]" value="1" title="包含" checked>
  86. <input type="radio" class="include" name="basic[member_level][include]" value="2" title="不包含">
  87. </td>
  88. <td>
  89. <div class="layui-input-inline">
  90. <input type="text" autocomplete="off" class="layui-input member-level-con" readonly onclick="settinglevel()">
  91. <input type="hidden" name="basic[member_level][content]">
  92. </div>
  93. <input type="hidden" class="is-show" name="basic[member_level][is_show]" value="0">
  94. </td>
  95. <td class='operation'>
  96. <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
  97. </td>
  98. </tr>
  99. <tr class="cluster-content layui-hide">
  100. <td>会员标签</td>
  101. <td>
  102. <input type="radio" class="include" name="basic[member_label][include]" value="1" title="包含" checked>
  103. <input type="radio" class="include" name="basic[member_label][include]" value="2" title="不包含">
  104. </td>
  105. <td>
  106. <div class="layui-input-inline">
  107. <input type="text" autocomplete="off" class="layui-input member-label-con" readonly onclick="settinglabel()">
  108. <input type="hidden" name="basic[member_label][content]">
  109. </div>
  110. <input type="hidden" class="is-show" name="basic[member_label][is_show]" value="0">
  111. </td>
  112. <td class='operation'>
  113. <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
  114. </td>
  115. </tr>
  116. <tr class="cluster-content layui-hide">
  117. <td>会员性别</td>
  118. <td>
  119. <input type="radio" class="include" name="basic[sex][include]" value="1" title="包含" checked>
  120. <input type="radio" class="include" name="basic[sex][include]" value="2" title="不包含">
  121. </td>
  122. <td>
  123. <input type="checkbox" class="input-checkbox" lay-skin="primary" lay-filter="sex" name="basic[sex][content]" value="0" title="保密">
  124. <input type="checkbox" class="input-checkbox" lay-skin="primary" lay-filter="sex" name="basic[sex][content]" value="1" title="男">
  125. <input type="checkbox" class="input-checkbox" lay-skin="primary" lay-filter="sex" name="basic[sex][content]" value="2" title="女">
  126. <input type="hidden" class="is-show" name="basic[sex][is_show]" value="0">
  127. </td>
  128. <td class='operation'>
  129. <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
  130. </td>
  131. </tr>
  132. <tr class="cluster-content layui-hide">
  133. <td>会员生日</td>
  134. <td>
  135. <input type="radio" class="include" name="basic[birthday][include]" value="1" title="包含" checked>
  136. <input type="radio" class="include" name="basic[birthday][include]" value="2" title="不包含">
  137. </td>
  138. <td>
  139. <div class="layui-input-inline">
  140. <input type="text" class="layui-input layui-input-start" name="basic[birthday][start]" id="birthday_start_date" placeholder="请输入开始时间"
  141. autocomplete="off" readonly>
  142. </div>
  143. <div class="layui-input-inline split">-</div>
  144. <div class="layui-input-inline end-time">
  145. <input type="text" class="layui-input layui-input-end" name="basic[birthday][end]" id="birthday_end_date" placeholder="请输入结束时间"
  146. autocomplete="off" readonly>
  147. </div>
  148. <input type="hidden" class="is-show" name="basic[birthday][is_show]" value="0">
  149. </td>
  150. <td class='operation'>
  151. <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
  152. </td>
  153. </tr>
  154. <tr class="cluster-content layui-hide">
  155. <td>注册时间</td>
  156. <td>
  157. <input type="radio" class="include" name="basic[reg_time][include]" value="1" title="包含" checked>
  158. <input type="radio" class="include" name="basic[reg_time][include]" value="2" title="不包含">
  159. </td>
  160. <td>
  161. <div class="layui-input-inline">
  162. <input type="text" class="layui-input layui-input-start" name="basic[reg_time][start]" id="reg_start_date" placeholder="请输入开始时间"
  163. autocomplete="off" readonly>
  164. </div>
  165. <div class="layui-input-inline split">-</div>
  166. <div class="layui-input-inline end-time">
  167. <input type="text" class="layui-input layui-input-end" name="basic[reg_time][end]" id="reg_end_date" placeholder="请输入结束时间"
  168. autocomplete="off" readonly>
  169. </div>
  170. <input type="hidden" class="is-show" name="basic[reg_time][is_show]" value="0">
  171. </td>
  172. <td class='operation'>
  173. <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
  174. </td>
  175. </tr>
  176. <tr class="cluster-content layui-hide">
  177. <td>当前积分</td>
  178. <td>
  179. <input type="radio" class="include" name="basic[point][include]" value="1" title="包含" checked>
  180. <input type="radio" class="include" name="basic[point][include]" value="2" title="不包含">
  181. </td>
  182. <td>
  183. <div class="layui-input-inline">
  184. <input type="number" class="layui-input layui-input-start layui-input-int" name="basic[point][start]" placeholder="请输入积分最小值" autocomplete="off" min="0">
  185. </div>
  186. <div class="layui-input-inline split">-</div>
  187. <div class="layui-input-inline end-time">
  188. <input type="number" class="layui-input layui-input-end layui-input-int" name="basic[point][end]" placeholder="请输入积分最大值" autocomplete="off" min="0">
  189. </div>
  190. <input type="hidden" class="is-show" name="basic[point][is_show]" value="0">
  191. </td>
  192. <td class='operation'>
  193. <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
  194. </td>
  195. </tr>
  196. <tr class="cluster-content layui-hide">
  197. <td>当前余额</td>
  198. <td>
  199. <input type="radio" class="include" name="basic[balance][include]" value="1" title="包含" checked>
  200. <input type="radio" class="include" name="basic[balance][include]" value="2" title="不包含">
  201. </td>
  202. <td>
  203. <div class="layui-input-inline">
  204. <input type="number" class="layui-input layui-input-start layui-input-flo" name="basic[balance][start]" placeholder="请输入当前余额最小值" autocomplete="off" min="0">
  205. </div>
  206. <div class="layui-input-inline split">-</div>
  207. <div class="layui-input-inline end-time">
  208. <input type="number" class="layui-input layui-input-end layui-input-flo" name="basic[balance][end]" placeholder="请输入当前余额最大值" autocomplete="off" min="0">
  209. </div>
  210. <input type="hidden" class="is-show" name="basic[balance][is_show]" value="0">
  211. </td>
  212. <td class='operation'>
  213. <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
  214. </td>
  215. </tr>
  216. <tr class="cluster-content layui-hide">
  217. <td>当前成长值</td>
  218. <td>
  219. <input type="radio" class="include" name="basic[growth][include]" value="1" title="包含" checked>
  220. <input type="radio" class="include" name="basic[growth][include]" value="2" title="不包含">
  221. </td>
  222. <td>
  223. <div class="layui-input-inline">
  224. <input type="number" class="layui-input layui-input-start layui-input-flo" name="basic[growth][start]" placeholder="请输入当前成长值最小值" autocomplete="off" min="0">
  225. </div>
  226. <div class="layui-input-inline split">-</div>
  227. <div class="layui-input-inline end-time">
  228. <input type="number" class="layui-input layui-input-end layui-input-flo" name="basic[growth][end]" placeholder="请输入当前成长值最大值" autocomplete="off" min="0">
  229. </div>
  230. <input type="hidden" class="is-show" name="basic[growth][is_show]" value="0">
  231. </td>
  232. <td class='operation'>
  233. <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
  234. </td>
  235. </tr>
  236. <tr class="cluster-content layui-hide">
  237. <td>签到次数</td>
  238. <td>
  239. <input type="radio" class="include" name="basic[sign_days_series][include]" value="1" title="包含" checked>
  240. <input type="radio" class="include" name="basic[sign_days_series][include]" value="2" title="不包含">
  241. </td>
  242. <td>
  243. <div class="layui-input-inline">
  244. <input type="number" class="layui-input layui-input-start layui-input-int" name="basic[sign_days_series][start]" placeholder="请输入签到次数最小值" autocomplete="off" min="0">
  245. </div>
  246. <div class="layui-input-inline split">-</div>
  247. <div class="layui-input-inline end-time">
  248. <input type="number" class="layui-input layui-input-end layui-input-int" name="basic[sign_days_series][end]" placeholder="请输入签到次数最大值" autocomplete="off" min="0">
  249. </div>
  250. <input type="hidden" class="is-show" name="basic[sign_days_series][is_show]" value="0">
  251. </td>
  252. <td class='operation'>
  253. <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
  254. </td>
  255. </tr>
  256. <tr class="cluster-content layui-hide">
  257. <td>会员手机</td>
  258. <td>
  259. <input type="radio" class="include" name="basic[mobile][include]" value="1" title="包含" checked>
  260. <input type="radio" class="include" name="basic[mobile][include]" value="2" title="不包含">
  261. </td>
  262. <td>
  263. <div class="layui-input-inline">
  264. <input type="text" name="basic[mobile][content]" autocomplete="off" class="layui-input member-mobile">
  265. </div>
  266. <input type="hidden" class="is-show" name="basic[mobile][is_show]" value="0">
  267. </td>
  268. <td class='operation'>
  269. <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
  270. </td>
  271. </tr>
  272. <tr class="cluster-content layui-hide">
  273. <td>付款金额</td>
  274. <td>
  275. <input type="radio" class="include" name="consume[order_money][include]" value="1" title="包含" checked>
  276. <input type="radio" class="include" name="consume[order_money][include]" value="2" title="不包含">
  277. </td>
  278. <td>
  279. <div class="layui-input-inline">
  280. <input type="number" class="layui-input layui-input-start layui-input-flo" name="consume[order_money][start]" placeholder="请输入付款金额最小值" autocomplete="off" min="0">
  281. </div>
  282. <div class="layui-input-inline split">-</div>
  283. <div class="layui-input-inline end-time">
  284. <input type="number" class="layui-input layui-input-end layui-input-flo" name="consume[order_money][end]" placeholder="请输入付款金额最大值" autocomplete="off" min="0">
  285. </div>
  286. <input type="hidden" class="is-show" name="consume[order_money][is_show]" value="0">
  287. </td>
  288. <td class='operation'>
  289. <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
  290. </td>
  291. </tr>
  292. <tr class="cluster-content layui-hide">
  293. <td>消费金额</td>
  294. <td>
  295. <input type="radio" class="include" name="consume[order_complete_money][include]" value="1" title="包含" checked>
  296. <input type="radio" class="include" name="consume[order_complete_money][include]" value="2" title="不包含">
  297. </td>
  298. <td>
  299. <div class="layui-input-inline">
  300. <input type="number" class="layui-input layui-input-start layui-input-flo" name="consume[order_complete_money][start]" placeholder="请输入消费金额最小值" autocomplete="off" min="0">
  301. </div>
  302. <div class="layui-input-inline split">-</div>
  303. <div class="layui-input-inline end-time">
  304. <input type="number" class="layui-input layui-input-end layui-input-flo" name="consume[order_complete_money][end]" placeholder="请输入消费金额最大值" autocomplete="off" min="0">
  305. </div>
  306. <input type="hidden" class="is-show" name="consume[order_complete_money][is_show]" value="0">
  307. </td>
  308. <td class='operation'>
  309. <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
  310. </td>
  311. </tr>
  312. <tr class="cluster-content layui-hide">
  313. <td>付款次数</td>
  314. <td>
  315. <input type="radio" class="include" name="consume[order_num][include]" value="1" title="包含" checked>
  316. <input type="radio" class="include" name="consume[order_num][include]" value="2" title="不包含">
  317. </td>
  318. <td>
  319. <div class="layui-input-inline">
  320. <input type="number" class="layui-input layui-input-start layui-input-int" name="consume[order_num][start]" placeholder="请输入付款次数最小值" autocomplete="off" min="0">
  321. </div>
  322. <div class="layui-input-inline split">-</div>
  323. <div class="layui-input-inline end-time">
  324. <input type="number" class="layui-input layui-input-end layui-input-int" name="consume[order_num][end]" placeholder="请输入付款次数最大值" autocomplete="off" min="0">
  325. </div>
  326. <input type="hidden" class="is-show" name="consume[order_num][is_show]" value="0">
  327. </td>
  328. <td class='operation'>
  329. <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
  330. </td>
  331. </tr>
  332. <tr class="cluster-content layui-hide">
  333. <td>消费次数</td>
  334. <td>
  335. <input type="radio" class="include" name="consume[order_complete_num][include]" value="1" title="包含" checked>
  336. <input type="radio" class="include" name="consume[order_complete_num][include]" value="2" title="不包含">
  337. </td>
  338. <td>
  339. <div class="layui-input-inline">
  340. <input type="number" class="layui-input layui-input-start layui-input-int" name="consume[order_complete_num][start]" placeholder="请输入消费次数最小值" autocomplete="off" min="0">
  341. </div>
  342. <div class="layui-input-inline split">-</div>
  343. <div class="layui-input-inline end-time">
  344. <input type="number" class="layui-input layui-input-end layui-input-int" name="consume[order_complete_num][end]" placeholder="请输入消费次数最大值" autocomplete="off" min="0">
  345. </div>
  346. <input type="hidden" class="is-show" name="consume[order_complete_num][is_show]" value="0">
  347. </td>
  348. <td class='operation'>
  349. <div class='table-btn '><a href='javascript:;' class='layui-btn' onclick='delDiv(this)'>删除</a></div>
  350. </td>
  351. </tr>
  352. </tbody>
  353. </table>
  354. </div>
  355. </div>
  356. <div class="form-row">
  357. <button class="layui-btn" lay-submit lay-filter="calculate">计算会员数</button>
  358. <div>符合条件的群体人数: <span class="member_num text-color">0</span> 人,点击计算按钮可查看符合条件的群体人数。</div>
  359. </div>
  360. </div>
  361. <div class="layui-card-body">
  362. <div class="form-row">
  363. <button class="layui-btn" lay-submit lay-filter="save">保存</button>
  364. <button class="layui-btn layui-btn-primary" onclick="back()">返回</button>
  365. </div>
  366. </div>
  367. </div>
  368. </div>
  369. {/block}
  370. {block name="script"}
  371. <script>
  372. $(function(){
  373. $('.weight-list span').not('.disabled').eq(0).addClass("active");
  374. })
  375. var form, laytpl, laydate, isClick = false, member_num = 0, member_ids = '', sexVal = [];
  376. layui.use(['form', 'laytpl', 'laydate'], function() {
  377. form = layui.form;
  378. laytpl = layui.laytpl;
  379. laydate = layui.laydate;
  380. var repeat_flag = false; //防重复标识
  381. form.render();
  382. //生日开始时间
  383. laydate.render({
  384. elem: '#birthday_start_date',
  385. type: 'datetime'
  386. });
  387. //生日结束时间
  388. laydate.render({
  389. elem: '#birthday_end_date',
  390. type: 'datetime'
  391. });
  392. //注册开始时间
  393. laydate.render({
  394. elem: '#reg_start_date',
  395. type: 'datetime'
  396. });
  397. //注册结束时间
  398. laydate.render({
  399. elem: '#reg_end_date',
  400. type: 'datetime'
  401. });
  402. $(".weight-list span").click(function() {
  403. if (!$(this).hasClass("disabled")) {
  404. $(this).addClass("active");
  405. $(this).siblings().removeClass("active");
  406. }
  407. });
  408. $(".cluster-btn").click(function() {
  409. var _index = $(this).children().val();
  410. if (!$(this).hasClass("border-color")) {
  411. $(this).addClass("border-color");
  412. $(".cluster-content").eq(_index).removeClass("layui-hide");
  413. $(".cluster-content").eq(_index).find(".is-show").val(1);
  414. $(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input").attr("lay-verify", "notnull");
  415. $(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input-start").attr("lay-verify", "notnull|start");
  416. $(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input-end").attr("lay-verify", "notnull|end");
  417. $(".cluster-content").eq(_index).find(".layui-input-inline input[type='number']").attr("lay-verify", "notnull|end|num");
  418. $(".cluster-content").eq(_index).find(".layui-input-inline input.member-mobile").attr("lay-verify", "notnull|len");
  419. $(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input-int.layui-input-start").attr("lay-verify", "notnull|start|num|int");
  420. $(".cluster-content").eq(_index).find(".layui-input-inline input.layui-input-flo.layui-input-end").attr("lay-verify", "notnull|end|num|flo");
  421. }
  422. //点击了需要重新计算
  423. // isClick = false;
  424. form.render();
  425. });
  426. form.on('submit(calculate)', function(data) {
  427. // isClick = true;
  428. var rule_json = resetData(data.field);
  429. if (rule_json.basic.sex.is_show == 1) {
  430. var flag = false;
  431. $(".input-checkbox").each(function() {
  432. var isChecked = $(this).is(":checked");
  433. if (isChecked) {
  434. flag = true;
  435. }
  436. });
  437. if (!flag) {
  438. layer.msg("请选择性别", {icon: 5, anim: 6});
  439. return false;
  440. }
  441. }
  442. $.ajax({
  443. url: ns.url("shop/membercluster/calculate"),
  444. type: "POST",
  445. dataType: "JSON",
  446. data: {
  447. rule_json: JSON.stringify(rule_json)
  448. },
  449. success: function(res) {
  450. if (res.code >= 0) {
  451. member_num = res.data.member_num;
  452. member_ids = res.data.member_ids;
  453. $(".member_num").html(member_num);
  454. }
  455. }
  456. })
  457. });
  458. form.on('submit(save)', function(data) {
  459. // if (isClick) {
  460. var rule_json = resetData(data.field);
  461. $.ajax({
  462. url: ns.url("shop/membercluster/addCluster"),
  463. type: "POST",
  464. dataType: "JSON",
  465. data: {
  466. cluster_name: data.field.cluster_name,
  467. rule_json: JSON.stringify(rule_json),
  468. },
  469. success: function(res) {
  470. if (res.code >= 0) {
  471. layer.confirm('添加成功', {
  472. title:'操作提示',
  473. btn: ['返回列表', '继续添加'],
  474. closeBtn: 0,
  475. yes: function(){
  476. location.href = ns.url("shop/membercluster/clusterList")
  477. },
  478. btn2: function () {
  479. location.href = ns.url("shop/membercluster/addCluster")
  480. }
  481. });
  482. }else{
  483. layer.msg(res.message);
  484. }
  485. }
  486. })
  487. // } else {
  488. // layer.msg("请先计算会员数", {icon: 5, anim: 6});
  489. // }
  490. });
  491. form.on('submit(setlabel)', function(obj) {
  492. var field = obj.field;
  493. var arr_id = [], temp = [];
  494. for (var prop in field) {
  495. arr_id.push(field[prop]);
  496. $("#set_label").find("input").each(function() {
  497. var label_id = $(this).attr("data-id");
  498. if (field[prop] == label_id) {
  499. temp.push($(this).attr("title"))
  500. }
  501. })
  502. }
  503. $(".member-label-con").val(temp);
  504. $("input[name='basic[member_label][content]']").val(arr_id);
  505. layer.closeAll('page');
  506. });
  507. form.on('submit(setlevel)', function(obj) {
  508. var field = obj.field;
  509. var arr_id = [], temp = [];
  510. for (var prop in field) {
  511. arr_id.push(field[prop]);
  512. $("#set_level").find("input").each(function() {
  513. var level_id = $(this).attr("data-id");
  514. if (field[prop] == level_id) {
  515. temp.push($(this).attr("title"))
  516. }
  517. })
  518. }
  519. $(".member-level-con").val(temp);
  520. $("input[name='basic[member_level][content]']").val(arr_id);
  521. layer.closeAll('page');
  522. });
  523. /**
  524. * 表单验证
  525. */
  526. form.verify({
  527. notnull: function(value, item) {
  528. var str = $(item).parents(".cluster-content").find("td").eq(0).text();
  529. if (value == '') {
  530. return str + '不能为空';
  531. }
  532. },
  533. end: function(value, item) {
  534. var start = $(item).parents(".cluster-content").find(".layui-input-start").val();
  535. var str1 = $(item).attr("placeholder").slice(3);
  536. var str2 = $(item).parents(".cluster-content").find(".layui-input-start").attr("placeholder").slice(3);
  537. if (Number(value) < Number(start)) {
  538. return str1 + "不能小于" + str2;
  539. }
  540. },
  541. num: function(value, item) {
  542. var str = $(item).parents(".cluster-content").find("td").eq(0).text();
  543. if (value < 0) {
  544. return str + "不能小于0";
  545. }
  546. },
  547. len: function(value, item) {
  548. if (value.length > 11) {
  549. return "手机号为11位";
  550. }
  551. },
  552. int: function(value, item) {
  553. var str = $(item).parents(".cluster-content").find("td").eq(0).text();
  554. if (value % 1 != 0) {
  555. return str + "不能为小数";
  556. }
  557. },
  558. flo: function(value, item) {
  559. var str = $(item).parents(".cluster-content").find("td").eq(0).text();
  560. if (value * 100 % 1 != 0) {
  561. return str + "最多保留两位小数";
  562. }
  563. }
  564. })
  565. });
  566. /**
  567. * 设置标签
  568. */
  569. function settinglabel() {
  570. laytpl($("#label_change").html()).render({}, function(html) {
  571. layer_label = layer.open({
  572. title: '设置标签',
  573. skin: 'layer-tips-class',
  574. type: 1,
  575. area: ['450px','260px'],
  576. content: html,
  577. });
  578. });
  579. form.render();
  580. }
  581. /**
  582. * 设置等级
  583. */
  584. function settinglevel() {
  585. laytpl($("#level_change").html()).render({}, function(html) {
  586. layer_level = layer.open({
  587. title: '设置等级',
  588. skin: 'layer-tips-class',
  589. type: 1,
  590. area: ['450px','260px'],
  591. content: html,
  592. });
  593. });
  594. form.render();
  595. }
  596. function delDiv(e) {
  597. var _len = $(e).parents(".cluster-content").index();
  598. $(e).parents(".cluster-content").addClass("layui-hide");
  599. $(e).parents(".cluster-content").find("input").removeAttr("lay-verify");
  600. $(e).parents(".cluster-content").find(".layui-input-inline input").val("");
  601. $(e).parents(".cluster-content").find(".is-show").val(0);
  602. $(e).parents(".cluster-content").find("input[name='basic[sex][content]']").prop("checked",false);
  603. $(".cluster-btn").eq(_len).removeClass("border-color");
  604. }
  605. function closeLabel() {
  606. layer.close(layer_label);
  607. }
  608. function closeLevel() {
  609. layer.close(layer_level);
  610. }
  611. function back() {
  612. location.href = ns.url("shop/membercluster/clusterList");
  613. }
  614. // 数据结构
  615. function resetData(data) {
  616. var rule_json = {};
  617. $.each(data, function(index, item) {
  618. if (index.indexOf("[") != -1) {
  619. var arr = index.split("[");
  620. if (rule_json[arr[0]] == undefined) {
  621. rule_json[arr[0]] = {};
  622. }
  623. var name = arr[1].slice(0, arr[1].length - 1);
  624. if (rule_json[arr[0]][name] == undefined) {
  625. rule_json[arr[0]][name] = {};
  626. }
  627. var attr = arr[2].slice(0, arr[2].length - 1);
  628. rule_json[arr[0]][name][attr] = item;
  629. }
  630. })
  631. sexVal = [];
  632. $("input[name='basic[sex][content]']:checked").each(function (index, item) {
  633. sexVal.push($(this).val());
  634. });
  635. rule_json.basic.sex.content = sexVal.toString();
  636. return rule_json;
  637. }
  638. </script>
  639. <!-- 设置标签弹框html -->
  640. <script type="text/html" id="label_change">
  641. <div class="layui-form member-form" id="set_label" lay-filter="form">
  642. <div class="layui-form-item">
  643. <label class="layui-form-label sm">标签:</label>
  644. <div class="layui-input-block">
  645. {foreach $member_label_list as $member_label_list_k => $member_label_list_v}
  646. <input type="checkbox" name="label_id{$member_label_list_v.label_id}" data-id="{$member_label_list_v.label_id}" value="{$member_label_list_v.label_id}" title="{$member_label_list_v.label_name}" lay-skin="primary">
  647. {/foreach}
  648. </div>
  649. </div>
  650. <div class="form-row sm">
  651. <button class="layui-btn" lay-submit lay-filter="setlabel">确定</button>
  652. <button class="layui-btn layui-btn-primary" onclick="closeLabel()">返回</button>
  653. </div>
  654. </div>
  655. </script>
  656. <!-- 设置标签弹框html -->
  657. <script type="text/html" id="level_change">
  658. <div class="layui-form member-form" id="set_level" lay-filter="form">
  659. <div class="layui-form-item">
  660. <label class="layui-form-label sm">等级:</label>
  661. <div class="layui-input-block">
  662. {foreach $member_level_list as $member_level_list_k => $member_level_list_v}
  663. <input type="checkbox" name="level_id{$member_level_list_v.level_id}" data-id="{$member_level_list_v.level_id}" value="{$member_level_list_v.level_id}" title="{$member_level_list_v.level_name}" lay-skin="primary">
  664. {/foreach}
  665. </div>
  666. </div>
  667. <div class="form-row sm">
  668. <button class="layui-btn" lay-submit lay-filter="setlevel">确定</button>
  669. <button class="layui-btn layui-btn-primary" onclick="closeLevel()">返回</button>
  670. </div>
  671. </div>
  672. </script>
  673. {/block}