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

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 v-if="activeTab === 'pickup' && orderList2.length > 0">
<view class="goods-list" v-for="(item, index) in orderList2" :key="index">
<view class="info-section">
<view class="address-section">
<view class="section-title">自提点</view>
<view @click="editAddress(item)">
<view v-if="defZTAddress.length > 0">
<view v-for="(adItem, adIndex) in defZTAddress" :key="adIndex">
<view class="address-info" v-if="adItem.id === item.goods_id">
<view class="address-main">
<view class="address-name-phone">
<text class="name">{{ adItem.name }}</text>
<text class="phone">{{ adItem.phone }}</text>
<!-- 按供应商分组 -->
<view v-for="(group, supplierId) in supplierGroups" :key="supplierId">
<view class="goods-list">
<view class="info-section">
<view class="address-section">
<view class="section-title">自提点</view>
<view @click="editAddress(group[0])">
<view v-if="defZTAddress.length > 0">
<view v-for="(adItem, adIndex) in defZTAddress" :key="adIndex">
<view class="address-info" v-if="adItem.id == supplierId">
<view class="address-main">
<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 class="address-detail">
{{ adItem.address }}
<view class="copy-icon" @click.stop="copyZTAddress" />
<view class="address-arrow"><u-icon name="arrow-right" size="25"></u-icon>
</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 class="address-info"
v-if="!defZTAddress.some(adItem => adItem.id === item.goods_id)">
<view class="address-info" v-else>
<view class="address-main">
<view class="address-name-phone">
<text class="name">请选择自提点</text>
@ -129,18 +140,11 @@
<view class="address-arrow"><u-icon name="arrow-right" size="25"></u-icon></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 class="goods-item">
<!-- 该供应商下的所有商品 -->
<view class="goods-item" v-for="(item, index) in group" :key="index">
<view class="goods-image">
<image :src="item.commodity_goods_info.commodity_pic" mode="aspectFill"></image>
</view>
@ -313,6 +317,20 @@ export default {
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) {
this.carList = JSON.parse(options.shopCarList)
},
@ -482,11 +500,15 @@ export default {
this.selectedPayment = payment;
},
submitPayment() {
//
const allHaveZTAddress = this.orderList2.every(item => {
const ztAddress = this.defZTAddress.find(adItem => adItem.id === item.goods_id);
return ztAddress && ztAddress.id;
});
//
const supplierIds = [...new Set(this.orderList2.map(item =>
item.commodity_goods_info.group_buy_activity_info?.supplier_id || 'default'
))];
const allHaveZTAddress = supplierIds.every(supplierId => {
const ztAddress = this.defZTAddress.find(adItem => adItem.id == supplierId);
return !!ztAddress;
});
if (!allHaveZTAddress) {
uni.showToast({
@ -499,28 +521,38 @@ export default {
const params = {
user_id: uni.getStorageSync('userId'),
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
this.group_buy_activity_id = item.commodity_goods_info.group_buy_activity_id
const ztAddress = this.defZTAddress.find(adItem => adItem.id === item.goods_id) || {};
this.group_buy_activity_id = firstItem.commodity_goods_info.group_buy_activity_id;
// id
const ztAddress = this.defZTAddress.find(adItem => adItem.id == supplierId) || {};
//
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 {
supplier_id: item.commodity_goods_info.group_buy_activity_info.supplier_id,
supplier_name: item.supplier_name || '',
is_same_day: item.commodity_goods_info.is_same_day,
supplier_id: firstItem.commodity_goods_info.group_buy_activity_info.supplier_id,
supplier_name: firstItem.supplier_name || '',
is_same_day: firstItem.commodity_goods_info.is_same_day,
receiving_name: ztAddress.name || '',
receiving_phone: ztAddress.phone || '',
receiving_address: ztAddress.address || '',
group_buy_activity_id: item.commodity_goods_info.group_buy_activity_id,
goods_and_count: [{
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
}]
group_buy_activity_id: firstItem.commodity_goods_info.group_buy_activity_id,
goods_and_count: group.map(item => {
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 {
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) {
const item = JSON.parse(options.item)
this.getLocationList(item.goods_id)
this.getLocationList(item.goods_id, item.supplier_id)
},
methods: {
async getLocationList(id) {
async getLocationList(id, supplier_id) {
const params = {
goods_ids: id,
}
@ -46,7 +46,7 @@ export default {
res.self_pickup_address_list[0].address.forEach(item => {
const [address, phone, name] = item.split(' ');
this.locationList.push({
id: id,
id: supplier_id,
name: name || '',
phone: phone || '',
address: address || ''
@ -56,13 +56,13 @@ export default {
selectLocation(item, index) {
//
this.selectedIndex = index;
//
let addressList = uni.getStorageSync('changeZTAddress') || [];
// id
const existingIndex = addressList.findIndex(addr => addr.id === item.id);
if (existingIndex > -1) {
// id
addressList[existingIndex] = item;
@ -70,10 +70,10 @@ export default {
// id
addressList.push(item);
}
//
uni.setStorageSync('changeZTAddress', addressList);
NavgateTo("1")
}
}