|
@@ -512,6 +512,7 @@ import MxDatePicker from "@/components/mx-datepicker/mx-datepicker.vue";
|
|
|
import HbSelect from "@/components/hb/hb-select";
|
|
import HbSelect from "@/components/hb/hb-select";
|
|
|
import { isHbAvailable } from "@/utils/hbScope";
|
|
import { isHbAvailable } from "@/utils/hbScope";
|
|
|
import HomeNoticeBar from "@/components/home/noticeBar.vue";
|
|
import HomeNoticeBar from "@/components/home/noticeBar.vue";
|
|
|
|
|
+import { BUY_NOW_MIX_LIST_KEY } from "@/constant/storageKeys";
|
|
|
|
|
|
|
|
/** 配送方式 style 与雪碧图图标映射(名称取自接口 name) */
|
|
/** 配送方式 style 与雪碧图图标映射(名称取自接口 name) */
|
|
|
const SEND_TYPE_ICON = {
|
|
const SEND_TYPE_ICON = {
|
|
@@ -536,6 +537,8 @@ export default {
|
|
|
pageType: "cg",
|
|
pageType: "cg",
|
|
|
autoLoad: false,
|
|
autoLoad: false,
|
|
|
list: [],
|
|
list: [],
|
|
|
|
|
+ /** 是否「立即购买」模式:只结算详情页当前商品,不影响购物车 */
|
|
|
|
|
+ isBuyNow: false,
|
|
|
showDatePicker: false,
|
|
showDatePicker: false,
|
|
|
defaultPickerDate: "",
|
|
defaultPickerDate: "",
|
|
|
form: {
|
|
form: {
|
|
@@ -611,21 +614,17 @@ export default {
|
|
|
// 从地址列表返回时 storage 可能已被清空,需从 option 恢复 account/hdId
|
|
// 从地址列表返回时 storage 可能已被清空,需从 option 恢复 account/hdId
|
|
|
this.syncShopContext();
|
|
this.syncShopContext();
|
|
|
this._syncMergedSelectListIfNeeded();
|
|
this._syncMergedSelectListIfNeeded();
|
|
|
- const selectList = this.$util.copyObject(this.selectList);
|
|
|
|
|
- const mergedMap = {};
|
|
|
|
|
- const list = [];
|
|
|
|
|
- for (let i = 0; i < selectList.length; i++) {
|
|
|
|
|
- const item = selectList[i];
|
|
|
|
|
- const key = this.getSelectRowKey(item) || String(item.id);
|
|
|
|
|
- if (mergedMap[key]) {
|
|
|
|
|
- mergedMap[key].bigCount = Number(mergedMap[key].bigCount || 0) + Number(item.bigCount || 0);
|
|
|
|
|
- mergedMap[key].smallCount = Number(mergedMap[key].smallCount || 0) + Number(item.smallCount || 0);
|
|
|
|
|
|
|
+ // 首次进入时若存在「立即购买」商品缓存,则只结算该商品,不读取购物车(返回地址列表等场景不重复读取)
|
|
|
|
|
+ if (!this.isBuyNow) {
|
|
|
|
|
+ const buyNowList = uni.getStorageSync(BUY_NOW_MIX_LIST_KEY);
|
|
|
|
|
+ if (Array.isArray(buyNowList) && buyNowList.length) {
|
|
|
|
|
+ uni.removeStorageSync(BUY_NOW_MIX_LIST_KEY);
|
|
|
|
|
+ this.isBuyNow = true;
|
|
|
|
|
+ this.list = this.$util.copyObject(buyNowList);
|
|
|
} else {
|
|
} else {
|
|
|
- mergedMap[key] = this.$util.copyObject(item);
|
|
|
|
|
- list.push(mergedMap[key]);
|
|
|
|
|
|
|
+ this.list = this.buildMergedCartList();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- this.list = list;
|
|
|
|
|
|
|
|
|
|
this.loadShopInfo();
|
|
this.loadShopInfo();
|
|
|
this.loadSelectedAddress();
|
|
this.loadSelectedAddress();
|
|
@@ -653,6 +652,18 @@ export default {
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
computed: {
|
|
computed: {
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 红包最低消费口径:覆盖 mixin 的 selectList 统计。
|
|
|
|
|
+ * 立即购买只按当前结算明细 list 计价,购物车结算时 list 即为合并后的明细,
|
|
|
|
|
+ * 避免红包金额误用购物车合计。
|
|
|
|
|
+ */
|
|
|
|
|
+ allPriceFun() {
|
|
|
|
|
+ let price = 0;
|
|
|
|
|
+ (this.list || []).forEach((item) => {
|
|
|
|
|
+ price += this.getSelectItemTotalPrice(item);
|
|
|
|
|
+ });
|
|
|
|
|
+ return Math.round(price * 100) / 100;
|
|
|
|
|
+ },
|
|
|
/** 混合结算商品金额(花束+花材,按行独立计价) */
|
|
/** 混合结算商品金额(花束+花材,按行独立计价) */
|
|
|
mixGoodsPrice() {
|
|
mixGoodsPrice() {
|
|
|
let price = 0;
|
|
let price = 0;
|
|
@@ -1004,6 +1015,27 @@ export default {
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
methods: {
|
|
methods: {
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 将购物车 selectList 按行唯一键合并,得到结算明细(购物车结算用)。
|
|
|
|
|
+ * 立即购买模式不走这里,直接使用详情页传入的单商品明细。
|
|
|
|
|
+ */
|
|
|
|
|
+ buildMergedCartList() {
|
|
|
|
|
+ const selectList = this.$util.copyObject(this.selectList);
|
|
|
|
|
+ const mergedMap = {};
|
|
|
|
|
+ const list = [];
|
|
|
|
|
+ for (let i = 0; i < selectList.length; i++) {
|
|
|
|
|
+ const item = selectList[i];
|
|
|
|
|
+ const key = this.getSelectRowKey(item) || String(item.id);
|
|
|
|
|
+ if (mergedMap[key]) {
|
|
|
|
|
+ mergedMap[key].bigCount = Number(mergedMap[key].bigCount || 0) + Number(item.bigCount || 0);
|
|
|
|
|
+ mergedMap[key].smallCount = Number(mergedMap[key].smallCount || 0) + Number(item.smallCount || 0);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ mergedMap[key] = this.$util.copyObject(item);
|
|
|
|
|
+ list.push(mergedMap[key]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return list;
|
|
|
|
|
+ },
|
|
|
/** 是否秒杀/团购活动花束行(与 affirmMixv2 提交 activityType 一致) */
|
|
/** 是否秒杀/团购活动花束行(与 affirmMixv2 提交 activityType 一致) */
|
|
|
isActivityBouquetItem(item) {
|
|
isActivityBouquetItem(item) {
|
|
|
return this.isBouquetItem(item) && (item.activityType === "seckill" || item.activityType === "groupBuy");
|
|
return this.isBouquetItem(item) && (item.activityType === "seckill" || item.activityType === "groupBuy");
|
|
@@ -1988,7 +2020,10 @@ export default {
|
|
|
this.$msg(res.msg);
|
|
this.$msg(res.msg);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- this.removeMemory();
|
|
|
|
|
|
|
+ // 立即购买下单成功不影响购物车:仅购物车结算成功后才清空购物车
|
|
|
|
|
+ if (!this.isBuyNow) {
|
|
|
|
|
+ this.removeMemory();
|
|
|
|
|
+ }
|
|
|
}).catch((err) => {
|
|
}).catch((err) => {
|
|
|
uni.hideLoading();
|
|
uni.hideLoading();
|
|
|
this.$msg(err.msg);
|
|
this.$msg(err.msg);
|