修改支付订单的逻辑 - 改为根据供应商选择自提点

This commit is contained in:
赵毅 2025-09-02 17:57:21 +08:00
parent 20b03f0f02
commit 47f1eaaa09
2 changed files with 88 additions and 56 deletions

View File

@ -97,30 +97,41 @@
暂无商品数据 暂无商品数据
</view> </view>
<view v-if="activeTab === 'pickup' && orderList2.length > 0"> <view v-if="activeTab === 'pickup' && orderList2.length > 0">
<view class="goods-list" v-for="(item, index) in orderList2" :key="index"> <!-- 按供应商分组 -->
<view class="info-section"> <view v-for="(group, supplierId) in supplierGroups" :key="supplierId">
<view class="address-section"> <view class="goods-list">
<view class="section-title">自提点</view> <view class="info-section">
<view @click="editAddress(item)"> <view class="address-section">
<view v-if="defZTAddress.length > 0"> <view class="section-title">自提点</view>
<view v-for="(adItem, adIndex) in defZTAddress" :key="adIndex"> <view @click="editAddress(group[0])">
<view class="address-info" v-if="adItem.id === item.goods_id"> <view v-if="defZTAddress.length > 0">
<view class="address-main"> <view v-for="(adItem, adIndex) in defZTAddress" :key="adIndex">
<view class="address-name-phone"> <view class="address-info" v-if="adItem.id == supplierId">
<text class="name">{{ adItem.name }}</text> <view class="address-main">
<text class="phone">{{ adItem.phone }}</text> <view class="address-name-phone">
<text class="name">{{ adItem.name }}</text>
<text class="phone">{{ adItem.phone }}</text>
</view>
<view class="address-detail">
{{ adItem.address }}
<view class="copy-icon" @click.stop="copyZTAddress" />
</view>
</view> </view>
<view class="address-detail"> <view class="address-arrow"><u-icon name="arrow-right" size="25"></u-icon>
{{ adItem.address }}
<view class="copy-icon" @click.stop="copyZTAddress" />
</view> </view>
</view> </view>
<view class="address-arrow"><u-icon name="arrow-right" size="25"></u-icon> </view>
</view> <view class="address-info"
v-if="!defZTAddress.some(adItem => adItem.id == supplierId)">
<view class="address-main">
<view class="address-name-phone">
<text class="name">请选择自提点</text>
</view>
</view>
<view class="address-arrow"><u-icon name="arrow-right" size="25"></u-icon></view>
</view> </view>
</view> </view>
<view class="address-info" <view class="address-info" v-else>
v-if="!defZTAddress.some(adItem => adItem.id === item.goods_id)">
<view class="address-main"> <view class="address-main">
<view class="address-name-phone"> <view class="address-name-phone">
<text class="name">请选择自提点</text> <text class="name">请选择自提点</text>
@ -129,18 +140,11 @@
<view class="address-arrow"><u-icon name="arrow-right" size="25"></u-icon></view> <view class="address-arrow"><u-icon name="arrow-right" size="25"></u-icon></view>
</view> </view>
</view> </view>
<view class="address-info" v-else>
<view class="address-main">
<view class="address-name-phone">
<text class="name">请选择自提点</text>
</view>
</view>
<view class="address-arrow"><u-icon name="arrow-right" size="25"></u-icon></view>
</view>
</view> </view>
</view> </view>
</view> </view>
<view class="goods-item"> <!-- 该供应商下的所有商品 -->
<view class="goods-item" v-for="(item, index) in group" :key="index">
<view class="goods-image"> <view class="goods-image">
<image :src="item.commodity_goods_info.commodity_pic" mode="aspectFill"></image> <image :src="item.commodity_goods_info.commodity_pic" mode="aspectFill"></image>
</view> </view>
@ -313,6 +317,20 @@ export default {
group_buy_activity_id: 0, group_buy_activity_id: 0,
}; };
}, },
computed: {
// id
supplierGroups() {
const groups = {};
this.orderList2.forEach(item => {
const supplierId = item.commodity_goods_info.group_buy_activity_info?.supplier_id || 'default';
if (!groups[supplierId]) {
groups[supplierId] = [];
}
groups[supplierId].push(item);
});
return groups;
},
},
onLoad(options) { onLoad(options) {
this.carList = JSON.parse(options.shopCarList) this.carList = JSON.parse(options.shopCarList)
}, },
@ -482,11 +500,15 @@ export default {
this.selectedPayment = payment; this.selectedPayment = payment;
}, },
submitPayment() { submitPayment() {
// //
const allHaveZTAddress = this.orderList2.every(item => { const supplierIds = [...new Set(this.orderList2.map(item =>
const ztAddress = this.defZTAddress.find(adItem => adItem.id === item.goods_id); item.commodity_goods_info.group_buy_activity_info?.supplier_id || 'default'
return ztAddress && ztAddress.id; ))];
});
const allHaveZTAddress = supplierIds.every(supplierId => {
const ztAddress = this.defZTAddress.find(adItem => adItem.id == supplierId);
return !!ztAddress;
});
if (!allHaveZTAddress) { if (!allHaveZTAddress) {
uni.showToast({ uni.showToast({
@ -499,28 +521,38 @@ export default {
const params = { const params = {
user_id: uni.getStorageSync('userId'), user_id: uni.getStorageSync('userId'),
is_group_buy: true, is_group_buy: true,
goods_list: this.orderList2.map(item => { goods_list: Object.keys(this.supplierGroups).map(supplierId => {
const group = this.supplierGroups[supplierId];
const firstItem = group[0];
// id // id
this.group_buy_activity_id = item.commodity_goods_info.group_buy_activity_id this.group_buy_activity_id = firstItem.commodity_goods_info.group_buy_activity_id;
const ztAddress = this.defZTAddress.find(adItem => adItem.id === item.goods_id) || {};
// id
const ztAddress = this.defZTAddress.find(adItem => adItem.id == supplierId) || {};
// //
const currentTime = new Date().getTime(); const currentTime = new Date().getTime();
const startTime = new Date(item.commodity_goods_info.group_buy_activity_info?.start_time).getTime();
const endTime = new Date(item.commodity_goods_info.group_buy_activity_info?.end_time).getTime();
const isGroupBuy = currentTime >= startTime && currentTime <= endTime;
return { return {
supplier_id: item.commodity_goods_info.group_buy_activity_info.supplier_id, supplier_id: firstItem.commodity_goods_info.group_buy_activity_info.supplier_id,
supplier_name: item.supplier_name || '', supplier_name: firstItem.supplier_name || '',
is_same_day: item.commodity_goods_info.is_same_day, is_same_day: firstItem.commodity_goods_info.is_same_day,
receiving_name: ztAddress.name || '', receiving_name: ztAddress.name || '',
receiving_phone: ztAddress.phone || '', receiving_phone: ztAddress.phone || '',
receiving_address: ztAddress.address || '', receiving_address: ztAddress.address || '',
group_buy_activity_id: item.commodity_goods_info.group_buy_activity_id, group_buy_activity_id: firstItem.commodity_goods_info.group_buy_activity_id,
goods_and_count: [{ goods_and_count: group.map(item => {
goods_id: item.commodity_goods_info.goods_id, const startTime = new Date(item.commodity_goods_info.group_buy_activity_info?.start_time).getTime();
count: item.count, const endTime = new Date(item.commodity_goods_info.group_buy_activity_info?.end_time).getTime();
price: isGroupBuy ? item.commodity_goods_info.group_buy_price : item.commodity_goods_info.sales_price const isGroupBuy = currentTime >= startTime && currentTime <= endTime;
}] return {
goods_id: item.commodity_goods_info.goods_id,
count: item.count,
price: isGroupBuy ? item.commodity_goods_info.group_buy_price : item.commodity_goods_info.sales_price,
freight: item.commodity_goods_info.freight,
}
})
} }
}) })
} }

View File

@ -34,10 +34,10 @@ export default {
}, },
onLoad(options) { onLoad(options) {
const item = JSON.parse(options.item) const item = JSON.parse(options.item)
this.getLocationList(item.goods_id) this.getLocationList(item.goods_id, item.supplier_id)
}, },
methods: { methods: {
async getLocationList(id) { async getLocationList(id, supplier_id) {
const params = { const params = {
goods_ids: id, goods_ids: id,
} }
@ -46,7 +46,7 @@ export default {
res.self_pickup_address_list[0].address.forEach(item => { res.self_pickup_address_list[0].address.forEach(item => {
const [address, phone, name] = item.split(' '); const [address, phone, name] = item.split(' ');
this.locationList.push({ this.locationList.push({
id: id, id: supplier_id,
name: name || '', name: name || '',
phone: phone || '', phone: phone || '',
address: address || '' address: address || ''
@ -56,13 +56,13 @@ export default {
selectLocation(item, index) { selectLocation(item, index) {
// //
this.selectedIndex = index; this.selectedIndex = index;
// //
let addressList = uni.getStorageSync('changeZTAddress') || []; let addressList = uni.getStorageSync('changeZTAddress') || [];
// id // id
const existingIndex = addressList.findIndex(addr => addr.id === item.id); const existingIndex = addressList.findIndex(addr => addr.id === item.id);
if (existingIndex > -1) { if (existingIndex > -1) {
// id // id
addressList[existingIndex] = item; addressList[existingIndex] = item;
@ -70,10 +70,10 @@ export default {
// id // id
addressList.push(item); addressList.push(item);
} }
// //
uni.setStorageSync('changeZTAddress', addressList); uni.setStorageSync('changeZTAddress', addressList);
NavgateTo("1") NavgateTo("1")
} }
} }