管灌系统农户端微信小程序(嘉峪关应用)
pages/home/home.js
@@ -4,12 +4,13 @@
    get,
    post
} = require('../../api/request.js');
const {
    PROJECT_URLS
} = require('../../api/config.js');
const config = require('../../api/config.js');
const {
    PROJECT_CONFIG
} = require('../../utils/projectConfig.js');
const {
    ENV
} = require('../../api/env.js');
Page({
@@ -42,7 +43,8 @@
        isFromLogin: false,
        showTipDialog: '',
        projectConfig: PROJECT_CONFIG, // 添加项目配置到data中
        showInfoDialog: false
        showInfoDialog: false,
        projectList: []
    },
    openValve: function (e) {
@@ -58,14 +60,14 @@
            })
        }
    },
    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 (getApp().globalData.isLoggedIn) {
            if (!this.data.isWXRefreshing) {
@@ -93,6 +95,10 @@
     */
    onLoad(options) {
        console.log('home页面onLoad开始,参数:', options);
        // 初始化项目列表数据
        this.initProjectList();
        //当开阀成功后调用刷新
        if (options.param === "1" || options.param === "2") {
            this.setData({
@@ -124,6 +130,44 @@
        }, 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中的逻辑以便延迟执行
    initializePage(options, fromLogin) {
        // 检查是否已选择项目
@@ -142,9 +186,12 @@
                    });
                    // 设置 baseUrl
                    const baseUrl = PROJECT_URLS[project];
                    getApp().globalData.baseUrl = baseUrl;
                    getApp().globalData.selectedProject = project;
                    const serverUrl = PROJECT_CONFIG[project]?.serverUrl;
                    if (serverUrl) {
                        getApp().globalData.baseUrl = serverUrl;
                        getApp().globalData.selectedProject = project;
                        console.log('设置baseUrl:', serverUrl);
                    }
                    // 根据项目设置对应的tag
                    const projectConfig = PROJECT_CONFIG[project];
@@ -340,13 +387,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({
@@ -360,23 +411,36 @@
        const currentProject = getApp().globalData.selectedProject;
        const projectConfig = PROJECT_CONFIG[currentProject];
        // 如果当前项目配置为不需要登录,则提示用户不可解绑
        // 如果当前项目配置为不需要登录,则提示用户并打开项目选择弹窗
        if (projectConfig && !projectConfig.needLogin) {
            wx.showToast({
                title: '当前用户不可解绑',
                icon: 'none',
                duration: 2000
            wx.showModal({
                title: '切换项目',
                content: '是否确定解绑?',
                confirmText: '确认',
                cancelText: '取消',
                success: (res) => {
                    if (res.confirm) {
                        // 显示项目选择弹窗
                        this.setData({
                            showProjectDialog: true
                        });
                    }
                }
            });
            return;
        }
        // 如果已登录,显示解绑确认对话框
        if (getApp().globalData.isLoggedIn) {
            wx.showModal({
                title: '解绑确认',
                content: '确定要解绑当前账号吗?',
                content: '确定要解绑当前账号吗?解绑后将无法使用相关功能,需重新绑定。',
                confirmText: '确认解绑',
                confirmColor: '#e34d59',
                cancelText: '取消',
                success: (res) => {
                    if (res.confirm) {
                        this.unBindPost()
                        this.unBindPost();
                    }
                }
            });
@@ -384,7 +448,7 @@
            wx.showToast({
                title: '还未绑定',
                icon: 'error'
            })
            });
        }
    },
    //轮灌
@@ -538,11 +602,8 @@
                isRefreshing: false, // 将triggered属性设置为false,表示下拉刷新已完成
                isWXRefreshing: false, // 将triggered属性设置为false,表示下拉刷新已完成
            });
            this.updateDisplayText();
            // 成功获取数据后刷新UI高度
            setTimeout(() => {
                this.calculateScrollViewHeight();
            }, 200);
        }).catch(err => {
            console.error('获取列表数据失败:', err);
            // 错误回调
@@ -938,6 +999,8 @@
    // 处理项目选择确认
    handleProjectConfirm() {
        console.log('开始处理项目选择确认', this.data.selectedProject, this.data.projectList);
        if (!this.data.selectedProject) {
            wx.showToast({
                title: '请选择项目',
@@ -949,7 +1012,11 @@
        // 获取当前已选项目和新选择的项目
        const currentProject = getApp().globalData.selectedProject;
        const newProject = this.data.selectedProject;
        console.log('当前项目:', currentProject, '新选择项目:', newProject);
        console.log('PROJECT_CONFIG 内容:', PROJECT_CONFIG);
        const projectConfig = PROJECT_CONFIG[newProject];
        console.log('选择的项目配置:', projectConfig);
        if (!projectConfig) {
            wx.showToast({
@@ -962,6 +1029,30 @@
        // 检查是否切换了项目(如果当前项目不同于新选择的项目)
        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},将清除登录状态`);
@@ -993,13 +1084,21 @@
        // 保存项目选择到本地存储
        storage.setItem('selectedProject', newProject).then(() => {
            // 更新 BASEURL
            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;
            // 通过配置对象统一设置项目参数
            getApp().globalData.tag = projectConfig.tag;
@@ -1037,7 +1136,7 @@
                storage.setItem(`${newProject}_params`, params);
            }
            console.log('已切换到项目:', projectConfig.displayName, '域名:', baseUrl, 'tag:', getApp().globalData.tag);
            console.log('已切换到项目:', projectConfig.displayName, '服务器:', projectConfig.serverId, 'tag:', getApp().globalData.tag);
            this.setData({
                showProjectDialog: false
@@ -1235,13 +1334,6 @@
            console.log('continueInitPage: 从页面数据中检测到isFromLogin=true');
            fromLogin = true;
        }
        // 判断本地是否保存sessionId
        // 使用 wx.nextTick 等待页面渲染完成
        wx.nextTick(() => {
            this.calculateScrollViewHeight();
        });
        // 当开阀成功后调用刷新
        if (options && options.param) {
            console.log("开阀成功参数:", options.param);
@@ -1498,4 +1590,154 @@
            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'
            });
        }
    },
})