管灌系统农户端微信小程序(嘉峪关应用)
pages/home/home.js
@@ -4,9 +4,14 @@
  get,
  post
} = require('../../api/request.js');
const config = require('../../api/config.js');
const {
  PROJECT_URLS
} = require('../../api/config.js');
  PROJECT_CONFIG
} = require('../../utils/projectConfig.js');
const {
  ENV
} = require('../../api/env.js');
Page({
  /**
@@ -35,7 +40,11 @@
    showProjectDialog: false,
    selectedProject: '',
    avatarTapCount: 0,
    isFromLogin: false
    isFromLogin: false,
    showTipDialog: '',
    projectConfig: PROJECT_CONFIG, // 添加项目配置到data中
    showInfoDialog: false,
    projectList: []
  },
  openValve: function (e) {
@@ -51,37 +60,32 @@
      })
    }
  },
  calculateScrollViewHeight: function () {
    wx.createSelectorQuery().selectAll('.list-item').boundingClientRect((rects) => {
      let totalHeight = rects.reduce((sum, rect) => sum + rect.height, 0);
      this.setData({
        scrollViewHeight: totalHeight,
      });
    }).exec();
  },
  // calculateScrollViewHeight: function () {
  //     wx.createSelectorQuery().selectAll('.list-item').boundingClientRect((rects) => {
  //         let totalHeight = rects.reduce((sum, rect) => sum + rect.height, 0);
  //         this.setData({
  //             scrollViewHeight: totalHeight,
  //         });
  //     }).exec();
  // },
  startPullDownRefresh() {
    if (!this.data.isWXRefreshing) {
      var self = this;
      console.log(this.data.isRefreshing);
      this.setData({
        isRefreshing: true
      });
      this.getOpenList();
    if (getApp().globalData.isLoggedIn) {
      if (!this.data.isWXRefreshing) {
        var self = this;
        console.log(this.data.isRefreshing);
        this.setData({
          isRefreshing: true
        });
        this.getOpenList();
      }
    } else {
      wx.showToast({
        title: '请先登录',
        icon: 'error'
      })
    }
  },
  //获取用户数据
  getUserData() {
    get('/items')
      .then((data) => {
        this.setData({
          items: data
        });
      })
      .catch((error) => {
        console.error('Failed to fetch data:', error);
      });
  },
@@ -92,6 +96,15 @@
  onLoad(options) {
    console.log('home页面onLoad开始,参数:', options);
    // 初始化项目列表数据
    this.initProjectList();
    //当开阀成功后调用刷新
    if (options.param === "1" || options.param === "2") {
      this.setData({
        options: options
      })
    }
    // 检查是否从登录页面返回
    let fromLogin = false;
@@ -99,29 +112,6 @@
    if (options && options.fromLogin === 'true') {
      console.log('检测到URL参数fromLogin=true');
      fromLogin = true;
    }
    // 检查是否有临时标记
    try {
      const tempFromLogin = wx.getStorageSync('_temp_from_login');
      console.log('读取到的临时标记值:', tempFromLogin);
      if (tempFromLogin === 'true') {
        console.log('检测到临时fromLogin标记');
        fromLogin = true;
        // 延迟清除临时标记,确保其他地方有足够时间读取
        setTimeout(() => {
          try {
            wx.removeStorageSync('_temp_from_login');
            console.log('自动清除临时fromLogin标记');
          } catch (e) {
            console.error('清除临时标记失败:', e);
          }
        }, 10000); // 延长到10秒
      }
    } catch (e) {
      console.error('读取临时标记失败:', e);
    }
    console.log('home页面加载,fromLogin:', fromLogin, '参数:', options);
@@ -138,6 +128,44 @@
    setTimeout(() => {
      this.initializePage(options, fromLogin);
    }, 100);
  },
  // 初始化项目列表数据
  initProjectList() {
    // 将PROJECT_CONFIG对象转换为数组,方便在视图中遍历
    const projectList = Object.entries(PROJECT_CONFIG).map(([key, config]) => ({
      key: key, // 使用key作为项目标识(JYG、MQ等)
      tag: config.tag, // 保留tag字段(原配置中已有的标识,如ym、mq等)
      displayName: config.displayName, // 显示名称
      ...config // 其他配置属性
    }));
    // 获取当前已选择的项目,默认为JYG
    let currentSelectedProject = 'JYG';
    // 尝试从全局变量获取
    const app = getApp();
    if (app && app.globalData && app.globalData.selectedProject) {
      currentSelectedProject = app.globalData.selectedProject;
    } else {
      // 尝试从本地存储获取
      try {
        const savedProject = wx.getStorageSync('selectedProject');
        if (savedProject) {
          currentSelectedProject = savedProject;
        }
      } catch (e) {
        console.error('从本地存储获取项目失败:', e);
      }
    }
    // 设置到页面数据中
    this.setData({
      projectList,
      selectedProject: currentSelectedProject
    });
    console.log('项目列表已初始化:', projectList, '当前选中项目:', currentSelectedProject);
  },
  // 新增的初始化页面辅助函数,分离出onLoad中的逻辑以便延迟执行
@@ -158,21 +186,61 @@
          });
          // 设置 baseUrl
          const baseUrl = PROJECT_URLS[project];
          getApp().globalData.baseUrl = baseUrl;
          getApp().globalData.selectedProject = project;
          // 根据项目设置对应的tag
          if (project === 'JYG') {
            getApp().globalData.tag = 'ym'; // 嘉峪关项目对应tag为ym
          } else if (project === 'MQ') {
            getApp().globalData.tag = 'mq'; // 民勤项目对应tag为mq
          const serverUrl = PROJECT_CONFIG[project]?.serverUrl;
          if (serverUrl) {
            getApp().globalData.baseUrl = serverUrl;
            getApp().globalData.selectedProject = project;
            console.log('设置baseUrl:', serverUrl);
          }
          console.log('加载已保存的项目:', project, '域名:', baseUrl, 'tag:', getApp().globalData.tag);
          // 根据项目设置对应的tag
          const projectConfig = PROJECT_CONFIG[project];
          if (projectConfig) {
            getApp().globalData.tag = projectConfig.tag;
            // 根据项目是否需要登录,设置不同的userName
            if (projectConfig.needLogin === false) {
              // 不需要登录的项目,显示项目名称
              this.setData({
                userName: projectConfig.displayName
              });
            } else {
              // 需要登录的项目,显示"请点击登录"
              this.setData({
                userName: "请点击登录"
              });
            }
          }
          // 检查sessionId是否存在
          return storage.getItemSafe('sessionId');
          // 根据项目设置对应的operator和clientId
          if (projectConfig && projectConfig.operatorId) {
            getApp().globalData.operator = projectConfig.operatorId;
            getApp().globalData.clientId = projectConfig.operatorId;
            getApp().globalData.isLoggedIn = true;
            getApp().globalData.sessionId = projectConfig.operatorId;
            // 如果有vcId,也设置
            if (projectConfig.vcId) {
              getApp().globalData.vcId = projectConfig.vcId;
            }
            // 持久化存储项目参数
            const params = {
              operator: projectConfig.operatorId,
              clientId: projectConfig.operatorId,
              isLoggedIn: true,
              sessionId: projectConfig.operatorId
            };
            if (projectConfig.vcId) {
              params.vcId = projectConfig.vcId;
            }
            storage.setItem(`${project}_params`, params);
          }
          // 继续初始化页面
          this.continueInitPage(options);
        } else {
          // 首次进入,显示项目选择弹窗
          this.setData({
@@ -184,26 +252,7 @@
          }); // 终止后续处理
        }
      })
      .then(sessionId => {
        if (sessionId) {
          // 如果sessionId存在,设置全局登录状态
          getApp().globalData.sessionId = sessionId;
          getApp().globalData.isLoggedIn = true;
          // 尝试获取clientId
          return storage.getItemSafe('clientId');
        } else {
          return Promise.reject({
            type: 'session_not_found',
            message: '未找到sessionId'
          });
        }
      })
      .then(clientId => {
        if (clientId) {
          getApp().globalData.clientId = clientId;
        }
      .then(() => {
        // 继续初始化页面
        this.continueInitPage(options);
      })
@@ -216,7 +265,7 @@
        console.log('获取存储数据中断:', error.message);
        // 如果是从登录页返回或已登录,不再跳转
        if (fromLogin || getApp().globalData.isLoggedIn) {
        if (fromLogin) {
          console.log('从登录页返回或已登录,继续初始化页面');
          this.continueInitPage(options);
          return;
@@ -231,26 +280,6 @@
          return;
        }
        // 处理未找到sessionId的情况
        if (error.type === 'session_not_found' && this.data.selectedProject) {
          // 检查是否已从登录页返回
          const isReturning = this.getFromLogin();
          console.log('未找到sessionId,是否从登录页返回:', isReturning);
          // 如果已经是从登录页返回的,不要再跳回去
          if (isReturning) {
            console.log('已经从登录页返回,不再跳转回去');
            this.continueInitPage(options);
            return;
          }
          console.log('未找到sessionId,跳转到登录页');
          wx.redirectTo({
            url: `/pages/login/login?project=${this.data.selectedProject}`
          });
          return;
        }
        // 其他未知错误,尝试继续初始化页面
        console.warn('未知错误,尝试继续初始化页面:', error);
        this.continueInitPage(options);
@@ -261,7 +290,12 @@
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    // 检查是否有options和param
    if (this.data.options && this.data.options.param) {
      if (this.data.options.param === "1" || this.data.options.param === "2") {
        this.getOpenList();
      }
    }
  },
  /**
@@ -285,22 +319,6 @@
      });
    }
    // 检查是否有临时标记
    try {
      const tempFromLogin = wx.getStorageSync('_temp_from_login');
      console.log('onShow: 读取到的临时标记值:', tempFromLogin);
      if (tempFromLogin === 'true') {
        console.log('onShow: 检测到临时fromLogin标记');
        fromLogin = true;
        this.setData({
          isFromLogin: true
        });
      }
    } catch (e) {
      console.error('onShow: 读取临时标记失败:', e);
    }
    // 初始化处理
    if (fromLogin || this.data.isFromLogin) {
      console.log('onShow: 从登录页返回,不进行登录检查');
@@ -318,12 +336,6 @@
    // 再次确认是否从登录页返回
    if (this.getFromLogin()) {
      console.log('检测到从登录页返回的标记,不进行登录检查');
      return;
    }
    // 再次检查全局登录状态
    if (getApp().globalData.isLoggedIn) {
      console.log('检测到全局登录状态,不进行登录检查');
      return;
    }
@@ -385,13 +397,17 @@
    })
  },
  openValveList() {
    // wx.navigateTo({
    //   url: '/pages/valveList/valveList',
    // })
    wx.showToast({
      title: '暂未开放',
      icon: 'none'
    })
    const app = getApp();
    if (app.globalData.isLoggedIn) {
      wx.navigateTo({
        url: '/pages/valveList/valveList',
      })
    } else {
      wx.showToast({
        title: '请先登录',
        icon: 'error'
      })
    }
  },
  feedBack() {
    wx.showToast({
@@ -401,21 +417,62 @@
  },
  //解绑用户
  unbind() {
    wx.showModal({
      title: '解绑确认',
      content: '确定要解绑当前账号吗?',
      success: (res) => {
        if (res.confirm) {
          this.unBindPost()
    // 检查当前项目是否需要登录
    const currentProject = getApp().globalData.selectedProject;
    const projectConfig = PROJECT_CONFIG[currentProject];
    // 如果当前项目配置为不需要登录,则提示用户并打开项目选择弹窗
    if (projectConfig && !projectConfig.needLogin) {
      wx.showModal({
        title: '切换项目',
        content: '是否确定解绑?',
        confirmText: '确认',
        cancelText: '取消',
        success: (res) => {
          if (res.confirm) {
            // 显示项目选择弹窗
            this.setData({
              showProjectDialog: true
            });
          }
        }
      }
    });
      });
      return;
    }
    // 如果已登录,显示解绑确认对话框
    if (getApp().globalData.isLoggedIn) {
      wx.showModal({
        title: '解绑确认',
        content: '确定要解绑当前账号吗?解绑后将无法使用相关功能,需重新绑定。',
        confirmText: '确认解绑',
        confirmColor: '#e34d59',
        cancelText: '取消',
        success: (res) => {
          if (res.confirm) {
            this.unBindPost();
          }
        }
      });
    } else {
      wx.showToast({
        title: '还未绑定',
        icon: 'error'
      });
    }
  },
  //轮灌
  irrigation() {
    wx.navigateTo({
      url: '/pages/irrigation/irrigation',
    })
    if (getApp().globalData.isLoggedIn) {
      wx.navigateTo({
        url: '/pages/irrigation/irrigation',
      })
    } else {
      wx.showToast({
        title: '请先登录',
        icon: 'error'
      })
    }
  },
  handleChange(e) {
    const item = e.currentTarget.dataset.item;
@@ -478,14 +535,22 @@
      })
    }).catch(error => {
      wx.hideLoading();
      this.setData({
        showErrorDialog: true,
        errorData: error.msg,
        errorDialogTitle: "关阀错误"
      })
      // 处理错误响应
      console.error('请求失败:', error);
      if (error.code === "ECONNABORTED" || error.message?.includes('timeout')) {
        // 处理超时错误
        this.setData({
          showErrorDialog: true,
          errorData: "通信超时,请稍后再试",
          errorDialogTitle: "关阀错误"
        })
      } else {
        this.setData({
          showErrorDialog: true,
          errorData: error.msg,
          errorDialogTitle: "关阀错误"
        })
      }
    });
  },
  /**
@@ -493,7 +558,17 @@
   */
  getOpenList() {
    const app = getApp();
    if (!getApp().globalData.isLoggedIn) {
      wx.showToast({
        title: '请先登录',
        icon: 'error'
      })
      this.setData({
        isRefreshing: false, // 将triggered属性设置为false,表示下拉刷新已完成
        isWXRefreshing: false, // 将triggered属性设置为false,表示下拉刷新已完成
      });
      return;
    }
    // 检查是否从登录页返回
    const fromLogin = this.getFromLogin();
@@ -537,11 +612,8 @@
        isRefreshing: false, // 将triggered属性设置为false,表示下拉刷新已完成
        isWXRefreshing: false, // 将triggered属性设置为false,表示下拉刷新已完成
      });
      this.updateDisplayText();
      // 成功获取数据后刷新UI高度
      setTimeout(() => {
        this.calculateScrollViewHeight();
      }, 200);
    }).catch(err => {
      console.error('获取列表数据失败:', err);
      // 错误回调
@@ -634,13 +706,6 @@
            duration: 3000
          });
        }
      } else {
        // 其他错误,显示错误信息
        wx.showToast({
          title: err.msg || '获取用户信息失败',
          icon: 'none',
          duration: 3000
        });
      }
    });
  },
