import { GUIDE_ORDERS_KEY, initialOrders } from '../constants/mock'
|
import { request } from '../utils/request'
|
import { resolveMeetingPoint } from './guide'
|
|
function readOrders() {
|
const orders = uni.getStorageSync(GUIDE_ORDERS_KEY)
|
if (Array.isArray(orders) && orders.length) {
|
return orders
|
}
|
uni.setStorageSync(GUIDE_ORDERS_KEY, initialOrders)
|
return initialOrders
|
}
|
|
function writeOrders(orders) {
|
uni.setStorageSync(GUIDE_ORDERS_KEY, orders)
|
}
|
|
function withMeetingPoint(order = {}) {
|
const meetingPoint = resolveMeetingPoint({
|
scenicId: order.scenicId,
|
scenicName: order.scenicName,
|
meetingPointId: order.meetingPointId,
|
meetingPointName: order.meetingPointName,
|
meetingPointLatitude: order.meetingPointLatitude,
|
meetingPointLongitude: order.meetingPointLongitude,
|
meetingPointAddress: order.meetingPointAddress
|
})
|
|
if (!meetingPoint) {
|
return order
|
}
|
|
return {
|
...order,
|
scenicId: order.scenicId || meetingPoint.scenicId,
|
meetingPointId: order.meetingPointId || meetingPoint.id,
|
meetingPointName: order.meetingPointName || meetingPoint.name,
|
meetingPointLatitude: order.meetingPointLatitude || meetingPoint.latitude,
|
meetingPointLongitude: order.meetingPointLongitude || meetingPoint.longitude,
|
meetingPointAddress: order.meetingPointAddress || meetingPoint.address
|
}
|
}
|
|
export function getGuideOrders(filter = 'all') {
|
return request({
|
url: `/guide/orders?tab=${encodeURIComponent(normalizeOrderTab(filter))}&page=1&size=50`
|
}).then((page) => (page.records || []).map(normalizeGuideOrder))
|
}
|
|
export function getPendingOrders() {
|
return getGuideOrders('accepted')
|
}
|
|
export function getOrderDetail(orderId) {
|
return request({ url: `/guide/orders/${orderId}` }).then(normalizeGuideOrder)
|
}
|
|
export function startGuideLecture(orderId) {
|
return request({
|
url: `/guide/orders/${orderId}/start`,
|
method: 'POST'
|
}).then(normalizeGuideOrder)
|
}
|
|
function normalizeOrderTab(filter) {
|
if (filter === 'active' || filter === 'pending') {
|
return 'accepted'
|
}
|
if (filter === 'history') {
|
return 'completed'
|
}
|
return filter || 'all'
|
}
|
|
function normalizeGuideOrder(order = {}) {
|
const normalized = withMeetingPoint({
|
...order,
|
quantity: Number(order.quantity ?? order.peopleCount ?? 0),
|
receiveTime: normalizeTime(order.receiveTime || order.acceptedAt || order.createdAt),
|
receiveStartTime: normalizeTime(order.receiveStartTime || order.receiveTime || order.acceptedAt || order.createdAt),
|
lectureStartTime: normalizeTime(order.lectureStartTime || order.serviceStartedAt || order.arrivedAt),
|
lectureEndTime: normalizeTime(order.lectureEndTime || order.completedAt),
|
completedAt: normalizeTime(order.completedAt),
|
customers: (order.customers || []).map((item) => ({
|
...item,
|
time: normalizeTime(item.time)
|
}))
|
})
|
return {
|
...normalized,
|
customers: normalized.customers && normalized.customers.length
|
? normalized.customers
|
: [{ no: 1, phone: normalized.customerPhone || '', people: normalized.quantity || 0, time: normalized.receiveStartTime || '' }]
|
}
|
}
|
|
function normalizeTime(value) {
|
return value ? String(value).replace('T', ' ') : ''
|
}
|
|
export function updateOrderStatus(orderId, status) {
|
const orders = readOrders()
|
const next = orders.map((item) => {
|
if (item.id !== orderId) {
|
return item
|
}
|
return {
|
...item,
|
status
|
}
|
})
|
writeOrders(next)
|
return Promise.resolve(next.find((item) => item.id === orderId))
|
}
|
|
export function getWorkbenchSummary() {
|
const orders = readOrders()
|
const todayOrders = orders.filter((item) => item.createdAt.includes('2026-06-17'))
|
const completed = orders.filter((item) => item.status === 'completed')
|
const todayIncomeCent = todayOrders.reduce((sum, item) => sum + item.incomeCent, 0)
|
return Promise.resolve({
|
pendingCount: orders.filter((item) => item.status === 'pending').length,
|
activeCount: orders.filter((item) => ['accepted', 'arrived', 'serving'].includes(item.status)).length,
|
completedCount: completed.length,
|
todayIncomeCent
|
})
|
}
|
|
export function getEarnings(filters = {}) {
|
const data = {
|
pageNum: filters.pageNum || 1,
|
pageSize: filters.pageSize || 50
|
}
|
if (filters.serviceType) {
|
data.serviceType = filters.serviceType
|
}
|
if (filters.scenicName) {
|
data.scenicName = filters.scenicName
|
}
|
if (filters.date) {
|
data.date = filters.date
|
}
|
return request({
|
url: '/guide/earnings',
|
data
|
})
|
}
|