235 lines
7.9 KiB
JavaScript
235 lines
7.9 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.OrderModule = void 0;
|
|
const orderService_1 = __importDefault(require("../../../services/orderService"));
|
|
const helpers_1 = require("../../../utils/helpers");
|
|
class OrderModule {
|
|
constructor(pageContext, dataModule) {
|
|
this.pageContext = pageContext;
|
|
this.dataModule = dataModule;
|
|
}
|
|
/**
|
|
* 加载待处理订单
|
|
*/
|
|
async loadPendingOrders() {
|
|
try {
|
|
this.pageContext.setData({
|
|
loadingOrders: true
|
|
});
|
|
const orders = await orderService_1.default.getPendingOrders();
|
|
this.dataModule.updatePendingOrders(orders);
|
|
// 更新地图标记点
|
|
// this.updateOrderMarkers();
|
|
}
|
|
catch (error) {
|
|
console.error('加载订单失败:', error);
|
|
(0, helpers_1.showToast)('加载订单失败');
|
|
}
|
|
finally {
|
|
this.pageContext.setData({
|
|
loadingOrders: false
|
|
});
|
|
}
|
|
}
|
|
/**
|
|
* 显示订单详情面板
|
|
*/
|
|
showOrderPanel(order, position) {
|
|
// 关闭其他面板
|
|
this.pageContext.hideAllPanels();
|
|
// 更新数据模块中的当前订单和面板状态
|
|
this.dataModule.setCurrentOrder(order);
|
|
this.dataModule.setPanelPosition(position);
|
|
this.dataModule.toggleOrderPanel(true);
|
|
// 规划订单路线
|
|
this.planOrderRoute(order);
|
|
}
|
|
/**
|
|
* 隐藏订单详情面板
|
|
*/
|
|
hideOrderPanel() {
|
|
// 更新数据模块中的面板状态
|
|
this.dataModule.toggleOrderPanel(false);
|
|
this.dataModule.setCurrentOrder(null);
|
|
// 同时取消路线显示
|
|
this.cancelRoute();
|
|
// 重置标记点状态
|
|
this.pageContext.resetMarkers();
|
|
}
|
|
/**
|
|
* 规划订单路线
|
|
*/
|
|
async planOrderRoute(order) {
|
|
try {
|
|
const origin = `${order.startPoint.longitude},${order.startPoint.latitude}`;
|
|
const destination = `${order.endPoint.longitude},${order.endPoint.latitude}`;
|
|
console.log(`开始规划路线: 起点=${origin}, 终点=${destination}`);
|
|
// 这里应该调用地图服务的路线规划功能
|
|
// 目前先模拟一个简单的路线规划结果
|
|
const routeResult = {
|
|
distance: 1500, // 1.5公里
|
|
duration: 300, // 5分钟
|
|
polyline: null // 路线数据
|
|
};
|
|
console.log('路线规划结果:', routeResult);
|
|
// 显示距离和时长信息
|
|
if (routeResult.distance > 0 || routeResult.duration > 0) {
|
|
const distanceStr = this.formatDistance(routeResult.distance);
|
|
const durationStr = this.formatDuration(routeResult.duration);
|
|
(0, helpers_1.showToast)(`距离: ${distanceStr}, 预计时间: ${durationStr}`);
|
|
}
|
|
// 更新数据模块中的路线信息
|
|
this.dataModule.updateRouteInfo(routeResult.polyline, routeResult.distance, routeResult.duration);
|
|
}
|
|
catch (error) {
|
|
console.error('路线规划失败:', error);
|
|
(0, helpers_1.showToast)('路线规划失败');
|
|
}
|
|
}
|
|
/**
|
|
* 取消路线显示
|
|
*/
|
|
cancelRoute() {
|
|
// 清除数据模块中的路线信息
|
|
this.dataModule.clearRouteInfo();
|
|
}
|
|
/**
|
|
* 分配订单给货运人员
|
|
*/
|
|
async assignOrder(orderId, deliveryPersonId) {
|
|
try {
|
|
const result = await orderService_1.default.assignOrder(orderId, deliveryPersonId);
|
|
if (result.success) {
|
|
(0, helpers_1.showToast)('订单分配成功');
|
|
// 刷新订单列表
|
|
await this.loadPendingOrders();
|
|
// 刷新货运人员状态
|
|
// TODO this.dataModule.notifyDeliveryPersonsUpdated();
|
|
}
|
|
else {
|
|
(0, helpers_1.showToast)(result.message || '订单分配失败');
|
|
}
|
|
}
|
|
catch (error) {
|
|
console.error('分配订单失败:', error);
|
|
(0, helpers_1.showToast)('订单分配失败');
|
|
}
|
|
}
|
|
/**
|
|
* 更新订单状态
|
|
*/
|
|
async updateOrderStatus(orderId, status) {
|
|
try {
|
|
const result = await orderService_1.default.updateOrderStatus(orderId, status);
|
|
if (result.success) {
|
|
(0, helpers_1.showToast)('订单状态已更新');
|
|
// 刷新订单列表
|
|
await this.loadPendingOrders();
|
|
// 刷新货运人员状态
|
|
// this.dataModule.notifyDeliveryPersonsUpdated();
|
|
}
|
|
else {
|
|
(0, helpers_1.showToast)(result.message || '订单状态更新失败');
|
|
}
|
|
}
|
|
catch (error) {
|
|
console.error('更新订单状态失败:', error);
|
|
(0, helpers_1.showToast)('订单状态更新失败');
|
|
}
|
|
}
|
|
/**
|
|
* 删除订单
|
|
*/
|
|
async deleteOrder(orderId) {
|
|
try {
|
|
// 确认删除操作
|
|
const confirmResult = await new Promise((resolve) => {
|
|
wx.showModal({
|
|
title: '确认删除',
|
|
content: '确定要删除这个订单吗?此操作不可恢复。',
|
|
success: (res) => {
|
|
resolve(res.confirm);
|
|
}
|
|
});
|
|
});
|
|
if (!confirmResult) {
|
|
return; // 用户取消删除
|
|
}
|
|
await orderService_1.default.deleteOrder(orderId);
|
|
(0, helpers_1.showToast)('订单已删除');
|
|
// 刷新订单列表
|
|
await this.loadPendingOrders();
|
|
// 刷新货运人员状态
|
|
// this.dataModule.notifyDeliveryPersonsUpdated();
|
|
// 如果当前正在查看被删除的订单,关闭订单面板
|
|
//TODO
|
|
// const currentOrder = this.dataModule.getCurrentOrder();
|
|
// if (currentOrder && currentOrder.id === orderId) {
|
|
// this.hideOrderPanel();
|
|
// }
|
|
}
|
|
catch (error) {
|
|
console.error('删除订单失败:', error);
|
|
(0, helpers_1.showToast)('删除订单失败');
|
|
}
|
|
}
|
|
/**
|
|
* 格式化距离
|
|
*/
|
|
formatDistance(distance) {
|
|
if (distance < 1000) {
|
|
return `${distance}米`;
|
|
}
|
|
else {
|
|
return `${(distance / 1000).toFixed(1)}公里`;
|
|
}
|
|
}
|
|
/**
|
|
* 格式化时长
|
|
*/
|
|
formatDuration(duration) {
|
|
const minutes = Math.floor(duration / 60);
|
|
const seconds = duration % 60;
|
|
if (minutes > 0) {
|
|
return `${minutes}分${seconds}秒`;
|
|
}
|
|
else {
|
|
return `${seconds}秒`;
|
|
}
|
|
}
|
|
/**
|
|
* 获取订单状态文本
|
|
*/
|
|
getOrderStatusText(status) {
|
|
const statusMap = {
|
|
'pending': '未分配',
|
|
'assigned': '已分配',
|
|
'in_transit': '配送中',
|
|
'delivered': '已完成',
|
|
'cancelled': '已取消'
|
|
};
|
|
return statusMap[status] || status;
|
|
}
|
|
/**
|
|
* 获取订单状态对应的图标
|
|
*/
|
|
getOrderStatusIcon(status) {
|
|
switch (status) {
|
|
case 'pending':
|
|
return '/images/order-pending.png';
|
|
case 'assigned':
|
|
return '/images/order-assigned.png';
|
|
case 'in_transit':
|
|
return '/images/order-transit.png';
|
|
case 'delivered':
|
|
return '/images/order-delivered.png';
|
|
default:
|
|
return '/images/order-pending.png';
|
|
}
|
|
}
|
|
}
|
|
exports.OrderModule = OrderModule;
|