import { acceptDeliveryOrderById, arriveOrderById, checkinOrderById, finishServiceById, getDeliveryDashboardByStaffId, getDeliveryOrderDetailById, getDeliveryOrdersByStaffId, getDeliveryProfileByUserId, loginDelivery as loginDeliveryApi, saveServiceProgressById, startDepartById, startServiceById } from '@/api/delivery.uts' import { saveServiceRecord as saveRealServiceRecord } from '@/services/serviceOrderService.uts' import { acceptCareOrder, checkInCareOrder, completeCareOrder, getCareOrderDetail, getCareRecords, getDeliveryCareDashboard, getDeliveryCareProfile, getHistoryCareOrders, getPendingCareOrders, getTodayCareOrders, markCareOrderArrived, markCareOrderDeparted, rejectCareOrder, startCareService, submitCareAbnormalReport, submitCareServiceRecord, updateCareOrderStatus, updateDeliveryCareOnlineStatus } from '@/mock/delivery-care.mock.uts' import { requireDeliveryAuth } from '@/utils/deliveryAuth.uts' import type { DeliveryAbnormalReportType, DeliveryCheckinPayloadType, DeliveryDashboardType, DeliveryExceptionPayloadType, DeliveryFinishPayloadType, DeliveryInfoType, DeliveryLocationType, DeliveryLoginPayloadType, DeliveryLoginResultType, DeliveryMessageType, DeliveryOrderQueryType, DeliveryOrderStatus, DeliveryOrderType, DeliveryProgressPayloadType, DeliveryRecordType, DeliveryServiceRecordType } from '@/types/delivery.uts' export async function loginDelivery(payload: DeliveryLoginPayloadType): Promise { return await loginDeliveryApi(payload) } export async function getDeliveryProfile(): Promise { const authResult = await requireDeliveryAuth({ redirectOnFail: false, toastOnFail: false }) if (!authResult.ok) { return null } return authResult.deliveryInfo } export async function getDeliveryByUserId(userId: string): Promise { return await getDeliveryProfileByUserId(userId) } export async function getCurrentDeliverer(): Promise { return await getDeliveryProfile() } export async function checkDeliveryAccountByUserId(userId: string): Promise { return await getDeliveryProfileByUserId(userId) } export async function checkDeliveryAuth(): Promise { const result = await requireDeliveryAuth({ redirectOnFail: false, toastOnFail: false }) return result.ok } async function getCurrentStaffId(): Promise { const profile = await getDeliveryProfile() if (profile == null) { return '' } return profile.id } function createEmptyLocation(): DeliveryLocationType { return { latitude: 0, longitude: 0, address: '', time: new Date().toISOString().replace('T', ' ').substring(0, 19) } } export async function getDeliveryDashboard(): Promise { const staffId = await getCurrentStaffId() if (staffId != '') { return await getDeliveryDashboardByStaffId(staffId) } return getDeliveryCareDashboard() } export async function getDeliveryOrders(params: DeliveryOrderQueryType): Promise> { const staffId = await getCurrentStaffId() if (staffId != '') { return await getDeliveryOrdersByStaffId(staffId, params) } if (params.tab == 'pending' || params.tab == 'pending_assignment') { return getPendingCareOrders() } if (params.tab == 'history' || params.tab == 'completed' || params.tab == 'archive') { return getHistoryCareOrders() } return getTodayCareOrders() } export async function getDeliveryOrderDetail(id: string): Promise { return await getDeliveryOrderDetailById(id) } export async function acceptDeliveryOrder(id: string): Promise { return await acceptDeliveryOrderById(id) } export async function rejectDeliveryOrder(id: string, reason: string): Promise { return rejectCareOrder(id, reason) } export async function startDepart(id: string, location: DeliveryLocationType): Promise { return await startDepartById(id, location) } export async function arriveOrder(id: string, location: DeliveryLocationType): Promise { return await arriveOrderById(id, location) } export async function checkinOrder(id: string, payload: DeliveryCheckinPayloadType): Promise { return await checkinOrderById(id, payload) } export async function startService(id: string): Promise { return await startServiceById(id) } export async function saveServiceProgress(id: string, payload: DeliveryProgressPayloadType): Promise { return await saveServiceProgressById(id, payload) } export async function uploadEvidence(id: string, phase: string, files: Array): Promise> { return files.map((item, index) => ({ id: id + '-evidence-' + String(index + 1), orderId: id, phase, fileType: 'image', name: 'mock-image-' + String(index + 1), url: '', localPath: item, status: 'success', progress: 100, retryable: false, createdAt: new Date().toISOString().replace('T', ' ').substring(0, 19) })) as Array } export async function retryUploadEvidence(id: string, evidenceId: string): Promise { return { id: evidenceId, orderId: id, phase: 'service', fileType: 'image', name: 'mock-retry', url: '', localPath: '', status: 'success', progress: 100, retryable: false, createdAt: new Date().toISOString().replace('T', ' ').substring(0, 19) } as any } export async function submitException(id: string, payload: DeliveryExceptionPayloadType): Promise { return submitCareAbnormalReport(id, payload) } export async function finishService(id: string, payload: DeliveryFinishPayloadType | null = null): Promise { const finishPayload = payload != null ? payload : { serviceSummary: '', signatureName: '', confirmByFamily: false } as DeliveryFinishPayloadType return await finishServiceById(id, finishPayload) } export async function getDeliveryRecords(): Promise> { return getCareRecords() } export async function getDeliveryMessages(): Promise> { return [ { id: 'delivery-msg-01', title: '今日待服务提醒', content: '请优先处理上午 9:00 的上门助浴订单。', type: 'workbench', createdAt: new Date().toISOString().replace('T', ' ').substring(0, 19), read: false, orderId: 'mock-care-001' } as DeliveryMessageType ] } export async function updateDeliveryOnlineStatus(status: string): Promise { if (status == 'online' || status == 'resting' || status == 'busy') { return updateDeliveryCareOnlineStatus(status) } return getDeliveryCareProfile() } export async function getDeliveryDashboardStats(): Promise { return await getDeliveryDashboard() } export async function getPendingServiceOrders(): Promise> { return await getDeliveryOrders({ tab: 'pending', keyword: '' } as DeliveryOrderQueryType) } export async function getTodayServiceOrders(): Promise> { return await getDeliveryOrders({ tab: 'today', keyword: '' } as DeliveryOrderQueryType) } export async function getHistoryServiceOrders(): Promise> { return await getDeliveryOrders({ tab: 'history', keyword: '' } as DeliveryOrderQueryType) } export async function getServiceOrderDetail(orderId: string): Promise { return await getDeliveryOrderDetail(orderId) } export async function acceptServiceOrder(orderId: string): Promise { return await acceptDeliveryOrder(orderId) } export async function rejectServiceOrder(orderId: string, reason: string): Promise { return rejectCareOrder(orderId, reason) } export async function markDeparted(orderId: string): Promise { return await startDepartById(orderId, createEmptyLocation()) } export async function markArrived(orderId: string): Promise { return await arriveOrderById(orderId, createEmptyLocation()) } export async function checkInServiceOrder(orderId: string, note: string, location: DeliveryLocationType | null = null): Promise { if (location == null) { return null } return await checkinOrderById(orderId, { location, note, photos: [] as Array, checkinMode: 'gps' }) } export async function startServiceOrder(orderId: string): Promise { return await startServiceById(orderId) } export async function submitServiceRecord(orderId: string, record: DeliveryServiceRecordType): Promise { return await saveRealServiceRecord(orderId, record) } export async function completeServiceOrder(orderId: string): Promise { return await finishService(orderId) } export async function submitAbnormalReport(orderId: string, report: DeliveryExceptionPayloadType): Promise { return submitCareAbnormalReport(orderId, report) } export async function updateOrderStatus(orderId: string, nextStatus: DeliveryOrderStatus, extraRemark: string = ''): Promise { return updateCareOrderStatus(orderId, nextStatus, extraRemark) } export async function getAbnormalReport(orderId: string): Promise { const order = getCareOrderDetail(orderId) return order != null ? order.abnormalReport : null }