修改页面逻辑
This commit is contained in:
@@ -97,8 +97,6 @@
|
||||
<text class="section-title">附近订单</text>
|
||||
<view class="section-header-actions">
|
||||
<text class="refresh-btn" @click="refreshOrders">🔄 刷新</text>
|
||||
<!-- 当可接取订单达到上限时显示更多入口 -->
|
||||
<text v-if="availableOrders && availableOrders.length >= 20" class="more-btn" @click="goToAllOrders">更多 ➜</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -107,34 +105,41 @@
|
||||
<text class="empty-subtitle">请保持在线状态,有新订单会自动推送</text>
|
||||
</view>
|
||||
|
||||
<view v-for="order in availableOrders" :key="order.id" class="order-card">
|
||||
<view class="order-header">
|
||||
<text class="order-id">{{ order.order_no }}</text>
|
||||
<text class="order-fee">¥{{ order.delivery_fee }}</text>
|
||||
</view>
|
||||
|
||||
<view class="order-route">
|
||||
<view class="route-item">
|
||||
<text class="route-icon">📍</text>
|
||||
<text class="route-text">{{ order.pickup_address.area }}</text>
|
||||
<view v-for="(order, index) in availableOrders" :key="order.id">
|
||||
<view v-if="index < 5" class="order-card">
|
||||
<view class="order-header">
|
||||
<text class="order-id">{{ order.order_no }}</text>
|
||||
<text class="order-fee">¥{{ order.delivery_fee }}</text>
|
||||
</view>
|
||||
<text class="route-arrow">→</text>
|
||||
<view class="route-item">
|
||||
<text class="route-icon">🏠</text>
|
||||
<text class="route-text">{{ order.delivery_address.area }}</text>
|
||||
|
||||
<view class="order-route">
|
||||
<view class="route-item">
|
||||
<text class="route-icon">📍</text>
|
||||
<text class="route-text">{{ order.pickup_address.area || order.pickup_address.detail }}</text>
|
||||
</view>
|
||||
<text class="route-arrow">→</text>
|
||||
<view class="route-item">
|
||||
<text class="route-icon">🏠</text>
|
||||
<text class="route-text">{{ order.delivery_address.area || order.delivery_address.detail }}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="order-info">
|
||||
<text class="info-item">距离: {{ order.distance }}km</text>
|
||||
<text class="info-item">预计: {{ order.estimated_time }}分钟</text>
|
||||
<text class="info-item">下单: {{ formatTime(order.created_at) }}</text>
|
||||
</view>
|
||||
|
||||
<view class="order-actions">
|
||||
<button class="order-btn accept" @click="acceptOrder(order.id)">接受订单</button>
|
||||
<button class="order-btn detail" @click="viewOrderDetail(order.id)">查看详情</button>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="order-info">
|
||||
<text class="info-item">距离: {{ order.distance }}km</text>
|
||||
<text class="info-item">预计: {{ order.estimated_time }}分钟</text>
|
||||
<text class="info-item">下单: {{ formatTime(order.created_at) }}</text>
|
||||
</view>
|
||||
|
||||
<view class="order-actions">
|
||||
<button class="order-btn accept" @click="acceptOrder(order.id)">接受订单</button>
|
||||
<button class="order-btn detail" @click="viewOrderDetail(order.id)">查看详情</button>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 超过5个展示订单就有个加载更多 -->
|
||||
<view v-if="availableOrders.length > 5" class="view-all-footer" @click="goToAllOrders">
|
||||
<text class="view-all-text">查看全部订单 (共 {{ availableOrders.length }} 个待接订单) ➜</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -308,7 +313,10 @@ import { getCurrentUserId, getCurrentUser } from '@/utils/store.uts'
|
||||
}
|
||||
}
|
||||
if (res && (res.data instanceof Array) && res.data.length > 0) {
|
||||
this.driverInfo = Object.assign(this.driverInfo, res.data[0])
|
||||
const data = res.data[0] as DeliveryDriverType
|
||||
this.driverInfo = Object.assign(this.driverInfo, data)
|
||||
// 同步工作状态到本地变量
|
||||
this.isOnline = (this.driverInfo.work_status === 1)
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('loadDriverInfo error', e)
|
||||
@@ -434,6 +442,7 @@ import { getCurrentUserId, getCurrentUser } from '@/utils/store.uts'
|
||||
|
||||
return {
|
||||
id: task.id,
|
||||
order_id: task.order_id || task.orderId || task.orderId || '',
|
||||
order_no: task.order_no || task.orderNo || task.trade_no || '',
|
||||
status: Number(task.status) || 1,
|
||||
pickup_address: parseAddress(task.pickup_address),
|
||||
@@ -465,8 +474,34 @@ import { getCurrentUserId, getCurrentUser } from '@/utils/store.uts'
|
||||
|
||||
// 切换工作状态
|
||||
toggleWorkStatus(event: UniSwitchChangeEvent) {
|
||||
this.isOnline = event.detail.value
|
||||
const targetStatus = event.detail.value
|
||||
|
||||
// 检查是否有当前任务,不允许离线
|
||||
if (!targetStatus && this.currentTask != null) {
|
||||
// 1. 先同步 UI 状态为 false (由于用户已经拨动了开关)
|
||||
this.isOnline = false
|
||||
|
||||
// 2. 弹出警告
|
||||
uni.showModal({
|
||||
title: '无法下线',
|
||||
content: '您当前有正在进行的任务,请完成后再下线。',
|
||||
showCancel: false,
|
||||
success: (_) => {
|
||||
// 3. 用户点击确定后或立即强制回弹开关为 true
|
||||
this.$nextTick(() => {
|
||||
this.isOnline = true
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
// 4. 冗余保障:如果 Modal 没及时回弹,延时强制重置
|
||||
setTimeout(() => {
|
||||
this.isOnline = true
|
||||
}, 300)
|
||||
return
|
||||
}
|
||||
|
||||
this.isOnline = targetStatus
|
||||
if (this.isOnline) {
|
||||
this.startWork()
|
||||
} else {
|
||||
@@ -475,8 +510,15 @@ import { getCurrentUserId, getCurrentUser } from '@/utils/store.uts'
|
||||
},
|
||||
|
||||
// 开始工作
|
||||
startWork() {
|
||||
// TODO: 调用API开始工作,上传位置
|
||||
async startWork() {
|
||||
const driverId = this.driverInfo.id
|
||||
if (driverId != '') {
|
||||
try {
|
||||
await supa.from('ml_delivery_drivers').update({ work_status: 1 } as any).eq('id', driverId).execute()
|
||||
} catch (e) {
|
||||
console.error('startWork update failed', e)
|
||||
}
|
||||
}
|
||||
this.loadAvailableOrders()
|
||||
uni.showToast({
|
||||
title: '已上线接单',
|
||||
@@ -485,8 +527,15 @@ import { getCurrentUserId, getCurrentUser } from '@/utils/store.uts'
|
||||
},
|
||||
|
||||
// 停止工作
|
||||
stopWork() {
|
||||
// TODO: 调用API停止工作
|
||||
async stopWork() {
|
||||
const driverId = this.driverInfo.id
|
||||
if (driverId != '') {
|
||||
try {
|
||||
await supa.from('ml_delivery_drivers').update({ work_status: 0 } as any).eq('id', driverId).execute()
|
||||
} catch (e) {
|
||||
console.error('stopWork update failed', e)
|
||||
}
|
||||
}
|
||||
this.availableOrders = []
|
||||
uni.showToast({
|
||||
title: '已下线休息',
|
||||
@@ -631,6 +680,29 @@ import { getCurrentUserId, getCurrentUser } from '@/utils/store.uts'
|
||||
if (res && !res.error) {
|
||||
const completedOrder = { ...this.currentTask }
|
||||
uni.setStorageSync('completed_order_for_history', completedOrder)
|
||||
// 同步更新 ml_orders 的状态,确保两个表状态一致
|
||||
try {
|
||||
// 尝试使用 currentTask.order_id(由 _transformTask 提供)
|
||||
const orderId = (this.currentTask as any).order_id || ''
|
||||
if (orderId) {
|
||||
const upRes: any = await supa.from('ml_orders').update({ order_status: 5 }).eq('id', orderId).execute()
|
||||
console.log('confirmDelivery: ml_orders update res=', upRes)
|
||||
if (!upRes || upRes.error) console.warn('confirmDelivery: ml_orders update failed', upRes)
|
||||
} else {
|
||||
// 如无 order_id,回退读取任务行以查找 order_id
|
||||
const tRes: any = await supa.from('ml_delivery_tasks').select('order_id').eq('id', this.currentTask.id).limit(1).execute()
|
||||
if (tRes && Array.isArray(tRes.data) && tRes.data.length > 0) {
|
||||
const oid = tRes.data[0].order_id
|
||||
if (oid) {
|
||||
const upRes2: any = await supa.from('ml_orders').update({ order_status: 5 }).eq('id', oid).execute()
|
||||
console.log('confirmDelivery: ml_orders update (fallback) res=', upRes2)
|
||||
if (!upRes2 || upRes2.error) console.warn('confirmDelivery: ml_orders update (fallback) failed', upRes2)
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (syncErr) {
|
||||
console.warn('confirmDelivery: failed to sync ml_orders status', syncErr)
|
||||
}
|
||||
uni.showToast({ title: '配送完成', icon: 'success' })
|
||||
this.currentTask = null
|
||||
this.loadAvailableOrders()
|
||||
@@ -684,6 +756,21 @@ import { getCurrentUserId, getCurrentUser } from '@/utils/store.uts'
|
||||
const res = await supa.from('ml_delivery_tasks').update({ driver_id: driverId, status: 2 }).eq('id', orderId).execute()
|
||||
if (res && !res.error) {
|
||||
uni.showToast({ title: '订单已接受', icon: 'success' })
|
||||
// 同步更新 ml_orders 状态为已接取(2)
|
||||
try {
|
||||
// orderId 这里是 ml_delivery_tasks.id(task id),需要先获取 order_id
|
||||
const tRes: any = await supa.from('ml_delivery_tasks').select('order_id').eq('id', orderId).limit(1).execute()
|
||||
if (tRes && Array.isArray(tRes.data) && tRes.data.length > 0) {
|
||||
const oid = tRes.data[0].order_id
|
||||
if (oid) {
|
||||
const upRes: any = await supa.from('ml_orders').update({ order_status: 2 }).eq('id', oid).execute()
|
||||
console.log('acceptOrder: ml_orders update res=', upRes)
|
||||
if (!upRes || upRes.error) console.warn('acceptOrder: ml_orders update failed', upRes)
|
||||
}
|
||||
}
|
||||
} catch (syncErr) {
|
||||
console.warn('acceptOrder: failed to sync ml_orders status', syncErr)
|
||||
}
|
||||
await this.loadCurrentTask()
|
||||
await this.loadAvailableOrders()
|
||||
}
|
||||
@@ -1174,6 +1261,25 @@ import { getCurrentUserId, getCurrentUser } from '@/utils/store.uts'
|
||||
border: 1rpx solid #ddd;
|
||||
}
|
||||
|
||||
/* 加载更多订单入口样式 */
|
||||
.view-all-footer {
|
||||
background-color: #ffffff;
|
||||
padding: 24rpx;
|
||||
border-radius: 12rpx;
|
||||
margin: 10rpx 0 30rpx;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border: 1rpx dashed #4CAF50;
|
||||
box-shadow: 0 4rpx 12rpx rgba(76, 175, 80, 0.1);
|
||||
}
|
||||
|
||||
.view-all-text {
|
||||
font-size: 26rpx;
|
||||
color: #4CAF50;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 历史记录快捷入口 */
|
||||
.quick-actions-section {
|
||||
background-color: #fff;
|
||||
|
||||
Reference in New Issue
Block a user