修改页面逻辑

This commit is contained in:
not-like-juvenile
2026-02-03 12:01:10 +08:00
parent 8efe6d5e89
commit c803a77c8f
12 changed files with 904 additions and 181 deletions

View File

@@ -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.idtask 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;