import { defineStore } from 'pinia'; import { computed, watchEffect } from 'vue'; import { ref } from 'vue'; export const useCartStore = defineStore('cart', () => { // const dinersNum = uni.cache.get('dinersNum') // const isVip = uni.cache.get('orderVIP').isVip //此用户是否是会员 // const isMemberPrice = uni.cache.get('ordershopUserInfo').isMemberPrice //此店是否可以用会员 // const isTableFee = uni.cache.get('ordershopUserInfo').isTableFee //此店是否免桌位费 // const tableFee = uni.cache.get('ordershopUserInfo').tableFee //一个餐位费多钱 // 计算向上取整 const roundUpToTwoDecimals = (num, i) => { // 先将数字乘以 100 并转换为字符串保留足够的小数位 let temp = (num * 100).toFixed(10); // 向上取整 let rounded = null if (i == 'upward') { rounded = Math.ceil(parseFloat(temp)); } else { rounded = Math.floor(parseFloat(temp)); } // 再除以 100 得到保留两位小数的结果 return rounded / 100; }; // 计算购物车商品总价格 const getTotalTotalPrices = (matchedProducts) => computed(() => { if (!matchedProducts || !Array.isArray(matchedProducts)) { return 0; } // console.log(uni.cache.get('orderVIP').isVip, uni.cache.get('ordershopUserInfo').isMemberPrice, // 111) // 购物车总数价格 let cart = matchedProducts.reduce((total, item) => { // 是否启用会员价 0否1是 if (uni.cache.get('orderVIP').isVip == 1 && uni.cache.get('ordershopUserInfo') .isMemberPrice == 1) { // memberPrice会员价 return total + (parseFloat(item.memberPrice) * parseFloat(item.num - item.returnNum)); } else { // salePrice销售价 return total + (parseFloat(item.price) * parseFloat(item.num - item.returnNum)); } }, 0); // 向上取整并保留两位小数 let result = roundUpToTwoDecimals(cart, 'upward') return result; }); // 计算商品卷所选择的总价格 const getTotalProductroll = (matchedProducts) => computed(() => { if (!matchedProducts || !Array.isArray(matchedProducts)) { return 0; } // 购物车总数价格 let cart = matchedProducts.reduce((total, item) => { // 是否启用会员价 0否1是 if (uni.cache.get('orderVIP').isVip == 1 && uni.cache.get('ordershopUserInfo') .isMemberPrice == 1) { // memberPrice会员价 return total + parseFloat(item.memberPrice) } else { // salePrice销售价 return total + parseFloat(item.price) } }, 0); // 向上取整并保留两位小数 let result = roundUpToTwoDecimals(cart, 'upward') return result; }); // 桌位置 const getTotalSeatcharge = (seatNum) => computed(() => { // 是否免除桌位费 0 否 1 是 let cart = 0 if (uni.cache.get('ordershopUserInfo').isTableFee == 0 && seatNum) { cart = Math.ceil(parseFloat(seatNum) * parseFloat( uni.cache.get('ordershopUserInfo').tableFee) * 100) / 100; } // 向下取整并保留两位小数 let result = roundUpToTwoDecimals(cart, 'downward') return result; }); // 计算购物车总打包费用(向下取整并保留两位小数) const getTotalPackFee = (cartList) => computed(() => { const total = cartList.reduce((sum, item) => { return sum + (item.packAmount * (item.packNumber || (item.num - item.returnNum))); }, 0); return Math.floor(total * 100) / 100; }); return { getTotalPackFee, getTotalSeatcharge, getTotalTotalPrices, getTotalProductroll }; });