|  |  |  | 
|---|
|  |  |  | lastIntakeName: "", | 
|---|
|  |  |  | showProjectDialog: false, | 
|---|
|  |  |  | selectedProject: '', | 
|---|
|  |  |  | tempSelectedProject: '', // 添加临时选择变量,用于保存用户在对话框中选择但尚未确认的项目 | 
|---|
|  |  |  | avatarTapCount: 0, | 
|---|
|  |  |  | isFromLogin: false, | 
|---|
|  |  |  | showTipDialog: '', | 
|---|
|  |  |  | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 尝试获取eventChannel,用于监听登录页面发回的消息 | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | const eventChannel = currentPage.getOpenerEventChannel(); | 
|---|
|  |  |  | if (eventChannel && eventChannel.on) { | 
|---|
|  |  |  | eventChannel.on('fromLogin', (data) => { | 
|---|
|  |  |  | console.log('onShow: 接收到登录页面返回的消息', data); | 
|---|
|  |  |  | if (data && data.fromLogin) { | 
|---|
|  |  |  | fromLogin = true; | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | isFromLogin: true | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 登录成功后刷新数据 | 
|---|
|  |  |  | console.log('登录成功后刷新数据'); | 
|---|
|  |  |  | this.initData(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (e) { | 
|---|
|  |  |  | console.error('获取eventChannel失败:', e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 初始化处理 | 
|---|
|  |  |  | if (fromLogin || this.data.isFromLogin) { | 
|---|
|  |  |  | console.log('onShow: 从登录页返回,不进行登录检查'); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 如果是从登录页返回,重新加载数据 | 
|---|
|  |  |  | this.initData(); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | console.log('onShow: 正常显示页面'); | 
|---|
|  |  |  | // 延迟检查登录状态,确保能正确识别临时标记 | 
|---|
|  |  |  | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | //根据session获取农户信息 | 
|---|
|  |  |  | getUserDataBySession() { | 
|---|
|  |  |  | // 先检查是否从登录页返回 | 
|---|
|  |  |  | if (this.getFromLogin()) { | 
|---|
|  |  |  | console.log('getUserDataBySession: 检测到从登录页返回的标记,不执行API请求'); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const app = getApp(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 检查是否有sessionId | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 首先检查是否从登录页返回 | 
|---|
|  |  |  | if (this.getFromLogin()) { | 
|---|
|  |  |  | console.log('initData: 检测到从登录页返回的标记,仅获取基本数据'); | 
|---|
|  |  |  | console.log('initData: 检测到从登录页返回的标记,执行完整的用户数据获取'); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 即使从登录页返回,也尝试获取开阀列表以显示基本UI | 
|---|
|  |  |  | // 但先检查是否有客户端ID可用 | 
|---|
|  |  |  | if (!app.globalData.clientId) { | 
|---|
|  |  |  | console.log('initData: 从登录页返回且无clientId,尝试从存储恢复'); | 
|---|
|  |  |  | // 尝试从存储恢复clientId | 
|---|
|  |  |  | storage.getItemSafe('clientId') | 
|---|
|  |  |  | .then(clientId => { | 
|---|
|  |  |  | if (clientId) { | 
|---|
|  |  |  | console.log('initData: 从存储恢复clientId成功:', clientId); | 
|---|
|  |  |  | app.globalData.clientId = clientId; | 
|---|
|  |  |  | this.getOpenList(); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | console.log('initData: 无法恢复clientId,显示空列表'); | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | listData: [] | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(err => { | 
|---|
|  |  |  | console.error('initData: 恢复clientId失败:', err); | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | listData: [] | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 检查是否有sessionId和clientId,优先使用全局变量 | 
|---|
|  |  |  | if (app.globalData.sessionId && app.globalData.clientId) { | 
|---|
|  |  |  | console.log('initData: 全局变量中有登录信息,直接获取用户数据和开阀列表'); | 
|---|
|  |  |  | this.getUserDataBySession(); | 
|---|
|  |  |  | this.getOpenList(); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 如果没有全局变量,尝试从本地存储中恢复 | 
|---|
|  |  |  | Promise.all([ | 
|---|
|  |  |  | storage.getItemSafe('userData'), | 
|---|
|  |  |  | storage.getItemSafe('sessionId'), | 
|---|
|  |  |  | storage.getItemSafe('clientId') | 
|---|
|  |  |  | ]).then(([userData, sessionId, clientId]) => { | 
|---|
|  |  |  | if (userData) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 解析userData并设置全局变量 | 
|---|
|  |  |  | let jsonObj = JSON.parse(userData); | 
|---|
|  |  |  | app.globalData.sessionId = jsonObj.sessionId; | 
|---|
|  |  |  | app.globalData.clientId = jsonObj.clientId || clientId; | 
|---|
|  |  |  | app.globalData.tag = jsonObj.tag; | 
|---|
|  |  |  | app.globalData.isLoggedIn = true; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 直接从userData设置用户信息 | 
|---|
|  |  |  | if (jsonObj.clientName && jsonObj.phone) { | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | userName: jsonObj.clientName, | 
|---|
|  |  |  | userPhone: this.maskPhoneNumber(jsonObj.phone) | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 如果userData中没有用户信息,调用接口获取 | 
|---|
|  |  |  | this.getUserDataBySession(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | console.log("userData已加载:", userData); | 
|---|
|  |  |  | } catch (e) { | 
|---|
|  |  |  | console.error('userData解析失败:', e); | 
|---|
|  |  |  | if (sessionId && clientId) { | 
|---|
|  |  |  | app.globalData.sessionId = sessionId; | 
|---|
|  |  |  | app.globalData.clientId = clientId; | 
|---|
|  |  |  | app.globalData.isLoggedIn = true; | 
|---|
|  |  |  | this.getUserDataBySession(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else if (sessionId && clientId) { | 
|---|
|  |  |  | // 如果没有userData但有session和client ID | 
|---|
|  |  |  | app.globalData.sessionId = sessionId; | 
|---|
|  |  |  | app.globalData.clientId = clientId; | 
|---|
|  |  |  | app.globalData.isLoggedIn = true; | 
|---|
|  |  |  | this.getUserDataBySession(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 无论如何都尝试获取开阀列表 | 
|---|
|  |  |  | this.getOpenList(); | 
|---|
|  |  |  | }).catch(err => { | 
|---|
|  |  |  | console.error('恢复登录状态失败:', err); | 
|---|
|  |  |  | this.getOpenList(); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | if (this.data.avatarTapCount >= 5) { | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | showProjectDialog: true, | 
|---|
|  |  |  | avatarTapCount: 0 | 
|---|
|  |  |  | avatarTapCount: 0, | 
|---|
|  |  |  | tempSelectedProject: this.data.selectedProject // 初始化临时选择为当前选择 | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | showProjectDialog: e.detail.visible | 
|---|
|  |  |  | showProjectDialog: e.detail.visible, | 
|---|
|  |  |  | // 当显示对话框时,初始化临时选择为当前选择 | 
|---|
|  |  |  | tempSelectedProject: e.detail.visible ? this.data.selectedProject : '' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 处理项目选择变化 | 
|---|
|  |  |  | onProjectChange(event) { | 
|---|
|  |  |  | console.log('选择的项目:', event.detail.value); | 
|---|
|  |  |  | // 不立即设置到state,而是存储到临时变量中 | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | selectedProject: event.detail.value | 
|---|
|  |  |  | tempSelectedProject: event.detail.value | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 处理项目选择确认 | 
|---|
|  |  |  | handleProjectConfirm() { | 
|---|
|  |  |  | console.log('开始处理项目选择确认', this.data.selectedProject, this.data.projectList); | 
|---|
|  |  |  | // 从临时变量获取选择的项目 | 
|---|
|  |  |  | const selectedProject = this.data.tempSelectedProject || this.data.selectedProject; | 
|---|
|  |  |  | console.log('开始处理项目选择确认', selectedProject, this.data.projectList); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!this.data.selectedProject) { | 
|---|
|  |  |  | if (!selectedProject) { | 
|---|
|  |  |  | wx.showToast({ | 
|---|
|  |  |  | title: '请选择项目', | 
|---|
|  |  |  | icon: 'none' | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取当前已选项目和新选择的项目 | 
|---|
|  |  |  | const currentProject = getApp().globalData.selectedProject; | 
|---|
|  |  |  | const newProject = this.data.selectedProject; | 
|---|
|  |  |  | const newProject = selectedProject; | 
|---|
|  |  |  | console.log('当前项目:', currentProject, '新选择项目:', newProject); | 
|---|
|  |  |  | console.log('PROJECT_CONFIG 内容:', PROJECT_CONFIG); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | cancelText: '取消', | 
|---|
|  |  |  | success: (res) => { | 
|---|
|  |  |  | if (res.confirm) { | 
|---|
|  |  |  | // 用户确认选择后,更新状态并继续处理 | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | selectedProject: newProject | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | // 用户确认选择,继续处理 | 
|---|
|  |  |  | this.processProjectSelection(currentProject, newProject, projectConfig, isProjectChanged); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 用户取消,不进行任何操作 | 
|---|
|  |  |  | console.log('用户取消了项目选择'); | 
|---|
|  |  |  | // 恢复之前的选择状态 | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | tempSelectedProject: this.data.selectedProject | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|