water_xcx/pages/p-task/p-task.js

821 lines
18 KiB
JavaScript
Raw Permalink Normal View History

2025-04-15 15:44:51 +08:00
// pages/p-task/p-task.js
var myRequest = require("../../utils/api.js");
const util = require("../../utils/utils");
import * as echarts from '../../components/ec-canvas/echarts';
const app = getApp()
let chart = null;
function initChart(canvas, width, height, dpr) {
chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr
})
return chart;
}
Page({
/**
* 页面的初始数据
*/
data: {
tabPanelCustomStyle: '',
icons: [,
'chevron-right',
],
tableData:[],
tableIndex:0,
defaultSize:50,
fileList: [],
deviceId: '',
projectId: '',
deviceCode: '',
details: [],
state: [],
alarmData: [],
filePath: '',
ec: {
onInit: initChart
},
who:'',
chartData: [],
xData: [],
date: util.getTime1(),
dateVisible: false,
dataKeyVisible: false,
storeAddress: '',
storeLatitude: '',
storeLongitude: '',
sensorData: [],
sensorInfo: [],
page: 1,
size: 10,
isFromSearch: false,
visible: false,
cur: {},
dataKey: '',
dataValue: '',
distributeData: [],
is_text: false,
fileUrl: app.globalData.fileUrl,
siteTotal: 0,
sensorName: '',
},
// 数据处理
dataProcessing() {
let that=this;
var xdata=that.data.xData;
var data=that.data.chartData;
let option = {
title:{
text: '站点历史数据折线图',
left: 'center',
top:'4%',
textStyle:{
fontSize:14,
color:'#333333'
}
},
legend: {
z: 100,
top:'15%',
right:'4%',
icon:'rect',
itemWidth:11,
itemHeight:8,
textStyle:{
fontSize:12,
color:'#8C8C8C'
}
},
grid:{
left: '5%',
right: '5%',
bottom: '5%',
top:'30%',
containLabel: true
},
tooltip: {
show: true,
trigger: 'axis',
},
xAxis: {
type: 'category',
data: xdata,
axisLabel : {
show : true,
// interval: 0,
// rotate:45, //代表逆时针旋转45度
textStyle:{
color:'#8C8C8C',
fontSize:12
}
},
axisLine : {
show : true,
lineStyle : {
color:'#8C8C8C'
}
// x轴坐标轴颜色
},
axisTick : {
show : true,
lineStyle : {
color:'#8C8C8C'
}
// x轴刻度的颜色
},
},
yAxis: {
splitLine: {
show: true
},
splitArea: { show: true },
axisLabel : {
show : true,
textStyle : {
color : '#999',
fontSize:12
}
},
axisLine : {
lineStyle : {
color : 'transparent'
}
// y轴坐标轴颜色
},
axisTick : {
lineStyle : {
color : 'transparent'
}
// y轴刻度的颜色
},
},
dataZoom: [{
startValue: '2020-05-17'
}, {
type: 'inside'
}],
series: {
name: '',
type: 'line',
data: data,
markLine: {
silent: false,
}
}
};
setTimeout(function() {
chart.setOption(option);
}, 1000)
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
let that = this;
that.setData({
deviceId: options.deviceId,
deviceCode: options.code,
projectId: wx.getStorageSync('projectId'),
dateText: util.getTime1(),
})
that.getDeviceDetail();
that.getAlarmData();
that.getSensorData();
},
getHistoryData1() {
var that = this;
myRequest.myRequest('device/historyChart', {
dataKey: that.data.formData.dataKey,
deviceCode: that.data.deviceCode,
date: that.data.date,
}, 'get').then(function(res){
var historyData = res.data.data;
var xData = [];
var yData = [];
for (let i = 0; i < historyData.length; i++) {
xData.push(historyData[i][0]);
yData.push(historyData[i][1]);
}
that.setData({
xData: xData,
chartData: yData,
})
that.dataProcessing();
}).catch(function(res){
console.log(res);
})
},
getHistoryData() {
var that = this;
myRequest.myRequest('device/history', {
dataKey: that.data.formData.dataKey,
deviceCode: that.data.deviceCode,
date: that.data.date,
}, 'get').then(function(res){
var historyData = res.data.data;
var xData = [];
var yData = [];
for (let i = 0; i < historyData.length; i++) {
xData.push(historyData[i][0]);
yData.push(historyData[i][1]);
historyData[i][2] = i+1
}
let arr = res.data.data.slice(0,that.data.defaultSize)
that.setData({
tableData: res.data.data,
tableIndex:1,
historyData:arr,
xData: xData,
chartData: yData,
})
debugger
// that.dataProcessing();
}).catch(function(res){
console.log(res);
})
},
bindtopScroll(e){
console.log(this.data.tableIndex)
let data = this.data.tableData.slice((this.data.tableIndex-3)*this.data.defaultSize,(this.data.tableIndex-2)*this.data.defaultSize)
let lastval = [...this.data.historyData]
if(this.data.tableIndex>2){
lastval.splice(lastval.length-this.data.defaultSize,lastval.length)
this.setData({
tableIndex:this.data.tableIndex-1,
historyData:[...data,...lastval],
})
let id =`item${(this.data.tableIndex-1)*this.data.defaultSize}`
this.setData({
who:id
})
}
},
bindnextScroll(e){
let data = this.data.tableData.slice(this.data.tableIndex*this.data.defaultSize,(this.data.tableIndex+1)*this.data.defaultSize)
let lastval = [...this.data.historyData]
if(this.data.tableIndex>1){
lastval.splice(0,this.data.defaultSize)
}
console.log(this.data.who)
this.setData({
tableIndex:this.data.tableIndex+1,
historyData:[...lastval,...data],
})
let id =`item${(this.data.tableIndex-1)*this.data.defaultSize-8}`
this.setData({
who:id
})
console.log(e)
},
getOption(){
let that=this;
var xdata=that.data.xData;
var data=that.data.chartData;
return {
title:{
text: '站点历史数据折线图',
left: 'center',
top:'4%',
textStyle:{
fontSize:14,
color:'#333333'
}
},
legend: {
z: 100,
top:'15%',
right:'4%',
icon:'rect',
itemWidth:11,
itemHeight:8,
textStyle:{
fontSize:12,
color:'#8C8C8C'
}
},
grid:{
left: '5%',
right: '5%',
bottom: '5%',
top:'30%',
containLabel: true
},
tooltip: {
show: true,
trigger: 'axis',
},
xAxis: {
type: 'category',
data: xdata,
axisLabel : {
show : true,
// interval: 0,
// rotate:45, //代表逆时针旋转45度
textStyle:{
color:'#8C8C8C',
fontSize:12
}
},
axisLine : {
show : true,
lineStyle : {
color:'#8C8C8C'
}
// x轴坐标轴颜色
},
axisTick : {
show : true,
lineStyle : {
color:'#8C8C8C'
}
// x轴刻度的颜色
},
},
yAxis: {
splitLine: {
show: true
},
splitArea: { show: true },
axisLabel : {
show : true,
textStyle : {
color : '#999',
fontSize:12
}
},
axisLine : {
lineStyle : {
color : 'transparent'
}
// y轴坐标轴颜色
},
axisTick : {
lineStyle : {
color : 'transparent'
}
// y轴刻度的颜色
},
},
dataZoom: [{
startValue: '2020-05-17'
}, {
type: 'inside'
}],
series: {
name: '',
type: 'line',
data: data,
markLine: {
silent: false,
}
}
};
},
handlePopup(e) {
const { key, unit, convertflag } = e.currentTarget.dataset;
if (unit != null && unit.indexOf(';')) {
const unitArr = unit.split(';');
const unitData = [];
for (let i = 0; i < unitArr.length; i++) {
const units = unitArr[i].split(':');
if (units[1] != '故障') {
unitData.push({ value: units[0], label: units[1] });
}
}
this.setData({
distributeData: unitData
});
}
if (convertflag == '1') {
this.setData({
is_text: false
})
} else if (convertflag == '0') {
this.setData({
is_text: true,
dataValue: ''
})
}
console.log(this.data.dataValue);
this.setData(
{
cur: 'bottom',
},
() => {
this.setData({
visible: true,
dataKey: key,
dataValue: ''
});
},
);
},
onVisibleChange(e) {
this.setData({
visible: e.detail.visible,
});
},
getDataValue(e) {
this.setData({
dataValue: e.detail.value
})
},
cancellation() {
this.setData({
visible: false,
})
},
Distribute() {
const { dataKey, dataValue, deviceCode } = this.data;
var dataValue1 = dataValue == 4 ? 1 : dataValue;
var that = this;
myRequest.myRequest('device/write?deviceCode='+deviceCode+'&dataKey='+dataKey+'&dataValue='+dataValue1, {
deviceCode: deviceCode,
dataKey: dataKey,
dataValue: dataValue1,
}, 'post').then(function(res){
wx.showToast({
title: '下发成功',
icon: 'none',
})
that.getDeviceState();
that.setData({
visible: false
})
}).catch(function(res){
console.log(res);
})
},
onChangeDistribute(e) {
this.setData({ dataValue: e.detail.value });
},
// 转任务
toTask(e) {
var id = e.currentTarget.dataset.id;
var name = e.currentTarget.dataset.name;
var code = e.currentTarget.dataset.code;
wx.navigateTo({
url: '../u-task/u-task?alarmRecordId=' + id + '&deviceCode=' + code + '&deviceName=' + name,
})
},
//获取站点详情
getDeviceDetail() {
var that = this;
myRequest.myRequest('device/details', {
deviceId: that.data.deviceId
}, 'get').then(function(res){
var baseUrl = app.globalData.url;
var imgList = [
{
url: baseUrl + '/static/img/' + res.data.data.boardImg,
type: 'image'
}
]
that.setData({
details: res.data.data,
filePath: res.data.data.boardImg,
latitude: res.data.data.latitude,
longitude: res.data.data.longitude,
fileList: imgList,
})
wx.setNavigationBarTitle({
title: res.data.data.name,
})
}).catch(function(res){
console.log(res);
})
},
//设备情况
getDeviceState() {
var that = this;
var code = that.data.details.code;
if (undefined == code) {
return false;
}
myRequest.myRequest('device/state', {
deviceCode: code,
page: this.data.page,
size: this.data.size,
sensorName: this.data.sensorName,
}, 'get').then(function(res){
console.log('设备情况:' + res.data.data);
var siteList = res.data.data.items;
var siteTotal = res.data.data.totalPage;
that.setData({
state: siteList,
siteTotal: siteTotal
})
// if (siteList.length != 0){
// var list = [];
// //如果isFromSearch是true从data中取出数据否则先从原来的数据继续添加
// that.data.isFromSearch ? list=siteList : list=that.data.state.concat(siteList)
// that.setData({
// state: list, //获取数据数组
// });
// }
// that.setData({
// searchLoadingComplete: true, //把“没有数据”设为true显示
// searchLoading: false //把"上拉加载"的变量设为false隐藏
// });
}).catch(function(res){
console.log(res);
})
},
lower: function () {
this.setData({
page: this.data.page+1,
isFromSearch: false
});
this.getDeviceState()
},
prev: function() {
let page = this.data.page == 1 ? 1 : this.data.page-1;
this.setData({
page: page,
isFromSearch: false
});
this.getDeviceState()
},
next: function() {
let siteTotal = this.data.page+1;
let page = siteTotal <= this.data.siteTotal ? siteTotal : this.data.siteTotal
this.setData({
page: page,
isFromSearch: false
});
this.getDeviceState()
},
//告警信息
getAlarmData() {
var that = this;
myRequest.myRequest('alarm/listPage', {
deviceCode: that.data.deviceCode,
projectId: that.data.projectId,
page: 1,
size: 1000,
}, 'get').then(function(res){
that.setData({
alarmData: res.data.data.items
})
}).catch(function(res){
console.log(res);
})
},
getSearchKeywords(e) {
const { value } = e.detail;
this.setData({
sensorName: value
})
},
// 搜索
search() {
this.getDeviceState()
},
//地图选择位置
getCenterLocation() {
var that = this;
wx.showModal({
title: '',
content: '是否要更新站点地址?',
success: function (res) {
if (res.confirm) {
that.getLocation();
}
}
})
},
getLocation() {
var that = this
wx.getLocation({//调用API得到经纬度
type: 'gcj02',
isHighAccuracy: true,
success: function (res) {
that.setData({
latitude: res.latitude,
longitude: res.longitude
})
that.deviceUpdate();
}
})
},
//弃用
getLocation1() {
var storeLatitude = this.data.storeLatitude;
var storeLongitude = this.data.storeLongitude;
if (storeLongitude && storeLatitude) {
this.setData({
latitude: storeLatitude,
longitude: storeLongitude,
})
this.deviceUpdate();
}
},
deviceUpdate() {
var that = this;
myRequest.myRequest('device/update', {
id: that.data.deviceId,
boardImg: that.data.filePath,
longitude: that.data.longitude,
latitude: that.data.latitude,
}, 'post').then(function(res){
wx.showToast({
title: '操作成功',
icon: 'none',
})
that.getDeviceDetail();
}).catch(function(res){
console.log(res);
})
},
onTabsChange(event) {
if (event.detail.value == 1) {
this.setData({
state: [],
page: 1,
})
this.getDeviceState();
} else if (event.detail.value == 3) {
this.getAlarmData();
}
this.setData({
visible: false,
})
},
handleAdd(e) {
var that = this;
const { fileList } = that.data;
const { files } = e.detail;
that.setData({
fileList: [...fileList, ...files],
});
myRequest.updateImg({file:files[0].url}).then(function(res){
fileList.push({url:files[0].url,type:'image',percent:100});
that.setData({
filePath: res
})
that.deviceUpdate();
}).catch(function(res){
console.log(res);
})
},
handleRemove(e) {
const { index } = e.detail;
const { fileList } = this.data;
fileList.splice(index, 1);
this.setData({
fileList,
});
},
showPicker(e) {
const { mode } = e.currentTarget.dataset;
this.setData({
mode,
[`${mode}Visible`]: true,
});
},
hidePicker() {
const { mode } = this.data;
this.setData({
[`${mode}Visible`]: false,
});
},
getSensorData() {
var that = this;
myRequest.myRequest('device/sensors', {
deviceCode: that.data.deviceCode
}, 'get').then(function(res){
var data = res.data.data;
var sensorData = [];
for (let i = 0; i < data.length; i++) {
sensorData.push({label: data[i].name, value: data[i].transferId})
}
that.setData({
sensorData: sensorData,
'formData.dataKey': sensorData[0].value
})
that.getHistoryData();
that.getHistoryData1();
that.getSensorInfo();
}).catch(function(res){
console.log(res);
})
},
onPicker(e) {
var filed = e.currentTarget.dataset.filed;
this.setData({
[`${filed}Visible`]: true,
});
},
onPickerChange(e) {
const { key } = e.currentTarget.dataset;
const { value, label } = e.detail;
this.setData({
[`${key}Visible`]: false,
[`${key}Value`]: value,
[`${key}Text`]: label.join(' '),
[`formData.${key}`]: value[0],
});
this.getHistoryData();
this.getHistoryData1();
this.getSensorInfo();
},
onConfirm(e) {
const { value } = e.detail;
const { mode } = this.data;
this.setData({
[mode]: value,
[`${mode}Text`]: value,
[`formData.${mode}`]: value,
});
this.getHistoryData();
this.getHistoryData1();
},
onCityPicker(e) {
var filed = e.currentTarget.dataset.filed;
console.log(filed)
this.setData({
[`${filed}Visible`]: true,
});
},
//根据站点编号和传输id查询传感器信息
getSensorInfo() {
var that = this;
myRequest.myRequest('device/sensorInfo', {
deviceCode: that.data.deviceCode,
dataKey: that.data.formData.dataKey,
}, 'get').then(function(res){
var data = res.data.data;
that.setData({
sensorInfo: data
})
}).catch(function(res){
console.log(res);
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
this.oneComponent = this.selectComponent('#mychart-dom-line');
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})