Files
BlackFruit-UI/clientarea/hgcloud/js/shoppingCar.js
yiqiu 3b41cffbc9
All checks were successful
continuous-integration/drone/push Build is passing
feat: 会员中心 hgcloud 主题初始化 + drone 部署步骤
- 解压官方默认主题 default_yfMBA.tar.gz 到 clientarea/hgcloud/
- .gitignore 排除压缩包和临时解压目录
- drone 新增步骤: 同步 hgcloud 到 /clientarea/template/pc/
2026-03-19 17:56:44 +08:00

380 lines
13 KiB
JavaScript

(function (window, undefined) {
var old_onload = window.onload;
window.onload = function () {
const template = document.getElementsByClassName("template")[0];
Vue.prototype.lang = window.lang;
new Vue({
components: {
asideMenu,
topMenu,
discountCode,
eventCode,
},
created() {
localStorage.frontMenusActiveId = "";
this.getCommonData();
},
mounted() {
this.addons_js_arr = JSON.parse(
document.querySelector("#addons_js").getAttribute("addons_js")
); // 插件列表
const arr = this.addons_js_arr.map((item) => {
return item.name;
});
if (arr.includes("PromoCode")) {
// 开启了优惠码插件
this.isShowPromo = true;
}
if (arr.includes("IdcsmartClientLevel")) {
// 开启了等级优惠
this.isShowLevel = true;
}
if (arr.includes("EventPromotion")) {
// 开启活动满减
this.isShowFull = true;
}
this.getCartList();
},
updated() {
// 关闭loading
document.getElementById("mainLoading").style.display = "none";
document.getElementsByClassName("template")[0].style.display = "block";
},
destroyed() {},
data() {
return {
timer1: null,
listLoding: false,
commonData: {},
searchVal: "",
checkedCities: [],
checkAll: false, // 是否全选
visible: false,
showList: [],
addons_js_arr: [], // 插件列表
shoppingList: [],
isShowPromo: false, // 是否开启优惠码
isShowLevel: false, // 是否开启等级优惠
isShowFull: false, // 是否开启满减优惠
settleLoading: false,
};
},
filters: {
formateTime(time) {
if (time && time !== 0) {
return formateDate(time * 1000);
} else {
return "--";
}
},
filterMoney(money) {
if (isNaN(money) || money * 1 < 0) {
return "0.00";
} else {
return formatNuberFiexd(money);
}
},
},
computed: {
totalPrice() {
const arr = [];
this.checkedCities.forEach((position) => {
this.showList.forEach((item) => {
if (position === item.position) {
arr.push(item);
}
});
});
return arr.reduce((pre, cur) => {
return pre + cur.calcItemPrice * 1;
}, 0);
},
nowList() {
if (this.searchVal !== "") {
return this.showList.filter((item) =>
item.name.includes(this.searchVal)
);
} else {
return this.showList;
}
},
},
methods: {
// 获取购物车列表
getCartList() {
this.listLoding = true;
cartList()
.then((res) => {
this.shoppingList = res.data.data.list.map((item, index) => {
item.price = 0; // 商品单价
item.calcItemPrice = 0;
item.code_discount = 0; // 商品优惠码抵扣金额
item.level_discount = 0; // 商品等级优惠折扣金额
item.eventDiscount = 0; // 商品活动优惠金额
item.isUseDiscountCode = false; // 商品是否使用优惠码
item.position = index; // 商品所在购物车位置
item.isShowTips = false; // 是否提示商品库存不足
item.priceLoading = true; // 商品价格loading
if (item.stock_control === 1 && item.qty > item.stock_qty) {
item.isShowTips = true;
item.qty = item.stock_qty;
}
item.isLoading = true; // 商品loading
return item;
});
const arr = this.shoppingList.filter((arritem) => {
return arritem.customfield?.is_domain !== 1;
});
this.listLoding = false;
this.showList = [...arr];
this.showList.forEach((item) => {
this.getConfigOption(item);
});
})
.catch((err) => {
console.log(err);
this.listLoding = false;
});
},
// 获取商品配置项价格
getConfigOption(item) {
const params = {
config_options: {
...item.config_options,
promo_code: item.customfield.promo_code,
event_promotion: item.customfield.event_promotion,
},
qty: item.qty,
};
item.priceLoading = true;
configOption(item.product_id, params)
.then(async (res) => {
item.info = res.data.data;
const son_previews = [];
if (res.data.data.other && res.data.data.other.son_previews) {
res.data.data.other.son_previews.forEach((i) => {
i.forEach((items) => {
son_previews.push(items);
});
});
}
item.preview = res.data.data.preview.concat(son_previews);
item.price = res.data.data.price * 1;
item.calcItemPrice = res.data.data.price_total * 1;
item.level_discount =
res.data.data.price_client_level_discount * 1 || 0;
item.code_discount =
res.data.data.price_promo_code_discount * 1 || 0;
item.eventDiscount =
res.data.data.price_event_promotion_discount * 1 || 0;
})
.catch((err) => {
item.preview = [];
})
.finally(() => {
item.priceLoading = false;
item.isLoading = false;
this.$forceUpdate();
});
},
// 更改活动
changeEventCode(priceObj, item) {
if (item.customfield.event_promotion == priceObj.id) {
return;
}
item.customfield.event_promotion = priceObj.id;
const params = {
position: item.position,
product_id: item.product_id,
config_options: item.config_options, // 配置信息
qty: item.qty, // 商品数量
customfield: item.customfield,
self_defined_field: item.self_defined_field,
};
updateCart(params).then((res) => {
this.getConfigOption(item);
});
},
// 使用优惠码
getDiscount(data) {
this.showList.forEach((item) => {
if (item.position === data[2]) {
item.customfield.promo_code = data[1];
item.isUseDiscountCode = true;
const params = {
position: data[2],
product_id: item.product_id,
config_options: item.config_options, // 配置信息
qty: item.qty, // 商品数量
customfield: item.customfield,
self_defined_field: item.self_defined_field,
};
updateCart(params).then((res) => {});
this.getConfigOption(item);
}
});
},
// 删除优惠码
removeDiscountCode(item) {
item.customfield.promo_code = "";
item.isUseDiscountCode = false;
let i;
this.shoppingList.forEach((items, index) => {
if (items.position === item.position) {
i = index;
}
});
const params = {
position: i,
product_id: item.product_id,
config_options: item.config_options, // 配置信息
qty: item.qty, // 商品数量
customfield: item.customfield,
self_defined_field: item.self_defined_field,
};
updateCart(params).then((res) => {
this.getConfigOption(item);
});
},
// 搜索
searchValChange(value) {
this.checkedCities = [];
this.checkAll = false;
},
// 点击全选按钮
handleCheckAllChange(val) {
const arr = this.showList.filter((item) => {
return item.info;
});
const arrr = arr.map((item) => {
return item.position;
});
this.checkedCities = val ? arrr : [];
},
// 编辑商品数量
handelEditGoodsNum(index, num) {
return editGoodsNum(index, num);
},
// 编辑商品
goGoods(item) {
if (item.info) {
const obj = {
config_options: item.config_options, // 配置信息
position: item.position, // 修改接口要用的位置信息
qty: item.qty, // 商品数量
customfield: item.customfield,
self_defined_field: item.self_defined_field,
};
sessionStorage.setItem("product_information", JSON.stringify(obj));
}
location.href = `goods.htm?id=${item.product_id}&change=true&name=${item.name}`;
},
// 监听购物车选择数量变化
handleCheckedCitiesChange(value) {
this.checkAll = value.length === this.showList.length;
},
// 删除商品函数
deleteGoodsList(arr, isRefsh) {
deleteGoods(arr)
.then((res) => {
if (res.data.status === 200) {
this.$message.success(res.data.msg);
isRefsh && this.getCartList();
this.$refs.topMenu.getCartList();
}
})
.catch((err) => {
err.data.msg && this.$message.error(err.data.msg);
})
.finally(() => {});
},
// 点击删除按钮
handelDeleteGoods(item, index) {
// 调用删除接口
const p = item.position;
let shoppingList_index = 0;
let checkedCities_index = 0;
// 删除列表中对应的商品
this.showList.splice(index, 1);
this.shoppingList.forEach((item, index) => {
if (item.position === p) {
shoppingList_index = index;
}
});
this.checkedCities.forEach((item, index) => {
if (item.position === p) {
checkedCities_index = index;
}
});
this.shoppingList.splice(shoppingList_index, 1);
this.checkedCities.splice(checkedCities_index, 1);
this.deleteGoodsList([shoppingList_index]);
},
// 删除选中的商品
deleteCheckGoods() {
if (this.checkedCities.length === 0) {
this.$message.warning(lang.referral_status9);
return;
} else {
this.deleteGoodsList(this.checkedCities, true);
this.checkedCities = [];
}
},
// 商品数量增加减少
handleChange(n, o, item, index) {
if (item.stock_control === 1 && n >= item.stock_qty) {
this.$message.error(lang.referral_status10);
}
// 节个流
if (this.timer1) {
clearTimeout(this.timer1);
this.timer1 = null;
}
this.timer1 = setTimeout(() => {
this.handelEditGoodsNum(index, n)
.then(async () => {
this.getConfigOption(item);
})
.catch((err) => {
err.data.msg && this.$message.error(err.data.msg);
})
.finally(() => {
clearTimeout(this.timer1);
this.timer1 = null;
});
}, 500);
},
// 结算
goSettle() {
this.settleLoading = true;
if (this.checkedCities.length === 0) {
this.$message.warning(lang.referral_status11);
return;
}
const arr = []; // 装的是被选中的商品在购物位置的索引
this.shoppingList.forEach((item, index) => {
this.checkedCities.forEach((items) => {
if (items == item.position) {
arr.push(index);
}
});
});
sessionStorage.shoppingCartList = JSON.stringify(arr);
location.href = `/cart/settlement.htm?cart=1`;
this.settleLoading = false;
},
// 获取通用配置
getCommonData() {
this.commonData = JSON.parse(
localStorage.getItem("common_set_before")
);
document.title =
this.commonData.website_name + "-" + lang.shoppingCar_title;
},
},
}).$mount(template);
typeof old_onload == "function" && old_onload();
};
})(window);