jsy-app/pages/fourmonitor/spore.vue
2025-02-17 11:53:36 +08:00

398 lines
11 KiB
Vue
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.

<template>
<custom-nav-bar :left="true" title="孢子"></custom-nav-bar>
<view class="header-section">
<view class="card" style="margin-top: 0; ">
<view class="cards-title">
<view>
<view>
<view>运行模式</view>
</view>
<view style="margin-left: 10px;">
<u-button :text="`${itemProperty?(itemProperty.m == '1'? '自动':'手动'):'--' }`"
:type="`${itemProperty.m == '1'? 'success':'warning'}`"
@click="controlHeadSwitch(item,itemProperty.m,'m')"></u-button>
</view>
</view>
<view class="title-r">
<view class="iconfont icon-lishijilu icon" @click="openH(item)"></view>
</view>
</view>
<view class="content">
<view class="cards-content">
<view class="txt-list" >
<view class="list2">
<view>
<text class="iconfont icon-men icon"></text>
<text>设备门</text>{{itemProperty && itemProperty.ss?(itemProperty.ss==='1'?"打开":"关闭") :"--"}}
</view>
<view>
<text class="iconfont icon-haiba icon"></text>
<text>海拔</text>{{itemProperty &&itemProperty.att?itemProperty.att:"--"}}m
</view>
<view>
<text class="iconfont icon-caiyangdengji icon"></text>
<text>单次采样</text>{{itemProperty && itemProperty.pl?itemProperty.pl:"--"}}
</view>
<view>
<text class="iconfont icon-qiancaiyang icon"></text>
<text>累计采样</text>{{itemProperty && itemProperty.pt?itemProperty.pt:"--"}}
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="content-section">
<view class="grid">
<view>
<text class="text">光源</text>
<u-button type="success" :text="`${itemProperty && itemProperty.ias == '1'? '打开':'关闭'}`" :class="[itemProperty &&itemProperty.ias === '1' ? 'bg-green':'bg-red']"
@click="controlHeadSwitch(item,itemProperty.ias,'ias')" />
</view>
<view>
<text class="text">采样口</text>
<u-button type="success" :text="`${itemProperty && itemProperty.sls == '1'? '打开':'关闭'}`" :class="[itemProperty && itemProperty.sls === '1' ? 'bg-green':'bg-red']"
@click="controlHeadSwitch(item,itemProperty.sls,'sls')" />
</view>
<view>
<text class="text">吸气口</text>
<u-button type="success" :text="`${itemProperty && itemProperty.ais == '1'? '打开':'关闭'}`" :class="[itemProperty && itemProperty.ais === '1' ? 'bg-green':'bg-red']"
@click="controlHeadSwitch(item,itemProperty.ais,'ais')" />
</view>
<view>
<text class="text">载波电机</text>
<u-button type="success" :text="`${itemProperty && itemProperty.zbs == '1'? '运行':'停止'}`" :class="[itemProperty && itemProperty.zbs === '1' ? 'bg-green':'bg-red']"
@click="controlHeadSwitch(item,itemProperty.zbs,'zbs')" />
</view>
<view>
<text class="text">排气口</text>
<u-button type="success" :text="`${itemProperty && itemProperty.bwa == '1'? '打开':'关闭'}`" :class="[itemProperty && itemProperty.bwa === '1' ? 'bg-green':'bg-red']"
@click="controlHeadSwitch(item,itemProperty.bwa,'bwa')"/>
</view>
<view>
<text class="text">摄像头</text>
<u-button type="success" text="拍照" @click="controlHeadSwitch(item,0,'pg')"/>
</view>
</view>
</view>
<view class="rowheadstyle" vv-if="itemProperty && itemProperty.aat!=null">
<u-button text="分析" size="large" type="primary" @click="analysis(item,itemProperty.aat)"></u-button>
</view>
<u-popup :show="showDeviceLog" mode="center">
<view class="dialog-container">
<view class="dialog-title">
<text>孢子历史记录</text>
<u-icon name="reload" size="20" class="reload-btn" @click="reload"></u-icon>
<u-icon name="close" size="20" class="close-btn" @click="closeLog"></u-icon>
</view>
<view class="dialog-body">
<view class="logs-data-box" style="width:90vw">
<view class="logs-container">
<view class="logs-item" v-for="itemHistory in listData" :key="item.id">
<view class="row">
<view class="full-line">
<text class="label">设备编号:</text>
<text class="text">{{ itemHistory.deviceCode }}</text>
</view>
</view>
<view class="row">
<view class="full-line">
<text class="label">记录时间:</text>
<text class="text">{{ itemHistory.createTime }}</text>
</view>
</view>
<view class="charge">
<view class="flex item charge-item">
<view>{{ itemHistory.historyContent || "-" }}</view>
</view>
</view>
</view>
</view>
<uni-pagination :pageCount="query.pageSize" :curPageNum="query.pageNum" :totalNum="total"
@pageClick="pageTurning"></uni-pagination>
</view>
</view>
</view>
</u-popup>
<u-popup :show="showAnalysis" mode="center">
<view class="dialog-container">
<view class="dialog-title">
<text>孢子分析</text>
<u-icon name="close" size="20" class="close-btn" @click="closeLogAnalysis"></u-icon>
</view>
<view class="dialog-body" v-if="itemProperty && itemProperty.aat!=null">
<uni-row class="rowstyle">
<uni-col :span="24">
<uni-row class="col1"><uni-col :span="24">
<view class="text2">分析图片</view>
</uni-col></uni-row>
<uni-row class="col2"><uni-col :span="24" style="text-align: center;"><u-image
:src="itemProperty.img" :lazy-load="true" width="240px" height="240px"
shape="square"></u-image></uni-col></uni-row>
</uni-col>
</uni-row>
<uni-row class="rowstyle">
<uni-col :span="24">
<uni-row class="col1"><uni-col :span="24">
<view class="text2">分析时间</view>
</uni-col></uni-row>
<uni-row class="col2"><uni-col :span="24" style="text-align: center;">
<view class="text2">{{itemProperty.aat===null?"--":itemProperty.aat}}</view>
</uni-col></uni-row>
</uni-col>
</uni-row>
</view>
</view>
</u-popup>
</template>
<script>
import plugin from "@/plugins"
import {
controlHeadSwitch
} from "@/api/controlHeadInterface"
import {
getOutDeviceHistoryList
} from "@/api/system/device_agricultural"
export default {
data() {
return {
item: {},
itemProperty: {},
showDeviceLog: false,
passParams: {},
showAnalysis: false,
total: 0,
listData: [],
query: {
pageNum: 1,
pageSize: 10,
deviceCode: null
},
mqttConnected: false, // mqtt链接状态
topics: []
}
},
onLoad(option) {
if (option.item != null) {
this.item = JSON.parse(decodeURIComponent(option.item));
if (this.item && this.item.deviceData) {
this.itemProperty = this.item.deviceData;
this.query.deviceCode = this.item.deviceCode;
let topic = "jsy/iot/push/outProduct/" + this.item.deviceCode;
this.topics.push(topic);
this.mqttSubscribes(this.topics);
getApp().on("mqtt", "mqtt_head", function(e) {
if (e.type == "state") {
this.mqttConnected = e.connected;
} else if (e.type == "msg") {
this.itemProperty = e.data;
}
});
}
}
},
onUnload() {
getApp().off("mqtt", "mqtt_head")
},
methods: {
mqttSubscribes(topics) {
getApp().mqttSubscribes(topics);
},
mqttUnSubscribes(topics) {
getApp().mqttUnsubscribes(topics);
},
queryList(str) {
if (str == "into") {
this.query.pageNum = 1;
}
if (str == "pre") {
this.query.pageNum = this.query.pageNum - 1
}
if (str == "next") {
this.query.pageNum = this.query.query.pageNum + 1
}
getOutDeviceHistoryList(this.query).then(res => {
this.listData = res.rows;
this.total = res.total;
})
},
//打开历史界面
openH(item) {
this.showDeviceLog = true
this.queryList("into");
},
reload() {
uni.$emit("reloadlogs")
},
//关闭历史记录
closeLog() {
this.showDeviceLog = false;
},
//控制按钮
controlHeadSwitch(item, e, k) {
if (this.itemProperty.s === "offline") {
plugin.modal.msgError("设备离线,不能操作!");
return;
}
if (k === "pg" && this.itemProperty.m === "1") {
plugin.modal.msgError("自动模式不能拍照!");
return;
}
if (k === "pg" && this.itemProperty.ias === "0") {
plugin.modal.msgError("请先打开光源!");
return;
}
let par = {
controlKey: k,
deviceTypeId: 8,
operationType: 11,
deviceCode: item.deviceCode,
controlValve: e == 1 ? 0 : 1
};
controlHeadSwitch(par).then(res => {})
},
//打开分析弹出页
analysis(item, e) {
if (!e) {
plugin.modal.msgError("没有可以分析的数据!");
return;
}
this.showAnalysis = true;
},
//关闭分析弹出页
closeLogAnalysis() {
this.showAnalysis = false;
},
pageTurning(flag) {
if (flag === 0) {
if (this.query.pageNum - 1 === 0) return
this.queryList("pre")
}
if (flag === 1) {
if (this.query.pageNum + 1 > Math.ceil(this.total / this.query.pageSize)) return
this.queryList("next")
}
}
}
}
</script>
<style lang="scss">
.header-section {
width: 100%;
padding: 10px 0px 30px 0px;
background-color: #39ac4f;
border-radius: 0 0 30px 30px;
}
.content-section {
position: relative;
top: -35px;
}
.cards-title {
border: none;
}
.txt-list .left uni-text:first-child {
width: 60px;
}
.txt-list .left>view {
color: #000;
line-height: 2;
}
.rowheadstyle {width: 80%; margin: 0 auto;
height: 40px;
}
// 弹窗
.dialog-container {
width: 90vw;
height: 90vh;
overflow: hidden;
.dialog-title {
width: 100%;
height: 34px;
font-size: 16px;
line-height: 34px;
text-align: center;
font-weight: bold;
border-bottom: 1px solid #999;
position: relative;
.reload-btn {
position: absolute;
top: 50%;
right: 56px;
transform: translateY(-50%);
}
.close-btn {
position: absolute;
top: 50%;
right: 10px;
transform: translateY(-50%);
}
}
.dialog-body {
height: calc(100% - 35px);
overflow: hidden;
position: relative;
background-color: #f7f7f7;
//扫码的弹窗
.scancode-device-info {
height: 100%;
padding: 0 20px;
overflow-x: hidden;
overflow-y: auto;
display: flex;
flex-direction: column;
justify-content: space-evenly;
&>view {
width: 100%;
line-height: 40px;
font-size: 18px;
color: gray;
.label {
display: inline-block;
width: 30%;
color: black;
margin-right: 2px;
white-space: nowrap;
}
}
}
}
.control-panel {
height: 100px;
display: flex;
align-items: center;
flex-wrap: nowrap;
justify-content: space-evenly;
&>view {
padding: 6px 10px;
color: #007acc;
font-size: 14px;
border: 1px solid #ccc;
border-radius: 4px;
}
}
}
</style>