基于ecshop商城开发优惠券(红包)叠加使用功能
一般商城的优惠券(红包)都是只能使用一张的,但想要叠加使用的话,首先要新增字段来区别设置可不可叠加类型
![这里写图片描述](http://img.blog.csdn.net/20170314172430274?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXExMjQzMjgyMjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
input type=”hidden” name=”bonus” id=”bonus_id_{$k}” value=”0”
<div class="bonus_part"> <p><span>优惠券</span> </p> <ul class="bonus_list_business"> <input type="hidden" name="bonus1" id="bonus_id" value=""> <input type="hidden" name="bonus" id="bonus_id_{$k}" value="0"> <input type="hidden" name="bonus_overlap" id="overlap_{$k}" {if $bonus.overlap eq 1 } value="1" {else} value="0" {/if}> <li {if $order.bonus_id eq $bonus.bonus_id} {/if} onclick="selectBonus2(this, {$bonus.bonus_id},{$k})"> <div class="bonus_info_business"> <span><em>¥{$bonus.bonus_money_formated}</em><strong>满{$bonus.min_goods_amount}可用</strong></span> <p><b>{$bonus.type_name}</b><label>(优惠券) ({if $bonus.overlap eq 1 } 可叠加 {else} 不可叠加 {/if})</label></p> </div> <div class="bonus_date_business"> <p>截止{$bonus.use_end_date}</p> </div> <u></u><font></font> </li> </ul> <b id="no_overlap" style="color: red;margin-left: 35%;display: none;">你选择的优惠券不可叠加,不能再选择其他优惠券!</b> </div> <div style="text-align: center;margin:8px auto;"> <input style="margin-top:25px;" type="image" src="images/bnt_subOrder.png" /> <input type="hidden" name="step" value="done" /> </div>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
我的思路是这样的:
当选择的优惠券不可叠加时,value等于对应的红包id,其他优惠券设置为不可点击事件,并把其他优惠券的value都变为0(防止之前点击了可叠加的券后再点击不可叠加券);
取消选中时则恢复点击事件,其value等于0。
![这里写图片描述](http://img.blog.csdn.net/20170314175018603?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXExMjQzMjgyMjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
当选择的优惠券可叠加时,value等于对应的红包id, 取消选中时其value等于0。
![这里写图片描述](http://img.blog.csdn.net/20170314175036310?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXExMjQzMjgyMjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
/ ** * 可判断红包是否可叠加,并可同时选中/取消多个叠加红包 * @param obj 选中的li * @param value 红包的id * @param k 选中红包对应的键值 */ function selectBonus2(obj,value,k) { $(obj).toggleClass('checkbox_frame'); var is_overlap = document.getElementById("overlap_" + k).value; var num = document.getElementsByName("bonus"); if (is_overlap == 0) { if ($(obj).hasClass("checkbox_frame")) { $(obj).css('border', '1px solid red'); $(obj).siblings().removeClass("checkbox_frame"); $(obj).siblings().css('border', '1px solid #ddd'); $(obj).siblings().css('pointer-events', 'none'); document.getElementById("no_overlap").style.display = "block"; for (var i = 0; i < num.length; i++) { if (k == i) { document.getElementById("bonus_id_" + k).value = value; } else { document.getElementById("bonus_id_" + i).value = 0; } } } else { $(obj).css('border', '1px solid #ddd'); $(obj).siblings().removeClass("checkbox_frame"); $(obj).siblings().css('border', '1px solid #ddd'); $(obj).siblings().css('pointer-events', 'auto'); document.getElementById("bonus_id_" + k).value = 0; document.getElementById("no_overlap").style.display = "none"; } } if (is_overlap != 0) { if ($(obj).hasClass("checkbox_frame")) { $(obj).css('border', '1px solid red'); document.getElementById("bonus_id_" + k).value = value; } else { $(obj).css('border', '1px solid #ddd'); document.getElementById("bonus_id_" + k).value = 0; } } var bonus_ids = ""; for (var j = 0; j < num.length; j++) { if (document.getElementById("bonus_id_" + j).value != 0) { bonus_ids += document.getElementById("bonus_id_" + j).value + ","; } } if(bonus_ids.length>0) { bonus_ids = bonus_ids.substr(0, bonus_ids.length - 1); document.getElementById("bonus_id").value = bonus_ids; } else { document.getElementById("bonus_id").value = 0; } Ajax.call('flow.php?step=change_bonus', 'bonus=' + bonus_ids, changeBonusResponse, 'GET', 'JSON'); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
最后将优惠券的ID数组传过去后,计算优惠后的费用,设置优惠券状态(已使用)即可。