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

821 lines
18 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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 () {
}
})