| | |
| | | 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 |
| | | }); |
| | | } |
| | | } |
| | | }); |