286 lines
6.6 KiB
TypeScript
286 lines
6.6 KiB
TypeScript
|
import { UserInfo, Marker } from '../../../types';
|
|||
|
|
|||
|
/**
|
|||
|
* 页面数据管理模块
|
|||
|
* 负责管理index页面的所有数据状态
|
|||
|
*/
|
|||
|
export class DataModule {
|
|||
|
private pageContext: any;
|
|||
|
|
|||
|
constructor(pageContext: any) {
|
|||
|
this.pageContext = pageContext;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 初始化页面数据
|
|||
|
*/
|
|||
|
public initializeData(): void {
|
|||
|
this.pageContext.setData({
|
|||
|
// 地图相关数据
|
|||
|
longitude: 102.833722,
|
|||
|
latitude: 24.880095,
|
|||
|
scale: 13,
|
|||
|
markers: [] as Marker[],
|
|||
|
polyline: null,
|
|||
|
showRoute: false,
|
|||
|
routeDistance: 0,
|
|||
|
routeDuration: 0,
|
|||
|
currentRoute: null,
|
|||
|
|
|||
|
// 用户相关数据
|
|||
|
userInfo: null as UserInfo | null,
|
|||
|
isLoggedIn: false,
|
|||
|
showUserPanel: false,
|
|||
|
|
|||
|
// 订单相关数据
|
|||
|
pendingOrders: [] as any[],
|
|||
|
showOrderPanel: false,
|
|||
|
currentOrder: null,
|
|||
|
|
|||
|
// 货运人员相关数据
|
|||
|
showDeliveryPersonModal: false,
|
|||
|
deliveryPersonModalState: 'bottom',
|
|||
|
currentDeliveryPerson: null,
|
|||
|
|
|||
|
// 仓库相关数据
|
|||
|
showWarehouseModal: false,
|
|||
|
warehouseModalState: 'bottom',
|
|||
|
currentWarehouse: null,
|
|||
|
|
|||
|
// 面板位置数据
|
|||
|
currentPanelPosition: { x: 0, y: 0 },
|
|||
|
|
|||
|
// 对话框相关数据
|
|||
|
showNickNameDialog: false,
|
|||
|
tempNickName: ''
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 更新用户信息
|
|||
|
*/
|
|||
|
public updateUserInfo(userInfo: UserInfo | null): void {
|
|||
|
this.pageContext.setData({
|
|||
|
userInfo,
|
|||
|
isLoggedIn: !!userInfo
|
|||
|
});
|
|||
|
|
|||
|
// 更新按钮显示状态
|
|||
|
if (this.pageContext.updateButtonDisplayStatus) {
|
|||
|
this.pageContext.updateButtonDisplayStatus();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 设置登录状态
|
|||
|
*/
|
|||
|
public setLoginStatus(isLoggedIn: boolean): void {
|
|||
|
this.pageContext.setData({
|
|||
|
isLoggedIn
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 设置地图缩放级别
|
|||
|
*/
|
|||
|
public setMapScale(scale: number): void {
|
|||
|
this.pageContext.setData({
|
|||
|
scale
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 更新用户位置信息
|
|||
|
*/
|
|||
|
public updateUserLocation(latitude: number, longitude: number): void {
|
|||
|
this.pageContext.setData({
|
|||
|
latitude,
|
|||
|
longitude
|
|||
|
});
|
|||
|
|
|||
|
// 同时更新地图上的用户标记点
|
|||
|
this.updateUserMarkerPosition(longitude, latitude);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 更新用户标记点位置
|
|||
|
*/
|
|||
|
public updateUserMarkerPosition(longitude: number, latitude: number, userId?: number): void {
|
|||
|
const { markers } = this.pageContext.data;
|
|||
|
|
|||
|
// 如果没有指定用户ID,默认使用-1(当前用户)
|
|||
|
const targetUserId = userId !== undefined ? userId : -1;
|
|||
|
const markerTitle = targetUserId === -1 ? '用户位置' : `用户${targetUserId}`;
|
|||
|
|
|||
|
// 查找用户标记点
|
|||
|
const userMarkerIndex = markers.findIndex((marker: any) => marker.id === targetUserId);
|
|||
|
|
|||
|
if (userMarkerIndex !== -1) {
|
|||
|
// 更新用户标记点位置
|
|||
|
const updatedMarkers = [...markers];
|
|||
|
updatedMarkers[userMarkerIndex] = {
|
|||
|
...updatedMarkers[userMarkerIndex],
|
|||
|
latitude,
|
|||
|
longitude
|
|||
|
};
|
|||
|
|
|||
|
this.updateMarkers(updatedMarkers);
|
|||
|
} else {
|
|||
|
// 创建新的用户标记点
|
|||
|
const newUserMarker = {
|
|||
|
id: targetUserId,
|
|||
|
title: markerTitle,
|
|||
|
longitude: longitude,
|
|||
|
latitude: latitude,
|
|||
|
iconPath: '/images/trucks.png',
|
|||
|
width: 40,
|
|||
|
height: 40,
|
|||
|
zIndex: targetUserId === -1 ? 99 : 98 // 当前用户层级更高
|
|||
|
};
|
|||
|
|
|||
|
const updatedMarkers = [...markers, newUserMarker];
|
|||
|
this.updateMarkers(updatedMarkers);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 更新地图标记点
|
|||
|
*/
|
|||
|
public updateMarkers(markers: Marker[]): void {
|
|||
|
// 验证每个标记点的坐标
|
|||
|
const validatedMarkers = markers.map((marker, index) => {
|
|||
|
// 检查经纬度是否为有效数字
|
|||
|
if (isNaN(marker.longitude) || isNaN(marker.latitude)) {
|
|||
|
// 为无效坐标设置默认值
|
|||
|
return {
|
|||
|
...marker,
|
|||
|
longitude: 102.833722, // 默认经度
|
|||
|
latitude: 24.880095 // 默认纬度
|
|||
|
};
|
|||
|
} else {
|
|||
|
return marker;
|
|||
|
}
|
|||
|
});
|
|||
|
|
|||
|
// 执行更新
|
|||
|
this.pageContext.setData({ markers: validatedMarkers });
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 更新待分配订单列表
|
|||
|
*/
|
|||
|
public updatePendingOrders(orders: any[]): void {
|
|||
|
this.pageContext.setData({ pendingOrders: orders });
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 设置当前选中订单
|
|||
|
*/
|
|||
|
public setCurrentOrder(order: any): void {
|
|||
|
this.pageContext.setData({ currentOrder: order });
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 设置当前选中货运人员
|
|||
|
*/
|
|||
|
public setCurrentDeliveryPerson(person: any): void {
|
|||
|
this.pageContext.setData({ currentDeliveryPerson: person });
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 设置当前选中仓库
|
|||
|
*/
|
|||
|
public setCurrentWarehouse(warehouse: any): void {
|
|||
|
this.pageContext.setData({ currentWarehouse: warehouse });
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 设置面板位置
|
|||
|
*/
|
|||
|
public setPanelPosition(position: { x: number; y: number }): void {
|
|||
|
this.pageContext.setData({ currentPanelPosition: position });
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 显示/隐藏用户面板
|
|||
|
*/
|
|||
|
public toggleUserPanel(show: boolean): void {
|
|||
|
this.pageContext.setData({ showUserPanel: show });
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 显示/隐藏订单面板
|
|||
|
*/
|
|||
|
public toggleOrderPanel(show: boolean): void {
|
|||
|
this.pageContext.setData({ showOrderPanel: show });
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 显示/隐藏仓库弹窗
|
|||
|
*/
|
|||
|
public toggleWarehouseModal(show: boolean, state: 'bottom' | 'full' = 'bottom'): void {
|
|||
|
this.pageContext.setData({
|
|||
|
showWarehouseModal: show,
|
|||
|
warehouseModalState: state
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 显示/隐藏货运人员弹窗
|
|||
|
*/
|
|||
|
public toggleDeliveryPersonModal(show: boolean, state: 'bottom' | 'full' = 'bottom'): void {
|
|||
|
this.pageContext.setData({
|
|||
|
showDeliveryPersonModal: show,
|
|||
|
deliveryPersonModalState: state
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 显示/隐藏昵称修改对话框
|
|||
|
*/
|
|||
|
public toggleNickNameDialog(show: boolean, tempNickName: string = ''): void {
|
|||
|
this.pageContext.setData({
|
|||
|
showNickNameDialog: show,
|
|||
|
tempNickName
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 更新路线信息
|
|||
|
*/
|
|||
|
public updateRouteInfo(polyline: any, distance: number, duration: number): void {
|
|||
|
this.pageContext.setData({
|
|||
|
polyline,
|
|||
|
routeDistance: distance,
|
|||
|
routeDuration: duration,
|
|||
|
showRoute: true
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 清除路线信息
|
|||
|
*/
|
|||
|
public clearRouteInfo(): void {
|
|||
|
this.pageContext.setData({
|
|||
|
polyline: null,
|
|||
|
showRoute: false,
|
|||
|
routeDistance: 0,
|
|||
|
routeDuration: 0,
|
|||
|
currentRoute: null
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取当前数据状态
|
|||
|
*/
|
|||
|
public getData(): any {
|
|||
|
return this.pageContext.data;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 重置所有数据到初始状态
|
|||
|
*/
|
|||
|
public resetAllData(): void {
|
|||
|
this.initializeData();
|
|||
|
}
|
|||
|
}
|