Commit 93cd196b1d659a2687025a0ff5034cb935a4208d

Authored by yvan.ni
1 parent a71d8615

多促销的优化

packageE/pages/cart/cart2/cart2.js
... ... @@ -688,7 +688,7 @@ Page({
688 688 var sort_type='';
689 689  
690 690 if(!auto_promote_sale){
691   - sort_type='prom_id';
  691 + sort_type='prom_type';
692 692 }else{
693 693 var auto_promote_sale=auto_promote_sale.split(',');
694 694 //-- 循环处理 --
... ... @@ -700,12 +700,12 @@ Page({
700 700 }
701 701  
702 702 //-- 排序一下,进行升序 --
703   - function comp(a, b,sort_type) {
  703 + function comp(a, b) {
704 704 return a[sort_type]-b[sort_type]; //升序
705 705 }
706 706  
707 707 //使用sort排序
708   - prom_list.sort(comp);
  708 + prom_list.sort(comp(sort_type));
709 709 },
710 710  
711 711 //-----真的获取购物车,入口--------
... ... @@ -1811,11 +1811,11 @@ Page({
1811 1811 "user_id": user_id,
1812 1812 }
1813 1813  
1814   - await getApp().request.promiseGet(url, {data: req_d}).then(res => {
  1814 + await getApp().request.promiseGet(url, {data: req_d}).then(e => {
1815 1815 if (e.data.code == 0 && e.data.data && e.data.data.length > 0) {
1816 1816 var arr = e.data.data;
1817 1817 if (arr.length) {
1818   - arr3 = arr.filter(function (e) {
  1818 + var arr3 = arr.filter(function (e) {
1819 1819 return e.s_time < ut.gettimestamp() && e.prom_type == 7;
1820 1820 })
1821 1821 if (arr3 && arr3.length) {
... ... @@ -1923,7 +1923,7 @@ Page({
1923 1923 }
1924 1924  
1925 1925 //调用接口判断优惠,
1926   - var m_res=await getApp().request.promiseGet("/api/weshop/goods/getGoodsPromListNew1/" + os.stoid + "/" + gd.goods_id + "/0" + "/" + user_id, {});
  1926 + var m_res=await getApp().request.promiseGet("/api/weshop/goods/getGoodsPromListNew1/" + os.stoid + "/" + item1.goods_id + "/0" + "/" + user_id, {});
1927 1927 if(m_res && m_res.data.code == 0 && m_res.data.data){
1928 1928  
1929 1929 var r_data = res.data.data;
... ... @@ -7230,7 +7230,6 @@ Page({
7230 7230 if (cart_commission) {
7231 7231 th.setData({ cart_commission });
7232 7232 }
7233   -
7234 7233 th.data.old_cartlist = cart_arr;
7235 7234 },
7236 7235  
... ... @@ -7245,5 +7244,4 @@ Page({
7245 7244 return false;
7246 7245 }
7247 7246  
7248   -
7249 7247 });
... ...
pages/cart/cart/cart.js
... ... @@ -57,6 +57,7 @@ Page({
57 57 async buy_pro_group(item1, is_state) {
58 58 //-- 代发商品不参与任何活动 --
59 59 if(item1.whsle_id) return false;
  60 + var th=this;
60 61 var url = '/api/weshop/activitylist/listGoodActInfo2New';
61 62 var user_id = getApp().globalData.user_id;
62 63 var zh_id = 0;
... ... @@ -69,11 +70,11 @@ Page({
69 70 "user_id": user_id,
70 71 }
71 72  
72   - await getApp().request.promiseGet(url, {data: req_d}).then(res => {
  73 + await getApp().request.promiseGet(url, {data: req_d}).then(e => {
73 74 if (e.data.code == 0 && e.data.data && e.data.data.length > 0) {
74 75 var arr = e.data.data;
75 76 if (arr.length) {
76   - arr3 = arr.filter(function (e) {
  77 + var arr3 = arr.filter(function (e) {
77 78 return e.s_time < ut.gettimestamp() && e.prom_type == 7;
78 79 })
79 80 if (arr3 && arr3.length) {
... ... @@ -127,6 +128,10 @@ Page({
127 128  
128 129 //-- 如果满足条件,才会显示活动 --
129 130 if (is_zh_ok) {
  131 +
  132 + //-- 组合的数组填充一下 --
  133 + th.data.zuhe_map[zh_pro0.id] = zh_pro0;
  134 +
130 135 var url1 = "/api/weshop/prom/zhbuyGoods/page";
131 136 var req_data = {
132 137 page: 1, pageSize: 2000,
... ... @@ -143,7 +148,7 @@ Page({
143 148 })
144 149  
145 150 var zh_gd_fd = gdlist.find(function (e) {
146   - return e.goods_id == item.goods_id;
  151 + return e.goods_id == item1.goods_id;
147 152 })
148 153  
149 154 if (is_zh_ok) {
... ... @@ -181,7 +186,7 @@ Page({
181 186 if (is_state == 1) {
182 187 //-- 看有没有必买商品不满足的时候 --
183 188 var f_gd = gdlist.find(function (e) {
184   - return e.zhqty > 0 && e.goods_id != item.goods_id;
  189 + return e.zhqty > 0 && e.goods_id != item1.goods_id;
185 190 })
186 191 if (f_gd) {
187 192 is_zh_ok = 0;
... ... @@ -202,10 +207,10 @@ Page({
202 207 }
203 208  
204 209 //调用接口判断优惠,
205   - var m_res=await getApp().request.promiseGet("/api/weshop/goods/getGoodsPromListNew1/" + os.stoid + "/" + gd.goods_id + "/0" + "/" + user_id, {});
  210 + var m_res=await getApp().request.promiseGet("/api/weshop/goods/getGoodsPromListNew1/" + os.stoid + "/" + item1.goods_id + "/0" + "/" + user_id, {});
206 211 if(m_res && m_res.data.code == 0 && m_res.data.data){
207 212  
208   - var r_data = res.data.data;
  213 + var r_data = m_res.data.data;
209 214 //-- 如果是搭配购的时候 --
210 215 if (r_data.collocationList) {
211 216 if(!item1.more_cx) item1.more_cx=[];
... ... @@ -217,10 +222,28 @@ Page({
217 222 //-- 判断会员能不能参与阶梯促销 --
218 223 await getApp().request.promiseGet("/api/weshop/prom/ladderForm/getNew/" + os.stoid + "/" + user_id + "/" + act_id, {}).then(res => {
219 224 if (res.data.code == 0 && res.data.data) {
  225 + th.data.ladder_map[act_id] = res.data.data;
220 226 if(!item1.more_cx) item1.more_cx=[];
221 227 item1.more_cx.push({prom_type:10,prom_id: act_id});
222 228 }
223 229 })
  230 +
  231 + if(th.data.ladder_map[act_id]){
  232 + //-- 获取阶梯规则 --
  233 + var url1 = "/api/weshop/prom/ladderList/list";
  234 + var req_data0 = {
  235 + store_id: os.stoid,
  236 + form_id: act_id,
  237 + }
  238 + await getApp().request.promiseGet(url1, {
  239 + data: req_data0
  240 + }).then(rs1 => {
  241 + if (rs1.data.code == 0 && rs1.data.data) {
  242 + var gdlist = rs1.data.data;
  243 + th.data.ladder_map[act_id].ladder_list = gdlist;
  244 + }
  245 + })
  246 + }
224 247 }
225 248 //-- 优惠促销的时候 -- 此时要注意活动的限购次数,以及活动的购买金额或者购买数量有没有满足
226 249 if (r_data.promGoodsLists) {
... ... @@ -246,7 +269,7 @@ Page({
246 269 }
247 270 }else{
248 271 //-- 按数量进行计算 --
249   - var all_price = item.goods_price * item1.goods_num;
  272 + var all_price = item1.goods_price * item1.goods_num;
250 273 if (parseFloat(fir_act.condition) > parseFloat(parseFloat(all_price).toFixed(2))) {
251 274 item1.more_cx.push(push_item);
252 275 }
... ... @@ -260,7 +283,6 @@ Page({
260 283 }
261 284 }
262 285  
263   -
264 286 },
265 287  
266 288 onLoad: function () {
... ... @@ -306,6 +328,7 @@ Page({
306 328 var is_open_offline = json_d.is_pricing_open;
307 329 th.setData({
308 330 bconfig: e,
  331 + json_d:json_d,
309 332 freight_free: e.freight_free,
310 333 weight_free: e.weight_free,
311 334 sales_rules: e.sales_rules,
... ... @@ -639,6 +662,9 @@ Page({
639 662 var th = this;
640 663 th.data.in_zhact_gdmap = {};
641 664 th.data.ladder_map = {};
  665 + th.data.zuhe_map={};
  666 + th.data.zuhe_map_good={};
  667 +
642 668 var rd = Math.random().toString(36).substr(2, 15);
643 669 var user_id = getApp().globalData.user_id;
644 670  
... ... @@ -1999,9 +2025,6 @@ Page({
1999 2025 all_num = 0;
2000 2026  
2001 2027  
2002   - th.data.zuhe_map={};
2003   - th.data.zuhe_map_good={};
2004   -
2005 2028 //-- 购物车 --
2006 2029 if (car && car.length > 0) {
2007 2030 th.data.in_zhact_gdmap = {};
... ... @@ -2009,95 +2032,109 @@ Page({
2009 2032  
2010 2033 var item = car[a].goods, is_s_sele = 1;
2011 2034 //-- 先批量判断一下活动的类型,同时要同步跟新 --
2012   - await th.cart_cx_group(item,a);
2013   -
2014   - var offline_price = 0;
2015   - var offline_num = 0;
2016   - for (var c = 0; c < item.length; c++) {
2017   - if (item[c].is_gift) continue;
2018   - all_num += item[c].goods_num;
2019   -
2020   - //不管怎么样都要移出去
2021   - var obj = JSON.parse(JSON.stringify(item[c]));
2022   - zh_calc.remove_zhprom(car, a, obj);
2023   - ladder_calc.remove_ladder_prom(car, a, obj);
2024   -
2025   - if (item[c].selected == 0) {
2026   - ischeck = 0;
2027   - is_s_sele = 0;
2028   - if (item[c].prom_type == 7) {
2029   - obj.goods_num = 0;
2030   - zh_calc.add_zhprom(car, a, obj);
  2035 + await th.cart_cx_group(item,car[a],(show_can_cx)=>{
  2036 + var offline_price = 0;
  2037 + var offline_num = 0;
  2038 + for (var c = 0; c < item.length; c++) {
  2039 + if (item[c].is_gift) continue;
  2040 + all_num += item[c].goods_num;
  2041 +
  2042 + if(item[c].prom_type==7){
  2043 + item[c].act=th.data.zuhe_map[item[c].prom_id];
2031 2044 }
2032   - if (item[c].prom_type == 10) {
2033   - obj.goods_num = 0;
2034   - ladder_calc.add_ladder_prom(car, a, obj);
  2045 + if(item[c].prom_type==10){
  2046 + item[c].act=th.data.ladder_map[item[c].prom_id];
2035 2047 }
2036 2048  
  2049 + //不管怎么样都要移出去
  2050 + var obj = JSON.parse(JSON.stringify(item[c]));
  2051 + zh_calc.remove_zhprom(car, a, obj);
  2052 + ladder_calc.remove_ladder_prom(car, a, obj);
  2053 +
  2054 + if (item[c].selected == 0) {
  2055 + ischeck = 0;
  2056 + is_s_sele = 0;
  2057 + if (item[c].prom_type == 7) {
  2058 + obj.goods_num = 0;
  2059 + zh_calc.add_zhprom(car, a, obj);
  2060 + }
  2061 + if (item[c].prom_type == 10) {
  2062 + obj.goods_num = 0;
  2063 + ladder_calc.add_ladder_prom(car, a, obj);
  2064 + }
2037 2065  
2038   - } else {
2039   - if (item[c].prom_type == 7) {
2040   - //先把商品放入组合计算的专用的区域
2041   - console.log('是组合商品---')
2042   - console.log(car);
2043   - console.log(a)
2044   - console.log(obj)
2045   - console.log('......................')
2046   - zh_calc.add_zhprom(car, a, obj);
2047   - } else if (item[c].prom_type == 10) {
2048   - ladder_calc.add_ladder_prom(car, a, obj);
2049   - }
2050   - else {
2051   - tfeel += item[c].goods_num * item[c].goods_price;
  2066 +
  2067 + } else {
  2068 + if (item[c].prom_type == 7) {
  2069 + //先把商品放入组合计算的专用的区域
  2070 + console.log('是组合商品---')
  2071 + console.log(car);
  2072 + console.log(a)
  2073 + console.log(obj)
  2074 + console.log('......................')
  2075 + zh_calc.add_zhprom(car, a, obj);
  2076 + } else if (item[c].prom_type == 10) {
  2077 + ladder_calc.add_ladder_prom(car, a, obj);
  2078 + }
  2079 + else {
  2080 + tfeel += item[c].goods_num * item[c].goods_price;
  2081 + }
  2082 + t_num += item[c].goods_num;
2052 2083 }
2053   - t_num += item[c].goods_num;
2054   - }
2055 2084  
2056   - //-- 如果这个商品是线下取价的时候 --
2057   - if (item[c].is_offline && item[c].prom_type != 7) {
2058   - offline_price += (item[c].goods_price - item[c].offline_price) * item[c].goods_num;
2059   - offline_num += item[c].goods_num;
  2085 + //-- 如果这个商品是线下取价的时候 --
  2086 + if (item[c].is_offline && item[c].prom_type != 7) {
  2087 + offline_price += (item[c].goods_price - item[c].offline_price) * item[c].goods_num;
  2088 + offline_num += item[c].goods_num;
  2089 + }
2060 2090 }
2061   - }
2062 2091  
2063   - //总的价格,把组合商品的价格拿出来
2064   - var zh_calc_res = zh_calc.calculate_zh(car, a, th);
2065   - console.log('.组合价-----------')
2066   - console.log(zh_calc_res)
2067   - //总的价格,把阶梯促销商品的价格拿出来
2068   - var ladder_calc_res = ladder_calc.calculate_ladder(car, a, th);
  2092 + //总的价格,把组合商品的价格拿出来
  2093 + var zh_calc_res = zh_calc.calculate_zh(car, a, th);
  2094 + console.log('.组合价-----------')
  2095 + console.log(zh_calc_res)
  2096 + //总的价格,把阶梯促销商品的价格拿出来
  2097 + var ladder_calc_res = ladder_calc.calculate_ladder(car, a, th);
2069 2098  
2070   - tfeel += zh_calc_res.tfeel;
2071   - offline_price += zh_calc_res.offline_price;
2072   - offline_num += zh_calc_res.offline_num;
  2099 + tfeel += zh_calc_res.tfeel;
  2100 + offline_price += zh_calc_res.offline_price;
  2101 + offline_num += zh_calc_res.offline_num;
2073 2102  
2074   - tfeel += ladder_calc_res.tfeel;
2075   - offline_price += ladder_calc_res.offline_price;
2076   - offline_num += ladder_calc_res.offline_num;
  2103 + tfeel += ladder_calc_res.tfeel;
  2104 + offline_price += ladder_calc_res.offline_price;
  2105 + offline_num += ladder_calc_res.offline_num;
2077 2106  
2078   - var txt = "requestData[" + a + "].selected";
2079   - th.setData({
2080   - [txt]: Number(is_s_sele)
2081   - });
  2107 + var txt = "requestData[" + a + "].selected";
  2108 + th.setData({
  2109 + [txt]: Number(is_s_sele)
  2110 + });
2082 2111  
2083   - //当有线下取价的时候
2084   - if (offline_price) {
2085   - var txt1 = "requestData[" + a + "].offline_price";
2086   - var txt2 = "requestData[" + a + "].offline_num";
  2112 + var txt1 = "requestData[" + a + "].show_can_cx";
2087 2113 th.setData({
2088   - [txt1]: offline_price.toFixed(2),
2089   - [txt2]: offline_num,
  2114 + [txt1]: show_can_cx
2090 2115 });
2091   - } else {
2092   - if (car[a].offline_price > 0) {
  2116 +
  2117 + //当有线下取价的时候
  2118 + if (offline_price) {
2093 2119 var txt1 = "requestData[" + a + "].offline_price";
2094 2120 var txt2 = "requestData[" + a + "].offline_num";
2095 2121 th.setData({
2096   - [txt1]: 0,
2097   - [txt2]: 0
  2122 + [txt1]: offline_price.toFixed(2),
  2123 + [txt2]: offline_num,
2098 2124 });
  2125 + } else {
  2126 + if (car[a].offline_price > 0) {
  2127 + var txt1 = "requestData[" + a + "].offline_price";
  2128 + var txt2 = "requestData[" + a + "].offline_num";
  2129 + th.setData({
  2130 + [txt1]: 0,
  2131 + [txt2]: 0
  2132 + });
  2133 + }
2099 2134 }
2100   - }
  2135 + });
  2136 +
  2137 +
2101 2138  
2102 2139 }
2103 2140 }
... ... @@ -2126,6 +2163,9 @@ Page({
2126 2163 th.setData({
2127 2164 [txt]: Number(is_s_sele)
2128 2165 });
  2166 +
  2167 +
  2168 +
2129 2169 }
2130 2170 }
2131 2171  
... ... @@ -4297,16 +4337,76 @@ Page({
4297 4337 },
4298 4338  
4299 4339 //-- 判读一下促销分组的问题 --
4300   - async cart_cx_group(goods,index){
  4340 + async cart_cx_group(goods,car_item,func){
  4341 +
  4342 + if(car_item.change_act){
  4343 +
  4344 + car_item.change_act=0;
  4345 + var show_can_cx=car_item.show_can_cx;
  4346 +
  4347 + for(var k in show_can_cx){
  4348 + var k_item=show_can_cx[k];
  4349 + var ck_prom_type=null;
  4350 + //-- 如果是多活动,先把活动按照后台的顺序排序一下,
  4351 + //-- 同时确定一下商品最终要用什么活动来购买计算。 --就是要进行切换 --
  4352 + if(k_item.act_arr.length>1){
  4353 + var json_d =this.data.json_d;
  4354 + var auto_promote_sale=json_d.auto_promote_sale;
  4355 + var sort_type='';
  4356 +
  4357 + if(!auto_promote_sale){
  4358 + sort_type='prom_type';
  4359 + }else{
  4360 + var auto_promote_sale=auto_promote_sale.split(',');
  4361 + //-- 循环处理 --
  4362 + k_item.act_arr.map(function (e){
  4363 + var fd=auto_promote_sale.indexOf(e.prom_type+'');
  4364 + e.sort=fd;
  4365 + })
  4366 + sort_type='sort';
  4367 + }
  4368 + //-- 排序一下,进行升序 --
  4369 + function comp(a, b) {
  4370 + return a[sort_type]-b[sort_type]; //升序
  4371 + }
  4372 + //活动要排序一下
  4373 + k_item.act_arr.sort(comp);
  4374 +
  4375 + //确定一下活动,先看一下有没有选择的活动
  4376 + ck_prom_type=k_item.act_arr.find(function (el){
  4377 + return el.sele;
  4378 + })
  4379 +
  4380 + }
  4381 + //-- 此时已经确定了商品的活动是什么类型的,可以确定购物车中商品的具体活动进行金额的计算 --
  4382 + if(!ck_prom_type) ck_prom_type=k_item.act_arr[0];
  4383 +
  4384 + //-- 此时要把购物车中的商品确定活动 --
  4385 + for (var b=0; b<ck_prom_type.goods.length;b++){
  4386 + //-- 开始查找 --
  4387 + var fg=goods.findIndex(function (g_item){
  4388 + return g_item.goods_id==ck_prom_type.goods[b].goods_id && [0,3,5,7,10].indexOf(g_item.prom_type)>-1;
  4389 + })
  4390 + if(fg>-1){
  4391 + goods[fg].prom_type=ck_prom_type.prom_type;
  4392 + goods[fg].prom_id=ck_prom_type.prom_id;
  4393 + }
  4394 + }
  4395 +
  4396 + }
  4397 +
  4398 + func(show_can_cx);
  4399 + }
  4400 +
4301 4401 var th=this;
4302   - //-- 促销活动对象表 ---
  4402 + //-- 促销活动对象表,最初的map表,包含活动类型,活动id,goods商品 ---
4303 4403 var cx_act_map=[];
4304 4404 for(var i=0; i<goods.length;i++){
4305 4405 var c_item=goods[i];
4306 4406 //没有选中
4307 4407 if(!c_item.selected) continue;
4308 4408 //如果是秒杀之类是商品
4309   - if([1,2,4,6,8,9].indexOf(c_item.prom_type)) continue;
  4409 + if([1,2,4,6,8,9].indexOf(c_item.prom_type)>-1) continue;
4310 4410  
4311 4411 //-- 把活动进行规整 --
4312 4412 var more_cx=c_item.more_cx;
... ... @@ -4319,7 +4419,7 @@ Page({
4319 4419 if(fd){
4320 4420 fd.goods.push(c_item);
4321 4421 }else{
4322   - var p_item={key:key,prom_type:c_item.prom_type,prom_id:c_item.prom_id,goods:[],act:n_item};
  4422 + var p_item={key:key,prom_type:n_item.prom_type,prom_id:n_item.prom_id,goods:[],act:n_item};
4323 4423 p_item.goods.push(c_item);
4324 4424 cx_act_map.push(p_item);
4325 4425 }
... ... @@ -4327,16 +4427,13 @@ Page({
4327 4427 goods[i].prom_type=0;
4328 4428 goods[i].prom_id=0;
4329 4429 }
4330   -
4331 4430 //-- 如果活动数量大于1个,那么活动就要排序一下,有商品种类数最多排再前面,降序进行排列 --
4332 4431 if(cx_act_map.length>1){
4333 4432 //门店分类要排序下
4334   - function compare() {
4335   - return function (a, b) {
  4433 + function compare(a, b) {
4336 4434 var value1 = a.goods.length;
4337 4435 var value2 = b.goods.length;
4338 4436 return value2 - value1;
4339   - }
4340 4437 }
4341 4438 cx_act_map.sort(compare);
4342 4439 }
... ... @@ -4347,8 +4444,8 @@ Page({
4347 4444  
4348 4445 var item_act_map=cx_act_map[ii];
4349 4446 //如果活动有交集的时候,商品数量一样多(不是完全相同时,就是参与的商品有交集),就按照后台确定的活动顺序
4350   - //如果活动的商品一样(那就是多活动切换),优先计算的活动按照后台确定的活动顺序
4351 4447 //如果活动商品数量少的和 活动数量多的 有交集,那么数量少的不显示,也不计算
  4448 + //如果活动的商品一样(那就是多活动切换),优先计算的活动按照后台确定的活动顺序
4352 4449 if(!th.check_ok_cx_pro(item_act_map,can_calc_cx)){
4353 4450 continue;
4354 4451 }
... ... @@ -4363,6 +4460,24 @@ Page({
4363 4460 all_pri+=t_goods[f].goods_num*t_goods[f].goods_price;
4364 4461 }
4365 4462  
  4463 + var yh_ok=1;
  4464 + switch (fir_act.prom_type){
  4465 + case 0:
  4466 + if(all_pri<fir_act.condition) {
  4467 + yh_ok=0;
  4468 + }
  4469 + break;
  4470 + case 1:
  4471 + if(all_num<fir_act.condition) {
  4472 + yh_ok=0;
  4473 + }
  4474 + break;
  4475 + }
  4476 +
  4477 + //-- 如果有满足优惠条件的时候 --
  4478 + if(yh_ok){
  4479 + can_calc_cx.push(item_act_map)
  4480 + }
4366 4481 break
4367 4482 case 7:
4368 4483 //-- 活动列表 --
... ... @@ -4379,7 +4494,7 @@ Page({
4379 4494 user_id: getApp().globalData.user_id,
4380 4495 goods_id: zh_goods[h].goods_id,
4381 4496 prom_type: 7,
4382   - prom_id: zh_id
  4497 + prom_id: item_act_map.prom_id
4383 4498 },
4384 4499 })
4385 4500 if(res.data.code==0 && res.data.data && res.data.data.promgoodsbuynum){
... ... @@ -4388,12 +4503,13 @@ Page({
4388 4503 zh_goods[h].zh_b_num=promgoodsbuynum;
4389 4504 }
4390 4505 //-- 放到map中 --
4391   - th.data.zuhe_map[item.prom_id] = act;
4392   - th.data.zuhe_map_good[item.prom_id] = zhact_gdlist;
  4506 + th.data.zuhe_map_good[item_act_map.prom_id] = zhact_gdlist;
  4507 + if(!car_item.zh_prom_goods) car_item.zh_prom_goods={};
  4508 + car_item.zh_prom_goods[item_act_map.prom_id] = zhact_gdlist;
4393 4509  
4394 4510 var zh_pro0 = null;
4395 4511 //-- 获取活动信息 --
4396   - var url = "/api/weshop/prom/zhbuy/get/" + os.stoid + "/" + zh_id + "/" + getApp().globalData.user_id;
  4512 + var url = "/api/weshop/prom/zhbuy/get/" + os.stoid + "/" + item_act_map.prom_id + "/" + getApp().globalData.user_id;
4397 4513 await getApp().request.promiseGet(url, {}).then(rh => {
4398 4514 zh_pro0 = rh.data.data;
4399 4515 })
... ... @@ -4409,13 +4525,116 @@ Page({
4409 4525  
4410 4526 }
4411 4527  
  4528 + //-- 此时来给满足条件的活动进行分组~~相同参与商品和数量的归纳再一起, --
  4529 + //-- 同时相同商品数量的活动,还要看取那一个来进行计算金额。 默认的时候是按照后台的顺序。--
  4530 + //-- 有选择的时候,就按照切换选择了什么就按照什么来计算 --
  4531 + var show_can_cx={};
4412 4532 if(can_calc_cx.length){
4413   -
  4533 + for(var p=0;p<can_calc_cx.length;p++){
  4534 + var ch_map=[];
  4535 + can_calc_cx[p].goods.map(function (gd){
  4536 + ch_map.push(gd.goods_id);
  4537 + })
  4538 + ch_map.sort();
  4539 + //-- 先找一下,有没有参与的商品一模一样的 --
  4540 + var fd=show_can_cx[ch_map.join()];
  4541 + if(fd){
  4542 + //-- 把数组添加进去 --ch_map
  4543 + fd.act_arr.push(can_calc_cx[p])
  4544 + }else{
  4545 + var e={ch_map:ch_map,act_arr:[]};
  4546 + e.act_arr.push(can_calc_cx[p]);
  4547 + show_can_cx[ch_map.join()]=e;
  4548 + }
  4549 + }
4414 4550 }
4415 4551  
4416   - th.setData({can_calc_cx})
4417   - }
  4552 + for(var k in show_can_cx){
  4553 + var k_item=show_can_cx[k];
  4554 + var ck_prom_type=null;
  4555 + //-- 如果是多活动,先把活动按照后台的顺序排序一下,
  4556 + //-- 同时确定一下商品最终要用什么活动来购买计算。 --就是要进行切换 --
  4557 + if(k_item.act_arr.length>1){
  4558 + var json_d =this.data.json_d;
  4559 + var auto_promote_sale=json_d.auto_promote_sale;
  4560 + var sort_type='';
  4561 +
  4562 + if(!auto_promote_sale){
  4563 + sort_type='prom_type';
  4564 + }else{
  4565 + var auto_promote_sale=auto_promote_sale.split(',');
  4566 + //-- 循环处理 --
  4567 + k_item.act_arr.map(function (e){
  4568 + var fd=auto_promote_sale.indexOf(e.prom_type+'');
  4569 + e.sort=fd;
  4570 + })
  4571 + sort_type='sort';
  4572 + }
  4573 + //-- 排序一下,进行升序 --
  4574 + function comp(a, b) {
  4575 + return a[sort_type]-b[sort_type]; //升序
  4576 + }
  4577 + //活动要排序一下
  4578 + k_item.act_arr.sort(comp);
  4579 +
  4580 + //确定一下活动,先看一下有没有选择的活动
  4581 + ck_prom_type=k_item.act_arr.find(function (el){
  4582 + return el.sele;
  4583 + })
  4584 +
  4585 + }
  4586 + //-- 此时已经确定了商品的活动是什么类型的,可以确定购物车中商品的具体活动进行金额的计算 --
  4587 + if(!ck_prom_type) ck_prom_type=k_item.act_arr[0];
  4588 +
  4589 + //-- 此时要把购物车中的商品确定活动 --
  4590 + for (var b=0; b<ck_prom_type.goods.length;b++){
  4591 + //-- 开始查找 --
  4592 + var fg=goods.findIndex(function (g_item){
  4593 + return g_item.goods_id==ck_prom_type.goods[b].goods_id && [0,3,5,7,10].indexOf(g_item.prom_type)>-1;
  4594 + })
  4595 + if(fg>-1){
  4596 + goods[fg].prom_type=ck_prom_type.prom_type;
  4597 + goods[fg].prom_id=ck_prom_type.prom_id;
  4598 + }
  4599 + }
4418 4600  
  4601 + }
4419 4602  
  4603 + //-- 显示到前端,并切换 --
  4604 + //th.setData({show_can_cx})
  4605 + //--- 调用回调函数 ---
  4606 + func(show_can_cx);
  4607 + },
  4608 + //-- 查看活动参与的商品是不是有重复交集的地方,是不是一样的商品数量,can_calc_cx这个数组也是按照商品的数量降序排列的--
  4609 + check_ok_cx_pro(item_act_map,can_calc_cx){
  4610 + //-- 加入第一个,返回真 --
  4611 + if(!can_calc_cx.length) return true;
  4612 + var th_goods=item_act_map.goods;
  4613 + for(var i=0;i<can_calc_cx.length;i++){
  4614 + var can_goods=can_calc_cx[i].goods;
  4615 + //计算一下有交集的数量,没有交集,OK
  4616 + var num=this.hasJiao(can_goods,th_goods);
  4617 + if(!num) continue;
  4618 + //计算一下俩个shu
  4619 + if(can_goods.length==th_goods.length && can_goods.length==num){
  4620 + return true;
  4621 + }
  4622 + if(can_goods.length>th_goods.length){
  4623 + return false;
  4624 + }
  4625 + }
  4626 + return true;
  4627 + },
  4628 + //-- 判断是不是有交集,返回交集的数量 --
  4629 + hasJiao(arr1, arr2){
  4630 + var num=0;
  4631 + arr1.map(function (e){
  4632 + var idx=arr2.findIndex(function (g){
  4633 + return g.goods_id==e.goods_id;
  4634 + })
  4635 + if(idx>-1) num++;
  4636 + })
  4637 + return num;
  4638 + }
4420 4639  
4421 4640 });
4422 4641 \ No newline at end of file
... ...
pages/cart/cart/cart.wxml
... ... @@ -38,7 +38,7 @@
38 38  
39 39 <!-- 商品的列表 -->
40 40 <block wx:if="{{requestData && requestData.length>0}}">
41   - <block wx:for="{{requestData}}" wx:key="{{index}}" wx:for-index="pidx">
  41 + <block wx:for="{{requestData}}" wx:key="{{index}}" wx:for-item="item" wx:for-index="pidx">
42 42 <!-- 门店底下的商品 -->
43 43 <view class="store">
44 44 <view class="shmd_m">
... ... @@ -53,75 +53,101 @@
53 53 </view>
54 54  
55 55 </view>
56   - <view class="order-item" data-item="{{idx}}" wx:for="{{item.goods}}" wx:for-item="items" wx:for-index="idx" wx:key="{{index}}">
57   - <block wx:if="{{!items.is_gift}}">
58   - <view bindtap="check_th_item" class="order-raido flex-vertical " data-check="{{items.selected}}" data-item="{{idx}}" data-pitems="{{pidx}}">
59   - <!--<radio color="red" checked="{{checkAllToggle||items.selected}}"></radio>-->
60   - <icon wx:if="{{checkAllToggle||items.selected}}" color="red" size="20" type="success"></icon>
61   - <text wx:else class="icon_no_sele"></text>
62   - </view>
63   - </block>
64   - <block wx:else><view class="order-raido flex-vertical " style="width: 45rpx"></view></block>
65 56  
66   - <navigator class="goods-img rel" bindtap="go_gd" data-item="{{items}}" data-gd="{{items.goods_id}}">
67   - <image class="wh100" src="{{items.original_img}}" binderror="bind_bnerr2" data-errorimg="requestData[{{pidx}}].goods[{{idx}}].original_img" data-url="{{items.original_img}}"></image>
68   - <block wx:if="{{items.is_gift}}">
69   - <view style="background-color:red" class="abs flex-center fs26" wx:if="{{items.is_gift==1}}">赠品</view>
70   - </block>
71   - <block wx:else>
72   - <view class="abs flex-center fs26" wx:if="{{items.distr_type==0}}">自选</view>
73   - <view class="abs flex-center fs26" wx:if="{{items.distr_type==1}}">自提</view>
74   - <view class="abs flex-center fs26" wx:if="{{items.distr_type==2}}">物流</view>
75   - </block>
76   -
77   - <block wx:if="{{items.prom_type==7}}">
78   - <block wx:if="{{items.selected}}">
79   - <!-- 主要显示限购 -->
80   - <text wx:if="{{items.zhqty>items.goods_num}}" class="abs2">还需购买{{items.zhqty-items.goods_num}}件</text>
81   - </block>
82   - <block wx:else>
83   - <text wx:if="{{items.zhqty}}" class="abs2">需购买{{items.zhqty}}件</text>
  57 + <block wx:for="{{item.goods}}" wx:for-item="items" wx:for-index="idx" wx:key="{{index}}">
  58 + <view class="order-item" data-item="{{idx}}">
  59 + <block wx:if="{{!items.is_gift}}">
  60 + <view bindtap="check_th_item" class="order-raido flex-vertical " data-check="{{items.selected}}" data-item="{{idx}}" data-pitems="{{pidx}}">
  61 + <!--<radio color="red" checked="{{checkAllToggle||items.selected}}"></radio>-->
  62 + <icon wx:if="{{checkAllToggle||items.selected}}" color="red" size="20" type="success"></icon>
  63 + <text wx:else class="icon_no_sele"></text>
  64 + </view>
84 65 </block>
85   - </block>
  66 + <block wx:else><view class="order-raido flex-vertical " style="width: 45rpx"></view></block>
86 67  
  68 + <navigator class="goods-img rel" bindtap="go_gd" data-item="{{items}}" data-gd="{{items.goods_id}}">
  69 + <image class="wh100" src="{{items.original_img}}" binderror="bind_bnerr2" data-errorimg="requestData[{{pidx}}].goods[{{idx}}].original_img" data-url="{{items.original_img}}"></image>
  70 + <block wx:if="{{items.is_gift}}">
  71 + <view style="background-color:red" class="abs flex-center fs26" wx:if="{{items.is_gift==1}}">赠品</view>
  72 + </block>
  73 + <block wx:else>
  74 + <view class="abs flex-center fs26" wx:if="{{items.distr_type==0}}">自选</view>
  75 + <view class="abs flex-center fs26" wx:if="{{items.distr_type==1}}">自提</view>
  76 + <view class="abs flex-center fs26" wx:if="{{items.distr_type==2}}">物流</view>
  77 + </block>
87 78  
88   - </navigator>
89   - <view class="goods-cont">
90   - <view class="goods-name">
91   - <navigator bindtap="go_gd" class="ellipsis-2 fs30" data-item="{{items}}" data-gd="{{items.goods_id}}">{{items.goods_name}}</navigator>
  79 + <block wx:if="{{items.prom_type==7}}">
  80 + <block wx:if="{{items.selected}}">
  81 + <!-- 主要显示限购 -->
  82 + <text wx:if="{{items.zhqty>items.goods_num}}" class="abs2">还需购买{{items.zhqty-items.goods_num}}件</text>
  83 + </block>
  84 + <block wx:else>
  85 + <text wx:if="{{items.zhqty}}" class="abs2">需购买{{items.zhqty}}件</text>
  86 + </block>
  87 + </block>
92 88  
93   - <view class="specifications ellipsis-1">
94   - <view wx:if="{{items.goods_color || items.goods_spec}}">
95   - {{items.goods_color}}{{items.goods_color?"/":''}}{{items.goods_spec}}</view>
96   - <view wx:else>规格1</view>
97   - </view>
98   - <block wx:if="{{items.is_gift}}">
99   - <view>{{items.goods_num}}件</view>
100   - </block>
101   - <view wx:if="{{items.buyqty>0}}" class="fs22 ml10 c-7b">组合限购{{items.buyqty}}件</view>
102   - </view>
103 89  
  90 + </navigator>
  91 + <view class="goods-cont">
  92 + <view class="goods-name">
  93 + <navigator bindtap="go_gd" class="ellipsis-2 fs30" data-item="{{items}}" data-gd="{{items.goods_id}}">{{items.goods_name}}</navigator>
104 94  
105   - <block wx:if="{{!items.is_gift}}">
106   - <view class="flex alend jc_sb">
107   - <view class="goods-price co-red baseline ellipsis-1">
108   - <view class="fs20">¥</view>
109   - <view class="fs28">{{items.goods_price}}</view>
  95 + <view class="specifications ellipsis-1">
  96 + <view wx:if="{{items.goods_color || items.goods_spec}}">
  97 + {{items.goods_color}}{{items.goods_color?"/":''}}{{items.goods_spec}}</view>
  98 + <view wx:else>规格1</view>
  99 + </view>
  100 + <block wx:if="{{items.is_gift}}">
  101 + <view>{{items.goods_num}}件</view>
  102 + </block>
  103 + <view wx:if="{{items.buyqty>0}}" class="fs22 ml10 c-7b">组合限购{{items.buyqty}}件</view>
  104 + </view>
110 105  
111   - <view wx:if="{{items.is_offline}}" class="quan_color flex ai-center"><text>券后 ¥{{g_filter.toFix(items.offline_price,2)}}</text></view>
112 106  
  107 + <block wx:if="{{!items.is_gift}}">
  108 + <view class="flex alend jc_sb">
  109 + <view class="goods-price co-red baseline ellipsis-1">
  110 + <view class="fs20">¥</view>
  111 + <view class="fs28">{{items.goods_price}}</view>
113 112  
114   - </view>
115   - <view class="count">
116   - <view bindtap="{{items.goods_num <= 1 ? '':'subNum'}}" class="sub fs28 {{items.goods_num <= 1 ? 'active':''}}" data-pitems="{{pidx}}" data-item="{{idx}}">一</view>
117   - <input class="goodadd" bindblur="valueToNum" data-pitems="{{pidx}}" data-item="{{idx}}"
118   - bindinput="refresh_input" type="number" value="{{items.goods_num}}"></input>
119   - <view class="add" bindtap="addNum" data-pitems="{{pidx}}" data-item="{{idx}}">+</view>
120   - </view>
  113 + <view wx:if="{{items.is_offline}}" class="quan_color flex ai-center"><text>券后 ¥{{g_filter.toFix(items.offline_price,2)}}</text></view>
  114 +
  115 +
  116 + </view>
  117 + <view class="count">
  118 + <view bindtap="{{items.goods_num <= 1 ? '':'subNum'}}" class="sub fs28 {{items.goods_num <= 1 ? 'active':''}}" data-pitems="{{pidx}}" data-item="{{idx}}">一</view>
  119 + <input class="goodadd" bindblur="valueToNum" data-pitems="{{pidx}}" data-item="{{idx}}"
  120 + bindinput="refresh_input" type="number" value="{{items.goods_num}}"></input>
  121 + <view class="add" bindtap="addNum" data-pitems="{{pidx}}" data-item="{{idx}}">+</view>
  122 + </view>
  123 + </view>
  124 + </block>
  125 + </view>
121 126 </view>
122   - </block>
123   - </view>
124   - </view>
  127 +
  128 + <!-- 验证活动是不是多个,要不要显示切换 -->
  129 + <!-- 新增促销多活动的排版 -->
  130 + <view class="bdt16"
  131 + wx:if="{{g_filter.is_more_act(items,item.show_can_cx) && item.show_can_cx[items.goods_id] && item.show_can_cx[items.goods_id].act_arr.length>1}}">
  132 + <view data-coupon="1" bindtap="switch_cx_group" class="cx-frame flex" style="position: relative">
  133 + <view class="cx-sizs fs30">促销</view>
  134 + <view class="flex ai_c f1 pdh20">
  135 + <view class="xc-coupon-fram" wx:for="{{item.show_can_cx[items.goods_id].act_arr}}" >
  136 + <view wx:if="{{item.prom_type==3}}" class="xc-coupon t-c four-level-word">优惠促销</view>
  137 + <view wx:if="{{item.prom_type==5}}" class="xc-coupon t-c four-level-word">搭配促销</view>
  138 + <view wx:if="{{item.prom_type==7}}" class="xc-coupon t-c four-level-word">组合购</view>
  139 + <view wx:if="{{item.prom_type==10}}" class="xc-coupon t-c four-level-word">阶梯促销</view>
  140 + </view>
  141 + </view>
  142 + <view class="cx-obtain-coupon wsize">
  143 + <text class="bg_jj"></text>
  144 + </view>
  145 + </view>
  146 + </view>
  147 +
  148 + </block >
  149 +
  150 +
125 151 </view>
126 152 <!--- 去凑单 -->
127 153 <view style="margin-top: 20rpx; padding: 0 30rpx">
... ...
pages/cart/cart/cart.wxss
... ... @@ -399,3 +399,80 @@ page {
399 399 text-align: center; line-height: 30rpx;
400 400 left: 0;bottom: 0;color: #fff; font-size: 20rpx;
401 401 }
  402 +
  403 +
  404 +.cx-frame {
  405 + /* border-top:3rpx solid #eee; */
  406 + /* width:99%;
  407 + height: 95rpx;
  408 + line-height: 95rpx;
  409 + padding-left:24rpx; */
  410 + padding: 20rpx;
  411 +}
  412 +
  413 +.cx-frame .cx-sizs {
  414 + /* width: 68rpx; */
  415 + /* height: 100%; */
  416 + /* line-height: 100rpx; */
  417 + /* overflow: hidden; */
  418 + /* margin-left: 10rpx; */
  419 +}
  420 +
  421 +.xc-coupon-fram {
  422 + position: relative;
  423 + margin-right: 16rpx;
  424 + /* width:200rpx; */
  425 + /* padding-top:30rpx; */
  426 +
  427 +}
  428 +
  429 +.xc-coupon-fram .xc-coupon {
  430 + /* width:175rpx ;
  431 + height: 40rpx;
  432 + line-height: 40rpx; */
  433 + background-color: #d60021;
  434 + /* margin:0 auto; */
  435 + color: #fff;
  436 + padding: 6rpx 20rpx;
  437 +
  438 +}
  439 +
  440 +.xc-coupon-fram .xc-circular {
  441 + width: 16rpx;
  442 + height: 16rpx;
  443 + background-color: white;
  444 + position: absolute;
  445 + top: 50%;
  446 + /* left: -10rpx; */
  447 + transform: translateY(-50%);
  448 +}
  449 +
  450 +.cx-obtain-coupon {
  451 + /* width: 65rpx;
  452 + height: 100%;
  453 + padding-left:15rpx; */
  454 + color: #d70025;
  455 + display: flex;
  456 + align-items: center;
  457 + /* position: absolute;
  458 + right: 5rpx; */
  459 +}
  460 +
  461 +.bg_jj {
  462 + width: 14rpx;
  463 + height: 14rpx;
  464 + border-top: 2rpx solid #d70026;
  465 + border-right: 2rpx solid #d70026;
  466 + transform: rotateZ(45deg);
  467 + display: inline-block;
  468 + margin-bottom: 3rpx;
  469 +}
  470 +
  471 +.bg_jj.down {
  472 + transform: rotateZ(135deg);
  473 +}
  474 +
  475 +.bg_jj.up {
  476 + transform: rotateZ(-45deg);
  477 + margin-top: 6rpx;
  478 +}
... ...
pages/cart/cart/g_filter.wxs
... ... @@ -28,11 +28,19 @@ var g_filters = {
28 28 }
29 29 val = parseFloat(val);
30 30 return val.toFixed(count)
31   - }
  31 + },
  32 +
  33 + //判断商品是不是有活动切换
  34 + is_more_act:function (items,show_can_cx){
  35 + if([1,2,4,6,8,9].indexOf(items.prom_type)>-1) return false;
  36 + if(!show_can_cx) return false;
  37 + return true;
  38 + }
32 39 }
33 40 module.exports = {
34 41 has_char: g_filters.has_char,
35 42 beg_time: g_filters.beg_time,
36 43 end_time: g_filters.end_time,
37 44 toFix: g_filters.toFix,
  45 + is_more_act: g_filters.is_more_act,
38 46 }
39 47 \ No newline at end of file
... ...
pages/cart/cart/zh_calculate.js
... ... @@ -534,10 +534,12 @@ module.exports = {
534 534 return 0;
535 535 }
536 536 var goods =gdlist;
  537 + var all_num=0;
  538 + var need_to_buy=0;
537 539 for (var i in goods) {
538 540 var item = goods[i];
539 541 var cart_num = get_num(item).goods_num;
540   - var zh_b_num = get_num2(item).zh_b_num;
  542 + var zh_b_num = get_num(item).zh_b_num;
541 543 if (!cart_num) {
542 544 if (item.zhqty) {
543 545 need_to_buy += item.zhqty;
... ...
pages/goods/goodsInfo/goodsInfo.js
... ... @@ -3026,7 +3026,7 @@ Page({
3026 3026 this.sele_spec_chech_activity(nor);
3027 3027  
3028 3028 //如果是秒杀,拼团等互动,就不重新算界面
3029   - if([1,2,4,6,8,9].indexOf(this.data.base_nor_prom_type)>0){ return false; }
  3029 + if([1,2,4,6,8,9].indexOf(this.data.base_nor_prom_type)>-1){ return false; }
3030 3030  
3031 3031 this.check_has_flash(gid);
3032 3032 var url = '/api/weshop/activitylist/listGoodActInfo2New';
... ...