feat: 订单查询增加合并订单功能,选择已完成订单合并
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Agent
2026-03-28 03:41:42 +00:00
parent e7d03c8558
commit 4841c49cbd

View File

@@ -42,7 +42,7 @@
</scroll-view>
<!-- 已选客户的订单列表 -->
<view class="orders-section" v-if="selectedCustomer && orders.length > 0">
<view class="orders-section" v-if="selectedCustomer">
<view class="orders-header">
<text class="orders-title">{{ selectedCustomer.name }} 的订单</text>
</view>
@@ -51,21 +51,48 @@
v-for="order in orders"
:key="order.orderId"
class="order-card"
@click="viewDetail(order)"
:class="{ 'selected': merging && order.status === 1 && selectedOrders.includes(order.orderId) }"
@click="toggleOrderSelection(order)"
>
<view class="card-header">
<text class="order-no">{{ order.orderNo }}</text>
<text class="order-status" :class="getStatusClass(order.status)">
{{ getStatusText(order.status) }}
</text>
<view class="card-checkbox" v-if="merging && order.status === 1">
<text>{{ selectedOrders.includes(order.orderId) ? '☑' : '☐' }}</text>
</view>
<view class="card-body">
<text class="order-amount">实付: ¥{{ order.actualAmount }}</text>
<text class="order-time">{{ formatTime(order.createdAt) }}</text>
<view class="card-content" :class="{ 'with-checkbox': merging && order.status === 1 }">
<view class="card-header">
<text class="order-no">{{ order.orderNo }}</text>
<text class="order-status" :class="getStatusClass(order.status)">
{{ getStatusText(order.status) }}
</text>
</view>
<view class="card-body">
<text class="order-amount">实付: ¥{{ order.actualAmount }}</text>
<text class="order-time">{{ formatTime(order.createdAt) }}</text>
</view>
</view>
</view>
</scroll-view>
</view>
<!-- 合并订单按钮 -->
<view class="bottom-bar" v-if="selectedCustomer && orders.length > 0">
<button
class="merge-btn"
@click="startMerge"
v-if="!merging"
>
合并订单
</button>
<view class="merge-actions" v-else>
<button class="cancel-btn" @click="cancelMerge">取消</button>
<button
class="confirm-btn"
@click="confirmMerge"
:disabled="selectedOrders.length < 2"
>
确定 ({{ selectedOrders.length }})
</button>
</view>
</view>
</view>
</template>
@@ -80,7 +107,10 @@ export default {
customers: [],
selectedCustomer: null,
orders: [],
loading: false
loading: false,
// 合并订单相关
merging: false,
selectedOrders: []
}
},
methods: {
@@ -113,6 +143,33 @@ export default {
clearSelection() {
this.selectedCustomer = null
this.orders = []
this.merging = false
this.selectedOrders = []
},
toggleOrderSelection(order) {
if (!this.merging || order.status !== 1) return
const index = this.selectedOrders.indexOf(order.orderId)
if (index > -1) {
this.selectedOrders.splice(index, 1)
} else {
this.selectedOrders.push(order.orderId)
}
},
startMerge() {
this.merging = true
this.selectedOrders = []
},
cancelMerge() {
this.merging = false
this.selectedOrders = []
},
confirmMerge() {
if (this.selectedOrders.length < 2) {
uni.showToast({ title: '请至少选择2个订单', icon: 'none' })
return
}
uni.showToast({ title: '选中 ' + this.selectedOrders.length + ' 个订单', icon: 'success' })
// TODO: 后端合并订单逻辑
},
async loadOrders() {
if (!this.selectedCustomer) return
@@ -286,6 +343,25 @@ export default {
.order-card {
padding: 20rpx;
border-bottom: 1rpx solid #f0f0f0;
display: flex;
align-items: center;
}
.order-card.selected {
background: #e6f7ff;
}
.card-checkbox {
margin-right: 16rpx;
font-size: 36rpx;
}
.card-content.with-checkbox {
flex: 1;
}
.card-content {
flex: 1;
}
.card-header {
@@ -330,4 +406,49 @@ export default {
font-size: 24rpx;
color: #999;
}
.bottom-bar {
padding: 20rpx;
background: #fff;
box-shadow: 0 -4rpx 20rpx rgba(0, 0, 0, 0.1);
}
.merge-btn {
width: 100%;
height: 88rpx;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: #fff;
border: none;
border-radius: 44rpx;
font-size: 30rpx;
font-weight: bold;
}
.merge-actions {
display: flex;
gap: 20rpx;
}
.cancel-btn, .confirm-btn {
flex: 1;
height: 88rpx;
border-radius: 44rpx;
font-size: 30rpx;
font-weight: bold;
border: none;
}
.cancel-btn {
background: #f5f5f5;
color: #666;
}
.confirm-btn {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: #fff;
}
.confirm-btn[disabled] {
background: #ccc;
}
</style>