// pages/home/home.js
|
const storage = require('../../utils/storage.js');
|
const {
|
get,
|
post
|
} = require('../../api/request.js');
|
const app = getApp();
|
Page({
|
|
/**
|
* 页面的初始数据
|
*/
|
data: {
|
sessionId: "",
|
showConfirm: false,
|
myItem: {},
|
waterIntakeName: "",
|
image: "/images/ic_head_bg.jpg",
|
userPhone: "未登录",
|
userName: "点击登录",
|
scrollViewHeight: 0,
|
listData: [],
|
isRefreshing: false,
|
isWXRefreshing: false,
|
errorData: '', //错误内容
|
showErrorDialog: false,
|
confirmBtn: {
|
content: '确认'
|
},
|
errorDialogTitle: "关阀错误",
|
showForceConfirm: false, //是否强制开阀
|
lastIntakeName: "",
|
isLogin: false, //是否已经登录
|
showInfoDialog: false,
|
showTipDialog: false,
|
options: '',
|
showUnBind: false
|
},
|
|
openValve: function (e) {
|
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) => {
|
let totalHeight = rects.reduce((sum, rect) => sum + rect.height, 0);
|
this.setData({
|
scrollViewHeight: totalHeight,
|
});
|
}).exec();
|
},
|
startPullDownRefresh() {
|
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'
|
})
|
}
|
},
|
//获取用户数据
|
getUserData() {
|
get('/items')
|
.then((data) => {
|
this.setData({
|
items: data
|
});
|
})
|
.catch((error) => {
|
console.error('Failed to fetch data:', error);
|
});
|
},
|
/**
|
* 生命周期函数--监听页面加载
|
*/
|
onLoad(options) {
|
//当开阀成功后调用刷新
|
console.log("onLoad:" + options.param);
|
if (options.param === "1" || options.param === "2") {
|
this.setData({
|
options: options,
|
isLogin: true,
|
})
|
}
|
|
},
|
|
/**
|
* 生命周期函数--监听页面初次渲染完成
|
*/
|
onReady() {
|
//判断本地是否保存sessionId
|
if (storage.isHasKeySync("sessionId")) {
|
const app = getApp();
|
storage.getItem('sessionId').then((data) => {
|
app.globalData.sessionId = data;
|
this.setData({
|
isLogin: true
|
})
|
if (app.globalData.sessionId) {
|
this.getUserDataBySession();
|
}
|
}).catch((err) => {});
|
storage.getItem('clientId').then((data) => {
|
app.globalData.clientId = data;
|
this.getOpenList();
|
}).catch((err) => {});
|
} else {
|
//本地没有缓存微信登录
|
this.wxLogin();
|
}
|
if (this.data.options.param === "1") {
|
this.setData({
|
showTipDialog: true,
|
tipData: "开阀命令下发成功,因开阀需要时间,约20-60秒后可刷新快速关阀列表查看执行结果。"
|
})
|
setTimeout(() => {
|
this.getOpenList();
|
}, 20000)
|
|
} else if (this.data.options.param === "2") {
|
this.setData({
|
showTipDialog: true,
|
tipData: "预约开阀命令下发成功,当到达预约时间并且成功开阀后快速关阀列表会显示未关阀记录"
|
})
|
this.getOpenList();
|
}
|
},
|
wxLogin() {
|
// if (!this.data.isLogin) {
|
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 {
|
|
}
|
}).catch(error => {
|
// 加载完成后隐藏加载动画
|
wx.hideLoading();
|
// 处理错误响应
|
console.error('请求失败:', error);
|
});
|
},
|
/**
|
* 页面相关事件处理函数--监听用户下拉动作
|
*/
|
onPullDownRefresh() {
|
// 下拉刷新触发的逻辑,可以是请求数据等操作
|
// 例如,请求数据后更新页面内容
|
console.log(this.data.isRefreshing);
|
this.setData({
|
isWXRefreshing: true
|
});
|
console.log(this.data.isRefreshing);
|
// 数据请求完成后,停止下拉刷新的动画
|
this.getOpenList();
|
},
|
// 充值
|
recharge() {
|
if (this.data.isLogin) {
|
wx.navigateTo({
|
url: '/pages/rechargeCard/rechargeCard',
|
})
|
} else {
|
wx.showToast({
|
title: '请先登录',
|
icon: 'error'
|
})
|
}
|
},
|
//开关阀记录
|
openValveList() {
|
if (this.data.isLogin) {
|
wx.navigateTo({
|
url: '/pages/valveList/valveList',
|
})
|
} else {
|
wx.showToast({
|
title: '请先登录',
|
icon: 'error'
|
})
|
}
|
|
},
|
//问题反馈
|
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;
|
console.log(item);
|
this.setData({
|
showConfirm: true,
|
waterIntakeName: item.intakeNum,
|
myItem: item
|
});
|
},
|
closeDialog() {
|
console.log("closeDialog");
|
this.setData({
|
showConfirm: false,
|
showErrorDialog: false,
|
showForceConfirm: false,
|
showTipDialog: false
|
});
|
},
|
cancelDialog() {
|
this.setData({
|
showForceConfirm: false,
|
showConfirm: false,
|
showTipDialog: false,
|
showUnBind: false
|
});
|
},
|
/**
|
* 关闭阀门
|
* @param {*} orderNo 订单号
|
* @param {*} rtuAddr 阀控器地址
|
* @param {*} vcNum 虚拟卡编号
|
*/
|
postCloseValaue(orderNo, rtuAddr, vcNum) {
|
wx.showLoading({
|
title: '正在关阀请稍候...', // 加载提示文字
|
mask: true // 是否显示透明蒙层,防止触摸穿透,默认为 false
|
});
|
const app = getApp();
|
const data = {
|
rtuAddr: rtuAddr,
|
vcNum: vcNum, //虚拟卡ID
|
orderNo: orderNo,
|
operator: app.globalData.sessionId //操作员
|
};
|
console.log("postCloseValaue" + data);
|
post({
|
url: "wx/valve/close_wx",
|
data: data,
|
isShowLoding: false,
|
timeout: 185000
|
}).then(response => {
|
|
// 处理成功响应
|
console.log('请求成功:', response);
|
// 加载完成后隐藏加载动画
|
wx.hideLoading();
|
this.getOpenList();
|
if (response.content.data.success) {
|
this.setData({
|
isLogin: true,
|
showTipDialog: true,
|
tipData: "关阀命令下发成功,约20-60秒后可刷新快速关阀列表查看执行结果。"
|
})
|
setTimeout(() => {
|
this.getOpenList();
|
}, 40000)
|
} else {
|
wx.showToast({
|
title: '命令执行失败',
|
icon: 'error',
|
duration: 3000
|
})
|
}
|
|
}).catch(error => {
|
wx.hideLoading();
|
this.setData({
|
showErrorDialog: true,
|
errorData: error.msg,
|
errorDialogTitle: "关阀错误"
|
})
|
// 处理错误响应
|
console.error('请求失败:', error);
|
});
|
},
|
/**
|
* 获取为关阀记录
|
*/
|
getOpenList() {
|
if (this.data.isLogin) {
|
const app = getApp();
|
const params = {
|
url: 'wx/valve/get',
|
data: {
|
operator: app.globalData.clientId
|
}
|
};
|
get(params).then(data => {
|
this.setData({
|
listData: data.content,
|
isRefreshing: false, // 将triggered属性设置为false,表示下拉刷新已完成
|
isWXRefreshing: false, // 将triggered属性设置为false,表示下拉刷新已完成
|
})
|
this.updateDisplayText();
|
}).catch(err => {
|
// 错误回调
|
this.setData({
|
isRefreshing: false, // 将triggered属性设置为false,表示下拉刷新已完成
|
isWXRefreshing: false, // 将triggered属性设置为false,表示下拉刷新已完成
|
})
|
wx.showToast({
|
title: err.msg,
|
icon: 'error',
|
duration: 3000
|
})
|
});
|
} else {
|
wx.showToast({
|
title: '请先登录',
|
icon: 'error'
|
})
|
this.setData({
|
isRefreshing: false, // 将triggered属性设置为false,表示下拉刷新已完成
|
isWXRefreshing: false, // 将triggered属性设置为false,表示下拉刷新已完成
|
})
|
}
|
|
},
|
/**
|
* 确认关闭回调
|
* @param {} item
|
*/
|
confirmDialog() {
|
this.setData({
|
showConfirm: false
|
});
|
this.postCloseValaue(this.data.myItem.orderNo, this.data.myItem.rtuAddr, this.data.myItem.vcNum);
|
},
|
//根据session获取农户信息
|
getUserDataBySession() {
|
const app = getApp();
|
const params = {
|
url: 'wx/client/simple_info',
|
data: {
|
sessionId: app.globalData.sessionId
|
}
|
};
|
get(params).then(data => {
|
this.setData({
|
userName: data.content.clientName,
|
userPhone: this.maskPhoneNumber(data.content.phone),
|
isLogin: true
|
})
|
}).catch(err => {
|
// 错误回调
|
wx.showToast({
|
title: err.msg,
|
icon: 'error',
|
duration: 3000
|
})
|
})
|
},
|
maskPhoneNumber(phoneNumber) {
|
if (phoneNumber.length !== 11) {
|
throw new Error("Phone number must be 11 digits");
|
}
|
// 使用正则表达式替换中间四位数字为星号
|
const maskedPhoneNumber = phoneNumber.replace(/^(\d{3})\d{4}(\d{4})$/, "$1****$2");
|
return maskedPhoneNumber;
|
},
|
|
closeDialog() {
|
this.setData({
|
showErrorDialog: false
|
})
|
},
|
/**
|
* 扫码开阀
|
*/
|
scenCode() {
|
if (this.data.isLogin) {
|
const that = this;
|
wx.scanCode({
|
success(res) {
|
console.log(res.result); // 当且仅当扫码为非微信二维码时,会返回result
|
if (res.result.startsWith("content://")) {
|
let jsonStr = res.result.replace("content://", "")
|
try {
|
that.saveData(jsonStr)
|
} catch (error) {
|
console.error('Error parsing JSON:', error);
|
}
|
} else {
|
wx.navigateTo({
|
url: '/pages/openCard/openCard?intakeName=' + res.result,
|
})
|
// that.postOppenValva()
|
}
|
},
|
fail(err) {
|
console.error(err);
|
}
|
})
|
} else {
|
wx.showToast({
|
title: '请先登录',
|
icon: 'error'
|
})
|
}
|
|
},
|
confirmForceDialog() {
|
console.log("confirmForceDialog");
|
this.setData({
|
showForceConfirm: false
|
})
|
this.postOppenValva(this.data.lastIntakeName, true)
|
},
|
/**
|
* 扫码开阀调用开阀接口
|
* @param {*} intakeName
|
*/
|
postOppenValva(intakeName, isforce) {
|
const that = this;
|
wx.showLoading({
|
title: '正在开阀请稍候...', // 加载提示文字
|
mask: true // 是否显示透明蒙层,防止触摸穿透,默认为 false
|
});
|
const app = getApp();
|
that.setData({
|
lastIntakeName: intakeName
|
})
|
const data = {
|
intakeName: intakeName, //取水口ID
|
// vcId: vcId, //虚拟卡ID
|
operator: app.globalData.sessionId, //操作员
|
forceOpen: !!isforce // 使用逻辑非操作符 !! 来确保 isForce 是布尔值
|
};
|
post({
|
url: "wx/valve/open_wx",
|
data: data,
|
timeout: 180000
|
}).then(response => {
|
|
// 处理成功响应
|
console.log('请求成功:', response);
|
// 加载完成后隐藏加载动画
|
wx.hideLoading();
|
//完成后回到首页
|
wx.reLaunch({
|
url: '/pages/home/home?param=true' // 首页的路径,根据实际情况填写
|
});
|
}).catch(error => {
|
// 加载完成后隐藏加载动画
|
wx.hideLoading();
|
// 处理错误响应
|
console.error('请求失败:', error);
|
if (error.code === "10005") {
|
that.setData({
|
showForceConfirm: true
|
})
|
} else {
|
that.setData({
|
showErrorDialog: true,
|
errorData: error.msg,
|
errorDialogTitle: "开阀错误"
|
})
|
}
|
});
|
},
|
/**
|
* 扫描后保存用户id和tag
|
*/
|
saveData(userData) {
|
storage.setItem("userData", userData).then(() => {
|
this.initData();
|
}).catch((error) => {});
|
|
},
|
//进入界面获取界面数据
|
initData() {
|
const app = getApp();
|
console.log("tag>>>>:" + app.globalData.tag)
|
if (storage.isHasKeySync("userData")) {
|
storage.getItem('userData').then((data) => {
|
let jsonObj = JSON.parse(data);
|
app.globalData.sessionId = jsonObj.sessionId;
|
app.globalData.tag = jsonObj.tag;
|
this.getUserDataBySession();
|
this.getOpenList();
|
console.log("userData>>>>>>>" + data)
|
}).catch((err) => {
|
console.error('Failed to load parameter:', err);
|
});
|
} else {
|
this.getUserDataBySession();
|
this.getOpenList();
|
console.log('Failed to load parameter:false');
|
}
|
|
},
|
//强制删除
|
onDelete(e) {
|
const item = e.currentTarget.dataset.item;
|
const that = this;
|
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
|
});
|
},
|
//解绑
|
unbind() {
|
this.setData({
|
showUnBind: true
|
})
|
},
|
//确认解绑
|
unBindPost() {
|
this.setData({
|
showUnBind: false
|
})
|
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);
|
wx.showToast({
|
title: '解绑失败',
|
icon: 'error',
|
duration: 3000
|
})
|
});
|
},
|
//点击提示按钮
|
infoShow() {
|
this.setData({
|
showInfoDialog: true
|
})
|
},
|
//提示窗确认按钮
|
confirmBtnInfoDialog() {
|
this.setData({
|
showInfoDialog: false
|
})
|
},
|
//处理时间去掉年月日
|
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}`;
|
}
|
})
|