@@ -792,12 +857,33 @@
      return;
    }
    // 检查当前项目是否需要登录
    const currentProject = app.globalData.selectedProject;
    const projectConfig = PROJECT_CONFIG[currentProject];
    const needLogin = projectConfig && projectConfig.needLogin;
    // 根据项目是否需要登录,设置不同的userName
    if (projectConfig && projectConfig.needLogin === false) {
      // 不需要登录的项目,显示项目名称
      this.setData({
        userName: projectConfig.displayName
      });
    }
    // 尝试获取用户数据和已开阀记录
    try {
      // 优先检查全局变量中是否有sessionId
      if (app.globalData.sessionId) {
        console.log('initData: 使用全局sessionId获取数据');
        this.getUserDataBySession();
        // 只有需要登录的项目才调用getUserDataBySession
        if (needLogin) {
          console.log('initData: 当前项目需要登录,获取用户数据');
          this.getUserDataBySession();
        } else {
          console.log('initData: 当前项目不需要登录,跳过获取用户数据');
        }
        this.getOpenList();
        return;
      }
@@ -820,8 +906,15 @@
                console.error('userData解析失败:', e);
              }
            }
            // 无论如何都尝试获取用户信息和开阀列表
            this.getUserDataBySession();
            // 只有需要登录的项目才调用getUserDataBySession
            if (needLogin) {
              console.log('initData: 当前项目需要登录,获取用户数据');
              this.getUserDataBySession();
            } else {
              console.log('initData: 当前项目不需要登录,跳过获取用户数据');
            }
            this.getOpenList();
          })
          .catch((err) => {
@@ -832,7 +925,14 @@
              console.log('initData:catch: 检测到从登录页返回的标记,只获取开阀列表');
              this.getOpenList();
            } else {
              this.getUserDataBySession();
              // 只有需要登录的项目才调用getUserDataBySession
              if (needLogin) {
                console.log('initData:catch: 当前项目需要登录,获取用户数据');
                this.getUserDataBySession();
              } else {
                console.log('initData:catch: 当前项目不需要登录,跳过获取用户数据');
              }
              this.getOpenList();
            }
          });
