Files
WXProgram/miniprogram/pages/index/modules/deliveryPersonModule.ts

162 lines
4.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 员工模块 - 处理所有员工(管理员和货运人员)管理、位置跟踪、交互
import employeeService from '../../../services/employeeService';
import { Role } from '../../../utils/roleUtils';
// getApp是微信小程序全局函数无需导入
import { showToast } from '../../../utils/helpers';
import { DataModule } from './dataModule';
export class EmployeeModule {
private pageContext: any;
private dataModule: DataModule;
constructor(pageContext: any, dataModule: DataModule) {
this.pageContext = pageContext;
this.dataModule = dataModule;
}
/**
* 加载所有员工数据(包括管理员和货运人员)
*/
async loadAllEmployees(): Promise<void> {
try {
// 获取所有员工数据
const allEmployees = await employeeService.getEmployees();
console.log('所有员工数据加载完成,数量:', allEmployees.length);
} catch (error) {
console.error('加载员工数据失败:', error);
showToast('加载员工数据失败');
}
}
/**
* 获取员工角色对应的图标
*/
private getEmployeeIcon(role: string): string {
console.log(`获取员工图标,角色: ${role}`);
// 根据角色使用不同的图标
let iconPath = '';
switch (role) {
case Role.ADMIN:
// 管理员使用皇冠图标
iconPath = '/images/crown.png';
console.log('使用管理员图标(👑)');
break;
case Role.DELIVERY_PERSON:
// 货运人员使用货车图标
iconPath = '/images/truck.png';
console.log('使用货运人员图标(🚚)');
break;
default:
// 默认使用货车图标
iconPath = '/images/truck.png';
console.log('使用默认图标(🚚)');
break;
}
console.log(`最终使用图标路径: ${iconPath}`);
return iconPath;
}
/**
* 显示货运人员详情面板
*/
showDeliveryPersonPanel(person: any, position: { x: number, y: number }): void {
// 关闭其他面板
this.pageContext.hideAllPanels();
this.dataModule.setCurrentDeliveryPerson(person);
this.dataModule.setPanelPosition(position);
this.dataModule.toggleDeliveryPersonModal(true, 'bottom');
}
/**
* 隐藏货运人员详情面板
*/
hideDeliveryPersonPanel(): void {
this.dataModule.toggleDeliveryPersonModal(false);
this.dataModule.setCurrentDeliveryPerson(null);
}
/**
* 展开货运人员详情面板
*/
expandDeliveryPersonPanel(): void {
this.dataModule.toggleDeliveryPersonModal(true, 'full');
}
/**
* 收起货运人员详情面板
*/
collapseDeliveryPersonPanel(): void {
this.dataModule.toggleDeliveryPersonModal(true, 'bottom');
}
/**
* 处理货运人员标记点点击
*/
onDeliveryPersonMarkerClick(person: any, position: { x: number, y: number }): void {
console.log('货运人员被点击:', person);
// 显示货运人员详情面板
this.showDeliveryPersonPanel(person, position);
}
/**
* 获取货运人员状态文本
*/
getDeliveryPersonStatusText(status: string): string {
const statusMap: Record<string, string> = {
'idle': '空闲',
'busy': '忙碌',
'offline': '离线'
};
return statusMap[status] || status;
}
/**
* 获取货运人员状态颜色
*/
getDeliveryPersonStatusColor(status: string): string {
switch (status) {
case 'idle':
return '#52c41a'; // 绿色
case 'busy':
return '#faad14'; // 橙色
case 'offline':
return '#d9d9d9'; // 灰色
default:
return '#d9d9d9'; // 灰色
}
}
/**
* 获取货运人员当前订单信息
*/
getCurrentOrderInfo(person: any): string {
if (!person.currentOrder) {
return '暂无订单';
}
const order = person.currentOrder;
return `订单 #${order.id} - ${this.getOrderStatusText(order.status)}`;
}
/**
* 获取订单状态文本
*/
private getOrderStatusText(status: string): string {
const statusMap: Record<string, string> = {
'pending': '未分配',
'assigned': '已分配',
'in_transit': '配送中',
'delivered': '已完成',
'cancelled': '已取消'
};
return statusMap[status] || status;
}
}