sync:购物车针对已存在商品被下架 样式 逻辑修改 c752b19acd

pull/132/MERGE
YunaiV 2025-04-27 23:48:43 +08:00
parent 5dfa496998
commit 39e04ae78d
2 changed files with 46 additions and 12 deletions

View File

@ -15,10 +15,10 @@
件商品 件商品
</view> </view>
<view class="header-right"> <view class="header-right">
<button v-if="state.editMode" class="ss-reset-button" @tap="state.editMode = false"> <button v-if="state.editMode" class="ss-reset-button" @tap="onChangeEditMode(false)">
取消 取消
</button> </button>
<button v-else class="ss-reset-button ui-TC-Main" @tap="state.editMode = true"> <button v-else class="ss-reset-button ui-TC-Main" @tap="onChangeEditMode(true)">
编辑 编辑
</button> </button>
</view> </view>
@ -35,6 +35,12 @@
@tap.stop="onSelectSingle(item.id)" @tap.stop="onSelectSingle(item.id)"
/> />
</label> </label>
<view v-if="item.spu?.status !== 1 && !state.editMode" class="down-box">
该商品已下架
</view>
<view v-else-if="item.spu?.stock <= 0 && !state.editMode" class="down-box">
该商品无库存
</view>
<s-goods-item <s-goods-item
:img="item.spu.picUrl || item.goods.image" :img="item.spu.picUrl || item.goods.image"
:price="item.sku.price" :price="item.sku.price"
@ -114,7 +120,7 @@
const cart = sheep.$store('cart'); const cart = sheep.$store('cart');
const state = reactive({ const state = reactive({
editMode: false, editMode: computed(() => cart.editMode),
list: computed(() => cart.list), list: computed(() => cart.list),
selectedList: [], selectedList: [],
selectedIds: computed(() => cart.selectedIds), selectedIds: computed(() => cart.selectedIds),
@ -127,6 +133,11 @@
cart.selectSingle(id); cart.selectSingle(id);
} }
//
function onChangeEditMode(flag) {
cart.onChangeEditMode(flag);
}
// //
function onSelectAll() { function onSelectAll() {
cart.selectAll(!state.isAllSelected); cart.selectAll(!state.isAllSelected);
@ -172,7 +183,7 @@
throw new Error('未找到商品信息'); throw new Error('未找到商品信息');
} }
// //
const deliveryTypesList = spuList.map(item => item.deliveryTypes); const deliveryTypesList = spuList.map((item) => item.deliveryTypes);
// //
const hasConflict = checkDeliveryConflicts(deliveryTypesList); const hasConflict = checkDeliveryConflicts(deliveryTypesList);
if (hasConflict) { if (hasConflict) {
@ -202,9 +213,7 @@
for (let j = i + 1; j < deliveryTypesList.length; j++) { for (let j = i + 1; j < deliveryTypesList.length; j++) {
const nextTypes = deliveryTypesList[j]; const nextTypes = deliveryTypesList[j];
// //
const hasNoIntersection = !currentTypes.some(type => const hasNoIntersection = !currentTypes.some((type) => nextTypes.includes(type));
nextTypes.includes(type),
);
if (hasNoIntersection) { if (hasNoIntersection) {
return true; return true;
} }
@ -270,6 +279,22 @@
.goods-box { .goods-box {
background-color: #fff; background-color: #fff;
position: relative;
}
//
.down-box {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: rgba(#fff, 0.8);
z-index: 2;
display: flex;
justify-content: center;
align-items: center;
color: #999;
font-size: 32rpx;
} }
} }
} }

View File

@ -4,26 +4,29 @@ import CartApi from '@/sheep/api/trade/cart';
const cart = defineStore({ const cart = defineStore({
id: 'cart', id: 'cart',
state: () => ({ state: () => ({
list: [], // 购物车列表 list: [], // 购物车列表invalidList + validList
selectedIds: [], // 已选列表 selectedIds: [], // 已选列表
isAllSelected: false, // 是否全选 isAllSelected: false, // 是否全选
totalPriceSelected: 0, // 选中项总金额 totalPriceSelected: 0, // 选中项总金额
newList: [], // 除去已下架的购物车列表validList
editMode: false, // 是否是编辑模式
}), }),
actions: { actions: {
// 获取购物车列表 // 获取购物车列表
async getList() { async getList() {
const { data, code } = await CartApi.getCartList(); const { data, code } = await CartApi.getCartList();
if (code === 0) { if (code === 0) {
this.list = data.validList; this.list = [...data.validList, ...data.invalidList];
this.newList = data.validList;
// 计算各种关联属性 // 计算各种关联属性
this.selectedIds = []; this.selectedIds = [];
this.isAllSelected = true; this.isAllSelected = true;
this.totalPriceSelected = 0; this.totalPriceSelected = 0;
this.list.forEach((item) => { (this.editMode ? this.list : this.newList).forEach((item) => {
if (item.selected) { if (item.selected) {
this.selectedIds.push(item.id); this.selectedIds.push(item.id);
this.totalPriceSelected += item.count * item.sku.price; this.totalPriceSelected += item.count * item.sku?.price;
} else { } else {
this.isAllSelected = false; this.isAllSelected = false;
} }
@ -31,6 +34,12 @@ const cart = defineStore({
} }
}, },
onChangeEditMode(flag) {
this.editMode = flag;
this.selectedIds = [];
this.getList();
},
// 添加购物车 // 添加购物车
async add(goodsInfo) { async add(goodsInfo) {
// 添加购物项 // 添加购物项
@ -84,7 +93,7 @@ const cart = defineStore({
async selectAll(flag) { async selectAll(flag) {
const { code } = await CartApi.updateCartSelected({ const { code } = await CartApi.updateCartSelected({
ids: this.list.map((item) => item.id), ids: this.list.map((item) => item.id),
selected: flag selected: flag,
}); });
if (code === 0) { if (code === 0) {
await this.getList(); await this.getList();