@@ -844,7 +944,14 @@
          console.log('initData:else: 检测到从登录页返回的标记,只获取开阀列表');
          this.getOpenList();
        } else {
          this.getUserDataBySession();
          // 只有需要登录的项目才调用getUserDataBySession
          if (needLogin) {
            console.log('initData:else: 当前项目需要登录,获取用户数据');
            this.getUserDataBySession();
          } else {
            console.log('initData:else: 当前项目不需要登录,跳过获取用户数据');
          }
          this.getOpenList();
        }
      }
@@ -856,8 +963,14 @@
        console.log('initData:error: 检测到从登录页返回的标记,只获取开阀列表');
        this.getOpenList();
      } else {
        // 出错时仍尝试获取数据
        this.getUserDataBySession();
        // 只有需要登录的项目才调用getUserDataBySession
        if (needLogin) {
          console.log('initData:error: 当前项目需要登录,获取用户数据');
          this.getUserDataBySession();
        } else {
          console.log('initData:error: 当前项目不需要登录,跳过获取用户数据');
        }
        this.getOpenList();
      }
    }
@@ -897,6 +1010,8 @@
  // 处理项目选择确认
  handleProjectConfirm() {
    console.log('开始处理项目选择确认', this.data.selectedProject, this.data.projectList);
    if (!this.data.selectedProject) {
      wx.showToast({
        title: '请选择项目',
@@ -908,11 +1023,47 @@
    // 获取当前已选项目和新选择的项目
    const currentProject = getApp().globalData.selectedProject;
    const newProject = this.data.selectedProject;
    const projectName = newProject === 'JYG' ? '嘉峪关项目' : '民勤项目';
    console.log('当前项目:', currentProject, '新选择项目:', newProject);
    console.log('PROJECT_CONFIG 内容:', PROJECT_CONFIG);
    const projectConfig = PROJECT_CONFIG[newProject];
    console.log('选择的项目配置:', projectConfig);
    if (!projectConfig) {
      wx.showToast({
        title: '项目配置错误',
        icon: 'none'
      });
      return;
    }
    // 检查是否切换了项目(如果当前项目不同于新选择的项目)
    const isProjectChanged = currentProject && currentProject !== newProject;
    // 添加二次确认
    const confirmText = isProjectChanged ?
      `确定要将项目从"${PROJECT_CONFIG[currentProject]?.displayName || '当前项目'}"切换到"${projectConfig.displayName}"吗?` :
      `确定选择"${projectConfig.displayName}"项目吗?`;
    wx.showModal({
      title: isProjectChanged ? '确认切换项目' : '确认选择项目',
      content: confirmText,
      confirmText: isProjectChanged ? '确认切换' : '确认',
      cancelText: '取消',
      success: (res) => {
        if (res.confirm) {
          // 用户确认选择,继续处理
          this.processProjectSelection(currentProject, newProject, projectConfig, isProjectChanged);
        } else {
          // 用户取消,不进行任何操作
          console.log('用户取消了项目选择');
        }
      }
    });
  },
  // 处理项目选择的后续操作
  processProjectSelection(currentProject, newProject, projectConfig, isProjectChanged) {
    // 如果切换了项目,先清除登录状态
    if (isProjectChanged) {
      console.log(`正在从项目 ${currentProject} 切换到 ${newProject},将清除登录状态`);
@@ -922,47 +1073,98 @@
      getApp().globalData.clientId = '';
      getApp().globalData.isLoggedIn = false;
      getApp().globalData.userInfo = null;
      getApp().globalData.vcId = '';
      getApp().globalData.operator = '';
      // 清除存储中的登录状态
      try {
        // 清除基本登录数据
        wx.removeStorageSync('sessionId');
        wx.removeStorageSync('clientId');
        wx.removeStorageSync('userData');
        wx.removeStorageSync('isLoggedIn');
        // 清除之前项目的特定数据
        if (currentProject) {
          wx.removeStorageSync(`${currentProject}_params`);
        }
        // 清除其他可能的缓存数据
        wx.removeStorageSync('_attempted_login_redirect');
        console.log('已清除登录相关的存储数据');
      } catch (e) {
        console.error('清除存储数据失败:', e);
      }
      // 重置UI显示状态
      this.setData({
        userName: "请登录",
        userPhone: "",
        listData: []
      });
      if (projectConfig.needLogin === false) {
        // 不需要登录的项目,显示项目名称作为userName
        this.setData({
          userName: projectConfig.displayName,
          userPhone: "",
          listData: []
        });
      } else {
        // 需要登录的项目,显示"请点击登录"
        this.setData({
          userName: "请点击登录",
          userPhone: "",
          listData: []
        });
      }
    }
    // 保存项目选择到本地存储
    storage.setItem('selectedProject', newProject).then(() => {
      // 更新 BASEURL
      const {
        PROJECT_URLS
      } = require('../../api/config.js');
      const baseUrl = PROJECT_URLS[newProject];
      // 调用setBaseUrl来更新基础URL
      try {
        console.log('尝试设置基础URL,项目:', newProject);
        const result = config.setBaseUrl(newProject);
        console.log('设置基础URL结果:', result);
      } catch (error) {
        console.error('设置基础URL出错:', error);
        // 继续执行,不中断流程
      }
      // 更新全局变量
      getApp().globalData = getApp().globalData || {};
      getApp().globalData.baseUrl = baseUrl;
      getApp().globalData.selectedProject = newProject;
      getApp().globalData.baseUrl = projectConfig.serverUrl;
      getApp().globalData.serverId = projectConfig.serverId;
      // 根据项目设置对应的tag
      if (newProject === 'JYG') {
        getApp().globalData.tag = 'ym'; // 嘉峪关项目对应tag为ym
      } else if (newProject === 'MQ') {
        getApp().globalData.tag = 'mq'; // 民勤项目对应tag为mq
      // 通过配置对象统一设置项目参数
      getApp().globalData.tag = projectConfig.tag;
      // 对于不需要登录的项目,直接设置operator和clientId
      if (!projectConfig.needLogin && projectConfig.operatorId) {
        const operatorId = projectConfig.operatorId;
        getApp().globalData.operator = operatorId;
        getApp().globalData.clientId = operatorId;
        getApp().globalData.isLoggedIn = true;
        getApp().globalData.sessionId = operatorId;
        // 如果有vcId,也设置
        if (projectConfig.vcId) {
          getApp().globalData.vcId = projectConfig.vcId;
        }
        // 持久化存储项目参数
        const params = {
          operator: operatorId,
          clientId: operatorId,
          isLoggedIn: true,
          sessionId: operatorId
        };
        if (projectConfig.vcId) {
          params.vcId = projectConfig.vcId;
        }
        storage.setItem(`${newProject}_params`, params);
      }
      console.log('已切换到项目:', projectName, '域名:', baseUrl, 'tag:', getApp().globalData.tag);
      console.log('已切换到项目:', projectConfig.displayName, '服务器:', projectConfig.serverId, 'tag:', getApp().globalData.tag);
      this.setData({
        showProjectDialog: false
@@ -970,22 +1172,25 @@
      // 显示切换成功提示
      wx.showToast({
        title: isProjectChanged ? `已切换至${projectName},请重新登录` : `已选择${projectName}`,
        title: `已选择${projectConfig.displayName}`,
        icon: 'success',
        duration: 2000
      });
      // 如果切换了项目,延迟跳转到登录页面
      if (isProjectChanged) {
        setTimeout(() => {
          console.log('项目已切换,正在跳转到登录页面');
          wx.redirectTo({
            url: `/pages/login/login?project=${newProject}`,
            success: () => console.log('成功跳转到登录页'),
            fail: (err) => console.error('跳转到登录页失败:', err)
      setTimeout(() => {
        console.log('项目已切换,正在初始化数据');
        // 确保显示正确的用户名
        if (!projectConfig.needLogin) {
          this.setData({
            userName: projectConfig.displayName
          });
        }, 2000);
      }
        } else {
          this.setData({
            userName: "请点击登录"
          });
        }
        this.initData();
      }, 1000);
    }).catch(err => {
      console.error('保存项目选择失败:', err);
      wx.showToast({
@@ -1000,20 +1205,6 @@
  checkLoginStatus() {
    const app = getApp();
    // 首先,强制再次检查是否从登录页返回
    try {
      const tempFromLogin = wx.getStorageSync('_temp_from_login');
      if (tempFromLogin === 'true') {
        console.log('checkLoginStatus: 检测到临时存储_temp_from_login=true,不执行跳转');
        this.setData({
          isFromLogin: true
        });
        return;
      }
    } catch (e) {
      console.error('checkLoginStatus: 读取临时标记失败:', e);
    }
    // 检查是否已登录
    if (app.globalData.isLoggedIn && app.globalData.sessionId) {
      console.log('已从全局变量检测到登录状态');
@@ -1024,6 +1215,13 @@
    const fromLogin = this.getFromLogin();
    if (fromLogin) {
      console.log('从登录页返回,不再重定向');
      return;
    }
    // 检查当前项目是否需要登录
    const currentProject = app.globalData.selectedProject;
    if (currentProject && PROJECT_CONFIG[currentProject] && !PROJECT_CONFIG[currentProject].needLogin) {
      console.log('当前项目不需要登录:', currentProject);
      return;
    }
@@ -1057,18 +1255,6 @@
        storage.getItemSafe('isLoggedIn')
      ])
      .then(([sessionId, clientId, isLoggedIn]) => {
        // 最后一次检查临时标记
        try {
          const tempFromLogin = wx.getStorageSync('_temp_from_login');
          if (tempFromLogin === 'true') {
            console.log('Promise内部: 检测到临时存储_temp_from_login=true,不执行跳转');
            this.setData({
              isFromLogin: true
            });
            return;
          }
        } catch (e) {}
        if (sessionId) {
          // 从存储中恢复登录状态
          app.globalData.sessionId = sessionId;
@@ -1099,6 +1285,12 @@
            return;
          }
          // 检查项目是否需要登录
          if (currentProject && PROJECT_CONFIG[currentProject] && !PROJECT_CONFIG[currentProject].needLogin) {
            console.log('最终检查: 当前项目不需要登录:', currentProject);
            return;
          }
          console.log('确认需要跳转到登录页');
          // 跳转前再次检查登录页面临时标记
@@ -1106,11 +1298,11 @@
            wx.setStorageSync('_attempted_login_redirect', 'true');
          } catch (e) {}
          wx.redirectTo({
            url: `/pages/login/login?project=${this.data.selectedProject}`,
            success: () => console.log('成功跳转到登录页'),
            fail: (err) => console.error('跳转到登录页失败:', err)
          });
          // wx.navigateTo({
          //   url: `/pages/login/login?project=${this.data.selectedProject}`,
          //   success: () => console.log('成功跳转到登录页'),
          //   fail: (err) => console.error('跳转到登录页失败:', err)
          // });
        }
      })
      .catch(err => {
@@ -1127,40 +1319,23 @@
          return;
        }
        // 检查项目是否需要登录
        if (currentProject && PROJECT_CONFIG[currentProject] && !PROJECT_CONFIG[currentProject].needLogin) {
          console.log('错误处理: 当前项目不需要登录:', currentProject);
          return;
        }
        // 出错时也跳转到登录页
        wx.redirectTo({
          url: `/pages/login/login?project=${this.data.selectedProject}`,
          success: () => console.log('错误后成功跳转到登录页'),
          fail: (err) => console.error('错误后跳转到登录页失败:', err)
        });
        // wx.navigateTo({
        //   url: `/pages/login/login?project=${this.data.selectedProject}`,
        //   success: () => console.log('错误后成功跳转到登录页'),
        //   fail: (err) => console.error('错误后跳转到登录页失败:', err)
        // });
      });
  },
  // 辅助函数:检查是否从登录页返回
  getFromLogin() {
    // 先检查全局变量(作为备用方案)
    if (getApp().globalData && getApp().globalData._tempFromLogin === true) {
      console.log('getFromLogin: 检测到全局变量_tempFromLogin=true');
      // 设置标志,确保下次检查时能识别
      this.setData({
        isFromLogin: true
      });
      // 清除全局标记,防止重复识别
      setTimeout(() => {
        getApp().globalData._tempFromLogin = false;
        console.log('已清除全局变量_tempFromLogin标记');
      }, 100);
      return true;
    }
    // 检查是否有设置fromLogin标志
    if (this.data.isFromLogin) {
      console.log('getFromLogin: 检测到this.data.isFromLogin=true');
      return true;
    }
    // 检查当前页面的options
    const pages = getCurrentPages();
    const currentPage = pages[pages.length - 1];
@@ -1172,24 +1347,6 @@
      });
      return true;
    }
    // 检查临时标记
    try {
      const tempFromLogin = wx.getStorageSync('_temp_from_login');
      console.log('getFromLogin: 读取到的临时标记值:', tempFromLogin);
      if (tempFromLogin === 'true') {
        console.log('getFromLogin: 检测到临时存储_temp_from_login=true');
        // 设置标志,确保下次检查时能识别
        this.setData({
          isFromLogin: true
        });
        return true;
      }
    } catch (e) {
      console.error('getFromLogin: 读取临时标记失败:', e);
    }
    console.log('getFromLogin: 未检测到从登录页返回的标记');
    return false;
  },
@@ -1210,32 +1367,11 @@
      });
    }
    // 从临时标记中检查
    try {
      const tempFromLogin = wx.getStorageSync('_temp_from_login');
      if (tempFromLogin === 'true') {
        console.log('continueInitPage: 检测到临时标记_temp_from_login=true');
        fromLogin = true;
        this.setData({
          isFromLogin: true
        });
      }
    } catch (e) {
      console.error('continueInitPage: 读取临时标记失败:', e);
    }
    // 从页面数据中检查
    if (this.data.isFromLogin) {
      console.log('continueInitPage: 从页面数据中检测到isFromLogin=true');
      fromLogin = true;
    }
    // 判断本地是否保存sessionId
    // 使用 wx.nextTick 等待页面渲染完成
    wx.nextTick(() => {
      this.calculateScrollViewHeight();
    });
    // 当开阀成功后调用刷新
    if (options && options.param) {
      console.log("开阀成功参数:", options.param);
@@ -1254,12 +1390,6 @@
    if (!fromLogin) {
      console.log('不是从登录页返回,延迟检查登录状态');
      setTimeout(() => {
        // 再次检查是否已从登录页返回(可能在初始化过程中状态已变)
        if (this.getFromLogin()) {
          console.log('延迟检查:检测到从登录页返回的标记,不再检查登录状态');
          return;
        }
        // 仅在未登录且不是从登录页返回时检查登录状态
        if (!getApp().globalData.isLoggedIn) {
          console.log('延迟检查:未登录且不是从登录页返回,执行登录状态检查');
@@ -1273,6 +1403,21 @@
  // 微信登录
  wxLogin() {
    // 检查当前项目是否需要登录
    const currentProject = getApp().globalData.selectedProject;
    if (currentProject && PROJECT_CONFIG[currentProject]) {
      const projectConfig = PROJECT_CONFIG[currentProject];
      if (!projectConfig.needLogin) {
        console.log('wxLogin: 当前项目不需要登录:', currentProject);
        // 不需要登录的项目,显示项目名称
        this.setData({
          userName: projectConfig.displayName
        });
        return;
      }
    }
    if (!getApp().globalData.isLoggedIn) {
      wx.showLoading({
        title: '正在登录请稍候...',
@@ -1292,9 +1437,10 @@
              wx.hideLoading();
              if (response.code === "0001") {
                if (response.content.client.clientId === "") {
                  // 未绑定账号,跳转到登录页面
                  wx.redirectTo({
                    url: `/pages/login/login?project=${this.data.selectedProject}`
                  // 未绑定账号,跳转到登录页面并传递当前项目信息
                  const projectInfo = PROJECT_CONFIG[this.data.selectedProject];
                  wx.navigateTo({
                    url: `/pages/login/login?project=${this.data.selectedProject}&projectName=${projectInfo.displayName}`
                  });
                } else {
                  this.setData({
@@ -1311,8 +1457,10 @@
                  getApp().globalData.isLoggedIn = true;
                  // 设置正确的项目tag
                  const tag = this.data.selectedProject === 'JYG' ? 'ym' : 'mq';
                  getApp().globalData.tag = tag;
                  const projectConfig = PROJECT_CONFIG[this.data.selectedProject];
                  if (projectConfig) {
                    getApp().globalData.tag = projectConfig.tag;
                  }
                  // 保存到存储
                  storage.setItem("sessionId", sessionId);
@@ -1322,14 +1470,14 @@
                  // 保存userData信息,包含sessionId和tag
                  const userData = JSON.stringify({
                    sessionId: sessionId,
                    tag: tag,
                    tag: projectConfig ? projectConfig.tag : 'ym',
                    project: this.data.selectedProject,
                    userName: response.content.client.clientName,
                    userPhone: response.content.client.userPhone
                  });
                  storage.setItem("userData", userData)
                    .then(() => {
                      console.log('用户数据保存成功,包含项目信息:', this.data.selectedProject, 'tag:', tag);
                      console.log('用户数据保存成功,包含项目信息:', this.data.selectedProject, 'tag:', projectConfig ? projectConfig.tag : 'ym');
                      this.initData();
                    })
                    .catch(err => {
@@ -1338,26 +1486,34 @@
                    });
                }
              } else if (response.code === "1003") {
                // 未绑定账号,跳转到登录页面并传递当前项目信息
                const projectInfo = PROJECT_CONFIG[this.data.selectedProject];
                wx.navigateTo({
                  url: `/pages/login/login?project=${this.data.selectedProject}&projectName=${projectInfo.displayName}`
                });
              } else {
                wx.showToast({
                  title: '登录失败',
                  icon: 'error',
                  duration: 2000
                });
                wx.redirectTo({
                  url: `/pages/login/login?project=${this.data.selectedProject}`
                });
              }
            }).catch(error => {
              wx.hideLoading();
              console.error('登录请求失败:', error);
              wx.showToast({
                title: '登录失败,请重试',
                icon: 'none'
              });
              wx.redirectTo({
                url: `/pages/login/login?project=${this.data.selectedProject}`
              });
              if(error.code==="1003"){
                // 未绑定账号,跳转到登录页面并传递当前项目信息
                const projectInfo = PROJECT_CONFIG[this.data.selectedProject];
                wx.navigateTo({
                  url: `/pages/login/login?project=${this.data.selectedProject}&projectName=${projectInfo.displayName}`
                });
              }else{
                wx.showToast({
                  title: '登录失败,请重试',
                  icon: 'none'
                });
              }
            });
          } else {
            wx.hideLoading();
@@ -1384,19 +1540,7 @@
  cleanupTempMarkers() {
    // 只有在isFromLogin为true时才进行清理
    if (this.data.isFromLogin) {
      console.log('清理临时标记');
      // 清理存储标记
      try {
        wx.removeStorageSync('_temp_from_login');
      } catch (e) {
        console.error('清理存储标记失败:', e);
      }
      // 清理全局变量标记
      if (getApp().globalData) {
        getApp().globalData._tempFromLogin = false;
      }
      // 重设isFromLogin为false,但添加延迟,避免影响当前页面的返回逻辑
      setTimeout(() => {
@@ -1475,4 +1619,180 @@
      })
    });
  },
  onShareAppMessage: function (options) {
    // 设置分享内容
    return {
      title: '大禹灌溉助手', // 分享标题
      path: '/pages/home/home', // 分享路径,该路径需要是当前小程序存在的页面路径
      imageUrl: '/images/logo2.jpg', // 分享图标,可以是网络图片路径或本地图片路径
      success: function (res) {
        // 分享成功的回调函数
      },
      fail: function (res) {
        // 分享失败的回调函数
      }
    };
  },
  //点击提示按钮
  infoShow() {
    this.setData({
      showInfoDialog: true
    })
  },
  //提示窗确认按钮
  confirmBtnInfoDialog() {
    this.setData({
      showInfoDialog: false
    })
  },
  //强制删除
  onDelete(e) {
    const item = e.currentTarget.dataset.item;
    const that = this;
    if (this.data.useTestData) {
      // 测试数据模式下,模拟删除操作
      wx.showLoading({
        title: '正在强制删除请稍候...',
        mask: true
      });
      // 模拟请求延迟
      setTimeout(() => {
        wx.hideLoading();
        // 从列表中移除被删除的项
        const updatedList = this.data.listData.filter(listItem =>
          listItem.orderNo !== item.orderNo
        );
        this.setData({
          listData: updatedList
        });
        wx.showToast({
          title: '删除成功',
          icon: 'success',
          duration: 2000
        });
      }, 1500);
      return;
    }
    wx.showLoading({
      title: '正在强制删除请稍候...', // 加载提示文字
      mask: true // 是否显示透明蒙层,防止触摸穿透,默认为 false
    });
    const data = {
      vcNum: item.vcNum, //取水口ID
      rtuAddr: item.rtuAddr, //阀控器地址
    };
    post({
      url: "wx/valve/deleteUnclosed",
      data: data,
      timeout: 180000
    }).then(response => {
      // 处理成功响应
      console.log('请求成功:', response);
      // 加载完成后隐藏加载动画
      wx.hideLoading();
      //重新获取列表刷新数据
      this.getOpenList();
    }).catch(error => {
      // 加载完成后隐藏加载动画
      wx.hideLoading();
      // 处理错误响应
      console.error('请求失败:', error);
    });
  },
  //修改按钮文字
  updateDisplayText() {
    const updatedList = this.data.listData.map(item => {
      let displayText = '';
      if (item.planned) {
        displayText = '取消';
      } else {
        displayText = "关阀"
      }
      let deleteText = "删除"
      let time;
      if (!item.dt) {
        time = "暂无"
      } else {
        time = this.extractTime(item.dt)
      }
      if (item.waterInstant === null) {
        item.waterInstant = "暂无"
      }
      return {
        ...item,
        displayText,
        deleteText,
        time
      }; // 保留所有其他字段,并添加 displayText 字段
    });
    // 更新列表数据
    this.setData({
      listData: updatedList
    });
  },
  //处理时间去掉年月日
  extractTime(datetimeString) {
    const formattedDate = datetimeString.replace(" ", "T");
    const date = new Date(formattedDate);
    // 获取小时、分钟和秒
    const hours = date.getHours().toString().padStart(2, '0');
    const minutes = date.getMinutes().toString().padStart(2, '0');
    const seconds = date.getSeconds().toString().padStart(2, '0');
    return `${hours}:${minutes}:${seconds}`;
  },
  // 切换项目
  switchProject(e) {
    const project = e.currentTarget.dataset.project;
    if (config.setBaseUrl(project)) {
      this.setData({
        selectedProject: project
      });
      // 保存选择到本地存储
      try {
        wx.setStorageSync('selectedProject', project);
      } catch (e) {
        console.error('保存项目选择失败:', e);
      }
      // 更新全局变量
      const app = getApp();
      if (app && app.globalData) {
        app.globalData.selectedProject = project;
        // 根据项目配置设置相关参数
        const projectConfig = PROJECT_CONFIG[project];
        if (projectConfig) {
          app.globalData.tag = projectConfig.tag;
          if (!projectConfig.needLogin) {
            app.globalData.operator = projectConfig.operatorId;
            app.globalData.clientId = projectConfig.operatorId;
            app.globalData.isLoggedIn = true;
            app.globalData.sessionId = projectConfig.operatorId;
            // 如果有vcId,也设置
            if (projectConfig.vcId) {
              app.globalData.vcId = projectConfig.vcId;
            }
          }
        }
      }
      // 重新加载页面数据
      this.initData();
    } else {
      wx.showToast({
        title: '切换项目失败',
        icon: 'none'
      });
    }
  },
})