feat: 订单查询增加合并订单功能,选择已完成订单合并
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -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,8 +51,13 @@
|
||||
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-checkbox" v-if="merging && order.status === 1">
|
||||
<text>{{ selectedOrders.includes(order.orderId) ? '☑' : '☐' }}</text>
|
||||
</view>
|
||||
<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)">
|
||||
@@ -64,8 +69,30 @@
|
||||
<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>
|
||||
Reference in New Issue
Block a user