Merge branch 'temp' of http://123.60.103.97:3000/xuziqiang/SaaS-lib into temp
This commit is contained in:
7
hx-ai-intelligent/src/api/airConditioningSystem.ts
Normal file
7
hx-ai-intelligent/src/api/airConditioningSystem.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import { BASE_URL } from './index';
|
||||
|
||||
export enum airConditioningSystemApi {
|
||||
getVentHostCtrlList = `${BASE_URL}/api/ventHostCtrl/getDeviceState`, // 查询新风主机最新状态
|
||||
getAcBoxCtrlList = `${BASE_URL}/api/acBoxCtrl/getDeviceState`, // 查询空调箱最新状态
|
||||
getTempSysCtrlList = `${BASE_URL}/tempSysCtrl/getFloorHeatingState`, // 查询地暖最新状态
|
||||
}
|
@@ -27,24 +27,6 @@
|
||||
<a-form-item v-if="infoObject.alarmFrequency === 2" name="repetitions" label="重复次数">
|
||||
<ns-input-number v-model:value="infoObject.repetitions" placeholder="请输入重复次数" />
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
v-if="infoObject.alarmFrequency === 2 || infoObject.alarmFrequency === 3"
|
||||
name="intervalDuration"
|
||||
label="间隔时长">
|
||||
<ns-input-number
|
||||
style="width: 100%"
|
||||
v-model:value="infoObject.intervalDuration"
|
||||
placeholder="请输入间隔时长">
|
||||
<template #addonAfter>
|
||||
<a-select
|
||||
v-model:value="infoObject.intervalDurationUnit"
|
||||
placeholder="请选择间隔时长单位"
|
||||
style="width: 80px"
|
||||
allowClear
|
||||
:options="intervalDurationUnitData" />
|
||||
</template>
|
||||
</ns-input-number>
|
||||
</a-form-item>
|
||||
<a-form-item label="优先级" name="priority">
|
||||
<a-select
|
||||
v-model:value="infoObject.priority"
|
||||
@@ -60,7 +42,7 @@
|
||||
placeholder="请选择监测频率"
|
||||
style="width: 100%"
|
||||
allowClear
|
||||
:options="MonitorFrequencyEnumm" />
|
||||
:options="MonitorFrequencyEnum" />
|
||||
</a-form-item>
|
||||
<a-form-item label="启用规则">
|
||||
<a-switch
|
||||
@@ -121,7 +103,7 @@
|
||||
const AlarmFrequencyEnum = ref([]);
|
||||
const PriorityEnum = ref([]);
|
||||
const intervalDurationUnitData = ref([]);
|
||||
const MonitorFrequencyEnumm = ref([]);
|
||||
const MonitorFrequencyEnum = ref([]);
|
||||
const rules = {
|
||||
alarmTitle: [
|
||||
{
|
||||
@@ -138,23 +120,6 @@
|
||||
},
|
||||
],
|
||||
alarmFrequency: [{ required: true, message: '请选择告警频率', trigger: 'change' }],
|
||||
intervalDuration: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入正确的间隔时长',
|
||||
trigger: 'change',
|
||||
validator: (rules: any, intervalDuration: any, cbfn: any) => {
|
||||
if (intervalDuration && intervalDuration > 0) {
|
||||
cbfn();
|
||||
} else {
|
||||
cbfn('请输入正确的间隔时长');
|
||||
}
|
||||
if (!infoObject.value.intervalDurationUnit) {
|
||||
cbfn('请选择间隔时长单位');
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
repetitions: [
|
||||
{
|
||||
required: true,
|
||||
@@ -178,13 +143,13 @@
|
||||
let enumData = await getAllEnum({
|
||||
params: [
|
||||
'PriorityEnum',
|
||||
'MonitorFrequencyEnumm',
|
||||
'MonitorFrequencyEnum',
|
||||
'AlarmFrequencyEnum',
|
||||
'IntervalDurationUnitEnum',
|
||||
],
|
||||
});
|
||||
PriorityEnum.value = enumData.data.PriorityEnum;
|
||||
MonitorFrequencyEnumm.value = enumData.data.MonitorFrequencyEnumm;
|
||||
MonitorFrequencyEnum.value = enumData.data.MonitorFrequencyEnum;
|
||||
AlarmFrequencyEnum.value = enumData.data.AlarmFrequencyEnum;
|
||||
intervalDurationUnitData.value = enumData.data.IntervalDurationUnitEnum;
|
||||
};
|
||||
@@ -234,7 +199,6 @@
|
||||
data.createWorkOrder = Number(data.createWorkOrder);
|
||||
if (data.alarmFrequency === 1) {
|
||||
data.repetitions = null;
|
||||
data.intervalDuration = null;
|
||||
data.intervalDurationUnit = null;
|
||||
}
|
||||
//调用接口
|
||||
|
@@ -41,11 +41,6 @@ const tableKeyMap = [
|
||||
dataIndex: 'repetitions',
|
||||
width: 120,
|
||||
},
|
||||
{
|
||||
title: '频率间隔',
|
||||
dataIndex: 'interval',
|
||||
width: 120,
|
||||
},
|
||||
{
|
||||
title: '监测时长',
|
||||
dataIndex: 'monitorFrequency',
|
||||
@@ -139,7 +134,6 @@ export const energyAlarmConfigs = (
|
||||
obj.createWorkOrder = obj.createWorkOrder + '';
|
||||
if (obj.alarmFrequency === 1) {
|
||||
obj.repetitions = null;
|
||||
obj.intervalDuration = null;
|
||||
obj.intervalDurationUnit = null;
|
||||
}
|
||||
if (obj.alarmFrequency === 3) {
|
||||
|
@@ -53,10 +53,10 @@
|
||||
<div class="box-bottom-item-line-value">
|
||||
<a-switch
|
||||
:disabled="true"
|
||||
:checked="selectConditioning.enableRules === 1 ? true : false"
|
||||
:checked="selectConditioning.state === 1 ? true : false"
|
||||
:class="{
|
||||
'blue-background': selectConditioning.enableRules === 1 ? true : false,
|
||||
'grey-background': selectConditioning.enableRules === 1 ? false : true,
|
||||
'blue-background': selectConditioning.state === 1 ? true : false,
|
||||
'grey-background': selectConditioning.state === 1 ? false : true,
|
||||
}" />
|
||||
</div>
|
||||
</div>
|
||||
@@ -64,7 +64,7 @@
|
||||
<div style="width: 100%; height: 40px; line-height: 40px">温度 </div>
|
||||
<div style="width: 100%; height: 60px">
|
||||
<a-slider
|
||||
v-model:value="selectConditioning.number"
|
||||
v-model:value="selectConditioning.temp"
|
||||
:marks="marks"
|
||||
:min="0"
|
||||
:max="100"
|
||||
@@ -82,7 +82,7 @@
|
||||
<div style="width: 100%; height: 40px; line-height: 40px"> 风量 </div>
|
||||
<div style="width: 100%; height: 60px">
|
||||
<a-slider
|
||||
v-model:value="selectConditioning.number"
|
||||
v-model:value="selectConditioning.airVol"
|
||||
:marks="marks"
|
||||
:min="0"
|
||||
:max="100"
|
||||
@@ -130,6 +130,7 @@
|
||||
100: 100,
|
||||
});
|
||||
const toggle = (data: any, selectData: any) => {
|
||||
console.log(data, selectData);
|
||||
dataSource.value = data;
|
||||
selectConditioning.value = selectData;
|
||||
};
|
||||
|
@@ -16,19 +16,19 @@
|
||||
<div class="box-bottom-item-line">
|
||||
温度
|
||||
<div class="box-bottom-item-line-value">
|
||||
<span style="color: #00ffd2">{{ item.number }}℃</span>
|
||||
<span style="color: #00ffd2">{{ item.temp }}{{ item.tempUnit }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-bottom-item-line">
|
||||
设置
|
||||
<div class="box-bottom-item-line-value">
|
||||
<span style="color: #00ffd2">{{ item.setUpNumber }}℃</span>
|
||||
<span style="color: #00ffd2">{{ item.temp }}{{ item.tempUnit }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-bottom-item-line">
|
||||
运行时间
|
||||
<div class="box-bottom-item-line-value">
|
||||
<span style="color: #00ffd2">0.08~0.4Mpa</span>
|
||||
<span style="color: #00ffd2">{{ item.runTime }}{{ item.runTimeUnit }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -19,47 +19,76 @@
|
||||
<a-tag
|
||||
style="background-color: rgba(0, 0, 0, 0.5); width: 50px; text-align: center"
|
||||
:style="{
|
||||
border: '1px solid' + ['#39d7bb', '#f3614d', '#ffa403'][0],
|
||||
color: ['#39d7bb', '#f3614d', '#ffa403'][0],
|
||||
border: {
|
||||
'0': '1px solid rgba(0, 255, 210, 1)',
|
||||
'1': '1px solid rgba(255, 118, 54, 1)',
|
||||
'2': '1px solid rgba(255, 188, 70, 1)',
|
||||
'3': '1px solid rgba(243, 97, 99, 1)',
|
||||
}[item.runStatus.value],
|
||||
color: {
|
||||
'0': 'rgba(0, 255, 210, 1)',
|
||||
'1': 'rgba(255, 118, 54, 1)',
|
||||
'2': 'rgba(255, 188, 70, 1)',
|
||||
'3': 'rgba(243, 97, 99, 1)',
|
||||
}[item.runStatus.value],
|
||||
}"
|
||||
>开启</a-tag
|
||||
>{{ item.runStatus.label }}</a-tag
|
||||
>
|
||||
<!-- <a-tag
|
||||
v-if="item?.runStatus.value === '0'"
|
||||
style="background-color: rgba(0, 0, 0, 0.5); width: 50px; text-align: center"
|
||||
:style="{
|
||||
border:
|
||||
'1px solid' +
|
||||
{
|
||||
'0': 'rgba(191, 205, 226, 1)',
|
||||
'1': 'rgba(0, 255, 210, 1)',
|
||||
}[item.switchStatus.value],
|
||||
color: {
|
||||
'0': 'rgba(191, 205, 226, 1)',
|
||||
'1': 'rgba(0, 255, 210, 1)',
|
||||
}[item.switchStatus.value],
|
||||
}">
|
||||
{{ { '0': '关闭', '1': '开始' }[item.switchStatus.value] }}</a-tag
|
||||
> -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-bottom-item-line">
|
||||
电机转速
|
||||
<div class="box-bottom-item-line-value">
|
||||
<span style="color: #f59a23">1210转/分钟</span>
|
||||
<span style="color: #f59a23">{{ item.motorSp }}{{ item.motorSpUnit }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-bottom-item-line">
|
||||
换热器热度
|
||||
<div class="box-bottom-item-line-value">
|
||||
<span style="color: #00ffd2">8℃</span>
|
||||
<span style="color: #00ffd2"
|
||||
>{{ item.converterTemp }}{{ item.converterTempUnit }}</span
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-bottom-item-line">
|
||||
风量
|
||||
<div class="box-bottom-item-line-value">
|
||||
<span style="color: #00ffd2">12345m3/h</span>
|
||||
<span style="color: #00ffd2">{{ item.airVol }}{{ item.airVolUnit }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-bottom-item-line">
|
||||
风速
|
||||
<div class="box-bottom-item-line-value">
|
||||
<span style="color: #00ffd2">22m/s</span>
|
||||
<span style="color: #00ffd2">{{ item.airSp }}{{ item.airSpUnit }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-bottom-item-line">
|
||||
PM2.5
|
||||
<div class="box-bottom-item-line-value">
|
||||
<span style="color: #00ffd2">30</span>
|
||||
<span style="color: #00ffd2">{{ item.pm2_5 }}{{ item.pm2_5Unit }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="box-bottom-item-line">
|
||||
二氧化碳
|
||||
<div class="box-bottom-item-line-value">
|
||||
<span style="color: #00ffd2">123CO2e</span>
|
||||
<span style="color: #00ffd2">{{ item.co_CO2 }}{{ item.co_CO2Unit }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@@ -0,0 +1,37 @@
|
||||
//传感器位置
|
||||
export const devicePosition = [
|
||||
{ left: '30%', bottom: '54%' },
|
||||
{ left: '38%', bottom: '33%' },
|
||||
{ left: '50%', bottom: '41%' },
|
||||
{ left: '42%', bottom: '59%' },
|
||||
{ left: '68%', bottom: '53%' },
|
||||
{ left: '55%', bottom: '65.5%' },
|
||||
{ left: '79%', bottom: '58%' },
|
||||
{ left: '66%', bottom: '70%' },
|
||||
];
|
||||
// 新风主机
|
||||
export const newTrendPosition = [
|
||||
{ left: '46%', bottom: '54%' },
|
||||
{ left: '48%', bottom: '33%' },
|
||||
{ left: '64.5%', bottom: '64%' },
|
||||
{ left: '66%', bottom: '46%' },
|
||||
];
|
||||
//空调箱
|
||||
export const airConditioningPosition = [
|
||||
{ styleText: { left: '16%', bottom: '33%' }, lineType: 1 },
|
||||
{ styleText: { left: '31%', bottom: '38%' }, lineType: 1 },
|
||||
{ styleText: { left: '41%', bottom: '55.5%' }, lineType: 1 },
|
||||
{ styleText: { left: '60%', bottom: '63%' }, lineType: 1 },
|
||||
{ styleText: { left: '76%', bottom: '63%' }, lineType: 1 },
|
||||
{ styleText: { left: '71%', bottom: '48%' }, lineType: '' },
|
||||
{ styleText: { left: '46.5%', bottom: '32%' }, lineType: '' },
|
||||
];
|
||||
//地暖
|
||||
export const floorHeatingPosition = [
|
||||
{ styleText: { left: '13%', bottom: '44%' }, lineType: '' },
|
||||
{ styleText: { left: '22%', bottom: '48%' }, lineType: 1 },
|
||||
{ styleText: { left: '34%', bottom: '53%' }, lineType: 1 },
|
||||
{ styleText: { left: '49%', bottom: '59%' }, lineType: 1 },
|
||||
{ styleText: { left: '60.5%', bottom: '65.5%' }, lineType: 1 },
|
||||
{ styleText: { left: '72%', bottom: '72%' }, lineType: 1 },
|
||||
];
|
@@ -19,7 +19,7 @@
|
||||
<div class="map-box">
|
||||
<!-- 温度 -->
|
||||
<div v-if="selectIndex === 0">
|
||||
<template v-for="(item, index) in sensor" :key="index">
|
||||
<template v-for="(item, index) in sensorData" :key="index">
|
||||
<div
|
||||
style="position: absolute"
|
||||
:style="{ left: item.styleText.left, bottom: item.styleText.bottom }">
|
||||
@@ -43,21 +43,22 @@
|
||||
<div
|
||||
style="position: absolute"
|
||||
:style="{
|
||||
left: 'calc(' + item.styleText.left + ' - 12.9%)',
|
||||
left: 'calc(' + item.styleText.left + ' - 14%)',
|
||||
bottom: 'calc(' + item.styleText.bottom + ' + 8%)',
|
||||
'z-index': 2,
|
||||
}">
|
||||
<doubleSingleModel :dataSource="item" />
|
||||
</div>
|
||||
<img
|
||||
style="width: 50px; height: 75px; position: absolute; z-index: 1"
|
||||
style="width: 50px; height: 75px; position: absolute"
|
||||
:style="{
|
||||
left: 'calc(' + item.styleText.left + ' - 1.5%)',
|
||||
left: 'calc(' + item.styleText.left + ' - 2%)',
|
||||
bottom: 'calc(' + item.styleText.bottom + ' + 4%)',
|
||||
transform: 'rotateY(180deg)',
|
||||
}"
|
||||
src="../image/liftState/lift/line.png" />
|
||||
<img
|
||||
style="width: 42px; height: 42px; position: absolute"
|
||||
style="width: 42px; height: 42px; position: absolute; z-index: 2"
|
||||
:style="{ left: item.styleText.left, bottom: item.styleText.bottom }"
|
||||
src="../image/airConditioningSystem/fan.png" />
|
||||
</template>
|
||||
@@ -78,25 +79,25 @@
|
||||
<div v-if="selectIndex === 3">
|
||||
<template v-for="(item, index) in conditioningData" :key="index">
|
||||
<div
|
||||
style="position: absolute"
|
||||
style="position: absolute; z-index: 2"
|
||||
:style="{
|
||||
left:
|
||||
'calc(' + item.styleText.left + (item.lineType === 1 ? ' - 12.9%)' : ' - 13.3%)'),
|
||||
left: 'calc(' + item.styleText.left + (item.lineType === 1 ? ' - 12.8%)' : ' - 13%)'),
|
||||
bottom:
|
||||
'calc(' + item.styleText.bottom + (item.lineType === 1 ? ' + 8%)' : ' - 14%)'),
|
||||
'calc(' + item.styleText.bottom + (item.lineType === 1 ? ' + 7%)' : ' - 14%)'),
|
||||
}">
|
||||
<doubleSingleModel :dataSource="item" />
|
||||
</div>
|
||||
<img
|
||||
style="width: 50px; height: 75px; position: absolute; z-index: 1"
|
||||
style="width: 50px; height: 75px; position: absolute"
|
||||
:style="{
|
||||
left: 'calc(' + item.styleText.left + (item.lineType === 1 ? ' - 1.5%)' : ' - 2%)'),
|
||||
bottom: 'calc(' + item.styleText.bottom + (item.lineType === 1 ? ' + 4%)' : ' - 9%)'),
|
||||
left: 'calc(' + item.styleText.left + (item.lineType === 1 ? ' - 1.5%)' : ' - 1.8%)'),
|
||||
bottom:
|
||||
'calc(' + item.styleText.bottom + (item.lineType === 1 ? ' + 4.5%)' : ' - 9%)'),
|
||||
transform: item.lineType === 1 ? 'rotateY(180deg)' : 'rotate(180deg)',
|
||||
}"
|
||||
src="../image/liftState/lift/line.png" />
|
||||
<img
|
||||
style="width: 42px; height: 42px; position: absolute"
|
||||
style="width: 42px; height: 42px; position: absolute; z-index: 2"
|
||||
:style="{ left: item.styleText.left, bottom: item.styleText.bottom }"
|
||||
src="../image/airConditioningSystem/conditioningIcon.png" />
|
||||
</template>
|
||||
@@ -115,19 +116,19 @@
|
||||
ref="conditioningModels"
|
||||
@selectConditioningData="selectConditioningData" />
|
||||
</a-drawer>
|
||||
<!-- 空调箱 顶部详情 -->
|
||||
<!-- 空调箱 顶部详情 现阶段没有数据 先隐藏掉 -->
|
||||
<transition name="zep">
|
||||
<div
|
||||
v-if="selectIndex === 3 && selectConditioning && selectConditioning?.title"
|
||||
v-if="selectIndex === 3 && selectConditioning && selectConditioning?.title && false"
|
||||
class="newTrend-box">
|
||||
<newTreedBox :selectConditioning="selectConditioning" />
|
||||
<conditioningBox :selectConditioning="selectConditioning" />
|
||||
</div>
|
||||
</transition>
|
||||
<!-- 地暖 -->
|
||||
<div v-if="selectIndex === 4">
|
||||
<template v-for="(item, index) in floorHeatingData" :key="index">
|
||||
<div
|
||||
style="position: absolute"
|
||||
style="position: absolute; z-index: 1"
|
||||
:style="{
|
||||
left:
|
||||
'calc(' + item.styleText.left + (item.lineType === 1 ? ' - 12.9%)' : ' - 13.3%)'),
|
||||
@@ -137,7 +138,7 @@
|
||||
<doubleSingleModel :dataSource="item" />
|
||||
</div>
|
||||
<img
|
||||
style="width: 50px; height: 75px; position: absolute; z-index: 1"
|
||||
style="width: 50px; height: 75px; position: absolute"
|
||||
:style="{
|
||||
left: 'calc(' + item.styleText.left + (item.lineType === 1 ? ' - 1.5%)' : ' - 2%)'),
|
||||
bottom: 'calc(' + item.styleText.bottom + (item.lineType === 1 ? ' + 4%)' : ' - 9%)'),
|
||||
@@ -145,7 +146,7 @@
|
||||
}"
|
||||
src="../image/liftState/lift/line.png" />
|
||||
<img
|
||||
style="width: 42px; height: 42px; position: absolute"
|
||||
style="width: 42px; height: 42px; position: absolute; z-index: 1"
|
||||
:style="{ left: item.styleText.left, bottom: item.styleText.bottom }"
|
||||
src="../image/airConditioningSystem/floorHeatingIcon.png" />
|
||||
</template>
|
||||
@@ -174,7 +175,7 @@
|
||||
import airConditioner from '../image/airConditioningSystem/airConditioner.svg';
|
||||
import floorHeating from '../image/airConditioningSystem/floorHeating.svg';
|
||||
import selectImg from '../image/airConditioningSystem/selectImg.png';
|
||||
// 温泉颜色
|
||||
// 温度颜色
|
||||
import sunRed from '../image/airConditioningSystem/sunRed.png';
|
||||
import sunYellow from '../image/airConditioningSystem/sunYellow.png';
|
||||
import sunGreen from '../image/airConditioningSystem/sunGreen.png';
|
||||
@@ -183,9 +184,23 @@
|
||||
import doubleSingleModel from '../components/doubleSingleModel.vue';
|
||||
import newTrendModel from './components/newTrendModel.vue';
|
||||
import conditioningModel from './components/conditioningModel.vue';
|
||||
import newTreedBox from './components/newTreedBox.vue';
|
||||
import conditioningBox from './components/conditioningBox.vue';
|
||||
import floorHeatingModel from './components/floorHeatingModel.vue';
|
||||
import { http } from '/nerv-lib/util/http';
|
||||
import { ventilating } from '/@/api/ventilatingSystem';
|
||||
import { airConditioningSystemApi } from '/@/api/airConditioningSystem';
|
||||
|
||||
// 全局变量
|
||||
import { items } from '/@/store/item';
|
||||
// 定位数据
|
||||
import {
|
||||
devicePosition,
|
||||
newTrendPosition,
|
||||
airConditioningPosition,
|
||||
floorHeatingPosition,
|
||||
} from './devicePosition';
|
||||
// 全局变量
|
||||
const state = items();
|
||||
onMounted(() => {});
|
||||
onUnmounted(() => {});
|
||||
//图例
|
||||
@@ -199,139 +214,9 @@
|
||||
const newTrendModels = ref(null);
|
||||
|
||||
//温度传感器
|
||||
const sensor = ref([
|
||||
{
|
||||
title: 'H区多功能传感器',
|
||||
styleText: { left: '28%', bottom: '44%' },
|
||||
type: '温度',
|
||||
unit: '℃',
|
||||
number: 20,
|
||||
url: sunRed,
|
||||
},
|
||||
{
|
||||
title: 'G区多功能传感器',
|
||||
styleText: { left: '35%', bottom: '23%' },
|
||||
type: '温度',
|
||||
unit: '℃',
|
||||
number: 20,
|
||||
url: sunYellow,
|
||||
},
|
||||
{
|
||||
title: 'F区多功能传感器',
|
||||
styleText: { left: '47%', bottom: '31%' },
|
||||
type: '温度',
|
||||
unit: '℃',
|
||||
number: 20,
|
||||
url: sunRed,
|
||||
},
|
||||
{
|
||||
title: 'E区多功能传感器',
|
||||
styleText: { left: '38.5%', bottom: '49%' },
|
||||
type: '温度',
|
||||
unit: '℃',
|
||||
number: 20,
|
||||
url: sunGreen,
|
||||
},
|
||||
{
|
||||
title: 'D区多功能传感器',
|
||||
styleText: { left: '65%', bottom: '43%' },
|
||||
type: '温度',
|
||||
unit: '℃',
|
||||
number: 20,
|
||||
url: sunRed,
|
||||
},
|
||||
{
|
||||
title: 'C区多功能传感器',
|
||||
styleText: { left: '52%', bottom: '55.5%' },
|
||||
type: '温度',
|
||||
unit: '℃',
|
||||
number: 20,
|
||||
url: sunRed,
|
||||
},
|
||||
{
|
||||
title: 'B区多功能传感器',
|
||||
styleText: { left: '76%', bottom: '48%' },
|
||||
type: '温度',
|
||||
unit: '℃',
|
||||
number: 20,
|
||||
url: sunRed,
|
||||
},
|
||||
{
|
||||
title: 'A区多功能传感器',
|
||||
styleText: { left: '63%', bottom: '60%' },
|
||||
type: '温度',
|
||||
unit: '℃',
|
||||
number: 20,
|
||||
url: sunRed,
|
||||
},
|
||||
]);
|
||||
const sensorData = ref([]);
|
||||
//人流
|
||||
const peopleData = ref([
|
||||
{
|
||||
title: 'H区人流传感器',
|
||||
styleText: { left: '36%', bottom: '21%' },
|
||||
type: '人流',
|
||||
unit: '人',
|
||||
number: 120,
|
||||
url: people,
|
||||
},
|
||||
{
|
||||
title: 'G区人流传感器',
|
||||
styleText: { left: '28.5%', bottom: '43.5%' },
|
||||
type: '人流',
|
||||
unit: '人',
|
||||
number: 120,
|
||||
url: people,
|
||||
},
|
||||
{
|
||||
title: 'E区人流传感器',
|
||||
styleText: { left: '39%', bottom: '48%' },
|
||||
type: '人流',
|
||||
unit: '人',
|
||||
number: 120,
|
||||
url: people,
|
||||
},
|
||||
{
|
||||
title: 'F区人流传感器',
|
||||
styleText: { left: '47.5%', bottom: '29.5%' },
|
||||
type: '人流',
|
||||
unit: '人',
|
||||
number: 120,
|
||||
url: people,
|
||||
},
|
||||
{
|
||||
title: 'D区人流传感器',
|
||||
styleText: { left: '66%', bottom: '42%' },
|
||||
type: '人流',
|
||||
unit: '人',
|
||||
number: 120,
|
||||
url: people,
|
||||
},
|
||||
{
|
||||
title: 'C区人流传感器',
|
||||
styleText: { left: '53%', bottom: '54.5%' },
|
||||
type: '人流',
|
||||
unit: '人',
|
||||
number: 120,
|
||||
url: people,
|
||||
},
|
||||
{
|
||||
title: 'B区人流传感器',
|
||||
styleText: { left: '77%', bottom: '47%' },
|
||||
type: '人流',
|
||||
unit: '人',
|
||||
number: 120,
|
||||
url: people,
|
||||
},
|
||||
{
|
||||
title: 'A区人流传感器',
|
||||
styleText: { left: '64%', bottom: '59%' },
|
||||
type: '人流',
|
||||
unit: '人',
|
||||
number: 120,
|
||||
url: people,
|
||||
},
|
||||
]);
|
||||
const peopleData = ref([]);
|
||||
//新风主机
|
||||
const newTrend = ref([
|
||||
{
|
||||
@@ -379,7 +264,7 @@
|
||||
},
|
||||
{
|
||||
title: '西区',
|
||||
styleText: { left: '28%', bottom: '30%' },
|
||||
styleText: { left: '28%', bottom: '28%' },
|
||||
type: '空调箱',
|
||||
lineType: 1,
|
||||
unit: '℃',
|
||||
@@ -520,6 +405,146 @@
|
||||
const handleClose = () => {
|
||||
selectIndex.value = 0;
|
||||
};
|
||||
//根据温度获取图片
|
||||
const getSunUrl = (number: any) => {
|
||||
if (number > 0 && number < 20) {
|
||||
return sunGreen;
|
||||
} else if (number >= 20 && number < 30) {
|
||||
return sunYellow;
|
||||
} else {
|
||||
return sunRed;
|
||||
}
|
||||
};
|
||||
//获取温度颜色
|
||||
const getColor = (number: any) => {
|
||||
if (number > 0 && number < 20) {
|
||||
return '#0dffa4';
|
||||
} else if (number >= 20 && number < 30) {
|
||||
return '#f59a23';
|
||||
} else {
|
||||
return '#f36163';
|
||||
}
|
||||
};
|
||||
// 获取传感器数据
|
||||
const getSensorData = () => {
|
||||
sensorData.value = [];
|
||||
peopleData.value = [];
|
||||
http
|
||||
.get(ventilating.getSensorData, { projectId: state.projectId, siteId: state.siteId })
|
||||
.then((res) => {
|
||||
if (res.msg === 'success') {
|
||||
res.data.forEach((item: any, index: number) => {
|
||||
sensorData.value.push({
|
||||
title: item.deviceInfoName,
|
||||
styleText: devicePosition[index],
|
||||
type: '温度',
|
||||
unit: item.record.tempUnit,
|
||||
number: item.record.temp,
|
||||
url: getSunUrl(item.record.temp),
|
||||
fontColor: getColor(item.record.temp),
|
||||
});
|
||||
peopleData.value.push({
|
||||
title: item.deviceInfoName,
|
||||
styleText: devicePosition[index],
|
||||
type: '人流',
|
||||
unit: item.record.peopleNumUnit,
|
||||
number: item.record.peopleNum,
|
||||
url: people,
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
const getnewTrendData = () => {
|
||||
newTrend.value = [];
|
||||
http
|
||||
.get(airConditioningSystemApi.getVentHostCtrlList, {
|
||||
projectId: state.projectId,
|
||||
siteId: state.siteId,
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.msg === 'success') {
|
||||
res.data.forEach((item: any, index: number) => {
|
||||
newTrend.value.push({
|
||||
title: item.deviceInfoName,
|
||||
styleText: newTrendPosition[index],
|
||||
type: '新风主机',
|
||||
number: item.record.converterTemp,
|
||||
numberUnit: item.record.converterTempUnit,
|
||||
url: freshAir,
|
||||
...item.record,
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
const getAcBoxCtrlList = () => {
|
||||
conditioningData.value = [];
|
||||
http
|
||||
.get(airConditioningSystemApi.getAcBoxCtrlList, {
|
||||
projectId: state.projectId,
|
||||
siteId: state.siteId,
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.msg === 'success') {
|
||||
res.data.forEach((item: any, index: number) => {
|
||||
conditioningData.value.push({
|
||||
title: item.deviceInfoName,
|
||||
styleText: airConditioningPosition[index].styleText,
|
||||
type: '空调箱',
|
||||
numberUnit: item.record.tempUnit,
|
||||
lineType: airConditioningPosition[index].lineType,
|
||||
number: item.record.temp,
|
||||
url: freshAir,
|
||||
state: item.record.switchStatus.value,
|
||||
...item.record,
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
const getTempSysCtrlList = () => {
|
||||
floorHeatingData.value = [];
|
||||
http
|
||||
.get(airConditioningSystemApi.getTempSysCtrlList, {
|
||||
projectId: state.projectId,
|
||||
siteId: state.siteId,
|
||||
})
|
||||
.then((res) => {
|
||||
console.log(res, '地暖');
|
||||
if (res.msg === 'success') {
|
||||
res.data.forEach((item: any, index: number) => {
|
||||
floorHeatingData.value.push({
|
||||
title: item.deviceInfoName,
|
||||
styleText: floorHeatingPosition[index].styleText,
|
||||
type: '地暖',
|
||||
number: item.record.currentTemp,
|
||||
numberUnit: item.record.currentTempUnit,
|
||||
lineType: floorHeatingPosition[index].lineType,
|
||||
...item.record,
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
const fetchData = () => {
|
||||
//传感器
|
||||
getSensorData();
|
||||
//新风主机
|
||||
getnewTrendData();
|
||||
//获取空调箱
|
||||
getAcBoxCtrlList();
|
||||
//获取地暖
|
||||
getTempSysCtrlList();
|
||||
};
|
||||
//实时获取数据 暂定一分钟
|
||||
const intervalId = setInterval(fetchData, 60000);
|
||||
onMounted(() => {
|
||||
fetchData();
|
||||
});
|
||||
onUnmounted(() => {
|
||||
clearInterval(intervalId);
|
||||
});
|
||||
</script>
|
||||
<style lang="less">
|
||||
.legend-box {
|
||||
@@ -593,7 +618,7 @@
|
||||
width: 95%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
background-image: url(../image/bg.jpg);
|
||||
background-image: url(../image/floor-1.png);
|
||||
background-size: 100% 100%;
|
||||
background-repeat: no-repeat;
|
||||
overflow: hidden;
|
||||
|
@@ -26,10 +26,10 @@
|
||||
<div style="margin-top: 4px"> {{ dataSource.type === '地暖' ? '设置' : '风量' }} </div>
|
||||
<div style="margin-top: -5px">
|
||||
<span style="font-size: 18px; color: #0dffff; font-style: italic">
|
||||
{{ dataSource.type === '地暖' ? dataSource.setUpNumber : '18' }}
|
||||
{{ dataSource.type === '地暖' ? dataSource.temp : dataSource.airVol }}
|
||||
</span>
|
||||
<span style="font-size: 10px; margin-left: 5px">{{
|
||||
dataSource.type === '地暖' ? '℃' : 'm3/h'
|
||||
dataSource.type === '地暖' ? dataSource.tempUnit : dataSource.airVolUnit
|
||||
}}</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -48,7 +48,7 @@
|
||||
<span :style="{ fontSize: '18px', color: getColor(), fontStyle: 'italic' }">
|
||||
{{ dataSource.number }}
|
||||
</span>
|
||||
<span style="font-size: 10px; margin-left: 5px">℃</span>
|
||||
<span style="font-size: 10px; margin-left: 5px">{{ dataSource.numberUnit }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -69,7 +69,7 @@
|
||||
},
|
||||
});
|
||||
const getSunUrl = () => {
|
||||
if (props.dataSource.number > 0 && props.dataSource.number < 20) {
|
||||
if (props.dataSource.number >= 0 && props.dataSource.number < 20) {
|
||||
return sunGreen;
|
||||
} else if (props.dataSource.number >= 20 && props.dataSource.number < 30) {
|
||||
return sunYellow;
|
||||
@@ -78,7 +78,7 @@
|
||||
}
|
||||
};
|
||||
const getColor = () => {
|
||||
if (props.dataSource.number > 0 && props.dataSource.number < 20) {
|
||||
if (props.dataSource.number >= 0 && props.dataSource.number < 20) {
|
||||
return '#0dffa4';
|
||||
} else if (props.dataSource.number >= 20 && props.dataSource.number < 30) {
|
||||
return '#f59a23';
|
||||
|
@@ -41,7 +41,7 @@
|
||||
{ field: 'planGroupName', component: 'NsInput', show: false },
|
||||
{ field: 'planName', component: 'NsInput', show: false },
|
||||
{ field: 'projectId', component: 'NsInput', show: false },
|
||||
{ field: 'deviceType', component: 'NsInput', show: false },
|
||||
{ field: 'ctrlType', component: 'NsInput', show: false },
|
||||
{ field: 'orgId', component: 'NsInput', show: false },
|
||||
{
|
||||
field: 'createTime',
|
||||
@@ -74,27 +74,27 @@
|
||||
});
|
||||
const config = ref(null);
|
||||
const enumDataList: any = () => {
|
||||
return getEnum({ params: { enumType: 'CtrlDeviceType' } });
|
||||
return getEnum({ params: { enumType: 'DeviceCtrlType' } });
|
||||
};
|
||||
const getConfigData = async () => {
|
||||
const enumData = await enumDataList();
|
||||
config.value = {
|
||||
title: '计划库',
|
||||
api: planToAddApi.getActivatedPlanListByTree,
|
||||
params: { orgId, projectId, deviceType: enumData.data[0].value },
|
||||
params: { orgId, projectId, ctrlType: enumData.data[0].value },
|
||||
treeConfig: {
|
||||
defaultExpandAll: true,
|
||||
header: {
|
||||
icon: 'name',
|
||||
title: '执行计划',
|
||||
},
|
||||
params: { projectId, deviceType: enumData.data[0].value },
|
||||
params: { projectId, ctrlType: enumData.data[0].value },
|
||||
dynamicParams: {
|
||||
id: 'id',
|
||||
pid: 'pid',
|
||||
level: 'level',
|
||||
projectId: 'projectId',
|
||||
deviceType: 'deviceType',
|
||||
ctrlType: 'ctrlType',
|
||||
},
|
||||
api: planToAddApi.getActivatedPlanTree,
|
||||
fieldNames: {
|
||||
@@ -103,23 +103,23 @@
|
||||
pid: 'pid',
|
||||
level: 'level',
|
||||
projectId: 'projectId',
|
||||
deviceType: 'deviceType',
|
||||
ctrlType: 'ctrlType',
|
||||
children: 'childList',
|
||||
},
|
||||
formConfig: {
|
||||
schemas: [
|
||||
{
|
||||
field: 'deviceType',
|
||||
label: '告警优先级',
|
||||
field: 'ctrlType',
|
||||
label: '类型',
|
||||
component: 'nsSelectApi',
|
||||
autoSubmit: true,
|
||||
componentProps: {
|
||||
api: () => getEnum({ params: { enumType: 'CtrlDeviceType' } }),
|
||||
api: () => getEnum({ params: { enumType: 'DeviceCtrlType' } }),
|
||||
immediate: true,
|
||||
resultField: 'data',
|
||||
labelField: 'label',
|
||||
valueField: 'value',
|
||||
placeholder: '请选择告警优先级',
|
||||
placeholder: '请选择',
|
||||
showSearch: true,
|
||||
autoSelectFirst: true,
|
||||
filterOption: (input: string, option: any) => {
|
||||
|
Reference in New Issue
Block a user