Files
WXProgram/miniprogram/pages/index/modules/dataModule.ts
2025-10-16 21:32:16 +08:00

286 lines
6.6 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 { 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();
}
}