连接数据库并修改页面
This commit is contained in:
@@ -68,6 +68,8 @@
|
||||
|
||||
<script lang="uts">
|
||||
import type { DeliveryTaskType } from '@/types/mall-types.uts'
|
||||
import supa, { supaReady } from '@/components/supadb/aksupainstance.uts'
|
||||
import { getCurrentUserId, getCurrentUser } from '@/utils/store.uts'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
@@ -102,86 +104,125 @@ export default {
|
||||
}
|
||||
},
|
||||
|
||||
// 加载历史订单
|
||||
loadOrderHistory() {
|
||||
// TODO: 调用API获取历史订单列表
|
||||
this.orderList = [
|
||||
{
|
||||
id: '1',
|
||||
order_no: 'D202501081234',
|
||||
status: 4, // 已接取
|
||||
pickup_address: {
|
||||
detail: '深圳公司',
|
||||
area: '购物公园'
|
||||
},
|
||||
delivery_address: {
|
||||
detail: '梅州',
|
||||
area: '海岸城'
|
||||
},
|
||||
pickup_contact: {
|
||||
name: '商家联系人',
|
||||
phone: '138****6567'
|
||||
},
|
||||
delivery_contact: {
|
||||
name: '张先生',
|
||||
phone: '139****9786'
|
||||
},
|
||||
delivery_fee: 12.0,
|
||||
distance: 8.2,
|
||||
estimated_time: 25,
|
||||
created_at: '2025-01-08T15:00:00Z'
|
||||
},
|
||||
{
|
||||
id: '2',
|
||||
order_no: 'D202501081235',
|
||||
status: 5, // 已完成
|
||||
pickup_address: {
|
||||
detail: '福田区购物公园',
|
||||
area: '购物公园'
|
||||
},
|
||||
delivery_address: {
|
||||
detail: '南山区海岸城',
|
||||
area: '海岸城'
|
||||
},
|
||||
pickup_contact: {
|
||||
name: '商家联系人',
|
||||
phone: '138****5678'
|
||||
},
|
||||
delivery_contact: {
|
||||
name: '张先生',
|
||||
phone: '139****1234'
|
||||
},
|
||||
delivery_fee: 12.0,
|
||||
distance: 8.2,
|
||||
estimated_time: 25,
|
||||
created_at: '2025-01-08T15:00:00Z'
|
||||
},
|
||||
{
|
||||
id: '3',
|
||||
order_no: 'D202501081236',
|
||||
status: 1, // 取货中
|
||||
pickup_address: {
|
||||
detail: '罗湖区东门步行街',
|
||||
area: '罗湖'
|
||||
},
|
||||
delivery_address: {
|
||||
detail: '福田区市民中心',
|
||||
area: '福田'
|
||||
},
|
||||
pickup_contact: {
|
||||
name: '商家联系人',
|
||||
phone: '138****5678'
|
||||
},
|
||||
delivery_contact: {
|
||||
name: '李先生',
|
||||
phone: '139****5678'
|
||||
},
|
||||
delivery_fee: 10.0,
|
||||
distance: 5.0,
|
||||
estimated_time: 15,
|
||||
created_at: '2025-01-08T16:00:00Z'
|
||||
// 加载历史订单(从数据库读取)
|
||||
async loadOrderHistory() {
|
||||
try {
|
||||
const ready = await Promise.race([supaReady, new Promise(resolve => setTimeout(() => resolve(false), 1500))])
|
||||
if (!ready) console.warn('supaReady timeout/failed in loadOrderHistory - proceeding')
|
||||
} catch (e) {
|
||||
console.warn('supaReady failed', e)
|
||||
}
|
||||
|
||||
// Ensure profile is loaded so getCurrentUserId returns ak_users.id when available
|
||||
try {
|
||||
await getCurrentUser()
|
||||
} catch (e) {
|
||||
console.warn('getCurrentUser failed in loadOrderHistory', e)
|
||||
}
|
||||
|
||||
const uid = getCurrentUserId()
|
||||
console.log('loadOrderHistory: currentUserId=', uid)
|
||||
|
||||
// 首先查 ml_delivery_tasks 中分配给当前用户的任务(仅包含已接/分配的 status >= 2)
|
||||
let dtRes: any = { data: [] }
|
||||
try {
|
||||
let queryUid = uid
|
||||
// 如果 uid 为空,尝试从 supa session 获取 auth id 并映射到 ak_users.id
|
||||
if (!queryUid || queryUid === '') {
|
||||
try {
|
||||
const sess = supa.getSession && supa.getSession()
|
||||
const sessId = sess && sess.user && sess.user.getString && sess.user.getString('id')
|
||||
console.log('loadOrderHistory: session id fallback=', sessId)
|
||||
if (sessId) {
|
||||
const akRes = await supa.from('ak_users').select('id').eq('auth_id', sessId).limit(1).execute()
|
||||
if (akRes && Array.isArray(akRes.data) && akRes.data.length > 0) {
|
||||
queryUid = (akRes.data[0] as any).id
|
||||
console.log('loadOrderHistory: mapped ak_users.id=', queryUid)
|
||||
}
|
||||
}
|
||||
} catch (mapErr) {
|
||||
console.warn('loadOrderHistory: ak_users mapping failed', mapErr)
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
if (queryUid && queryUid !== '') {
|
||||
dtRes = await supa.from('ml_delivery_tasks')
|
||||
.select('order_id,status')
|
||||
.eq('driver_id', queryUid)
|
||||
.gte('status', 2)
|
||||
.order('created_at', { ascending: false })
|
||||
.limit(200)
|
||||
.execute()
|
||||
} else {
|
||||
dtRes = { data: [] }
|
||||
}
|
||||
console.log('loadOrderHistory: delivery_tasks dtRes=', dtRes)
|
||||
} catch (err) {
|
||||
console.error('loadOrderHistory: delivery_tasks query failed', err)
|
||||
dtRes = { data: [] }
|
||||
}
|
||||
|
||||
const orderIds = (dtRes && Array.isArray(dtRes.data)) ? dtRes.data.map((r: any) => r.order_id) : []
|
||||
|
||||
// 如果没有通过 delivery_tasks 找到订单,改为直接读取最近完成/已取货订单(兼容测试环境)
|
||||
let ordersRes
|
||||
try {
|
||||
if (orderIds.length > 0) {
|
||||
ordersRes = await supa.from('ml_orders').select('*').in('id', orderIds).order('created_at', { ascending: false }).limit(200).execute()
|
||||
} else {
|
||||
ordersRes = await supa.from('ml_orders').select('*').in('order_status', [4,5]).order('created_at', { ascending: false }).limit(200).execute()
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('loadOrderHistory: ml_orders query failed', err)
|
||||
ordersRes = { data: [] }
|
||||
}
|
||||
|
||||
console.log('loadOrderHistory: ordersRes=', ordersRes)
|
||||
|
||||
const mapOrder = (r: any) => ({
|
||||
id: r.id,
|
||||
order_no: r.order_no || String(r.cid || ''),
|
||||
status: r.order_status ?? r.status ?? 0,
|
||||
pickup_address: r.pickup_address || r.shipping_address || { detail: '', area: '' },
|
||||
delivery_address: r.delivery_address || r.shipping_address || { detail: '', area: '' },
|
||||
pickup_contact: r.pickup_contact || r.shipping_contact || { name: '', phone: '' },
|
||||
delivery_contact: r.delivery_contact || r.shipping_contact || { name: '', phone: '' },
|
||||
delivery_fee: r.delivery_fee || r.delivery_fees || 0,
|
||||
distance: r.distance || 0,
|
||||
estimated_time: r.estimated_time || 0,
|
||||
created_at: r.created_at
|
||||
})
|
||||
|
||||
this.orderList = (ordersRes && ordersRes.data) ? ordersRes.data.map(mapOrder) : []
|
||||
|
||||
// 额外:把当前分配给本司机但尚未完成的任务对应订单也展示在列表顶部(便于查看当前任务)
|
||||
try {
|
||||
if (uid && uid !== '') {
|
||||
// 仅获取已经被接取/分配给本司机的任务(status >= 2),包括进行中和已取货但未完成的
|
||||
const taskRes: any = await supa.from('ml_delivery_tasks')
|
||||
.select('order_id,status')
|
||||
.eq('driver_id', uid)
|
||||
.gte('status', 2)
|
||||
.order('created_at', { ascending: false })
|
||||
.limit(50)
|
||||
.execute()
|
||||
if (taskRes && Array.isArray(taskRes.data) && taskRes.data.length > 0) {
|
||||
const taskOrderIds = taskRes.data.map((t: any) => t.order_id).filter((id: any) => id)
|
||||
if (taskOrderIds.length > 0) {
|
||||
const curOrdersRes: any = await supa.from('ml_orders').select('*').in('id', taskOrderIds).execute()
|
||||
const curMapped = (curOrdersRes && Array.isArray(curOrdersRes.data)) ? curOrdersRes.data.map(mapOrder) : []
|
||||
// 把当前任务对应订单插入到列表最前面(避免重复)
|
||||
curMapped.forEach((o: any) => {
|
||||
if (!this.orderList.some((ex: any) => ex.id === o.id)) {
|
||||
this.orderList.unshift(o)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('loadOrderHistory: fetch current tasks failed', err)
|
||||
}
|
||||
|
||||
// 检查是否有新完成的订单(在加载初始数据后)
|
||||
this.checkForNewCompletedOrder()
|
||||
|
||||
Reference in New Issue
Block a user