// index.ts // 引入服务和工具函数 import userService from '../../services/userService'; // 引入主页面模块 import { MainPageModule } from './modules/mainPageModule'; // 导入类型定义 import { IndexPageComponent } from '../../types'; // 主页面组件 Component({ data: { longitude: 116.397428, latitude: 39.90923, scale: 16, markers: [], userInfo: null, authStatus: { hasWxCode: false, userStatus: 'unknown' }, showUserPanel: false, showOrderPanel: false, currentOrder: null, currentDeliveryPerson: null, currentWarehouse: null, currentPanelPosition: { x: 0, y: 0 }, polyline: null, pendingOrders: [], currentRoute: null, showRoute: false, routeDistance: 0, routeDuration: 0, showWarehouseModal: false, showDeliveryPersonModal: false, warehouseModalState: 'bottom', deliveryPersonModalState: 'bottom', showSignOutButton: false, showSignInButton: false, showRegisterButton: false, showAuthButton: true, // mainPageModule: null as MainPageModule | null }, lifetimes: { attached() { console.log('index page attached'); this.initPage(); }, detached() { console.log('index page detached'); // 清理资源 if (this.data.mainPageModule) { this.data.mainPageModule.cleanup(); } }, // show() { // console.log('index page show'); // // 页面显示时调用主页面模块的onShow方法 // if (this.data.mainPageModule) { // this.data.mainPageModule.onShow(); // } // }, // hide() { // console.log('index page hide'); // // 页面隐藏时调用主页面模块的onHide方法 // if (this.data.mainPageModule) { // this.data.mainPageModule.onHide(); // } // } }, methods: { // 处理货运人员底部弹窗关闭 onDeliveryPersonModalClose() { this.setData({ showDeliveryPersonModal: false }); }, // 处理仓库底部弹窗关闭 onWarehouseModalClose() { this.setData({ showWarehouseModal: false }); }, // 初始化页面 async initPage() { // 初始化主页面模块 this.setData({ mainPageModule: new MainPageModule(this) }); // 异步检查登录状态 await this.checkAndUpdateLoginStatus(); }, // 异步检查并更新登录状态 async checkAndUpdateLoginStatus() { try { // 获取登录模块 if (!this.data.mainPageModule) { console.error('mainPageModule未初始化'); return; } const loginModule = this.data.mainPageModule.getLoginModule(); // 显示加载状态 wx.showLoading({ title: '检查登录状态...', mask: true }); // 异步检查登录状态 const isLoggedIn = await this.asyncCheckLoginStatus(loginModule); if (isLoggedIn) { // 已登录状态 - 按钮状态会在refreshPageAfterLogin中统一更新 console.log('✅ 登录检查成功,等待统一页面刷新'); } else { // 未登录状态 this.setData({ userInfo: null, 'authStatus.hasWxCode': false, 'authStatus.userStatus': 'unknown', // 初始化按钮显示状态 showSignInButton: false, showRegisterButton: false, showAuthButton: true }); } } catch (error) { console.error('检查登录状态失败:', error); // 出错时设置为未登录状态 this.setData({ userInfo: null, 'authStatus.hasWxCode': false, 'authStatus.userStatus': 'unknown', showSignInButton: false, showRegisterButton: false, showAuthButton:true }); console.log('❌ 登录检查失败,重置为未登录状态'); console.log(' - authStatus.hasWxCode 设置为 false'); console.log(' - showRegisterButton 设置为 false'); } finally { wx.hideLoading(); } }, // 异步检查登录状态 async asyncCheckLoginStatus(loginModule: any): Promise { getApp(); const app = getApp(); // 首先检查本地是否有登录状态 if (app.globalData.isLoggedIn && app.globalData.userInfo) { // 本地已有登录状态,此时可以安全获取用户状态(因为有token) const userStatus = await loginModule.determineUserStatus(app.globalData.userInfo); // 更新页面状态 this.setData({ userInfo: app.globalData.userInfo, 'authStatus.hasWxCode': true, 'authStatus.userStatus': userStatus }); console.log('✅ 使用本地登录状态,用户状态已更新:', userStatus); // 登录成功后统一刷新页面 this.refreshPageAfterLogin(); return true; } // 如果本地没有登录状态,尝试执行静默登录 try { const loginResult = await userService.wxLogin(); if (loginResult.success && loginResult.userInfo) { const app = getApp(); // 登录成功,更新全局用户信息 app.globalData.userInfo = loginResult.userInfo; app.globalData.isLoggedIn = true; // 登录成功后,此时已经有token,可以安全获取用户状态 const userStatus = await loginModule.determineUserStatus(loginResult.userInfo); // 更新页面状态 this.setData({ userInfo: loginResult.userInfo, 'authStatus.hasWxCode': true, 'authStatus.userStatus': userStatus }); console.log('✅ 静默登录成功,用户状态已更新:', userStatus); // === 全局登录流程完成,登录成功 === // 统一在此处执行一次完整的页面刷新 this.refreshPageAfterLogin(); return true; } } catch (error) { console.warn('静默登录失败:', error); } return false; }, // 更新按钮显示状态 updateButtonDisplayStatus() { if (!this.data.mainPageModule) { console.error('mainPageModule未初始化'); return; } const loginModule = this.data.mainPageModule.getLoginModule(); const showSignInButton = loginModule.shouldShowSignInButton(); const showRegisterButton = loginModule.shouldShowRegisterButton(); // 签退按钮显示逻辑:已签到用户显示签退按钮 const showSignOutButton = this.data.authStatus && this.data.authStatus.userStatus === 'signed_in'; console.log('🔄 更新按钮显示状态:'); console.log(' - showSignInButton:', showSignInButton); console.log(' - showRegisterButton:', showRegisterButton); console.log(' - showSignOutButton:', showSignOutButton); console.log(' - 当前用户状态:', this.data.authStatus ? this.data.authStatus.userStatus : 'undefined'); console.log(' - 当前hasWxCode:', this.data.authStatus ? this.data.authStatus.hasWxCode : 'undefined'); this.setData({ showSignInButton, showRegisterButton, showSignOutButton }); console.log('✅ 按钮状态已更新到页面'); }, // 登录成功后统一刷新页面 async refreshPageAfterLogin() { if (!this.data.mainPageModule) { console.error('mainPageModule未初始化'); return; } const loginModule = this.data.mainPageModule.getLoginModule(); getApp(); console.log('🔄 === 全局登录流程完成,执行统一页面刷新 ==='); // 1. 更新页面登录状态 const app = getApp(); loginModule.updatePageAfterLogin(app.globalData.userInfo); // 2. 更新按钮显示状态 this.updateButtonDisplayStatus(); // 3. 初始化主页面模块 await this.data.mainPageModule.onLoad(); // 4. 登录成功后只加载公开数据(仓库等),不加载业务数据 // 业务数据(员工位置等)只有在用户签到后才应该加载 if (app.globalData.isLoggedIn && this.data.authStatus.userStatus === 'signed_in') { console.log('🔍 登录成功,开始加载公开数据...'); await this.data.mainPageModule.loadPublicData(); console.log('✅ 公开数据加载完成'); } console.log('✅ 统一页面刷新完成'); }, // 处理仓库底部弹窗状态变化 onWarehouseModalStateChange(e: any) { const state = e.detail.state; this.setData({ warehouseModalState: state }); }, // 处理货运人员底部弹窗状态变化 onDeliveryPersonModalStateChange(e: any) { const state = e.detail.state; this.setData({ deliveryPersonModalState: state }); }, // 处理签到 - 已迁移到LoginModule async handleSignIn() { if (!this.data.mainPageModule) { console.error('mainPageModule未初始化'); return; } const loginModule = this.data.mainPageModule.getLoginModule(); const success = await loginModule.handleSignIn(); if (success) { // 更新按钮显示状态 this.updateButtonDisplayStatus(); // 刷新页面数据 await this.data.mainPageModule.refreshAllData(); } }, // 处理授权登录 - 已迁移到LoginModule async handleAuthLogin() { if (!this.data.mainPageModule) { console.error('mainPageModule未初始化'); return; } const loginModule = this.data.mainPageModule.getLoginModule(); const success = await loginModule.handleAuthLogin(); if (success) { const app = getApp(); const userStatus = loginModule.determineUserStatus(app.globalData.userInfo); this.setData({ userInfo: app.globalData.userInfo, 'authStatus.hasWxCode': true, 'authStatus.userStatus': userStatus }); console.log('✅ 手动登录成功,authStatus.hasWxCode 设置为 true'); console.log('✅ 用户状态已更新:', userStatus); // === 全局登录流程完成,登录成功 === // 统一在此处执行一次完整的页面刷新 this.refreshPageAfterLogin(); } }, // 处理签退 - 已迁移到LoginModule async handleSignOut() { if (!this.data.mainPageModule) { console.error('mainPageModule未初始化'); return; } const loginModule = this.data.mainPageModule.getLoginModule(); const success = await loginModule.handleSignOut(); if (success) { // 更新按钮显示状态 this.updateButtonDisplayStatus(); // 刷新页面数据 await this.data.mainPageModule.refreshAllData(); } }, // 显示申请加入货运人员表单 - 跳转到独立页面 showApplyForm() { wx.navigateTo({ url: '/pages/apply/apply' }); }, // 跳转到管理员页面 goToAdminPage() { wx.navigateTo({ url: '/pages/admin/admin' }); }, // 跳转到员工管理页面 goToEmployeeManagement() { wx.navigateTo({ url: '/pages/employee/employee' }); }, // 阻止事件冒泡 stopPropagation(e: any) { if (e && typeof e.stopPropagation === 'function') { e.stopPropagation(); } }, // 获取性别文本表示 getGenderText(gender: number): string { if (gender === 1) return '男'; if (gender === 2) return '女'; return '未知'; }, // 格式化坐标对 formatCoordinatePair(longitude: number, latitude: number): string { return `${longitude.toFixed(6)}, ${latitude.toFixed(6)}`; }, // 用户登出 userLogout() { if (this.data.mainPageModule) { const loginModule = this.data.mainPageModule.getLoginModule(); loginModule.logout(); // 更新页面状态 this.setData({ isLoggedIn: false, userInfo: null }); // 更新按钮显示状态 this.updateButtonDisplayStatus(); } }, // 显示用户面板 showUserPanel() { this.setData({ showUserPanel: true }); }, // 跳转到管理界面(基于用户角色) goToManagementPage() { if (this.data.userInfo && this.data.userInfo.role) { if (this.data.userInfo.role === 'ADMIN') { // 管理员跳转到管理员界面 - 使用navigateTo保持当前页面状态 wx.navigateTo({ url: '/pages/staff/admin-dashboard' }); } else { // 员工跳转到员工界面 - 使用navigateTo保持当前页面状态 wx.navigateTo({ url: '/pages/staff/employee-dashboard' }); } } else { // 未登录用户显示用户面板 this.setData({ showUserPanel: true }); } }, // 隐藏用户面板 hideUserPanel() { this.setData({ showUserPanel: false }); }, // 隐藏所有面板 hideAllPanels() { if (this.data.mainPageModule) { this.data.mainPageModule.hideAllPanels(); } }, // 重置标记点状态 resetMarkers() { if (this.data.mainPageModule) { this.data.mainPageModule.resetMarkers(); } }, // 地图点击事件 onMapTap(e: any) { if (this.data.mainPageModule) { this.data.mainPageModule.onMapTap(e); } }, // 标记点点击事件 onMarkerTap(e: any) { if (this.data.mainPageModule) { this.data.mainPageModule.onMarkerTap(e); } }, // 分配订单 async assignOrder(orderId: number, deliveryPersonId: number) { if (this.data.mainPageModule) { const orderModule = this.data.mainPageModule.getOrderModule(); await orderModule.assignOrder(orderId, deliveryPersonId); } }, // 更新订单状态 async updateOrderStatus(orderId: number, status: 'pending' | 'assigned' | 'in_transit' | 'delivered') { if (this.data.mainPageModule) { const orderModule = this.data.mainPageModule.getOrderModule(); await orderModule.updateOrderStatus(orderId, status); } }, // 展开仓库面板 expandWarehousePanel() { if (this.data.mainPageModule) { const warehouseModule = this.data.mainPageModule.getWarehouseModule(); warehouseModule.expandWarehousePanel(); } }, // 收起仓库面板 collapseWarehousePanel() { if (this.data.mainPageModule) { const warehouseModule = this.data.mainPageModule.getWarehouseModule(); warehouseModule.collapseWarehousePanel(); } }, // 展开员工面板 expandDeliveryPersonPanel() { if (this.data.mainPageModule) { const employeeModule = this.data.mainPageModule.getEmployeeModule(); employeeModule.expandDeliveryPersonPanel(); } }, // 收起员工面板 collapseDeliveryPersonPanel() { if (this.data.mainPageModule) { const employeeModule = this.data.mainPageModule.getEmployeeModule(); employeeModule.collapseDeliveryPersonPanel(); } }, // 刷新所有数据 async refreshAllData() { if (this.data.mainPageModule) { await this.data.mainPageModule.refreshAllData(); } }, // 开始定位(处理地图控制按钮点击) async startLocation() { if (this.data.mainPageModule) { const mapModule = this.data.mainPageModule.getMapModule(); await mapModule.startLocation(); } }, } });