【代码优化】拼团重构

pull/91/head
卢越 2024-09-05 22:34:59 +08:00
parent 82a82a4bed
commit 089e0197cd
3 changed files with 62 additions and 55 deletions

View File

@ -126,7 +126,12 @@
:disabled="state.goodsInfo.stock === 0 || state.activity.status !== 0" :disabled="state.goodsInfo.stock === 0 || state.activity.status !== 0"
> >
<view class="btn-price">{{ <view class="btn-price">{{
fen2yuan(state.selectedSku.price * state.selectedSku.count || state.activity.price * state.selectedSku.count || state.goodsInfo.price * state.selectedSku.count || state.goodsInfo.price) fen2yuan(
state.selectedSku.price * state.selectedSku.count ||
state.activity.price * state.selectedSku.count ||
state.goodsInfo.price * state.selectedSku.count ||
state.goodsInfo.price,
)
}}</view> }}</view>
<view v-if="state.activity.startTime > new Date().getTime()"></view> <view v-if="state.activity.startTime > new Date().getTime()"></view>
<view v-else-if="state.activity.endTime <= new Date().getTime()">已结束</view> <view v-else-if="state.activity.endTime <= new Date().getTime()">已结束</view>
@ -263,10 +268,12 @@
// //
const { data: spu } = await SpuApi.getSpuDetail(activity.spuId); const { data: spu } = await SpuApi.getSpuDetail(activity.spuId);
state.goodsId = spu.id; state.goodsId = spu.id;
// //
activity.products.forEach((product) => { spu.price = activity.products.reduce((min, product) => {
state.activity.price = Math.min(spu.price, product.combinationPrice); // SPU return Math.min(min, product.combinationPrice || Infinity);
}); }, Infinity);
// 使 // 使
spu.skus.forEach((sku) => { spu.skus.forEach((sku) => {
const product = activity.products.find((product) => product.skuId === sku.id); const product = activity.products.find((product) => product.skuId === sku.id);

View File

@ -37,7 +37,7 @@ const CombinationApi = {
url: '/promotion/combination-activity/list-by-ids', url: '/promotion/combination-activity/list-by-ids',
method: 'GET', method: 'GET',
params: { params: {
ids, ids
}, },
}); });
}, },
@ -58,9 +58,9 @@ const CombinationApi = {
// 获得我的拼团记录分页 // 获得我的拼团记录分页
getCombinationRecordPage: (params) => { getCombinationRecordPage: (params) => {
return request({ return request({
url: '/promotion/combination-record/page', url: "/promotion/combination-record/page",
method: 'GET', method: 'GET',
params, params
}); });
}, },

View File

@ -23,7 +23,7 @@
:subTitleColor="data.fields.introduction.color" :subTitleColor="data.fields.introduction.color"
:topRadius="data.borderRadiusTop" :topRadius="data.borderRadiusTop"
:bottomRadius="data.borderRadiusBottom" :bottomRadius="data.borderRadiusBottom"
@click="sheep.$router.go('/pages/goods/index', { id: item.id })" @click="sheep.$router.go('/pages/goods/groupon', { id: item.activityId })"
> >
<!-- 购买按钮 --> <!-- 购买按钮 -->
<template v-slot:cart> <template v-slot:cart>
@ -35,7 +35,40 @@
</view> </view>
</view> </view>
<!-- 布局2. 双列每一列上图下内容--> <!-- 布局2. 单列小图左图右内容 -->
<view
v-if="layoutType === LayoutTypeEnum.ONE_COL_SMALL_IMG && state.spuList.length"
class="goods-lg-box"
>
<view
class="goods-box"
:style="[{ marginBottom: data.space + 'px' }]"
v-for="item in state.spuList"
:key="item.id"
>
<s-goods-column
class="goods-card"
size="lg"
:goodsFields="data.fields"
:data="item"
:tagStyle="data.badge"
:titleColor="data.fields.name?.color"
:subTitleColor="data.fields.introduction.color"
:topRadius="data.borderRadiusTop"
:bottomRadius="data.borderRadiusBottom"
@tap="sheep.$router.go('/pages/goods/groupon', { id: item.activityId })"
>
<!-- 购买按钮 -->
<template v-slot:cart>
<button class="ss-reset-button cart-btn" :style="[buyStyle]">
{{ btnBuy.type === 'text' ? btnBuy.text : '' }}
</button>
</template>
</s-goods-column>
</view>
</view>
<!-- 布局3. 双列每一列上图下内容-->
<view <view
v-if="layoutType === LayoutTypeEnum.TWO_COL && state.spuList.length" v-if="layoutType === LayoutTypeEnum.TWO_COL && state.spuList.length"
class="goods-md-wrap ss-flex ss-flex-wrap ss-col-top" class="goods-md-wrap ss-flex ss-flex-wrap ss-col-top"
@ -58,7 +91,7 @@
:topRadius="data.borderRadiusTop" :topRadius="data.borderRadiusTop"
:bottomRadius="data.borderRadiusBottom" :bottomRadius="data.borderRadiusBottom"
:titleWidth="330 - marginLeft - marginRight" :titleWidth="330 - marginLeft - marginRight"
@click="sheep.$router.go('/pages/goods/index', { id: item.id })" @click="sheep.$router.go('/pages/goods/groupon', { id: item.activityId })"
@getHeight="calculateGoodsColumn($event, 'left')" @getHeight="calculateGoodsColumn($event, 'left')"
> >
<!-- 购买按钮 --> <!-- 购买按钮 -->
@ -88,7 +121,7 @@
:topRadius="data.borderRadiusTop" :topRadius="data.borderRadiusTop"
:bottomRadius="data.borderRadiusBottom" :bottomRadius="data.borderRadiusBottom"
:titleWidth="330 - marginLeft - marginRight" :titleWidth="330 - marginLeft - marginRight"
@click="sheep.$router.go('/pages/goods/index', { id: item.id })" @click="sheep.$router.go('/pages/goods/groupon', { id: item.activityId })"
@getHeight="calculateGoodsColumn($event, 'right')" @getHeight="calculateGoodsColumn($event, 'right')"
> >
<!-- 购买按钮 --> <!-- 购买按钮 -->
@ -101,39 +134,6 @@
</view> </view>
</view> </view>
</view> </view>
<!-- 布局3. 单列小图左图右内容 -->
<view
v-if="layoutType === LayoutTypeEnum.ONE_COL_SMALL_IMG && state.spuList.length"
class="goods-lg-box"
>
<view
class="goods-box"
:style="[{ marginBottom: data.space + 'px' }]"
v-for="item in state.spuList"
:key="item.id"
>
<s-goods-column
class="goods-card"
size="lg"
:goodsFields="data.fields"
:data="item"
:tagStyle="data.badge"
:titleColor="data.fields.name?.color"
:subTitleColor="data.fields.introduction.color"
:topRadius="data.borderRadiusTop"
:bottomRadius="data.borderRadiusBottom"
@tap="sheep.$router.go('/pages/goods/index', { id: item.id })"
>
<!-- 购买按钮 -->
<template v-slot:cart>
<button class="ss-reset-button cart-btn" :style="[buyStyle]">
{{ btnBuy.type === 'text' ? btnBuy.text : '' }}
</button>
</template>
</s-goods-column>
</view>
</view>
</view> </view>
</template> </template>
@ -257,17 +257,17 @@
// //
activityList.forEach((activity) => { activityList.forEach((activity) => {
// //
activity.products.forEach((product) => { const combinationPrice = activity.combinationPrice || Infinity;
const combinationPrice = product.combinationPrice || Infinity; // spu
// spu
const spu = state.spuList.find((spu) => activity.spuId === spu.id); const spu = state.spuList.find((spu) => activity.spuId === spu.id);
if (spu) { if (spu) {
spu.price = Math.min(combinationPrice, spu.price || Infinity); //
spu.price = Math.min(combinationPrice, spu.price);
// ID
spu.activityId = activity.id;
} }
}); });
});
// //
if (layoutType === LayoutTypeEnum.TWO_COL) { if (layoutType === LayoutTypeEnum.TWO_COL) {