sync:购物车针对已存在商品被下架 样式 逻辑修改 c752b19acd
parent
5dfa496998
commit
39e04ae78d
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in New Issue