factory_web/src/views/bigScreen/enpComponents/pollutant.vue

518 lines
24 KiB
Vue
Raw 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>
<el-container v-if="!pollutantDetail">
<el-main class="nopadding">
<el-container>
<el-header class="panel_title">
<div class="left-panel">污染源清单</div>
<div class="right-panel">
<el-button type="primary" @click="backtoMap">返回地图</el-button>
</div>
</el-header>
<el-main class="nopadding">
<el-container>
<el-header class="searchWrap">
<div class="left-panel">
<div style="font-size: 1.8vh;">
全厂污染源:<span class="totalNumber">{{ count }}</span>
</div>
</div>
<div class="right-panel">
<el-select v-model="query.cate" placeholder="污染源分类" @change="handleQuery" clearable>
<el-option v-for="e in drainTypeEnum.values" :key="e.key" :value="e.key"
:label="e.text"></el-option>
</el-select>
</div>
</el-header>
<el-main class="nopadding">
<scTable ref="table" :data="tableData" style="width: 100%;" size="large" :apiObj="apiObj"
row-key="id" :params="params" :query="query" @row-click="rowClick"
@dataChange="updateCount">
<!-- <el-table-column type="index" width="50" /> -->
<el-table-column prop="number" label="编号" width="80" />
<el-table-column prop="name" label="名称" width="120" />
<el-table-column prop="type" label="类型" width="100">
<template #default="scope">{{ drainTypeEnum[scope.row.cate]?.text }}
</template>
</el-table-column>
<el-table-column prop="mgroup_name" label="所属工段" width="100" />
<el-table-column label="物料名称" min-width="100" show-overflow-tooltip />
<el-table-column label="物料分类" min-width="80" show-overflow-tooltip />
<el-table-column label="主要参数" min-width="100" show-overflow-tooltip />
<el-table-column label="封闭方式" min-width="100" show-overflow-tooltip />
<el-table-column label="输送/堆取方式" min-width="120" show-overflow-tooltip />
<el-table-column label="治理措施" min-width="100" show-overflow-tooltip />
<el-table-column label="生产设备" min-width="100" show-overflow-tooltip>
<template #default="scope">
<div v-for="item in scope.row.equip_data" v-bind:key="item.id">
<div v-if="item.type == 10">
<div>
<el-tag :type="runningStateEnum[item.running_state]?.type">{{
runningStateEnum[item.running_state]?.text }}</el-tag>|
{{ item.name }}
</div>
</div>
</div>
</template>
</el-table-column>
<el-table-column label="治理设备" min-width="100" show-overflow-tooltip>
<template #default="scope">
<div v-for="item in scope.row.equip_data" v-bind:key="item.id">
<div v-if="item.type == 30">
<div>
<el-tag :type="runningStateEnum[item.running_state]?.type">{{
runningStateEnum[item.running_state]?.text }}</el-tag>|
{{ item.name }}
</div>
</div>
</div>
</template>
</el-table-column>
<el-table-column label="监测设备" min-width="100" show-overflow-tooltip>
<template #default="scope">
<div v-for="item in scope.row.equip_data" v-bind:key="item.id">
<div v-if="item.type == 40">
<div>
<el-tag :type="runningStateEnum[item.running_state]?.type">{{
runningStateEnum[item.running_state]?.text }}</el-tag>|
{{ item.name }}
</div>
</div>
</div>
</template>
</el-table-column>
<el-table-column label="监控设备" min-width="100" show-overflow-tooltip>
<template #default="scope">
<div v-for="item in scope.row.equip_data" v-bind:key="item.id">
<div v-if="item.type == 50">
<div>
<el-tag :type="runningStateEnum[item.running_state]?.type">{{
runningStateEnum[item.running_state]?.text }}</el-tag>|
{{ item.name }}
</div>
</div>
</div>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
</el-main>
</el-container>
</el-main>
</el-container>
<el-container v-else>
<el-header class="panel_title">
<div class="left-panel">污染源及关联设备信息
</div>
<div class="right-panel">
<el-button type="primary" @click="handleClick">返回</el-button>
</div>
</el-header>
<el-main>
<el-container>
<el-aside style="width: 35%">
<div class="aside_one">
<div class="pageTitle">污染源及关联设备静态信息</div>
<div class="linesWrap">
<div class="typeLine">
<div class="greenBlock">
<div class="greenBlockInner"></div>
</div>
<span>污染源</span>
</div>
<div class="infoLine">
<span class="circles"></span>
<span>{{ detailItem.name }}</span>
</div>
<el-row class="infoLine">
<el-col :span="12">
<div><span class="infotitle">物料名称</span>{{ detailItem.height }} </div>
</el-col>
<el-col :span="12">
<div><span class="infotitle">治理措施: </span>{{ detailItem.measure }}</div>
</el-col>
</el-row>
<div class="typeLine">
<div class="greenBlock">
<div class="greenBlockInner"></div>
</div>
<span>生产设备</span>
</div>
<div class="infoLine">
<span class="circles"></span>
<span>{{ eqs.name }}</span>
</div>
<el-row class="infoLine">
<el-col :span="12">
<div><span class="infotitle">设备类型:</span>主要生产设备</div>
</el-col>
<el-col :span="12">
<div>
<span class="infotitle">电机功率:</span>
<span v-if="eqs.power_kw">{{ eqs.power_kw }}kw</span>
</div>
</el-col>
<el-col :span="12">
<div>
<span class="infotitle">生产能力:</span>
<span v-if="eqs.parameter_json && eqs.parameter_json.生产能力">{{
eqs.parameter_json.生产能力
}}</span>
</div>
</el-col>
</el-row>
<div class="typeLine">
<div class="greenBlock">
<div class="greenBlockInner"></div>
</div>
<span>治理设备</span>
</div>
<div class="infoLine">
<span class="circles"></span>
<span>{{ eqz.name }}</span>
</div>
<el-row class="infoLine">
<el-col :span="12">
<div><span class="infotitle">风量:</span>
<span v-if="eqz.parameter_json && eqz.parameter_json.风量">{{
eqz.parameter_json.风量
}}m³/h</span>
</div>
</el-col>
<el-col :span="12">
<div><span class="infotitle">过滤面积:</span>
<span v-if="eqz.parameter_json && eqz.parameter_json.过滤面积">{{
eqz.parameter_json.过滤面积
}} m²</span>
</div>
</el-col>
<el-col :span="12">
<div><span class="infotitle">布袋材质:</span>
<span v-if="eqz.parameter_json && eqz.parameter_json.布袋材质">{{
eqz.parameter_json.布袋材质
}} </span>
</div>
</el-col>
<el-col :span="12">
<div><span class="infotitle">过滤风速:</span>
<span v-if="eqz.parameter_json && eqz.parameter_json.过滤风速">{{
eqz.parameter_json.过滤风速
}} </span>m/min
</div>
</el-col>
<el-col :span="12">
<div><span class="infotitle">额定功率:</span>
<span v-if="eqz.parameter_json && eqz.parameter_json.额定功率">{{
eqz.parameter_json.额定功率
}} </span> Kw
</div>
</el-col>
</el-row>
<div class="typeLine">
<div class="greenBlock">
<div class="greenBlockInner"></div>
</div>
<span>监测设备</span>
</div>
<div class="infoLine">
<span class="circles"></span>
<span>{{ eqc.name }}</span>
</div>
<el-row class="infoLine">
<el-col :span="12">
<div><span class="infotitle">TSP</span> 0.000 m³/h</div>
</el-col>
</el-row>
<div class="typeLine">
<div class="greenBlock">
<div class="greenBlockInner"></div>
</div>
<span>监控设备</span>
</div>
<div class="infoLine">
<span class="circles"></span>
<span>{{ eqj.name }}</span>
</div>
<el-row class="infoLine">
<el-col :span="12">
<div id="divPlugin" class="plugin"></div>
</el-col>
</el-row>
</div>
</div>
</el-aside>
<el-main>
<div class="aside_side">
<div class="pageTitle">污染源及关联设备动态信息</div>
<div id="dataChart2" style="width: 100%; height:200px;margin-top:1vh; padding: 4px"></div>
<div id="dataChart" style="width: 100%; height:200px;margin-top:1vh; padding: 4px"></div>
<div id="dataChart3" style="width: 100%; height:200px;margin-top:1vh; padding: 4px"></div>
<!-- <div id="dataChart4" style="width: 100%; height:200px;margin-top:1vh"></div> -->
</div>
</el-main>
</el-container>
</el-main>
</el-container>
</template>
<script>
import * as echarts from "echarts";
import { drainTypeEnum } from "@/utils/enum.js";
import { runningStateEnum } from "@/utils/enum.js";
export default {
data() {
return {
runningStateEnum,
drainTypeEnum,
count: 0,
eqs: {},
eqc: {},
eqz: {},
eqj: {},
pollutantDetail: false,
query: {},
apiObj: this.$API.enp.drain.list,
params: { type: 20, equip_data: 'base' },
detailItem: {},
detailForm: {
day: 18,
year: 2024,
month: 1
},
biquery: {
end_time: '2024-02-01',
start_time: '2024-01-29',
time_bucket: "1 minute",
equipment_id: "3491356310052896768",
},
basicOption: {
title: {
text: '设备名称',
left: 0,
top: 'top',
textStyle: {
color: '#fff'
}
},
legend: {
top: '5%',
textStyle: {
color: '#fff'
}
},
tooltip: {
trigger: 'axis'
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
dataZoom: [
{
type: 'inside',
start: 0,
end: 20
},
{
start: 0,
end: 20
}
],
dataset: {
source: []
},
xAxis: { type: 'category' },
yAxis: {},
series: [{ type: 'line' }]
},
}
},
mounted() {
let that = this;
that.init();
},
methods: {
initDom() {
var chart1 = echarts.init(document.getElementById('dataChart'), 'dark');
var chart2 = echarts.init(document.getElementById('dataChart2'), 'dark');
var chart3 = echarts.init(document.getElementById('dataChart3'), 'dark');
echarts.connect([chart1, chart2, chart3]);
},
backtoMap() {
this.$emit('close')
},
updateCount(res, tableData) {
this.count = res.count
},
initTimeNow() {
var now = new Date();
var start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24);
this.biquery['start_time'] = this.$TOOL.dateFormat(start, 'yyyy-MM-dd hh:mm:00')
this.biquery['end_time'] = this.$TOOL.dateFormat(now, 'yyyy-MM-dd hh:mm:00')
},
handleQuery() {
this.$refs.table.queryData(this.query);
},
rowClick(row) {
this.pollutantDetail = true;
this.detailItem = row;
this.$nextTick(() => {
this.getEquipments(row.equipments);
this.initTimeNow();
this.initDom();
})
},
getEquipments(ids) {
let that = this;
let reqs = [];
ids.forEach(id => {
that.$API.em.equipment.item.req(id).then(res => {
if (res.type == 10) { //生产设备
that.eqs = res;
that.getDetailData(1, id);
} else if (res.type == 40) { //监测设备
that.eqc = res;
that.getDetailData(2, id);
} else if (res.type == 30) { //治理设备
that.eqz = res;
that.getDetailData(3, id);
}
else if (res.type == 50) { //监控设备
debugger;
this.login(res);//监控摄像头
that.eqj = res;
}
})
});
},
getDetailData(type, id) {
var that = this;
var bicode = 'enp_edata2'
if (type == 1) {
var myChart = echarts.getInstanceByDom(document.getElementById('dataChart'));
bicode = 'enp_eq_rs'
myChart.showLoading();
} else if (type == 2) {
var myChart2 = echarts.getInstanceByDom(document.getElementById('dataChart2'));
myChart2.showLoading();
} else if (type == 3) {
var myChart3 = echarts.getInstanceByDom(document.getElementById('dataChart3'));
bicode = 'enp_eq_rs'
myChart3.showLoading();
}
// else {
// var chartDom4 = document.getElementById('dataChart4');
// var myChart4 = echarts.init(chartDom4);
// }
let obj = that.biquery;
obj.equipment_id = id;
let params = { query: obj };
that.$API.bi.dataset.exec.req(bicode, params).then(res => {
let newOption = Object.assign({}, this.basicOption);
newOption.dataset.source = res.data.ds0;
newOption.dataZoom.startValue = that.biquery.start_time;
if (type == 1) {
newOption.title.text = that.eqs.name;
myChart.hideLoading()
myChart.setOption(newOption);
} else if (type == 2) {
newOption.series = [
{ type: 'line', encode: { y: 'tsp', seriesName: ["tsp"] } },
// { type: 'line', encode: { y: '温度', seriesName: ["温度"] } },
// { type: 'line', encode: { y: '压力', seriesName: ["压力"] } }
]
newOption.title.text = that.eqc.name;
newOption.yAxis.minInterval = 1;
myChart2.setOption(newOption);
myChart2.hideLoading()
} else if (type == 3) {
newOption.title.text = that.eqz.name;
newOption.yAxis.minInterval = 1;
myChart3.setOption(newOption);
myChart3.hideLoading()
}
// else {
// newOption.title.text = that.eqc.name;
// myChart4.setOption(newOption);
// echarts.connect([myChart3, myChart4])
// }
})
},
handleClick() {
this.pollutantDetail = false;
this.detailItem = {};
},
//监控摄像头
//初始化插件
init() {
WebVideoCtrl.I_InsertOBJECTPlugin("divPlugin");
//初始化
alert(1)
WebVideoCtrl.I_InitPlugin("divPlugin", 200, 200, {
iWndowType: 2, //分裂系数N*N
bWndFull: true, //双击全屏
cbInitPluginCompleted: function () {
alert(1)
WebVideoCtrl.I_InsertOBJECTPlugin("divPlugin").then(() => {
// 检查插件是否最新
WebVideoCtrl.I_CheckPluginVersion().then((bFlag) => {
if (bFlag) {
alert("检测到新的插件版本双击开发包目录里的HCWebSDKPlugin.exe升级");
}
});
}, () => {
alert("插件初始化失败请确认是否已安装插件如果未安装请双击开发包目录里的HCWebSDKPlugin.exe安装");
});
},
});
},
//摄像头登录
login(jkdata){
WebVideoCtrl.I_Login(
jkdata.ip,
1,
jkdata.port,
jkdata.login_name,
jkdata.login_pwd,
{
async: true,
cgi: 1,
success: (xmlDoc) => {
console.log("登录成功", xmlDoc);
//预览
WebVideoCtrl.I_StartRealPlay(szIp + "_" + ipPort, {
success: () => {
console.log("预览成功");
},
});
},
error: (xmlDoc) => {
console.log("登录失败", xmlDoc);
},
}
);
}
}
}
</script>
<style scoped>
.plugin {
width: 200px;
height: 200px;
/* background: #ffffff; */
}
</style>