basics.html 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495
  1. {extend name="app/shop/view/base.html"/}
  2. {block name="resources"}
  3. {/block}
  4. {block name="main"}
  5. <div class="layui-form form-wrap">
  6. <!-- 基础上传 -->
  7. <div class="layui-card card-common card-brief">
  8. <div class="layui-card-header">
  9. <span class="card-title">分销设置</span>
  10. </div>
  11. <div class="layui-card-body">
  12. <div class="layui-form-item">
  13. <label class="layui-form-label">是否开启分销:</label>
  14. <div class="layui-input-block">
  15. <div class="layui-input-inline">
  16. <input type="radio" name="level_config" value="1" lay-filter="open_distribution" title="开启" {if $basics_info.level > 0} checked {/if}/>
  17. <input type="radio" name="level_config" value="0" lay-filter="open_distribution" title="关闭" {if $basics_info.level == 0} checked {/if}/>
  18. </div>
  19. </div>
  20. </div>
  21. <div class="layui-form-item distribution-index {if $basics_info.level == 0}layui-hide{/if}">
  22. <label class="layui-form-label">分销层级:</label>
  23. <div class="layui-input-block">
  24. <div class="layui-input-inline">
  25. <input type="radio" name="level" value="1" title="一级分销" {if $basics_info.level == 1 || $basics_info.level == 0} checked {/if} lay-filter="level"/>
  26. <input type="radio" name="level" value="2" title="二级分销" {if $basics_info.level == 2} checked {/if} lay-filter="level"/>
  27. </div>
  28. </div>
  29. </div>
  30. <div class="layui-form-item distribution-index {if $basics_info.level == 0}layui-hide{/if}">
  31. <label class="layui-form-label">是否开启自购分佣:</label>
  32. <div class="layui-input-block">
  33. <div class="layui-input-inline">
  34. <input type="radio" name="self_purchase_rebate" value="1" lay-filter="level" title="开启" {if $basics_info.self_purchase_rebate == 1} checked {/if}/>
  35. <input type="radio" name="self_purchase_rebate" value="0" lay-filter="level" title="关闭" {if $basics_info.self_purchase_rebate != 1} checked {/if}/>
  36. </div>
  37. </div>
  38. <div class="word-aux ">开启自购,分销商购买自身获得一级佣金<br/>关闭自购,分销商的上级分销商获得一级佣金,自身不再返佣</div>
  39. </div>
  40. <div class="layui-form-item distribution-index {if $basics_info.level == 0}layui-hide{/if}">
  41. <label class="layui-form-label">是否展示商品详情一级佣金:</label>
  42. <div class="layui-input-block">
  43. <div class="layui-input-inline">
  44. <input type="radio" name="is_commission_money" value="1" lay-filter="level" title="开启" {if $basics_info.is_commission_money == 1} checked {/if}/>
  45. <input type="radio" name="is_commission_money" value="0" lay-filter="level" title="关闭" {if $basics_info.is_commission_money != 1} checked {/if}/>
  46. </div>
  47. </div>
  48. <div class="word-aux ">开启后,商品详情显示,关闭后,商品详情不显示</div>
  49. </div>
  50. </div>
  51. </div>
  52. <div class="layui-card card-common card-brief distribution-index {if $basics_info.level == 0}layui-hide{/if}">
  53. <div class="layui-card-header">
  54. <span class="card-title">上下线关系</span>
  55. </div>
  56. <div class="layui-card-body">
  57. <div class="layui-form-item">
  58. <label class="layui-form-label">绑定下级条件:</label>
  59. <div class="layui-input-block">
  60. <div class="layui-input-inline">
  61. <input type="radio" name="child_condition" value="1" lay-filter="child_condition" title="首次点击分享链接" checked />
  62. <input type="radio" name="child_condition" value="2" lay-filter="child_condition" title="首次下单" {if $relation_info.child_condition == 2} checked {/if}/>
  63. <input type="radio" name="child_condition" value="3" lay-filter="child_condition" title="首次付款" {if $relation_info.child_condition == 3} checked {/if}/>
  64. </div>
  65. </div>
  66. <div class="word-aux" id="child_condition_desc"></div>
  67. </div>
  68. </div>
  69. </div>
  70. <div class="layui-card card-common card-brief distribution-index {if $basics_info.level == 0}layui-hide{/if}">
  71. <div class="layui-card-header">
  72. <span class="card-title">分销商资格</span>
  73. </div>
  74. <div class="layui-card-body">
  75. <div class="layui-form-item distribution-index">
  76. <label class="layui-form-label">分销商申请方式:</label>
  77. <div class="layui-input-block">
  78. <div class="layui-input-inline">
  79. <input type="radio" name="is_apply" value="0" lay-filter="is_apply" title="人人分销" {if $basics_info.is_apply == 0} checked {/if}/>
  80. <input type="radio" name="is_apply" value="1" lay-filter="is_apply" title="申请分销" {if $basics_info.is_apply == 1} checked {/if}/>
  81. <input type="radio" name="is_apply" value="2" lay-filter="is_apply" title="手动设置" {if $basics_info.is_apply == 2} checked {/if}/>
  82. </div>
  83. </div>
  84. <div class="word-aux">人人分销:分销商不需要申请,达到条件自动成为分销商</div>
  85. <div class="word-aux">申请分销:会员达到条件需要申请才能成为分销商</div>
  86. <div class="word-aux">手动设置:分销商只有在后台进行添加,前台会员无法进行申请</div>
  87. </div>
  88. <div class="fenxiao-condition" {if $basics_info.is_apply == 2}style="display:none;"{/if}>
  89. <div class="layui-form-item is-examine {if $basics_info.is_apply == 0}layui-hide{/if}">
  90. <label class="layui-form-label">是否需要审核:</label>
  91. <div class="layui-input-block">
  92. <div class="layui-input-inline">
  93. <input type="radio" name="is_examine" value="1" title="开启" {if $basics_info.is_examine == 1} checked {/if}/>
  94. <input type="radio" name="is_examine" value="0" title="关闭" {if $basics_info.is_examine != 1} checked {/if}/>
  95. </div>
  96. </div>
  97. <div class="word-aux ">开启后,分销商申请之后还需要后台审核</div>
  98. </div>
  99. <div class="layui-form-item distributor">
  100. <label class="layui-form-label">成为分销商条件:</label>
  101. <div class="layui-input-block">
  102. <div class="layui-input-inline">
  103. <input type="radio" name="fenxiao_condition" value="0" lay-filter="fenxiao_condition" title="无条件" {if $fenxiao_info.fenxiao_condition == 0} checked {/if}/>
  104. <!-- <input type="radio" name="fenxiao_condition" value="1" lay-filter="fenxiao_condition" title="申请" {if $fenxiao_info.fenxiao_condition == 1} checked {/if}/>-->
  105. <input type="radio" name="fenxiao_condition" value="2" lay-filter="fenxiao_condition" title="消费次数" {if $fenxiao_info.fenxiao_condition == 2} checked {/if}/>
  106. <input type="radio" name="fenxiao_condition" value="3" lay-filter="fenxiao_condition" title="消费金额" {if $fenxiao_info.fenxiao_condition == 3} checked {/if}/>
  107. <input type="radio" name="fenxiao_condition" value="4" lay-filter="fenxiao_condition" title="购买指定商品" {if $fenxiao_info.fenxiao_condition == 4} checked {/if}/>
  108. </div>
  109. </div>
  110. <div class="word-aux"></div>
  111. </div>
  112. <div class="layui-form-item layui-hide consume_count">
  113. <label class="layui-form-label">累计消费次数:</label>
  114. <div class="layui-input-block">
  115. <div class="layui-input-inline">
  116. <input type="number" name="consume_count" value="{$fenxiao_info.consume_count}" autocomplete="off" class="layui-input" onblur="checkInput(this, 'consume_count')">
  117. </div>
  118. <div class="layui-form-mid">次</div>
  119. </div>
  120. </div>
  121. <div class="layui-form-item layui-hide consume_money">
  122. <label class="layui-form-label">累计消费金额:</label>
  123. <div class="layui-input-block">
  124. <div class="layui-input-inline">
  125. <input type="number" name="consume_money" value="{$fenxiao_info.consume_money}" autocomplete="off" class="layui-input" onblur="checkInput(this, 'consume_money')">
  126. </div>
  127. <div class="layui-form-mid">元</div>
  128. </div>
  129. </div>
  130. <div class="layui-form-item layui-hide consume_goods">
  131. <div class="layui-form-item goods_list">
  132. <label class="layui-form-label"></label>
  133. <div class="layui-input-block">
  134. <table id="selected_sku_list"></table>
  135. <input type="hidden" lay-verify="goods_ids" name="goods_ids">
  136. <button class="layui-btn" onclick="addGoods()">选择商品</button>
  137. </div>
  138. </div>
  139. </div>
  140. <div class="layui-form-item layui-hide consume_condition">
  141. <label class="layui-form-label">消费条件:</label>
  142. <div class="layui-input-block">
  143. <div class="layui-input-inline">
  144. <input type="radio" name="consume_condition" value="1" lay-filter="level" title="付款后" checked/>
  145. <input type="radio" name="consume_condition" value="2" lay-filter="level" title="订单完成" {if $fenxiao_info.consume_condition == 2} checked {/if}/>
  146. </div>
  147. </div>
  148. </div>
  149. </div>
  150. </div>
  151. </div>
  152. <div class="layui-card card-common card-brief distribution-index {if $basics_info.level == 0}layui-hide{/if}">
  153. <div class="layui-card-header">
  154. <span class="card-title">默认分销佣金比率</span>
  155. </div>
  156. <div class="layui-card-body">
  157. <div class="fenxiao-rate">
  158. <div class="layui-form-item">
  159. <label class="layui-form-label"><span class="required">*</span>一级返佣比例:</label>
  160. <div class="layui-input-inline">
  161. <input type="number" min="0" name="one_rate" value="{$level.one_rate ?? 0}" lay-verify="level_rate" autocomplete="off" class="layui-input len-short">
  162. </div>
  163. <div class="layui-form-mid">%</div>
  164. </div>
  165. <div class="word-aux">
  166. <p>会员购买后给对应分销商的返佣比例</p>
  167. </div>
  168. </div>
  169. <div class="fenxiao-rate" {$basics_info.level >= 2}style="display:none"{/if}>
  170. <div class="layui-form-item">
  171. <label class="layui-form-label"><span class="required">*</span>二级返佣比例:</label>
  172. <div class="layui-input-inline">
  173. <input type="number" min="0" name="two_rate" value="{$level.two_rate ?? 0}" lay-verify="level_rate" autocomplete="off" class="layui-input len-short">
  174. </div>
  175. <div class="layui-form-mid">%</div>
  176. </div>
  177. <div class="word-aux">
  178. <p>会员购买后给对应分销商的上级分销商返佣比例</p>
  179. </div>
  180. </div>
  181. <div class="fenxiao-rate" {$basics_info.level == 3}style="display:none"{/if}>
  182. <div class="layui-form-item">
  183. <label class="layui-form-label"><span class="required">*</span>三级返佣比例:</label>
  184. <div class="layui-input-inline">
  185. <input type="number" min="0" name="three_rate" value="{$level.three_rate ?? 0}" lay-verify="level_rate" autocomplete="off" class="layui-input len-short">
  186. </div>
  187. <div class="layui-form-mid">%</div>
  188. </div>
  189. <div class="word-aux">
  190. <p>会员购买后给当前等级分销商的上上级分销商返佣比例</p>
  191. </div>
  192. </div>
  193. </div>
  194. </div>
  195. <div class="form-row" style="margin-top:0;padding-left:20px;">
  196. <button class="layui-btn" lay-submit lay-filter="save">保存</button>
  197. </div>
  198. <!-- 操作 -->
  199. <script type="text/html" id="operation">
  200. <div class="table-btn">
  201. <a class="layui-btn" onclick="delGoods({{d.goods_id}})">删除</a>
  202. </div>
  203. </script>
  204. </div>
  205. {/block}
  206. {block name="script"}
  207. <script>
  208. var selectedGoodsId = [], goods_id=[] ;
  209. var goods_list = {:json_encode($fenxiao_info.goods_list, JSON_UNESCAPED_UNICODE)};
  210. if (goods_list.length==0){
  211. goods_list = [];
  212. }
  213. var _system = {if !empty($config.system) && $config.system == 1} 1 {else/} 0 {/if};
  214. $.each(goods_list, function(index, item) {
  215. var id = item.goods_id;
  216. selectedGoodsId.push(id);
  217. goods_id.push(id);
  218. });
  219. renderTable(goods_list);
  220. $("input[name='goods_ids']").val(goods_id.toString());
  221. layui.use(['form'], function() {
  222. var form = layui.form,
  223. openDistribution = "{$basics_info.level}",
  224. repeat_flag = false; //防重复标识
  225. form.render();
  226. renderTable(goods_list); // 初始化表格
  227. /**
  228. * 表单验证
  229. */
  230. form.verify({
  231. goods_ids: function(value){
  232. var type = $('[name="fenxiao_condition"]:checked').val();
  233. if(type==4){
  234. if (!/[\S]+/.test(value)) {
  235. return '请选择商品';
  236. }
  237. }
  238. },
  239. level_rate: function (value, elem) {
  240. let title = $(elem).parents('.layui-form-item').find('.layui-form-label').text().replace('*', '').replace(':', '');
  241. if (!$(elem).is(':hidden')) {
  242. if (!/[\S]+/.test(value)) {
  243. return '请输入' + title;
  244. }
  245. if (!/^(([0-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/.test(value)) {
  246. return title + `格式输入错误`;
  247. }
  248. }
  249. }
  250. });
  251. form.on('submit(save)', function(data) {
  252. if (repeat_flag) return;
  253. repeat_flag = true;
  254. if(!parseInt(openDistribution)){
  255. data.field.level = data.field.level_config;
  256. }
  257. if (data.field.level) {
  258. var rate = 0;
  259. $('.fenxiao-rate:not(:hidden)').each(function () {
  260. var value = parseFloat($(this).find('input').val());
  261. if (!isNaN(value)) rate += value;
  262. });
  263. if (rate > 100) {
  264. layer.msg('分销佣金比率之和不能超出100', {icon: 5});
  265. return false;
  266. }
  267. }
  268. $.ajax({
  269. type: 'POST',
  270. dataType: 'JSON',
  271. url: ns.url("fenxiao://shop/config/basics"),
  272. data: data.field,
  273. success: function(res) {
  274. layer.msg(res.message);
  275. repeat_flag = false;
  276. if (res.code == 0) {
  277. location.reload();
  278. }
  279. }
  280. });
  281. });
  282. form.on('radio(open_distribution)', function(data){
  283. openDistribution = data.value;
  284. if (!parseInt(openDistribution)){
  285. $(".distribution-index").addClass('layui-hide');
  286. return false;
  287. }
  288. $(".distribution-index").removeClass('layui-hide');
  289. });
  290. form.on('radio(level)', function (data) {
  291. $('.fenxiao-rate').hide();
  292. $('.fenxiao-rate:lt('+ data.value +')').show()
  293. });
  294. form.on('radio(is_apply)', function (data) {
  295. if (data.value == 0) {
  296. $('.is-examine').hide();
  297. $('.fenxiao-condition').show();
  298. $('[name="is_examine"][value="0"]').prop('checked', true);
  299. } else if (data.value == 1) {
  300. $('.is-examine').show();
  301. $('.fenxiao-condition').show();
  302. } else {
  303. $('.fenxiao-condition').hide();
  304. }
  305. });
  306. //监听成为分销商条件选择
  307. form.on('radio(fenxiao_condition)', function(data){
  308. var value = data.value;
  309. distributionConditions(value);
  310. });
  311. form.on('radio(child_condition)', function(data){
  312. childConditionChange(data.value);
  313. });
  314. function childConditionChange(child_condition){
  315. var config = {
  316. 1 : '非分销商用户在点击分销商的分享链接后即可成为该分销商的下线',
  317. 2 : '非分销商用户在点击分销商的分享链接后在商城中创建订单即可成为该分销商的下线',
  318. 3 : '非分销商用户在点击分销商的分享链接后在商城中创建订单并支付成功即可成为该分销商的下线',
  319. };
  320. $("#child_condition_desc").html(config[child_condition]);
  321. }
  322. //默认选中
  323. childConditionChange('{$relation_info.child_condition}');
  324. distributionConditions("{$fenxiao_info.fenxiao_condition}");
  325. function distributionConditions (value){
  326. value = parseInt(value);
  327. $('.consume_count').addClass("layui-hide");
  328. $('.consume_money').addClass("layui-hide");
  329. $('.consume_goods').addClass("layui-hide");
  330. $('.consume_condition').addClass("layui-hide");
  331. $('.apply').addClass("layui-hide");
  332. //无条件
  333. if(value == 0){
  334. $(".distributor .word-aux").text("不需要任何条件,如果不需要申请注册成为分销商");
  335. }
  336. //申请
  337. if(value == 1){
  338. $('.apply').removeClass("layui-hide");
  339. $(".distributor .word-aux").text("需申请通过,才可以成为分销商");
  340. }
  341. //消费次数
  342. if(value == 2){
  343. $('.consume_count').removeClass("layui-hide");
  344. $('.consume_condition').removeClass("layui-hide");
  345. $(".distributor .word-aux").text("当消费次数达到一定数量并申请通过才可以成为分销商");
  346. }
  347. //消费金额
  348. if(value == 3){
  349. $('.consume_money').removeClass("layui-hide");
  350. $('.consume_condition').removeClass("layui-hide");
  351. $(".distributor .word-aux").text("当消费金额达到一定数量并申请通过才可以成为分销商");
  352. }
  353. //购买指定商品
  354. if(value == 4){
  355. $('.consume_goods').removeClass("layui-hide");
  356. $('.consume_condition').removeClass("layui-hide");
  357. $(".distributor .word-aux").text("商品任选其-购买即可成为分销商");
  358. }
  359. }
  360. });
  361. /* 商品 */
  362. function addGoods(){
  363. goodsSelect(function (res) {
  364. if (!res.length) return false;
  365. goods_list = [];
  366. goods_id = [];
  367. for(var i=0;i<res.length;i++) {
  368. goods_id.push(res[i].goods_id);
  369. goods_list.push(res[i]);
  370. }
  371. renderTable(goods_list);
  372. $("input[name='goods_ids']").val(goods_id.toString());
  373. selectedGoodsId = goods_id;
  374. }, selectedGoodsId, {mode: "spu"});
  375. }
  376. // 删除选中商品
  377. function delGoods(id) {
  378. var i, j;
  379. $.each(goods_list, function(index, item) {
  380. var goods_id = item.goods_id;
  381. if (id == Number(goods_id)) {
  382. i = index;
  383. }
  384. });
  385. goods_list.splice(i, 1);
  386. renderTable(goods_list);
  387. $.each(selectedGoodsId, function(index, item) {
  388. if (id == Number(item)) {
  389. j = index;
  390. }
  391. });
  392. selectedGoodsId.splice(j, 1);
  393. goods_id = selectedGoodsId;
  394. $("input[name='goods_ids']").val(goods_id.toString());
  395. }
  396. // 表格渲染
  397. function renderTable(goods_list) {
  398. //展示已知数据
  399. table = new Table({
  400. elem: '#selected_sku_list',
  401. page: false,
  402. limit: Number.MAX_VALUE,
  403. cols: [
  404. [{
  405. field: 'goods_name',
  406. title: '商品名称',
  407. unresize: 'false',
  408. width: '50%',
  409. templet: function(data) {
  410. var html = '';
  411. html += `
  412. <div class="goods-title" style="display:flex;">
  413. <div class="goods-img">
  414. <img src="${data.goods_image ? ns.img(data.goods_image.split(",")[0],'small') : ''}" alt="">
  415. </div>
  416. <p class="multi-line-hiding goods-name" style="margin:20px 0 0 10px;">${data.goods_name}</p>
  417. </div>
  418. `;
  419. return html;
  420. }
  421. }, {
  422. field: 'price',
  423. title: '商品价格(元)',
  424. unresize: 'false',
  425. align: 'right',
  426. width: '20%',
  427. templet: function(data) {
  428. return '¥' + data.price;
  429. }
  430. }, {
  431. field: 'goods_stock',
  432. title: '库存',
  433. unresize: 'false',
  434. align: 'center',
  435. width: '20%'
  436. }, {
  437. title: '操作',
  438. toolbar: '#operation',
  439. unresize: 'false',
  440. align:'right'
  441. }],
  442. ],
  443. data: goods_list,
  444. });
  445. }
  446. function checkInput(obj, type){
  447. if(type == 'consume_money'){
  448. $(obj).val(Math.abs($(obj).val()));
  449. }
  450. if(type == 'consume_count'){
  451. $(obj).val(Math.floor(Math.abs($(obj).val())));
  452. }
  453. }
  454. </script>
  455. {/block}