452 lines
11 KiB
Vue
452 lines
11 KiB
Vue
<template>
|
||
<view class="fullHeight">
|
||
<headers :showBack="true" class="fixedHeaderBox">
|
||
<view class="headerName">
|
||
数据台账
|
||
</view>
|
||
</headers>
|
||
<view class="menuBox" :style="{ 'top': (statusBarHeight+52) * 1.5 + 'rpx' }">
|
||
<view class="menuItem" @click="changeMenu(0)" :class="tabIndex==0?'active':''">
|
||
历史数据台账
|
||
</view>
|
||
<view class="menuItem" @click="changeMenu(1)" :class="tabIndex==1?'active':''">
|
||
环境统计分析
|
||
</view>
|
||
</view>
|
||
<view class="" v-if="tabIndex==0">
|
||
<view class="searchBox" :style="{ 'padding-top': (statusBarHeight+52+44) + 'px' }">
|
||
<view class="input" @click="showFilterDialog">
|
||
{{searchForm.startTime}} ~ {{searchForm.endTime}}
|
||
</view>
|
||
</view>
|
||
<view class="listBox" :style="{ 'padding-top': (statusBarHeight+52+40+44) + 'px' }">
|
||
<view class="listItem" v-for="(item,index) in list" :key="index" @click="goAdd(item.id)">
|
||
<view class="title">
|
||
{{item.receiveTime}}
|
||
</view>
|
||
<view class="bottom">
|
||
温度:{{item.temperature}}°C
|
||
</view>
|
||
<view class="bottom">
|
||
湿度:{{item.humidity}}%RH
|
||
</view>
|
||
<view class="bottom">
|
||
设备名称:{{item.laboratoryName}}
|
||
</view>
|
||
</view>
|
||
<view class="placeholderBox" v-show="list.length==0">
|
||
<image src="/static/noData.png" class="noDataImg"></image>
|
||
<view class="text">
|
||
暂无数据
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="loadMoreBox" v-if="isLoadMore&&list.length>0">
|
||
<uni-load-more :status="loadStatus" iconType="auto"></uni-load-more>
|
||
</view>
|
||
</view>
|
||
<view class="" v-if="tabIndex==1">
|
||
<view class="searchBox" :style="{ 'padding-top': (statusBarHeight+52+44) + 'px' }">
|
||
<view class="input" @click="showFilterDialog">
|
||
{{analysisStartDate}} ~ {{analysisEndDate}}
|
||
</view>
|
||
</view>
|
||
<view :style="{ 'padding-top': (statusBarHeight+52+44+40) + 'px' }">
|
||
<view class="chartTitle">
|
||
<!-- 温度 (°C) -->
|
||
环境分析报告
|
||
</view>
|
||
</view>
|
||
<u-charts canvas-id="lineChart1" chartType="line" :opts="lineChartData1" ref="lineChart1"
|
||
:legends="false" />
|
||
<view class="chartTitle">
|
||
报警趋势
|
||
</view>
|
||
<u-charts canvas-id="lineChart2" chartType="line" :opts="lineChartData2" ref="lineChart2"
|
||
:legends="false" />
|
||
</view>
|
||
<dialogs ref="dialogs">
|
||
<!-- <template v-slot:title>
|
||
{{isAdd?'添加':'编辑'}}
|
||
</template> -->
|
||
<template v-slot:content>
|
||
<view class="formBox2" :class="tabIndex==1?'analysisForm':''">
|
||
<form @submit="initData">
|
||
<view class="uni-form-item">
|
||
<view class="uni-form-label">
|
||
<text class="star">*</text>开始时间
|
||
</view>
|
||
<view class="uni-form-input">
|
||
<picker class="datePickerBox" mode="date" :value="startDate" @change="bindDateChange">
|
||
<view class="dateInput">{{startDate?startDate:'请选择日期'}}</view>
|
||
</picker>
|
||
<picker class="timePickerBox" mode="time" :value="startTime" @change="bindTimeChange" v-show="tabIndex==0">
|
||
<view class="timeInput">{{startTime?startTime:'请选择时间'}}</view>
|
||
</picker>
|
||
</view>
|
||
</view>
|
||
<view class="uni-form-item">
|
||
<view class="uni-form-label">
|
||
<text class="star">*</text>结束时间
|
||
</view>
|
||
<view class="uni-form-input">
|
||
<picker class="datePickerBox" mode="date" :value="endDate" @change="bindDateChange2">
|
||
<view class="dateInput">{{endDate?endDate:'请选择日期'}}</view>
|
||
</picker>
|
||
<picker class="timePickerBox" mode="time" :value="endTime" @change="bindTimeChange2" v-show="tabIndex==0">
|
||
<view class="timeInput">{{endTime?endTime:'请选择时间'}}</view>
|
||
</picker>
|
||
</view>
|
||
</view>
|
||
<button form-type="submit" type="primary" class="btn submitBtn">搜索</button>
|
||
<view class="closeBtn" @click="closeDialogFn">
|
||
关闭
|
||
</view>
|
||
</form>
|
||
</view>
|
||
</template>
|
||
|
||
</dialogs>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import dialogs from "@/components/dialog/dialog.vue"
|
||
import headers from "@/components/headers/headers.vue"
|
||
import uniLoadMore from "@/components/uni-load-more/uni-load-more.vue"
|
||
import {GetDateStr,timestampToTime} from "@/static/js/util.js"
|
||
import uCharts from '@/components/u-charts/component.vue';
|
||
export default {
|
||
components:{dialogs,headers,uniLoadMore,uCharts},
|
||
data() {
|
||
return {
|
||
searchForm:{
|
||
startTime: "",
|
||
endTime:"",
|
||
devSn: "",
|
||
pageNo: 1,
|
||
pageSize: 10,
|
||
projectSn: ""
|
||
},
|
||
projectDetail:{},
|
||
list:[],
|
||
statusBarHeight:0,
|
||
loadStatus:'more',
|
||
isLoadMore:false,
|
||
startTime: "00:00:00",
|
||
endTime:"23:59:59",
|
||
startDate: "",
|
||
endDate:"",
|
||
tabIndex:0,
|
||
lineChartData1:{
|
||
categories: [],
|
||
series: [{
|
||
name: "温度",
|
||
data: []
|
||
},{
|
||
name: "湿度",
|
||
data: []
|
||
}]
|
||
},
|
||
lineChartData2:{
|
||
categories: [],
|
||
series: [{
|
||
name: "报警次数",
|
||
data: []
|
||
}]
|
||
},
|
||
analysisStartDate:'',
|
||
analysisEndDate:'',
|
||
};
|
||
},
|
||
onLoad(options) {
|
||
this.startDate=GetDateStr(0,'-')
|
||
this.endDate=GetDateStr(0,'-')
|
||
this.searchForm.devSn=options.devSn
|
||
const start = new Date();
|
||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
|
||
this.analysisStartDate=timestampToTime(start.getTime(), "date")
|
||
this.analysisEndDate=this.endDate
|
||
this.statusBarHeight=uni.getStorageSync('systemInfo').statusBarHeight
|
||
this.projectDetail=JSON.parse(uni.getStorageSync('projectDetail'))
|
||
this.searchForm.projectSn=this.projectDetail.projectSn
|
||
this.loadData()
|
||
},
|
||
|
||
onReachBottom() {
|
||
if(this.tabIndex==0){
|
||
if(!this.isLoadMore){ //此处判断,上锁,防止重复请求
|
||
this.isLoadMore=true
|
||
this.searchForm.pageNo+=1
|
||
this.loadData()
|
||
}
|
||
}
|
||
|
||
},
|
||
onPullDownRefresh() {
|
||
if(this.tabIndex==0){
|
||
this.searchForm.pageNo=1
|
||
this.list=[]
|
||
this.loadData()
|
||
}
|
||
|
||
},
|
||
methods:{
|
||
initData(){
|
||
if(this.tabIndex==0){
|
||
this.list=[]
|
||
this.loadData()
|
||
}else{
|
||
this.getAnalysisReportData()
|
||
this.getAlarmData()
|
||
}
|
||
},
|
||
changeMenu(index){
|
||
this.tabIndex=index;
|
||
this.initData()
|
||
},
|
||
bindDateChange: function(e) {
|
||
if(this.tabIndex==0){
|
||
this.startDate = e.target.value
|
||
}else{
|
||
this.analysisStartDate = e.target.value
|
||
}
|
||
|
||
},
|
||
bindTimeChange: function(e) {
|
||
this.startTime = e.target.value+':00'
|
||
},
|
||
bindDateChange2: function(e) {
|
||
if(this.tabIndex==0){
|
||
this.endDate = e.target.value
|
||
}else{
|
||
this.analysisEndDate = e.target.value
|
||
}
|
||
},
|
||
bindTimeChange2: function(e) {
|
||
this.endTime = e.target.value+':59'
|
||
},
|
||
showFilterDialog(){
|
||
if(this.tabIndex==0){
|
||
this.startDate=this.searchForm.startTime.split(' ')[0];
|
||
this.endDate=this.searchForm.endTime.split(' ')[0];
|
||
}else{
|
||
this.startDate=this.analysisStartDate;
|
||
this.endDate=this.analysisEndDate
|
||
}
|
||
this.$refs.dialogs.showFn()
|
||
},
|
||
closeDialogFn(){
|
||
this.$refs.dialogs.hideFn()
|
||
},
|
||
loadData(){
|
||
var that = this
|
||
this.searchForm.startTime=this.startDate+' '+this.startTime
|
||
this.searchForm.endTime=this.endDate+' '+this.endTime
|
||
this.sendRequest({
|
||
url: 'xmgl/standardCurrentData/list',
|
||
data: this.searchForm,
|
||
method: "POST",
|
||
success(res){
|
||
that.list=that.list.concat(res.result.records)
|
||
if(res.result.records.length<that.searchForm.pageSize){ //判断接口返回数据量小于请求数据量,则表示此为最后一页
|
||
that.isLoadMore=true
|
||
that.loadStatus='nomore'
|
||
}else{
|
||
that.isLoadMore=false
|
||
// that.loadStatus='more'
|
||
}
|
||
that.closeDialogFn()
|
||
uni.stopPullDownRefresh()
|
||
console.log('that.isLoadMore',that.isLoadMore)
|
||
}
|
||
})
|
||
},
|
||
getAnalysisReportData(){
|
||
var that = this
|
||
var json = {
|
||
devSn:this.searchForm.devSn,
|
||
endTime:this.analysisEndDate,
|
||
projectSn:this.projectDetail.projectSn,
|
||
startTime:this.analysisStartDate,
|
||
type:3
|
||
}
|
||
this.sendRequest({
|
||
url: 'xmgl/standardCurrentData/selectStandardAnalysisReport',
|
||
data: json,
|
||
method: "POST",
|
||
success(res){
|
||
var DATA = res.result
|
||
var xdata = [],
|
||
ydata1 = [],
|
||
ydata2 = [];
|
||
DATA.forEach(element => {
|
||
xdata.push(element.dayTitle.substring(5))
|
||
ydata1.push(element.avgTemperature)
|
||
ydata2.push(element.avgHumidity)
|
||
})
|
||
that.lineChartData1.categories = xdata
|
||
// that.lineChartData2.categories = xdata
|
||
|
||
that.lineChartData1.series = [{
|
||
name: "温度",
|
||
data: ydata1
|
||
},{
|
||
name: "湿度",
|
||
data: ydata2
|
||
}]
|
||
// that.lineChartData2.series = [{
|
||
// name: "湿度",
|
||
// data: ydata2
|
||
// }]
|
||
|
||
that.$refs.lineChart1.changeData('lineChart1', that.lineChartData1)
|
||
// that.$refs.lineChart2.changeData('lineChart2', that.lineChartData2)
|
||
|
||
that.closeDialogFn()
|
||
}
|
||
})
|
||
},
|
||
getAlarmData(){
|
||
var that = this
|
||
var json = {
|
||
devSn:this.searchForm.devSn,
|
||
endTime:this.analysisEndDate,
|
||
projectSn:this.projectDetail.projectSn,
|
||
startTime:this.analysisStartDate
|
||
}
|
||
this.sendRequest({
|
||
url: 'xmgl/standardAlarm/selectDevAlarmList',
|
||
data: json,
|
||
method: "POST",
|
||
success(res){
|
||
var DATA = res.result
|
||
var xdata = [],
|
||
ydata1 = [],
|
||
ydata2 = [];
|
||
DATA.forEach(element => {
|
||
xdata.push(element.titleTime.substring(5))
|
||
// ydata1.push(element.avgTemperature)
|
||
ydata2.push(element.num)
|
||
})
|
||
that.lineChartData2.categories = xdata
|
||
|
||
that.lineChartData2.series = [{
|
||
name: "报警次数",
|
||
data: ydata2
|
||
}]
|
||
|
||
that.$refs.lineChart2.changeData('lineChart2', that.lineChartData2)
|
||
|
||
that.closeDialogFn()
|
||
}
|
||
})
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.menuBox {
|
||
display: flex;
|
||
align-items: center;
|
||
height: 36px;
|
||
font-size: 30rpx;
|
||
background-color: white;
|
||
margin-top: -1px;
|
||
position: relative;
|
||
z-index: 99;
|
||
position: fixed;
|
||
left: 0;
|
||
width: 100%;
|
||
border-bottom: 1px solid rgba(194, 194, 194, 0.2);
|
||
|
||
.menuItem {
|
||
flex: 1;
|
||
text-align: center;
|
||
|
||
&.active {
|
||
color: rgba(43, 141, 243, 1);
|
||
}
|
||
}
|
||
}
|
||
.searchBox{
|
||
// background-color: #2b8df3;
|
||
padding: 0 30rpx 10rpx;
|
||
position: fixed;
|
||
left: 0;
|
||
width: calc(100% - 60rpx);
|
||
top: 0;
|
||
z-index: 1;
|
||
.input{
|
||
border-radius: 36rpx;
|
||
height: 70rpx;
|
||
text-align: center;
|
||
background-color: #f5f5f5;
|
||
line-height: 70rpx;
|
||
font-size: 28rpx;
|
||
}
|
||
}
|
||
|
||
.listBox{
|
||
margin: 30rpx;
|
||
}
|
||
.listItem{
|
||
box-shadow: 0px 4px 26rpx 0px rgba(212, 220, 236, 0.53);
|
||
position: relative;
|
||
margin-bottom: 10rpx;
|
||
padding: 30rpx;
|
||
border-radius: 16rpx;
|
||
.title{
|
||
font-size: 30rpx;
|
||
font-weight: bold;
|
||
margin-bottom: 20rpx;
|
||
}
|
||
.bottom{
|
||
// color: rgba(55, 45, 102, 0.5);
|
||
font-size: 28rpx;
|
||
}
|
||
.time{
|
||
margin-right: 24rpx;
|
||
}
|
||
}
|
||
.timePickerBox,.datePickerBox{
|
||
display: inline-block;
|
||
margin-top: 20rpx;
|
||
}
|
||
.dateInput,.timeInput{
|
||
background-color: #F5F5F5;
|
||
border-radius: 30rpx;
|
||
height: 60rpx;
|
||
line-height: 60rpx;
|
||
text-align: center;
|
||
width: 100%;
|
||
font-size: 28rpx;
|
||
}
|
||
.analysisForm{
|
||
.datePickerBox{
|
||
width: 100%;
|
||
margin-right: 0;
|
||
}
|
||
}
|
||
.datePickerBox{
|
||
width: 55%;
|
||
margin-right: 5%;
|
||
}
|
||
.timePickerBox{
|
||
width: 40%;
|
||
}
|
||
.closeBtn{
|
||
font-size: 30rpx;
|
||
color: rgba(42, 43, 91, 0.5);
|
||
padding: 20rpx 0;
|
||
text-align: center;
|
||
}
|
||
.chartTitle {
|
||
font-size: 28rpx;
|
||
font-weight: 500;
|
||
margin: 20rpx 0 30rpx;
|
||
padding-left: 30rpx;
|
||
}
|
||
</style>
|