管灌系统农户端微信小程序(嘉峪关应用)
优化首页项目选择逻辑,添加临时选择变量以支持未确认的项目选择;更新登录页面逻辑,确保从登录页返回时正确刷新数据并处理项目选择确认,提升用户体验。
3个文件已修改
208 ■■■■ 已修改文件
pages/home/home.js 138 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/home.wxml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/login/login.js 66 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/home.js
@@ -39,6 +39,7 @@
    lastIntakeName: "",
    showProjectDialog: false,
    selectedProject: '',
    tempSelectedProject: '', // 添加临时选择变量,用于保存用户在对话框中选择但尚未确认的项目
    avatarTapCount: 0,
    isFromLogin: false,
    showTipDialog: '',
@@ -319,9 +320,34 @@
      });
    }
    // 尝试获取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: 正常显示页面');
      // 延迟检查登录状态,确保能正确识别临时标记
@@ -656,12 +682,6 @@
  },
  //根据session获取农户信息
  getUserDataBySession() {
    // 先检查是否从登录页返回
    if (this.getFromLogin()) {
      console.log('getUserDataBySession: 检测到从登录页返回的标记,不执行API请求');
      return;
    }
    const app = getApp();
    // 检查是否有sessionId
@@ -825,35 +845,67 @@
    // 首先检查是否从登录页返回
    if (this.getFromLogin()) {
      console.log('initData: 检测到从登录页返回的标记,仅获取基本数据');
      console.log('initData: 检测到从登录页返回的标记,执行完整的用户数据获取');
      // 即使从登录页返回,也尝试获取开阀列表以显示基本UI
      // 但先检查是否有客户端ID可用
      if (!app.globalData.clientId) {
        console.log('initData: 从登录页返回且无clientId,尝试从存储恢复');
        // 尝试从存储恢复clientId
      // 检查是否有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(clientId => {
            if (clientId) {
              console.log('initData: 从存储恢复clientId成功:', 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;
              this.getOpenList();
            } else {
              console.log('initData: 无法恢复clientId,显示空列表');
              this.setData({
                listData: []
              });
              app.globalData.isLoggedIn = true;
              this.getUserDataBySession();
            }
          })
          .catch(err => {
            console.error('initData: 恢复clientId失败:', err);
            this.setData({
              listData: []
            });
          });
      } else {
        this.getOpenList();
      }
        } 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;
    }
@@ -984,7 +1036,8 @@
    if (this.data.avatarTapCount >= 5) {
      this.setData({
        showProjectDialog: true,
        avatarTapCount: 0
        avatarTapCount: 0,
        tempSelectedProject: this.data.selectedProject // 初始化临时选择为当前选择
      });
    }
  },
@@ -996,23 +1049,28 @@
      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'
@@ -1022,7 +1080,7 @@
    // 获取当前已选项目和新选择的项目
    const currentProject = getApp().globalData.selectedProject;
    const newProject = this.data.selectedProject;
    const newProject = selectedProject;
    console.log('当前项目:', currentProject, '新选择项目:', newProject);
    console.log('PROJECT_CONFIG 内容:', PROJECT_CONFIG);
@@ -1052,11 +1110,19 @@
      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
          });
        }
      }
    });
pages/home/home.wxml
@@ -106,8 +106,8 @@
      <view class="project-modal-body">
        <scroll-view scroll-y class="project-scroll-view">
          <radio-group class="project-radio-group" bindchange="onProjectChange">
            <label wx:for="{{projectList}}" wx:key="index" class="project-radio {{selectedProject === item.key ? 'project-radio-selected' : ''}}">
              <radio value="{{item.key}}" checked="{{selectedProject === item.key}}" color="#1890FF" />
            <label wx:for="{{projectList}}" wx:key="index" class="project-radio {{(tempSelectedProject || selectedProject) === item.key ? 'project-radio-selected' : ''}}">
              <radio value="{{item.key}}" checked="{{(tempSelectedProject || selectedProject) === item.key}}" color="#1890FF" />
              <text>{{item.displayName}}</text>
            </label>
          </radio-group>
pages/login/login.js
@@ -287,11 +287,13 @@
        console.log('检测到有上一页,使用navigateBack返回');
        wx.navigateBack({
          delta: 1,
          success: () => console.log('navigateBack成功'),
          fail: (err) => {
            console.error('navigateBack失败:', err);
            // 如果navigateBack失败,尝试reLaunch
            this.backupReturnToHome();
          success: () => {
            // 通过eventChannel向上一个页面传递数据
            const eventChannel = pages[pages.length - 2].getOpenerEventChannel();
            if (eventChannel && eventChannel.emit) {
              eventChannel.emit('fromLogin', { fromLogin: true });
            }
            console.log('已成功返回到上一页面');
          }
        });
      } else {
@@ -438,7 +440,11 @@
            // 保存userData信息,包含sessionId和tag
            const userData = JSON.stringify({
              sessionId: String(data.content.sessionId),
              tag: tag
              tag: this.data.selectedProject === 'JYG' ? 'ym' : (this.data.selectedProject === 'MQ' ? 'mq' : 'ym'),
              project: this.data.selectedProject,
              phone: this.data.phone,
              clientName: data.content.clientName || '',
              clientId: String(data.content.clientId)
            });
            return storage.setItem("userData", userData);
          })
@@ -488,12 +494,54 @@
      success: () => {
        // 延迟跳转,确保Toast显示完成
        setTimeout(() => {
          console.log('登录成功,准备跳转到首页');
          // 跳转到首页,使用reLaunch而不是redirectTo
          console.log('登录成功,准备返回到首页');
          // 获取当前页面栈
          const pages = getCurrentPages();
          // 检查是否有上一个页面可返回
          if (pages.length > 1) {
            // 应用一个技巧,先设置前一个页面的参数
            try {
              if (pages.length > 1) {
                const prevPage = pages[pages.length - 2];
                if (prevPage && prevPage.options) {
                  // 设置 fromLogin 参数
                  prevPage.options.fromLogin = 'true';
                  // 如果页面有onLoad方法,则可能需要传递参数
                  if (typeof prevPage.onLoad === 'function') {
                    let newOptions = {...prevPage.options};
                    newOptions.fromLogin = 'true';
                    prevPage.onLoad(newOptions);
                  }
                }
              }
            } catch (e) {
              console.error('设置前一页参数失败:', e);
            }
            // 返回到上一个页面
            wx.navigateBack({
              delta: 1,
              success: () => {
                console.log('已成功返回到上一页面');
              },
              fail: (err) => {
                console.error('navigateBack失败:', err);
                // 如果返回失败,使用重定向
          wx.redirectTo({
            url: '/pages/home/home'
                  url: '/pages/home/home?fromLogin=true'
          });
              }
        });
          } else {
            // 如果没有上一个页面,则重新打开home页面
            wx.redirectTo({
              url: '/pages/home/home?fromLogin=true'
            });
          }
        }, 1500);
      }
    });
  },