沙盘演示系统应用的微信小程序
zuoxiao
2024-10-25 917252ef3ea2b63c74d162cc67a6fbe103cb9b4d
pages/home/home.js
@@ -4,6 +4,7 @@
  get,
  post
} = require('../../api/request.js');
const app = getApp();
Page({
  /**
@@ -15,8 +16,8 @@
    myItem: {},
    waterIntakeName: "",
    image: "/images/ic_head_bg.jpg",
    userPhone: "000****0000",
    userName: "未知",
    userPhone: "未登录",
    userName: "点击登录",
    scrollViewHeight: 0,
    listData: [],
    isRefreshing: false,
@@ -28,13 +29,22 @@
    },
    errorDialogTitle: "关阀错误",
    showForceConfirm: false, //是否强制开阀
    lastIntakeName: ""
    lastIntakeName: "",
    isLogin: false, //是否已经登录
  },
  openValve: function (e) {
    wx.navigateTo({
      url: '/pages/waterIntake/waterIntake',
    })
    if (this.data.isLogin) {
      wx.navigateTo({
        url: '/pages/waterIntake/waterIntake',
      })
    } else {
      wx.showToast({
        title: '请先登录',
        icon: 'error'
      })
    }
  },
  calculateScrollViewHeight: function () {
    wx.createSelectorQuery().selectAll('.list-item').boundingClientRect((rects) => {
@@ -45,15 +55,22 @@
    }).exec();
  },
  startPullDownRefresh() {
    if (!this.data.isWXRefreshing) {
      var self = this;
      console.log(this.data.isRefreshing);
      this.setData({
        isRefreshing: true
      });
      this.getOpenList();
    if(this.data.isLogin){
      if (!this.data.isWXRefreshing) {
        var self = this;
        console.log(this.data.isRefreshing);
        this.setData({
          isRefreshing: true
        });
        this.getOpenList();
      }
    }else{
      wx.showToast({
        title: '请先登录',
        icon: 'error'
      })
    }
  },
  //获取用户数据
@@ -68,16 +85,10 @@
        console.error('Failed to fetch data:', error);
      });
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    //判断本地是否保存sessionId
    // 使用 wx.nextTick 等待页面渲染完成
    wx.nextTick(() => {
      this.calculateScrollViewHeight();
@@ -92,37 +103,90 @@
      })
      this.getOpenList();
    }
    this.initData();
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    //判断本地是否保存sessionId
    if (storage.isHasKeySync("sessionId")) {
      const app = getApp();
      storage.getItem('sessionId').then((data) => {
        app.globalData.sessionId = data;
        if (app.globalData.sessionId) {
          this.getOpenList();
          this.getUserDataBySession();
        }
      }).catch((err) => {});
      storage.getItem('clientId').then((data) => {
        app.globalData.clientId = data;
      }).catch((err) => {});
    } else {
      //本地没有缓存微信登录
      this.wxLogin();
    }
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
  wxLogin() {
    const that = this;
    wx.login({
      success: function (res) {
        if (res.code) {
          var code = res.code;
          console.log(code);
          // 将code发送到服务器获取openid
          that.codeLogin(code);
        } else {
          console.log('登录失败!' + res.errMsg);
        }
      }
    });
  },
  //微信code登录
  codeLogin(codeData) {
    wx.showLoading({
      title: '正在登录请稍候...', // 加载提示文字
      mask: true // 是否显示透明蒙层,防止触摸穿透,默认为 false
    });
    const data = {
      code: codeData, //临时登录凭证
    };
    post({
      url: "wx/client/code_login",
      data: data,
    }).then(response => {
      // 处理成功响应
      console.log('请求成功:', response);
      // 加载完成后隐藏加载动画
      wx.hideLoading();
      if (response.code === "0001") {
        //假如为空则跳转到绑定界面
        if (response.content.client.clientId === "") {
          wx.navigateTo({
            url: '/pages/wxbind/wxbind'
          })
        } else {
          //缓存在本地
          this.setData({
            isLogin: true
          })
          getApp().globalData.sessionId = response.content.client.sessionId
          storage.setItem("sessionId", response.content.client.sessionId)
          getApp().globalData.clientId = response.content.client.clientId
          storage.setItem("clientId", response.content.client.clientId)
          this.initData();
        }
      } else {
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
      }
    }).catch(error => {
      // 加载完成后隐藏加载动画
      wx.hideLoading();
      // 处理错误响应
      console.error('请求失败:', error);
    });
  },
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
  },
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
@@ -137,49 +201,45 @@
    // 数据请求完成后,停止下拉刷新的动画
    this.getOpenList();
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  },
  // 充值
  recharge() {
    wx.navigateTo({
      url: '/pages/rechargeCard/rechargeCard',
    })
    // wx.showToast({
    //   title: '暂未开放',
    //   icon: 'none'
    // })
    if (this.data.isLogin) {
      wx.navigateTo({
        url: '/pages/rechargeCard/rechargeCard',
      })
    } else {
      wx.showToast({
        title: '请先登录',
        icon: 'error'
      })
    }
  },
  //开关阀记录
  openValveList() {
    wx.navigateTo({
      url: '/pages/valveList/valveList',
    })
    // wx.showToast({
    //   title: '暂未开放',
    //   icon: 'none'
    // })
    if (this.data.isLogin) {
      wx.navigateTo({
        url: '/pages/valveList/valveList',
      })
    } else {
      wx.showToast({
        title: '请先登录',
        icon: 'error'
      })
    }
  },
  //问题反馈
  feedBack() {
    // wx.showToast({
    //   title: '暂未开放',
    //   icon: 'none'
    // })
    wx.navigateTo({
      url: '/pages/feedback/feedback',
    })
    if (this.data.isLogin) {
      wx.navigateTo({
        url: '/pages/feedback/feedback',
      })
    } else {
      wx.showToast({
        title: '请先登录',
        icon: 'error'
      })
    }
  },
  handleChange(e) {
    const item = e.currentTarget.dataset.item;
@@ -235,20 +295,20 @@
      // 加载完成后隐藏加载动画
      wx.hideLoading();
      this.getOpenList();
      if(response.content.data.success){
      if (response.content.data.success) {
        wx.showToast({
          title: '关阀成功',
          icon: 'success',
          duration: 3000
        })
      }else{
      } else {
        wx.showToast({
          title: '关阀失败',
          icon: 'error',
          duration: 3000
        })
      }
    }).catch(error => {
      wx.hideLoading();
      this.setData({
@@ -277,6 +337,7 @@
        isRefreshing: false, // 将triggered属性设置为false,表示下拉刷新已完成
        isWXRefreshing: false, // 将triggered属性设置为false,表示下拉刷新已完成
      })
      this.updateDisplayText();
    }).catch(err => {
      // 错误回调
      this.setData({
@@ -312,7 +373,8 @@
    get(params).then(data => {
      this.setData({
        userName: data.content.clientName,
        userPhone: this.maskPhoneNumber(data.content.phone)
        userPhone: this.maskPhoneNumber(data.content.phone),
        isLogin: true
      })
    }).catch(err => {
      // 错误回调
@@ -348,16 +410,13 @@
        if (res.result.startsWith("content://")) {
          let jsonStr = res.result.replace("content://", "")
          try {
            that.saveData(jsonStr)
          } catch (error) {
            console.error('Error parsing JSON:', error);
          }
        } else {
          that.postOppenValva(res.result)
        }
      },
      fail(err) {
        console.error(err);
@@ -372,7 +431,7 @@
    this.postOppenValva(this.data.lastIntakeName, true)
  },
  /**
   *
   * 扫码开阀调用开阀接口
   * @param {*} intakeName 
   */
  postOppenValva(intakeName, isforce) {
@@ -435,8 +494,7 @@
  //进入界面获取界面数据
  initData() {
    const app = getApp();
    console.log("tag>>>>:" +app.globalData.tag)
    console.log("tag>>>>:" + app.globalData.tag)
    if (storage.isHasKeySync("userData")) {
      storage.getItem('userData').then((data) => {
        let jsonObj = JSON.parse(data);
@@ -453,9 +511,105 @@
      this.getOpenList();
      console.log('Failed to load parameter:false');
    }
  },
  onDelete(){
  //强制删除
  onDelete(e) {
    const item = e.currentTarget.dataset.item;
    const that = this;
    wx.showLoading({
      title: '正在强制删除请稍候...', // 加载提示文字
      mask: true // 是否显示透明蒙层,防止触摸穿透,默认为 false
    });
    that.setData({
      lastIntakeName: intakeName
    })
    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 = "关阀"
      }
      return {
        ...item,
        displayText
      }; // 保留所有其他字段,并添加 displayText 字段
    });
    // 更新列表数据
    this.setData({
      listData: updatedList
    });
  },
  //解绑
  unbind() {
    //清空数据
    this.setData({
      userPhone: "请登录",
      userName: "未登录",
      listData: []
    })
    wx.showLoading({
      title: '正在解绑请稍候...', // 加载提示文字
      mask: true // 是否显示透明蒙层,防止触摸穿透,默认为 false
    });
    const data = {
      sessionId: getApp().globalData.sessionId //取水口ID
    };
    post({
      url: 'wx/client/unbind',
      data: data,
      useParams: true
    }).then(response => {
      // 处理成功响应
      console.log('请求成功:', response);
      // 加载完成后隐藏加载动画
      wx.hideLoading();
      //清空数据
      this.setData({
        userPhone: "请登录",
        userName: "未登录",
        listData: [],
        isLogin:false
      })
      app.globalData.sessionId = "";
      app.globalData.clientId = ""
      storage.removeItem("sessionId")
      storage.removeItem("clientId")
      wx.showToast({
        title: '解绑成功',
        icon: 'success',
        duration: 3000
      })
    }).catch(error => {
      // 加载完成后隐藏加载动画
      wx.hideLoading();
      // 处理错误响应
      console.error('请求失败:', error);
    });
  }
})