// 主页面模块 - 协调各个子模块,处理页面生命周期和事件分发 import { LoginModule } from './loginModule'; import { MapModule } from './mapModule'; import { OrderModule } from './orderModule'; import { WarehouseModule } from './warehouseModule'; import { EmployeeModule } from './deliveryPersonModule'; import { LocationModule } from './locationModule'; import { DataModule } from './dataModule'; import { showToast } from '../../../utils/helpers'; // 主页面模块接口定义 export interface MainPageModule { getLoginModule(): LoginModule; onLoad(): Promise; onShow(): void; onHide(): void; onLogout(): void; hideAllPanels(): void; resetMarkers(): void; cleanup(): void; refreshAllData(): Promise; } export class MainPageModule { private pageContext: any; private loginModule: LoginModule; private mapModule: MapModule; private orderModule: OrderModule; private warehouseModule: WarehouseModule; private employeeModule: EmployeeModule; private locationModule: LocationModule; private dataModule: DataModule; constructor(pageContext: any) { this.pageContext = pageContext; // 初始化各个子模块 this.dataModule = new DataModule(pageContext); this.loginModule = new LoginModule(pageContext, this.dataModule); this.mapModule = new MapModule(pageContext, this.dataModule); this.orderModule = new OrderModule(pageContext, this.dataModule); this.warehouseModule = new WarehouseModule(pageContext, this.dataModule); this.employeeModule = new EmployeeModule(pageContext, this.dataModule); this.locationModule = new LocationModule(pageContext, this.dataModule); } /** * 页面初始化 */ async onLoad(): Promise { console.log('主页面模块初始化'); try { // 初始化应用 await this.initApp(); // 初始化位置模块 await this.locationModule.initialize(); // 加载地图数据 await this.loadAllData(); console.log('主页面初始化完成'); } catch (error) { console.error('页面初始化失败:', error); showToast('页面初始化失败'); } } /** * 页面显示 */ onShow(): void { console.log('主页面显示'); // 检查是否需要刷新数据 this.refreshDataIfNeeded(); } /** * 页面隐藏 */ onHide(): void { console.log('主页面隐藏'); // 清理位置模块 this.locationModule.cleanup(); } /** * 初始化应用 */ private async initApp(): Promise { // 初始化数据 await this.dataModule.initializeData(); console.log('应用初始化'); } /** * 加载所有数据 */ private async loadAllData(): Promise { try { // 初始化地图 await this.mapModule.initMap(); // 加载公开数据(不需要登录) await this.loadPublicData(); // 检查是否已登录,只有已登录用户才能加载业务数据 const app = getApp(); if (app.globalData.isLoggedIn) { await this.loadBusinessData(); } else { console.log('用户未登录,不加载业务数据'); } } catch (error) { console.error('加载数据失败:', error); showToast('数据加载失败'); } } /** * 加载公开数据(不需要登录) */ private async loadPublicData(): Promise { console.log('加载公开数据'); try { // 加载仓库数据(公开数据,不需要登录) await this.warehouseModule.loadWarehouses(); console.log('公开数据加载完成'); } catch (error) { console.error('加载公开数据失败:', error); // 公开数据加载失败不影响主要功能,只记录日志 } } /** * 加载业务数据 */ private async loadBusinessData(): Promise { console.log('加载业务数据'); try { // 并行加载各种业务数据(需要登录) await Promise.all([ this.orderModule.loadPendingOrders(), this.employeeModule.loadAllEmployees() ]); console.log('所有业务数据加载完成'); } catch (error) { console.error('加载业务数据失败:', error); showToast('业务数据加载失败'); } } /** * 检查是否需要刷新数据 */ private refreshDataIfNeeded(): void { // 这里可以添加数据刷新逻辑 // 例如:检查上次刷新时间,如果超过一定时间则重新加载数据 console.log('检查数据刷新'); } /** * 处理登出 */ onLogout(): void { console.log('用户登出'); // 清除业务数据 this.clearBusinessData(); // 重置用户标记点图标 this.resetUserMarker(); showToast('已登出'); } /** * 清除业务数据 */ private clearBusinessData(): void { this.dataModule.updatePendingOrders([]); const filteredMarkers = this.pageContext.data.markers.filter((marker: any) => marker.type !== 'warehouse' && marker.type !== 'employee' ); this.dataModule.updateMarkers(filteredMarkers); } /** * 重置用户标记点 */ private resetUserMarker(): void { const { markers } = this.pageContext.data; const updatedMarkers = markers.map((marker: any) => { if (marker.id === -1) { return { ...marker, iconPath: '/images/trucks.png' }; } return marker; }); this.dataModule.updateMarkers(updatedMarkers); } /** * 隐藏所有面板 */ hideAllPanels(): void { this.dataModule.toggleUserPanel(false); this.dataModule.toggleOrderPanel(false); this.dataModule.toggleWarehouseModal(false); this.dataModule.toggleDeliveryPersonModal(false); } /** * 重置标记点状态 */ resetMarkers(): void { // 这里可以添加标记点状态重置逻辑 console.log('重置标记点状态'); } /** * 分发地图点击事件 */ onMapTap(e: any): void { this.mapModule.onMapTap(e); } /** * 分发标记点点击事件 */ onMarkerTap(e: any): void { const markerId = e.markerId; const { markers } = this.pageContext.data; // 找到被点击的标记点 const marker = markers.find((m: any) => m.id === markerId); if (!marker) { console.warn('未找到标记点:', markerId); return; } // 根据标记点类型分发到不同的模块 switch (marker.type) { case 'warehouse': this.warehouseModule.onWarehouseMarkerClick(marker.data, e); break; case 'delivery_person': this.employeeModule.onDeliveryPersonMarkerClick(marker.data, e); break; default: this.mapModule.onMarkerTap(e); break; } } /** * 获取登录模块 */ getLoginModule(): LoginModule { return this.loginModule; } /** * 获取地图模块 */ getMapModule(): MapModule { return this.mapModule; } /** * 获取订单模块 */ getOrderModule(): OrderModule { return this.orderModule; } /** * 获取仓库模块 */ getWarehouseModule(): WarehouseModule { return this.warehouseModule; } /** * 获取员工模块 */ getEmployeeModule(): EmployeeModule { return this.employeeModule; } /** * 获取位置模块 */ getLocationModule(): LocationModule { return this.locationModule; } /** * 刷新所有数据 */ async refreshAllData(): Promise { console.log('刷新所有数据'); try { // 刷新公开数据(不需要登录) await this.loadPublicData(); // 检查是否已登录,只有已登录用户才能刷新业务数据 const app = getApp(); if (app.globalData.isLoggedIn) { await this.loadBusinessData(); showToast('数据刷新成功'); } else { console.log('用户未登录,无法刷新业务数据'); showToast('公开数据已刷新,请登录以刷新业务数据'); } } catch (error) { console.error('刷新数据失败:', error); showToast('刷新数据失败'); } } /** * 处理错误 */ handleError(error: any, context: string): void { console.error(`在 ${context} 中发生错误:`, error); showToast(`操作失败: ${context}`); } }