diff --git a/src/pages/order/search.vue b/src/pages/order/search.vue index 1745eb1..0025f97 100644 --- a/src/pages/order/search.vue +++ b/src/pages/order/search.vue @@ -42,7 +42,7 @@ - + {{ selectedCustomer.name }} 的订单 @@ -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)" > - - {{ order.orderNo }} - - {{ getStatusText(order.status) }} - + + {{ selectedOrders.includes(order.orderId) ? '☑' : '☐' }} - - 实付: ¥{{ order.actualAmount }} - {{ formatTime(order.createdAt) }} + + + {{ order.orderNo }} + + {{ getStatusText(order.status) }} + + + + 实付: ¥{{ order.actualAmount }} + {{ formatTime(order.createdAt) }} + + + + + + + + + + @@ -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; +} \ No newline at end of file