function screen() { // 瑞幸过滤规格方法 this['RX_screen'] = function() { if (!Reflect.has(cartClass['commodity'], 'sku_code')) { let index = -1; let code = ''; outer: for (let j = 0; j < this['details']['sku_infos']['length']; j++) { let item1 = this['details']['sku_infos'][j]; index = 0; code = item1['code']; for (let k = 0; k < item1['values']['length']; k++) { let item2 = item1['values'][k]; if (this['sku'].indexOf(item2['spec_name']) != -1) { index += 1; } else { continue; } if (index >= this['sku']['length']) { this['sku_code'] = code; break outer; } } }; if (!code) this['sku_code'] = this['details']['sku_infos'][0]['code']; } } // 星巴克过滤规格方法 this['XBK_screen'] = function() { if (!Reflect.has(cartClass['commodity'], 'sku_code')) { let str = []; for (let i = 0; i < this['details']['optional']['length']; i++) { let t = this['details']['optional']; str.push(`${t[i]['id']}_${t[i]['sku_infos'].find(item=>item['checked'])['id']}`) }; this['sku_code'] = str.join(','); }; } // 麦当劳规格格式化方法 // this['5_screen'] = function() { // if (!Reflect.has(cartClass['commodity'], 'sku_code')) { // let str = []; // for (let i = 0; i < this['details']['optional']['length']; i++) { // let t = this['details']['optional'][i]; // str.push(`${t['id']}_${t['sku_infos'].find(item=>item['checked'])['id']}`) // }; // this['sku_code'] = str.join(','); // }; // } } class cartClass { // 当前所有购物车 static cart; // 当前品牌 static brand; // 当前店铺 static shop; // 当前购物车中同ID商品 static item; // 当前需要加入购物车的商品 static commodity; // 需要加入的数量 static quantity; // 商品ID static product_id; // 店铺ID static restaurant_id; constructor({ cartList, commodity, quantity }) { commodity.__proto__ = new screen(); cartClass['quantity'] = quantity; cartClass['commodity'] = commodity; cartClass['product_id'] = commodity['product_id']; cartClass['restaurant_id'] = commodity['restaurant_id']; // 获取当前所有店铺购物列表 cartClass['cart'] = cartList; // 当前所有购物车 下有该品牌的购物车则继续使用该品牌的购物车没有则创建一个空对象 Reflect.set(cartClass['cart'], cartClass['commodity']['brand_id'], cartClass['cart'][cartClass['commodity'][ 'brand_id' ]] || {}); cartClass['brand'] = cartClass['cart'][cartClass['commodity']['brand_id']]; // 当前品牌 下的某个店铺的购物车是否存在。存在则继续使用不存在则创建空对象 Reflect.set(cartClass['brand'], cartClass['restaurant_id'], cartClass['brand'][cartClass[ 'restaurant_id']] || {}); cartClass['shop'] = cartClass['brand'][cartClass['restaurant_id']]; // 当前店铺下 的购物车中是否存在该商品,存在则继续使用不存在则创建空对象 Reflect.set(cartClass['shop'], cartClass['product_id'], cartClass['shop'][cartClass['product_id']] || {}); cartClass['item'] = cartClass['shop'][cartClass['product_id']]; // 挂在瑞幸规格过滤方法 console.log(cartClass['shop'], 'shop'); }; // // 瑞幸加入购物车辅助方法 // RX_GetSkuCode() { // // 在已经排序好的可选规格中查找code // if (!Reflect.has(cartClass['commodity'], 'sku_code')) { // let item = cartClass['commodity']; // console.log(item['details']['sku_infos'].map(item => item['values'])); // let skuarr = item['details']['sku_infos'].map(e => e['values'].map(t => t['spec_name'])); // console.log(skuarr, 'skuarr'); // let index = item['sku'].screen(skuarr)['index']; // cartClass['commodity']['sku_code'] = item['details']['sku_infos'][index]['code']; // } // } // 加入购物车方法 ADD_CART() { return new Promise((resolve, reject) => { let item = cartClass['item']; /** * @注意该品牌有规格 * @因为各个品牌渠道商接口有所不通每次加入新品牌都要在此处添加方法 */ switch (cartClass['commodity']['brand_id']) { case 13: if (cartClass['commodity']['Buytype']) { // 套餐数据格式化 } else { // 规格数据格式化 cartClass['commodity'].RX_screen(); } break; case 10: if (cartClass['commodity']['Buytype']) { // 套餐数据格式化 } else { // 规格数据格式化 cartClass['commodity'].XBK_screen(); } break; } /** * @检测商品是否存在与购物车中 */ console.log(item && Reflect.has(item, 'num') && item['product_id'] == cartClass['product_id'],'--------------------'); if (item && Reflect.has(item, 'num') && item['product_id'] == cartClass['product_id']) { /** * @购物车中存在该ID商品进入添加商品方法 * @注意 * @每次加入新品牌都要在此处添加方法 */ // 规格检测 switch (cartClass['commodity']['brand_id']) { case 1: this.KFC_ADDCART().then(() => { resolve(cartClass['cart']); }).catch((err) => { reject(err) }) break; case 5: this.MDL_ADDCART().then(() => { console.log('麦当劳'); resolve(cartClass['cart']); }).catch((err) => { reject(err) }) break; case 10: // this.Sbs_ADDCART() this.Sbs_ADDCART().then(() => { resolve(cartClass['cart']); }).catch((err) => { reject(err) }); break; case 13: // this.RX_ADDCART() this.RX_ADDCART().then(() => { resolve(cartClass['cart']); }).catch((err) => { reject(err) }); break; }; } else { Reflect.defineProperty(cartClass['shop'], cartClass['product_id'], { value: { // 正常逻辑新加入购物车时是没有amount字段的,而amount则是在订单页面重新购买时才会有 ...cartClass['commodity'], num: Reflect.has(cartClass['commodity'], 'amount') ? cartClass['commodity'][ 'amount' ] : cartClass['quantity'], }, writable: true, enumerable: true }); resolve(cartClass['cart']); }; }) } // 移除购物车商品 REDUCE_CART() { return new Promise((resolve, reject) => { // 减去规格删除 if (Reflect.has(cartClass['commodity'], 'sku_code')) { this.SkuDeleteMethod(); console.log('删除完成'); } else if (Reflect.has(cartClass['commodity'], 'combo_Attributes')) { // 减去套餐商品 } else { // 减去当前商品数量 cartClass['item']['num'] -= cartClass['quantity']; // 删除之后如果num小于等于0则将该商品从店铺购物车中删除 if (cartClass['item']['num'] <= 0) { Reflect.deleteProperty(cartClass['shop'], cartClass['commodity']['product_id']); }; }; resolve(cartClass['cart']) }) } // 肯德基添加商品 KFC_ADDCART() { // 后期可能会加入限购等逻辑,所以写为Promise方式来执行加入购物车逻辑,当需要在某些条件下打断加入购物车时直接抛出reject即可 return new Promise((resolve,reject)=>{ // 正常加入 let item = cartClass['item']; item['num'] += cartClass['quantity']; // 此处可根据自行逻辑进行方法执行 if(true){ resolve(cartClass['cart']); }else{ reject('禁止加入'); } }) } // 麦当劳添加商品 MDL_ADDCART() { // 后期可能会加入限购等逻辑,所以写为Promise方式来执行加入购物车逻辑,当需要在某些条件下打断加入购物车时直接抛出reject即可 return new Promise((resolve,reject)=>{ // 套餐加入 if(cartClass['item']?.sku_code){ this.SkuAddMethod(); }else{ // 正常加入 let item = cartClass['item']; item['num'] += cartClass['quantity']; } // 此处可根据自行逻辑进行方法执行 if(true){ resolve(cartClass['cart']); }else{ reject('禁止加入'); } }) } // 瑞幸添加商品 RX_ADDCART() { // 后期可能会加入限购等逻辑,所以写为Promise方式来执行加入购物车逻辑,当需要在某些条件下打断加入购物车时直接抛出reject即可 return new Promise((resolve, reject) => { // 规格加入 this.SkuAddMethod(); // 套餐加入 resolve(cartClass['cart']); // reject('禁止加入'); }) } // 星巴克添加商品 Sbs_ADDCART() { // 后期可能会加入限购等逻辑,所以写为Promise方式来执行加入购物车逻辑,当需要在某些条件下打断加入购物车时直接抛出reject即可 return new Promise((resolve, reject) => { // 规格加入 this.SkuAddMethod(); // 套餐加入 resolve(cartClass['cart']); // reject('禁止加入'); }) } // 规格商品加入方法 SkuAddMethod() { // 规格是否相同 if (cartClass['item']['sku_code'] == cartClass['commodity']['sku_code']) { cartClass['item']['num'] += (+cartClass['quantity']); } else { // 同一商品,不同规格,检查是否存在存放多规格数组 if (Reflect.has(cartClass['item'], 'Differentskulist')) { // 有则检查当前需要加入的商品在多规格数组中是否存在 let index; // 如果存在则会使用index变量直接修改已存在数据 // 检查多规格数组中是否存在该商品 let iscommodity = cartClass['item']['Differentskulist'].find((e, i) => { if (e['sku_code'] == cartClass['commodity']['sku_code']) { index = i; return e } }); // 不存在则直接push进去一个新的商品对象 if (iscommodity === undefined) { cartClass['item']['Differentskulist'].push(cartClass['commodity']); } else { // 存在则将商品数量加1 cartClass['item']['Differentskulist'][index]['num'] += (+cartClass['quantity']); }; } else { // 没有,则创建空数组 cartClass['item']['Differentskulist'] = []; cartClass['item']['Differentskulist'].push(cartClass['commodity']); } } } // 规格商品删除方法 SkuDeleteMethod() { if (cartClass['item']['sku_code'] == cartClass['commodity']['sku_code']) { cartClass['item']['num'] -= cartClass['quantity']; if (cartClass['item']['num'] <= 0) { if (!Reflect.has(cartClass['item'], 'Differentskulist') || cartClass['item'][ 'Differentskulist' ]['length'] <= 0) { Reflect.deleteProperty(cartClass['shop'], cartClass['commodity']['product_id']); } else { if (cartClass['item']['Differentskulist']['length'] > 0) { Reflect.defineProperty(cartClass['shop'], cartClass['commodity'][ 'product_id' ], { value: { ...cartClass['item'], ...cartClass['item']['Differentskulist'][0] }, writable: true, enumerable: true }); cartClass['item']['Differentskulist'].splice(0, 1); } } }; } else { let index; // 如果存在则会使用index变量直接修改已存在数据 // 检查多规格数组中是否存在该商品 let iscommodity = cartClass['item']['Differentskulist'].find((e, i) => { if (e['sku_code'] == cartClass['commodity']['sku_code']) { index = i; return e } }); cartClass['item']['Differentskulist'][index]['num'] -= cartClass['quantity']; // 商品数量为0直接删除 if (cartClass['item']['Differentskulist'][index]['num'] <= 0) { cartClass['item']['Differentskulist'].splice(index, 1) }; } } }; export default cartClass