452 lines
11 KiB
Vue
Raw Normal View History

<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>