Browse Source

柳塔智能注氮,智能注浆界面及接口开发-提交

lxh 11 months ago
parent
commit
24419e32e7

+ 700 - 0
src/views/vent/monitorManager/compressor/components/nitrogenHome_lt.vue

@@ -0,0 +1,700 @@
+<template>
+    <div id="nitrogen3D" style="width: 100%; height: 100%; position: absolute; overflow: hidden"></div>
+    <div id="nitrogenCss3D" class="threejs-Object-CSS"
+        style="width: 100%; height: 100%; position: absolute; pointer-events: none; overflow: hidden; z-index: 2; top: 0px; left: 0px">
+        <a-spin :spinning="loading" />
+        <div v-for="groupNum in monitorDataGroupNum" :key="groupNum" class="modal-monitor">
+            <fourBorderBg :class="`kyj${groupNum}`" :id="`nitrogenMonitor${groupNum}`">
+                <div class="title">空压机{{ groupNum }} </div>
+                <template v-for="(preMonitor, preMonitorIndex) in preMonitorList" :key="preMonitorIndex">
+                    <div class="monitor-item">
+                        <span class="monitor-title">{{ preMonitor.title }}:</span>
+                        <span class="monitor-val"><span class="val">{{ monitorData[preMonitor.code] ?
+            formatNum(monitorData[preMonitor.code]) : '-' }}</span><span class="unit">{{
+            preMonitor.unit }}</span></span>
+                    </div>
+
+                </template>
+            </fourBorderBg>
+        </div>
+    </div>
+    <div class="nitrogen-home">
+        <div class="nitrogen-container">
+            <div class="top-box">
+
+                <!-- 左边监测数据 -->
+                <div class="lr-box left-box">
+                    <ventBox1>
+                        <template #title>
+                            <div>注氮机监测</div>
+                        </template>
+                        <template #container>
+                            <div class="input-item" v-for="(preFan, index) in nitrogenMonitorData" :key="index">
+                                <div class="title">{{ preFan.title }}</div>
+                                <div class="value">{{
+            monitorData[preFan.code] >= 0 ? formatNum(Number(monitorData[preFan.code])) : '-'
+        }}</div>
+
+                                <div class="unit">{{ preFan.unit !== 'signal' ? `(${preFan.unit})` : '' }}</div>
+                            </div>
+                        </template>
+                    </ventBox1>
+                    <div class="item item-l" v-for="groupNum in monitorDataGroupNum" :key="groupNum">
+                        <ventBox1>
+                            <template #title>
+                                <div>空压机{{ groupNum }}</div>
+                            </template>
+                            <template #container>
+                                <div class="monitor-box">
+                                    <div class="monitor-item">
+                                        <div class="state-item" v-for="(preFan, index) in preFanMonitorData"
+                                            :key="index">
+                                            <div class="state-title">{{ preFan.title + (preFan.unit !== 'signal' ?
+            `(${preFan.unit})` : '') }}</div>
+
+                                            <div :class="{
+            'signal-round': true,
+            'signal-round-warning': monitorData[preFan.code] == '1',
+            'signal-round-run': monitorData[preFan.code] == '0',
+            'signal-round-gry':monitorData[preFan.code] != '0' && monitorData[preFan.code] != '1'
+        }"></div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </template>
+                        </ventBox1>
+                    </div>
+                </div>
+                <!-- 右边控制状态 -->
+                <div class="lr-box right-box">
+                    <ventBox1 class="vent-margin-t-10">
+                        <template #title>
+                            <div>设备实时监测曲线</div>
+                        </template>
+                        <template #container>
+                            <BarAndLine v-if="chartsColumns.length > 0" xAxisPropType="readTime"
+                                :dataSource="echartData" height="340px" :chartsColumns="chartsColumns"
+                                chartsType="listMonitor" :option="echatsOption" />
+                        </template>
+                    </ventBox1>
+                    <div ref="playerRef" style="height: auto; width: 100%; margin-top: 10px"></div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+<script lang="ts" setup name="nitrogenHome">
+import { onMounted, onUnmounted, ref, watch, reactive, defineProps, nextTick, inject } from 'vue';
+import ventBox1 from '/@/components/vent/ventBox1.vue';
+import fourBorderBg from '../../../comment/components/fourBorderBg.vue';
+import { mountedThree, destroy, setModelType } from '../nitrogen.threejs';
+import { getDevice } from '../nitrogen.api';
+import BarAndLine from '/@/components/chart/BarAndLine.vue';
+import { preMonitorList, preFanMonitorData, nitrogenMonitorData } from '../nitrogen.data.lt';
+import { formatNum } from '/@/utils/ventutil';
+import { useCamera } from '/@/hooks/system/useCamera';
+import lodash from 'lodash';
+
+const props = defineProps({
+    deviceId: {
+        type: String,
+        require: true,
+    },
+    modalType: {
+        type: String,
+        require: true,
+    },
+});
+const playerRef = ref();
+const refresh = ref(false);
+const loading = ref(true);
+
+// const kyjs = ['1号空压机', '1号空压机', '1号空压机', '1号空压机'];
+const flvURL1 = () => {
+    // return `https://sf1-hscdn-tos.pstatp.com/obj/media-fe/xgplayer_doc_video/flv/xgplayer-demo-360p.flv`;
+    return '';
+};
+const echatsOption = {
+    grid: {
+        top: '35%',
+        left: '15%',
+        right: '20px',
+        bottom: '8%',
+        // containLabel: true
+    },
+    toolbox: {
+        feature: {},
+    },
+};
+
+const monitorDataGroupNum = ref(1);
+
+const chartsColumns = ref([
+    {
+        legend: '瞬时流量',
+        seriesName: '(m³/h)',
+        ymax: 2000,
+        yname: 'm³/h',
+        linetype: 'line',
+        yaxispos: 'left',
+        color: '#FDB146',
+        sort: 1,
+        xRotate: 0,
+        dataIndex: 'InputFlux',
+    },
+]);
+const { getCamera, removeCamera } = useCamera();
+
+const monitorData = ref({});
+
+//图表数据
+let echartData = ref<any>([]);
+
+// https获取监测数据
+let timer: null | NodeJS.Timeout = null;
+async function getMonitor(flag?) {
+    if (Object.prototype.toString.call(timer) === '[object Null]') {
+        return new Promise(async (resolve) => {
+            timer = await setTimeout(
+                async () => {
+                    if (props.deviceId) {
+                        await getDataSource(props.deviceId);
+                    }
+                    if (timer) {
+                        timer = null;
+                    }
+                    resolve(null);
+                    await getMonitor();
+                },
+                flag ? 0 : 3000
+            );
+        });
+    }
+}
+
+async function getDataSource(systemID) {
+    const res = await getDevice({ devicetype: 'sys', systemID, type: 'all' });
+    if (res) {
+        const result = res;
+        if (!result || result.msgTxt.length < 1) return;
+        result.msgTxt.forEach((item) => {
+            if (item.type && item.type.startsWith('nitrogen')) {
+
+                monitorData.value = Object.assign(item['datalist'][0], item['datalist'][0]['readData']);
+
+                const airCompressor = { readTime: monitorData.value['readTime'].substring(11) };
+                const dataArr = lodash.cloneDeep(echartData.value);
+                //图表数据
+                if (dataArr.length <= 5) {
+                    airCompressor[`InputFlux`] = monitorData.value['InputFlux'] || 0;
+                    dataArr.push(airCompressor);
+                } else {
+                    dataArr.shift();
+                    dataArr.push(airCompressor);
+                }
+                echartData.value = dataArr;
+            }
+        });
+        refresh.value = true;
+        nextTick(() => {
+            refresh.value = false;
+        });
+    }
+}
+
+watch([monitorDataGroupNum, loading], ([newMonitorDataGroupNum, newLoading]) => {
+    nextTick(() => {
+        if (newMonitorDataGroupNum && !newLoading) {
+            setModelType(props.modalType, newMonitorDataGroupNum);
+        }
+    });
+});
+
+onMounted(async () => {
+    await getMonitor(true);
+    await mountedThree().then(() => {
+        loading.value = false;
+    });
+    await getCamera(props.deviceId, playerRef.value);
+});
+
+onUnmounted(() => {
+    destroy();
+    removeCamera();
+    if (timer) {
+        clearTimeout(timer);
+        timer = undefined;
+    }
+});
+</script>
+
+<style lang="less" scoped>
+@ventSpace: zxm;
+
+.nitrogen-box {
+    width: 100%;
+    height: 100%;
+    display: flex;
+    justify-content: center;
+}
+
+#nitrogenCss3D {
+    .modal-monitor {
+        width: 200px;
+        position: absolute;
+        left: 0px;
+        top: 0px;
+    }
+
+    &:deep(.win) {
+        margin: 0 !important;
+        background: #00000044;
+    }
+}
+
+.nitrogen-home {
+    width: 100%;
+    height: 100%;
+    position: fixed;
+    z-index: 9999;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    pointer-events: none;
+    top: 20px;
+
+    .nitrogen-container {
+        width: 100%;
+        height: calc(100% - 100px);
+        display: flex;
+        justify-content: space-between;
+        margin-bottom: 100px;
+
+        .device-state {
+            width: 100%;
+            position: absolute;
+            top: 20px;
+            color: #e90000;
+            display: flex;
+            justify-content: center;
+            font-size: 20px;
+        }
+
+        .top-box {
+            width: 100%;
+            padding: 10px;
+            overflow: hidden;
+            display: flex;
+            justify-content: space-between;
+            // margin-top: 40px;
+
+            .center-item-box {
+                position: absolute;
+                left: 50%;
+                top: 50px;
+                transform: translate(-48%, 0);
+                width: calc(100% - 720px);
+                height: 50px;
+                display: flex;
+                align-items: center;
+                pointer-events: auto;
+
+                .top-left {
+                    display: flex;
+                    flex: 1.5;
+                    color: #fff;
+
+                    .button-box {
+                        position: relative;
+                        width: auto;
+                        height: 32px;
+                        display: flex;
+                        align-items: center;
+                        justify-content: center;
+                        border-radius: 5px;
+                        color: #fff;
+                        padding: 10px 15px;
+                        margin: 0px 10px;
+                        box-sizing: border-box;
+                        cursor: pointer;
+                        background: linear-gradient(#1fa6cb, #127cb5);
+
+                        &:hover {
+                            background: linear-gradient(#1fa6cbcc, #127cb5cc);
+                        }
+                    }
+                }
+
+                .top-center {
+                    display: flex;
+                    flex: 1;
+                    justify-content: center;
+                    align-items: center;
+                    font-size: 20px;
+                    color: #fff;
+
+                    .top-c-label {
+                        color: yellow;
+                    }
+                }
+
+                .top-right {
+                    display: flex;
+                    flex: 2;
+                    justify-content: right;
+                    align-items: center;
+                    color: #fff;
+
+                    .control-type {
+                        display: flex;
+                        color: #fff;
+
+                        .control-title {
+                            color: #73e8fe;
+                        }
+                    }
+                }
+            }
+
+            .lr-box {
+                height: 90%;
+                display: flex;
+                flex-direction: column;
+                position: relative;
+                // overflow: hidden;
+                z-index: 9999;
+                pointer-events: auto;
+                overflow-y: auto;
+                overflow-x: hidden;
+            }
+
+            .item {
+                width: 305px;
+                height: 450px;
+                position: relative;
+                border-radius: 5px;
+                margin-top: 10px;
+                margin-bottom: 0px;
+                pointer-events: auto;
+                color: #fff;
+                // overflow: hidden;
+
+                &:first-child {
+                    margin-top: 0px;
+                }
+
+                .base-title {
+                    color: #fff;
+                    margin-bottom: 8px;
+                    padding-left: 10px;
+                    position: relative;
+                    font-size: 16px;
+
+                    &::after {
+                        content: '';
+                        position: absolute;
+                        display: block;
+                        width: 4px;
+                        height: 12px;
+                        top: 7px;
+                        left: 0px;
+                        background: #45d3fd;
+                        border-radius: 4px;
+                    }
+                }
+
+                .monitor-item {
+                    width: 100%;
+                    display: flex;
+                    flex-direction: row;
+                    flex-wrap: wrap;
+
+                    .state-item {
+                        width: 50%;
+                        padding: 5px;
+                        display: flex;
+                        align-items: center;
+                        justify-content: space-between;
+
+                        .state-title {
+                            width: 100px;
+                            color: #ffffffdd;
+                            flex: 9;
+                            font-size: 14px;
+
+                            .unit {
+                                // color: #ffffffbb;
+                            }
+                        }
+
+                        .state-val {
+                            flex: 1;
+                            color: #e4a300;
+                            margin-right: 5px;
+                            text-align: right;
+                            font-size: 14px;
+                        }
+                    }
+                }
+
+                .signal-box {
+                    margin: 5px 0;
+                    display: flex;
+                    align-items: center;
+
+                    .signal-title {
+                        color: #7af5ff;
+                        margin: 0 5px;
+                    }
+
+                    &:last-child {
+                        margin-right: 0px;
+                    }
+                }
+
+                .list-item {
+                    padding: 0 10px;
+                    display: flex;
+                    justify-content: space-between;
+                    align-items: center;
+
+                    .item-data-key {
+                        color: #ffffff99;
+                    }
+                }
+
+                .item-data-box {
+                    color: #fff;
+
+                    .state-icon {
+                        display: inline-block;
+                        width: 12px;
+                        height: 12px;
+                        border-radius: 12px;
+                    }
+
+                    .open {
+                        border: 5px solid #133a56;
+                        background: #4ecb73;
+                    }
+
+                    .close {
+                        border: 5px solid #192961;
+                        background: #6d7898;
+                    }
+                }
+            }
+
+            .item-l {
+                width: 100%;
+
+                .monitor-box {
+                    width: 100%;
+
+                    .parameter-title {
+                        position: relative;
+                        width: 100%;
+                        height: 14px;
+                        margin-top: 10px;
+
+                        .icon,
+                        span {
+                            position: absolute;
+                            top: -10px;
+                        }
+                    }
+
+                    .group-parameter-title {
+                        background-image: linear-gradient(to right, #39a3ff50, #39a3ff00);
+
+                        .icon {
+                            left: -12px;
+                            top: -17px;
+                        }
+
+                        span {
+                            left: 18px;
+                        }
+
+                        .item-col {
+                            background-image: linear-gradient(to right, #39a3ff00, #39a3ff10);
+                        }
+                    }
+
+                    .device-parameter-title {
+                        background-image: linear-gradient(to right, #3df6ff40, #3df6ff00);
+
+                        .icon {
+                            left: -10px;
+                            top: -14px;
+                        }
+
+                        span {
+                            left: 18px;
+                        }
+
+                        .item-col {
+                            background-image: linear-gradient(to right, #3df6ff10, #3df6ff00);
+                        }
+                    }
+                }
+            }
+
+            .right-box {
+                width: 300px;
+                margin-top: 50px;
+            }
+
+            .left-box {
+                width: 335px;
+                margin-top: 80px;
+
+                .input-item {
+                    display: flex;
+                    justify-content: space-between;
+                    align-items: center;
+                    padding: 4px 8px;
+                    margin: 6px 0;
+                    background-image: linear-gradient(to right, #39deff15, #3977e500);
+
+                    .title {
+                        width: 200px;
+                    }
+
+                    .title-auto {
+                        width: auto;
+                    }
+
+                    .input-value {
+                        width: 80px;
+                        height: 28px;
+                        line-height: 28px !important;
+                        background: transparent !important;
+                        border-color: #228da2 !important;
+                        color: #fff !important;
+                    }
+
+                    .value {
+                        width: 100px;
+                        color: #00d8ff;
+                        padding-right: 20px;
+                    }
+
+                    .unit {
+                        width: 80px;
+                    }
+                }
+            }
+        }
+
+        &:deep(.win) {
+            width: 100%;
+            margin: 0 !important;
+        }
+    }
+}
+
+&:deep(.main) {
+    .title {
+        height: 34px;
+        text-align: center;
+        font-weight: 600;
+        color: #7af5ff;
+        // background-image: url('../../../assets/img/yfj/light.png');
+        background-repeat: no-repeat;
+        background-position-x: center;
+        background-position-y: 100%;
+        background-size: 80%;
+        font-size: 16px;
+    }
+
+    .monitor-item {
+        width: 200px;
+        display: flex;
+        flex-direction: row;
+        width: auto;
+        margin-bottom: 3px;
+
+        .monitor-val {
+            color: #ffb700;
+            display: flex;
+            width: auto;
+
+            .val {
+                width: 80px;
+                font-size: 14px;
+            }
+
+            .unit {
+                color: #ffffffbb;
+                font-size: 14px;
+            }
+        }
+    }
+
+    .monitor-title {
+        width: 100px;
+        color: #7af5ff;
+        font-weight: 400;
+        font-size: 14px;
+    }
+
+    .signal-item {
+        display: flex;
+        justify-content: space-between;
+
+        // margin-bottom: 5px;
+        .signal-round {
+            display: inline-block;
+            width: 8px;
+            height: 8px;
+            border-radius: 50%;
+            margin: 0 10px;
+            position: relative;
+
+            &::after {
+                display: block;
+                content: '';
+                position: absolute;
+                width: 12px;
+                height: 12px;
+                top: -2px;
+                left: -2px;
+                border-radius: 50%;
+            }
+        }
+
+        .signal-round-gry {
+            background-color: #858585;
+
+            &::after {
+                background-color: #85858544;
+                box-shadow: 0 0 1px 1px #85858599;
+            }
+        }
+
+        .signal-round-run {
+            background-color: #67fc00;
+
+            &::after {
+                background-color: #67fc0044;
+                box-shadow: 0 0 1px 1px #c6ff77;
+            }
+        }
+
+        .signal-round-warning {
+            background-color: #e9170b;
+
+            &::after {
+                background-color: #e9170b44;
+                box-shadow: 0 0 1px 1px #e9170b;
+            }
+        }
+    }
+}
+
+:deep(.zxm-radio-wrapper) {
+    color: #fff !important;
+}
+</style>

+ 213 - 0
src/views/vent/monitorManager/compressor/nitrogen.data.lt.ts

@@ -0,0 +1,213 @@
+export const nitrogenMonitorData = [
+    {
+        title: '总累计流量',
+        code: 'FluxTotal1',
+        unit: 'm³',
+    },
+    {
+        title: '瞬时流量',
+        code: 'InputFlux',
+        unit: 'm³/min',
+    },
+    {
+        title: '氮气浓度',
+        code: 'NitrogenPurity',
+        unit: '%',
+    },
+    {
+        title: '膜前温度',
+        code: 'PreMembraneTemperature',
+        unit: '℃',
+    },
+    {
+        title: '电机电压',
+        code: 'AirCompressor_SysVoltage',
+        unit: 'V',
+    },
+    {
+        title: '电机电流',
+        code: 'AirCompressor_MainMotor_Current',
+        unit: 'A',
+    },
+];
+export const preFanMonitorData = [
+    {
+        title: '电源信号',
+        code: 'AirCompressor_PowerFault',
+        unit: 'signal',
+    },
+    {
+        title: '启停状态',
+        code: 'AirCompressor_Status',
+        unit: 'signal',
+    },
+    {
+        title: '三相不平衡',
+        code: 'AirCompressor_UnbalanceFault',
+        unit: 'signal',
+    },
+    {
+        title: '断相',
+        code: 'AirCompressor_PhaseFailureFault',
+        unit: 'signal',
+    },
+    {
+        title: '先导_上位机',
+        code: 'AirCompressor_CtrlMode',
+        unit: 'signal',
+    },
+    {
+        title: '加载_卸载',
+        code: 'AirCompressor_LoadorUnload',
+        unit: 'signal',
+    },
+    {
+        title: '排气高温',
+        code: 'AirCompressor_ExhaustTemp1',
+        unit: 'signal',
+    },
+    {
+        title: '排气压力过高',
+        code: 'AirCompressor_ExhaustPreHighFault',
+        unit: 'signal',
+    },
+    {
+        title: '接线错误',
+        code: 'AirCompressor_PhaseSequenceFault1',
+        unit: 'signal',
+    },
+    {
+        title: '风机过载',
+        code: 'AirCompressor_Fan_OverloadFault',
+        unit: 'signal',
+    },
+    {
+        title: '合闸失败',
+        code: 'AirCompressor_CloseFail',
+        unit: 'signal',
+    },
+    {
+        title: '油气桶高压',
+        code: 'AirCompressor_OilGasBarrel_HighPressureFault',
+        unit: 'signal',
+    },
+    {
+        title: '油气桶高温',
+        code: 'AirCompressor_OilGasBarrel_OverTempAlarm',
+        unit: 'signal',
+    },
+    {
+        title: '油气桶高温预警预留',
+        code: 'AirCompressor_OilGasBarrel_OverTempAlarm1',
+        unit: 'signal',
+    },
+    {
+        title: '主电机高温',
+        code: 'AirCompressor_MainMotor_OverTempFault',
+        unit: 'signal',
+    },
+    {
+        title: '主机过载',
+        code: 'AirCompressor_MainMotor_OverloadFault',
+        unit: 'signal',
+    },
+    {
+        title: '油压过低',
+        code: 'AirCompressor_OilPressureLowFault',
+        unit: 'signal',
+    },
+    {
+        title: '分闸失败',
+        code: 'AirCompressor_OpenFail',
+        unit: 'signal',
+    },
+    {
+        title: '三相电抗器缺相故障',
+        code: 'AirCompressor_PhaseFailureFault1',
+        unit: 'signal',
+    },
+    {
+        title: '相序故障',
+        code: 'AirCompressor_PhaseSequenceFault',
+        unit: 'signal',
+    },
+    {
+        title: '短路故障',
+        code: 'AirCompressor_ShortCutFaul',
+        unit: 'signal',
+    },
+    {
+        title: '重故障',
+        code: 'AirCompressor_TotalFailureSignal',
+        unit: 'signal',
+    },
+    {
+        title: '轻故障预留',
+        code: 'AirCompressor_TotalFailureSignal1',
+        unit: 'signal',
+    },
+    {
+        title: '过压故障',
+        code: 'AirCompressor_OverVoltageFault',
+        unit: 'signal',
+    },
+    {
+        title: '漏电闭锁故障',
+        code: 'AirCompressor_LeakageLock',
+        unit: 'signal',
+    },
+
+    {
+        title: '欠压故障',
+        code: 'AirCompressor_LowVoltageFault',
+        unit: 'signal',
+    },
+    {
+        title: '失水故障',
+        code: 'AirCompressor_NoWaterFault',
+        unit: 'signal',
+    },
+    {
+        title: '油过滤器堵塞故障',
+        code: 'AirCompressor_OilGasBarrel_FilterBlockageFault',
+        unit: 'signal',
+    },
+    {
+        title: '油细分离器故障',
+        code: 'AirCompressor_OilGasBarrel_SeparatorFault',
+        unit: 'signal',
+    },
+];
+export const preMonitorList = [
+    {
+        title: `排气压力`,
+        code: `AirCompressor_ExhaustPre`,
+        unit: 'MPa',
+        child: [],
+    },
+    {
+        title: `排气温度`,
+        code: `AirCompressor_ExhaustTemp`,
+        unit: '℃',
+        child: [],
+    },
+    {
+        title: `加载时间`,
+        code: `AirCompressor_LoadTime`,
+        unit: 'h',
+        child: [],
+    },
+    {
+        title: `运行时间`,
+        code: `RunTime3`,
+        unit: 'h',
+        child: [],
+    },
+    {
+        title: `保养时间`,
+        code: `RunTime4`,
+        unit: 'h',
+        child: [],
+    },
+   
+];

+ 5 - 1
src/views/vent/monitorManager/compressor/nitrogen.data.ts

@@ -231,10 +231,14 @@ export function getMonitorComponent() {
     case 'lahgjtlnmy': // 潞宁
       nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_ln.vue'));
       return nitrogenHome;
+      case 'sdmtjtltmk'://柳塔
+      nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_lt.vue'));
+      break;
     default:
       // nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_dltj.vue'));
       // nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_ln.vue'));
-      nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_bet.vue'));
+      // nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_bet.vue'));
+      nitrogenHome = defineAsyncComponent(() => import('./components/nitrogenHome_lt.vue'));
       return nitrogenHome;
   }
 }

+ 404 - 0
src/views/vent/monitorManager/groutMonitor/components/ceshi.json

@@ -0,0 +1,404 @@
+{
+    "success": true,
+    "message": "",
+    "code": 200,
+    "result": {
+        "deviceInfo": {
+            "pulping": {
+                "warnInfo": {
+                    "maxLevel": 0,
+                    "warnNum": 0,
+                    "maxLevel_str": "正常",
+                    "alarmNum": 0,
+                    "warndes": "正常"
+                },
+                "datalist": [
+                    {
+                        "msgType": null,
+                        "deviceID": "1657545388451663014",
+                        "strname": "制浆机1",
+                        "strinstallpos": "制浆机1",
+                        "fsectarea": "11.0",
+                        "stationname": "测试分站",
+                        "stationtype": "plc",
+                        "deviceType": "pulping_auto",
+                        "typeName": "制浆机",
+                        "netStatus": 1,
+                        "warnFlag": 0,
+                        "warnLevel": 0,
+                        "warnLevel_str": "正常",
+                        "warnTime": null,
+                        "readTime": "2024-04-03 16:35:15",
+                        "warnDes": "",
+                        "frontGateOpenCtrl": null,
+                        "rearGateOpenCtrl": null,
+                        "readData": {
+                            "A87": "0",
+                            "A88": "0",
+                            "A89": "0",
+                            "A1": "0",
+                            "A2": "0",
+                            "A3": "0",
+                            "A4": "0",
+                            "A5": "0",
+                            "A6": "0",
+                            "A7": "0",
+                            "A8": "0",
+                            "A90": "0",
+                            "A9": "0",
+                            "A91": "0",
+                            "A92": "0",
+                            "A93": "0",
+                            "A94": "0.0",
+                            "A95": "0.0",
+                            "A96": "0.0",
+                            "A97": "0.0",
+                            "A98": "0.0",
+                            "A10": "0",
+                            "A11": "0",
+                            "A99": "0",
+                            "A12": "0",
+                            "A13": "0",
+                            "A14": "0",
+                            "A15": "0",
+                            "A16": "0",
+                            "A17": "0",
+                            "A18": "0",
+                            "A19": "0",
+                            "A20": "0",
+                            "A21": "0.022605896",
+                            "A22": "-0.0045212507",
+                            "A23": "-25.011305",
+                            "A24": "1.6",
+                            "A25": "0.0",
+                            "A26": "0.6917443",
+                            "A27": "2.0",
+                            "A28": "0.0",
+                            "A29": "0.0",
+                            "A30": "0.0",
+                            "A31": "0.0",
+                            "A32": "0.0",
+                            "A33": "0.0",
+                            "A34": "0.0",
+                            "A35": "0.0",
+                            "A36": "0.0",
+                            "A37": "0.0",
+                            "A38": "0.0",
+                            "A39": "0.0",
+                            "A40": "0",
+                            "A41": "0",
+                            "A42": "0",
+                            "A43": "0",
+                            "A44": "1",
+                            "A45": "1",
+                            "A46": "0",
+                            "A47": "1",
+                            "A48": "0",
+                            "A49": "1",
+                            "sign": "0",
+                            "A50": "0",
+                            "A51": "0",
+                            "A52": "0",
+                            "A53": "0",
+                            "A54": "0",
+                            "A55": "0",
+                            "A56": "0",
+                            "A57": "0",
+                            "A58": "0",
+                            "A59": "0",
+                            "A60": "0",
+                            "A61": "0",
+                            "A62": "0",
+                            "A63": "0",
+                            "A64": "0",
+                            "A65": "0",
+                            "A66": "1",
+                            "A67": "0",
+                            "A68": "1",
+                            "A69": "0",
+                            "A70": "0",
+                            "A71": "0",
+                            "A72": "1",
+                            "A73": "0",
+                            "A74": "0",
+                            "A75": "0",
+                            "A76": "0",
+                            "A77": "0",
+                            "A78": "0",
+                            "A79": "0",
+                            "A80": "0",
+                            "A81": "0",
+                            "A82": "0",
+                            "isRun": "-2",
+                            "A83": "0",
+                            "A84": "0",
+                            "A85": "0",
+                            "A86": "0"
+                        
+                        },
+                        "readDataDes": null,
+                        "summaryHour": [],
+                        "summaryDay": [],
+                        "history": [
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:40:26"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:40:31"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:40:36"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:40:41"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:40:46"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:40:51"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:40:56"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:41:01"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:41:06"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:41:11"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:41:16"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:41:21"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:41:26"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:41:31"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:41:36"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:41:41"
+                            },
+                            {
+                                "o2val": "0.13",
+                                "time": "2024-03-21 23:41:46"
+                            },
+                            {
+                                "o2val": "1.33",
+                                "time": "2024-03-21 23:42:26"
+                            },
+                            {
+                                "o2val": "0.54",
+                                "time": "2024-03-21 23:42:31"
+                            },
+                            {
+                                "o2val": "1.75",
+                                "time": "2024-03-21 23:42:36"
+                            },
+                            {
+                                "o2val": "0.25",
+                                "time": "2024-03-21 23:42:41"
+                            },
+                            {
+                                "o2val": "0.22",
+                                "time": "2024-03-22 00:52:51"
+                            },
+                            {
+                                "o2val": "0.55",
+                                "time": "2024-03-22 00:52:56"
+                            },
+                            {
+                                "o2val": "1.67",
+                                "time": "2024-03-22 00:53:01"
+                            },
+                            {
+                                "o2val": "0.37",
+                                "time": "2024-03-22 00:53:06"
+                            },
+                            {
+                                "o2val": "1.82",
+                                "time": "2024-03-22 00:53:11"
+                            },
+                            {
+                                "o2val": "1.36",
+                                "time": "2024-03-22 01:00:16"
+                            },
+                            {
+                                "o2val": "1.36",
+                                "time": "2024-03-22 01:00:21"
+                            },
+                            {
+                                "o2val": "1.36",
+                                "time": "2024-03-22 01:00:26"
+                            },
+                            {
+                                "o2val": "1.36",
+                                "time": "2024-03-22 01:00:31"
+                            },
+                            {
+                                "o2val": "1.36",
+                                "time": "2024-03-22 01:00:36"
+                            },
+                            {
+                                "o2val": "1.02",
+                                "time": "2024-03-22 01:00:41"
+                            },
+                            {
+                                "o2val": "1.1",
+                                "time": "2024-03-22 01:00:46"
+                            },
+                            {
+                                "o2val": "1.86",
+                                "time": "2024-03-22 01:00:51"
+                            },
+                            {
+                                "o2val": "0.67",
+                                "time": "2024-03-22 01:00:56"
+                            },
+                            {
+                                "o2val": "1.24",
+                                "time": "2024-03-22 01:01:01"
+                            },
+                            {
+                                "o2val": "1.94",
+                                "time": "2024-03-22 01:01:06"
+                            },
+                            {
+                                "o2val": "1.94",
+                                "time": "2024-03-22 01:01:11"
+                            },
+                            {
+                                "o2val": "1.94",
+                                "time": "2024-03-22 01:01:16"
+                            },
+                            {
+                                "o2val": "1.94",
+                                "time": "2024-03-22 01:01:21"
+                            },
+                            {
+                                "o2val": "1.94",
+                                "time": "2024-03-22 01:01:26"
+                            },
+                            {
+                                "o2val": "1.94",
+                                "time": "2024-03-22 01:01:31"
+                            },
+                            {
+                                "o2val": "1.94",
+                                "time": "2024-03-22 01:01:36"
+                            },
+                            {
+                                "o2val": "1.94",
+                                "time": "2024-03-22 01:01:41"
+                            },
+                            {
+                                "o2val": "1.94",
+                                "time": "2024-03-22 01:01:46"
+                            },
+                            {
+                                "o2val": "1.94",
+                                "time": "2024-03-22 01:01:51"
+                            },
+                            {
+                                "o2val": "1.94",
+                                "time": "2024-03-22 01:01:56"
+                            },
+                            {
+                                "o2val": "1.94",
+                                "time": "2024-03-22 01:02:01"
+                            },
+                            {
+                                "o2val": "0.77",
+                                "time": "2024-03-22 01:02:41"
+                            },
+                            {
+                                "o2val": "1.34",
+                                "time": "2024-03-22 01:16:52"
+                            }
+                        ],
+                        "dayhistory": [
+                            {
+                                "o2val": "0.8",
+                                "time": "2024-03-16 17:08:46"
+                            },
+                            {
+                                "o2val": "1.81",
+                                "time": "2024-03-17 22:57:56"
+                            },
+                            {
+                                "o2val": "1.23",
+                                "time": "2024-03-18 01:07:11"
+                            },
+                            {
+                                "o2val": "0.56",
+                                "time": "2024-03-19 10:29:27"
+                            },
+                            {
+                                "o2val": "1.35",
+                                "time": "2024-03-21 18:10:41"
+                            },
+                            {
+                                "o2val": "0.22",
+                                "time": "2024-03-22 00:52:51"
+                            }
+                        ],
+                        "totalInfo": null,
+                        "sign": null,
+                        "cameras": [],
+                        "links": [],
+                        "other1": null,
+                        "other2": null,
+                        "other3": null,
+                        "remarkInfo": null,
+                        "linkInfo": null
+                    }
+                ],
+                "avgInfo": {
+                    "o2val_datainfo": {
+                        "dayMaxTime": null,
+                        "dayAvg": null,
+                        "dayMin": null,
+                        "dayMinTime": null,
+                        "avgHour": 0,
+                        "hourMinTime": "2024-04-02 10:20:20",
+                        "hourNum": 4,
+                        "hourMax": 1.41,
+                        "hourAvg": 3.72,
+                        "hourMin": 0.52,
+                        "dayNum": null,
+                        "hourMaxTime": "2024-04-02 10:20:15",
+                        "dayMax": null
+                    }
+                },
+                "typeName": "制浆",
+                "type": "pulping"
+            }
+        }
+    },
+    "timestamp": 1712210742179
+}

+ 549 - 0
src/views/vent/monitorManager/groutMonitor/components/groutHomelt.vue

@@ -0,0 +1,549 @@
+<template>
+    <div class="monitor-container">
+        <div class="area-box lr-box">
+            <div class="item item-l" v-for="groupNum in monitorDataGroupNum" :key="groupNum">
+                <ventBox1>
+                    <template #title>
+                        <div>注浆站输出监测</div>
+                    </template>
+                    <template #container>
+                        <div class="monitor-box">
+                            <div class="monitor-item">
+                                <div class="state-item" v-for="(preFan, index) in groutFanMonitorData" :key="index">
+                                    <div class="state-title">{{ preFan.title }}</div>
+                                    <div v-if="preFan.unit !== 'signal'" class="state-val">{{
+                monitorData[preFan.code] >= 0 ?
+                    formatNum(Number(monitorData[preFan.code])) : '-'
+            }}</div>
+                                    <div v-else :class="{
+                    'signal-round': true,
+                    'signal-round-warning': monitorData[preFan.code] == '1',
+                    'signal-round-run': monitorData[preFan.code] == '0',
+                    'signal-round-gry':monitorData[preFan.code] != '0' && monitorData[preFan.code] != '1'
+                }"></div>
+                                </div>
+                            </div>
+                        </div>
+                    </template>
+                </ventBox1>
+            </div>
+        </div>
+        <div class="header-box">
+            <div class="header-container">
+                <div class="device-detail">
+                    <div class="device-title">&nbsp</div>
+                    <div class="device-val">是否运行</div>
+                    <div class="device-val">是否停止</div>
+                    <div class="device-val">故障</div>
+                    <div class="device-val">运行反馈</div>
+                </div>
+                <div v-for="(device, key) in deviceMonitorListLt" class="device-detail" :key="key">
+                    <div class="device-title">{{ device.title }}</div>
+                    <div v-for="(detailItem, index) in device.dataList" :key="detailItem.code" class="device-val">
+                        <span v-if="index == 0"
+                            :style="{ color: monitorData[detailItem.code] == '0' ? '#BFBFBF' : '#10BC79' }">{{
+                monitorData[detailItem.code] == '0' ? '是' : monitorData[detailItem.code] == '1' ? '否' : '-'
+            }}</span>
+                        <span v-if="index == 1"
+                            :style="{ color: monitorData[detailItem.code] == '0' ? '#BFBFBF' : '#10BC79' }">{{
+                monitorData[detailItem.code] == '0' ? '是' : monitorData[detailItem.code] == '1' ? '否' : '-'
+            }}</span>
+                        <span v-if="index == 2"
+                            :style="{ color: monitorData[detailItem.code] == '0' ? '#10BC79' : monitorData[detailItem.code] == '1' ? '#F14C4C' : '#BFBFBF' }">{{
+                monitorData[detailItem.code] == '0' ? '正常' : monitorData[detailItem.code] == '1' ? '报警' :
+                    '-'
+            }}</span>
+                        <span v-if="index == 3"
+                            :style="{ color: monitorData[detailItem.code] == '0' ? '#10BC79' : monitorData[detailItem.code] == '1' ? '#F14C4C' : '#BFBFBF' }">{{
+                monitorData[detailItem.code] == '0' ? '正常' : monitorData[detailItem.code] == '1' ? '报警' :
+                    '-'
+            }}</span>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="lr-box area-box">
+            <div class="item item-l" v-for="groupNum in monitorDataGroupNum" :key="groupNum">
+                <ventBox1>
+                    <template #title>
+                        <div>注浆站状态监测</div>
+                    </template>
+                    <template #container>
+                        <div class="monitor-box">
+                            <div class="monitor-item">
+                                <div class="state-item" v-for="(preFan, index) in preFanMonitorData" :key="index">
+                                    <div class="state-title">{{ preFan.title + (preFan.unit !== 'signal' ?
+                `(${preFan.unit})` : '') }}</div>
+
+                                    <div :class="{
+                'signal-round': true,
+                'signal-round-warning': monitorData[preFan.code] == '1',
+                'signal-round-run': monitorData[preFan.code] == '0',
+                'signal-round-gry':monitorData[preFan.code] != '0' && monitorData[preFan.code] != '1'
+            }"></div>
+                                </div>
+                            </div>
+                        </div>
+                    </template>
+                </ventBox1>
+            </div>
+        </div>
+
+        <div ref="playerRef"
+            style="z-index: 999; position: absolute; top: 100px; right: 15px; height: 100%; margin: auto; pointer-events: none">
+        </div>
+    </div>
+</template>
+
+<script setup lang="ts">
+import { watch, ref, onMounted, onUnmounted, defineProps, reactive } from 'vue';
+import ventBox1 from '/@/components/vent/ventBox1.vue';
+import { mountedThree, destroy, setModelType } from '../grout.threejs';
+import { formatNum } from '/@/utils/ventutil';
+import { deviceMonitorListLt, preFanMonitorData, groutFanMonitorData } from '../grout.data';
+import { list } from '../grout.api';
+import { useCamera } from '/@/hooks/system/useCamera';
+
+const props = defineProps({
+    deviceId: {
+        type: String,
+        require: true,
+    },
+    deviceType: {
+        type: String,
+        require: true,
+    },
+});
+
+let monitorDataGroupNum = ref(1)
+
+const loading = ref(false);
+const monitorData = ref({});
+
+const playerRef = ref();
+const { getCamera, removeCamera } = useCamera();
+
+// https获取监测数据
+let timer: null | NodeJS.Timeout = null;
+function getMonitor(flag?) {
+    if (Object.prototype.toString.call(timer) === '[object Null]') {
+        return new Promise((resolve) => {
+            timer = setTimeout(
+                async () => {
+                    if (props.deviceId) {
+                        await getDataSource(props.deviceId);
+                    }
+                    if (timer) {
+                        timer = null;
+                    }
+                    resolve(null);
+                    await getMonitor();
+                },
+                flag ? 0 : 1000
+            );
+        });
+    }
+}
+
+async function getDataSource(systemID) {
+    const res = await list({ devicetype: 'pulping_auto', systemID, pagetype: 'normal' });
+    const result = res.deviceInfo;
+    for (const key in result) {
+        const item = result[key];
+        if (item.type.startsWith('pulping')) {
+            monitorData.value = Object.assign(item['datalist'][0], item['datalist'][0]['readData']);
+        }
+
+        loading.value = false;
+    }
+}
+
+watch(
+    () => props.deviceId,
+    async (deviceId) => {
+        if (deviceId) {
+            await getCamera(deviceId, playerRef.value);
+        }
+    }
+);
+
+onMounted(() => {
+    loading.value = true;
+    mountedThree().then(async () => {
+        // await setModelType('groutBase');
+        await setModelType('bertaiBase');
+        loading.value = false;
+        timer = null;
+        getMonitor(true)?.then(async () => {
+            if (props.deviceId) await getCamera(props.deviceId, playerRef.value);
+        });
+    });
+});
+onUnmounted(() => {
+    destroy();
+    removeCamera();
+    if (timer) {
+        clearTimeout(timer);
+        timer = undefined;
+    }
+});
+</script>
+<style lang="less" scoped>
+@import '/@/design/vent/modal.less';
+@ventSpace: zxm;
+
+.monitor-container {
+    width: 100%;
+    height: 100%;
+    // height: 550px;
+    // border: 1px solid #fff;
+    margin-top: 40px;
+    display: flex;
+    justify-content: space-between;
+    // justify-content: center;
+    padding: 0 5px;
+
+    .header-box {
+        margin: 50px 15px 0px 15px;
+
+        .header-container {
+            height: auto;
+            display: flex;
+            flex-direction: row;
+            justify-content: center;
+            color: #fff;
+            box-shadow: 0 0 30px rgb(0, 153, 184) inset;
+        }
+
+        .device-title {
+            width: 110px;
+            text-align: center;
+            border-top: 1px solid #00baffd4;
+            border-left: 1px solid #00baffd4;
+            line-height: 46px;
+            color: #00e5ff;
+            background-color: #00bbff21;
+        }
+
+        .device-detail {
+            text-align: center;
+
+            &:first-child {
+                background-color: #00bbff11;
+            }
+
+            &:last-child {
+
+                .device-val,
+                .device-title {
+                    border-right: 1px solid #00baffd4;
+                }
+            }
+
+            .device-val {
+                line-height: 36px;
+                border-top: 1px solid #00baffd4;
+                border-left: 1px solid #00baffd4;
+
+                &:last-child {
+                    border-bottom: 1px solid #00baffd4;
+                }
+            }
+        }
+    }
+
+    .lr-box {
+        height: 100%;
+        display: flex;
+        flex-direction: column;
+        position: relative;
+        // overflow: hidden;
+        z-index: 9999;
+        pointer-events: auto;
+        overflow-y: auto;
+        overflow-x: hidden;
+    }
+
+    .area-box {
+        width: 335px;
+        margin-top: 50px;
+
+        .input-item {
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            padding: 4px 8px;
+            margin: 6px 0;
+            background-image: linear-gradient(to right, #39deff15, #3977e500);
+
+            .title {
+                width: 200px;
+            }
+
+            .title-auto {
+                width: auto;
+            }
+
+            .input-value {
+                width: 80px;
+                height: 28px;
+                line-height: 28px !important;
+                background: transparent !important;
+                border-color: #228da2 !important;
+                color: #fff !important;
+            }
+
+            .value {
+                width: 100px;
+                color: #00d8ff;
+                padding-right: 20px;
+            }
+
+            .unit {
+                width: 80px;
+            }
+        }
+    }
+
+    .item {
+        width: 305px;
+        height: 450px;
+        position: relative;
+        border-radius: 5px;
+        margin-top: 10px;
+        margin-bottom: 0px;
+        pointer-events: auto;
+        color: #fff;
+        // overflow: hidden;
+
+        &:first-child {
+            margin-top: 0px;
+        }
+
+        .base-title {
+            color: #fff;
+            margin-bottom: 8px;
+            padding-left: 10px;
+            position: relative;
+            font-size: 16px;
+
+            &::after {
+                content: '';
+                position: absolute;
+                display: block;
+                width: 4px;
+                height: 12px;
+                top: 7px;
+                left: 0px;
+                background: #45d3fd;
+                border-radius: 4px;
+            }
+        }
+
+        .monitor-item {
+            width: 100%;
+            display: flex;
+            flex-direction: row;
+            flex-wrap: wrap;
+
+            .state-item {
+                width: 50%;
+                padding: 5px;
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+
+                .state-title {
+                    width: 100px;
+                    color: #ffffffdd;
+                    flex: 9;
+                    font-size: 14px;
+
+                    .unit {
+                        // color: #ffffffbb;
+                    }
+                }
+
+                .state-val {
+                    flex: 1;
+                    color: #e4a300;
+                    margin-right: 5px;
+                    text-align: right;
+                    font-size: 14px;
+                }
+            }
+        }
+
+        .signal-box {
+            margin: 5px 0;
+            display: flex;
+            align-items: center;
+
+            .signal-title {
+                color: #7af5ff;
+                margin: 0 5px;
+            }
+
+            &:last-child {
+                margin-right: 0px;
+            }
+        }
+
+        .list-item {
+            padding: 0 10px;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+
+            .item-data-key {
+                color: #ffffff99;
+            }
+        }
+
+        .item-data-box {
+            color: #fff;
+
+            .state-icon {
+                display: inline-block;
+                width: 12px;
+                height: 12px;
+                border-radius: 12px;
+            }
+
+            .open {
+                border: 5px solid #133a56;
+                background: #4ecb73;
+            }
+
+            .close {
+                border: 5px solid #192961;
+                background: #6d7898;
+            }
+        }
+    }
+
+    .item-l {
+        width: 100%;
+
+        .monitor-box {
+            width: 100%;
+
+            .parameter-title {
+                position: relative;
+                width: 100%;
+                height: 14px;
+                margin-top: 10px;
+
+                .icon,
+                span {
+                    position: absolute;
+                    top: -10px;
+                }
+            }
+
+            .group-parameter-title {
+                background-image: linear-gradient(to right, #39a3ff50, #39a3ff00);
+
+                .icon {
+                    left: -12px;
+                    top: -17px;
+                }
+
+                span {
+                    left: 18px;
+                }
+
+                .item-col {
+                    background-image: linear-gradient(to right, #39a3ff00, #39a3ff10);
+                }
+            }
+
+            .device-parameter-title {
+                background-image: linear-gradient(to right, #3df6ff40, #3df6ff00);
+
+                .icon {
+                    left: -10px;
+                    top: -14px;
+                }
+
+                span {
+                    left: 18px;
+                }
+
+                .item-col {
+                    background-image: linear-gradient(to right, #3df6ff10, #3df6ff00);
+                }
+            }
+        }
+    }
+
+    .signal-round {
+        display: inline-block;
+        width: 8px;
+        height: 8px;
+        border-radius: 50%;
+        margin: 0 10px;
+        position: relative;
+
+        &::after {
+            display: block;
+            content: '';
+            position: absolute;
+            width: 12px;
+            height: 12px;
+            top: -2px;
+            left: -2px;
+            border-radius: 50%;
+        }
+    }
+
+    .signal-round-gry {
+        background-color: #858585;
+
+        &::after {
+            background-color: #85858544;
+            box-shadow: 0 0 1px 1px #85858599;
+        }
+    }
+
+    .signal-round-run {
+        background-color: #67fc00;
+
+        &::after {
+            background-color: #67fc0044;
+            box-shadow: 0 0 1px 1px #c6ff77;
+        }
+    }
+
+    .signal-round-warning {
+        background-color: #e9170b;
+
+        &::after {
+            background-color: #e9170b44;
+            box-shadow: 0 0 1px 1px #e9170b;
+        }
+    }
+
+}
+
+:deep(.@{ventSpace}-tabs-tabpane-active) {
+    overflow: auto;
+}
+
+.input-box {
+    display: flex;
+    align-items: center;
+    padding-left: 10px;
+
+    .input-title {
+        color: #73e8fe;
+        width: auto;
+    }
+
+    .@{ventSpace}-input-number {
+        border-color: #ffffff88 !important;
+    }
+
+    margin-right: 10px;
+}
+</style>

+ 340 - 1
src/views/vent/monitorManager/groutMonitor/grout.data.ts

@@ -2,6 +2,341 @@ import { reactive, defineAsyncComponent } from 'vue';
 import echarts from '/@/utils/lib/echarts';
 import { useGlobSetting } from '/@/hooks/setting';
 
+//lxh
+export const deviceMonitorListLt = [
+
+  {
+    title: '排污泵',
+    dataList: [
+      {
+        title: '启动',
+        code: 'A11',
+      },
+      {
+        title: '停止',
+        code: 'A12',
+      },
+      {
+        title: '故障',
+        code: 'A70',
+      },
+      {
+        title: '运行反馈',
+        code: 'A69',
+      },
+    ],
+  },
+
+  {
+    title: '渣浆泵',
+    dataList: [
+      {
+        title: '启动',
+        code: 'A5',
+      },
+      {
+        title: '停止',
+        code: 'A6',
+      },
+      {
+        title: '故障',
+        code: 'A60',
+      },
+      {
+        title: '运行反馈',
+        code: 'A59',
+      },
+    ],
+  },
+  {
+    title: '增压泵1',
+    dataList: [
+      {
+        title: '启动',
+        code: 'A88',
+      },
+      {
+        title: '停止',
+        code: 'A9',
+      },
+      {
+        title: '故障',
+        code: 'A62',
+      },
+      {
+        title: '运行反馈',
+        code: 'A61',
+      },
+    ],
+  },
+  {
+    title: '增压泵2',
+    dataList: [
+      {
+        title: '启动',
+        code: 'A89',
+      },
+      {
+        title: '停止',
+        code: 'A10',
+      },
+      {
+        title: '故障',
+        code: 'A64',
+      },
+      {
+        title: '运行反馈',
+        code: 'A63',
+      },
+    ],
+  },
+  {
+    title: '制滤机1',
+    dataList: [
+      {
+        title: '启动',
+        code: 'A83',
+      },
+      {
+        title: '停止',
+        code: '',
+      },
+      {
+        title: '故障',
+        code: 'A51',
+      },
+      {
+        title: '运行反馈',
+        code: 'A55',
+      },
+    ],
+  },
+  {
+    title: '制滤机2',
+    dataList: [
+      {
+        title: '启动',
+        code: 'A84',
+      },
+      {
+        title: '停止',
+        code: '',
+      },
+      {
+        title: '故障',
+        code: 'A52',
+      },
+      {
+        title: '运行反馈',
+        code: 'A56',
+      },
+    ],
+  },
+  {
+    title: '清水泵',
+    dataList: [
+      {
+        title: '启动',
+        code: 'A85',
+      },
+      {
+        title: '停止',
+        code: '',
+      },
+      {
+        title: '故障',
+        code: 'A53',
+      },
+      {
+        title: '运行反馈',
+        code: 'A57',
+      },
+    ],
+  },
+  {
+    title: '搅拌机',
+    dataList: [
+      {
+        title: '启动',
+        code: 'A86',
+      },
+      {
+        title: '停止',
+        code: '',
+      },
+      {
+        title: '故障',
+        code: 'A54',
+      },
+      {
+        title: '运行反馈',
+        code: 'A58',
+      },
+    ],
+  },
+];
+//lxh
+export const preFanMonitorData = [
+  {
+    title: '自动启',
+    code: 'A1',
+    unit: 'signal',
+  },
+  {
+    title: '自动停止',
+    code: 'A4',
+    unit: 'signal',
+  },
+  {
+    title: '水增',
+    code: 'A13',
+    unit: 'signal',
+  },
+  {
+    title: '水减',
+    code: 'A14',
+    unit: 'signal',
+  },
+  {
+    title: '浆增',
+    code: 'A15',
+    unit: 'signal',
+  },
+  {
+    title: '浆减',
+    code: 'A16',
+    unit: 'signal',
+  },
+  {
+    title: '自流阀增',
+    code: 'A17',
+    unit: 'signal',
+  },
+  {
+    title: '自流阀减',
+    code: 'A18',
+    unit: 'signal',
+  },
+  {
+    title: '灌浆阀门增',
+    code: 'A19',
+    unit: 'signal',
+  },
+  {
+    title: '灌浆阀门减',
+    code: 'A20',
+    unit: 'signal',
+  },
+  {
+    title: '制浆系统停止',
+    code: 'A3',
+    unit: 'signal',
+  },
+  {
+    title: '水泵手动启动',
+    code: 'A42',
+    unit: 'signal',
+  },
+
+  {
+    title: '制浆机1手动启动',
+    code: 'A40',
+    unit: 'signal',
+  },
+  {
+    title: '制浆机2手动启动',
+    code: 'A41',
+    unit: 'signal',
+  },
+
+  {
+    title: '灌浆自动',
+    code: 'A43',
+    unit: 'signal',
+  },
+  {
+    title: '灌浆手动',
+    code: 'A44',
+    unit: 'signal',
+  },
+
+  {
+    title: '增压泵自动',
+    code: 'A48',
+    unit: 'signal',
+  },
+  {
+    title: '增压泵手动',
+    code: 'A49',
+    unit: 'signal',
+  },
+  {
+    title: '增压泵启',
+    code: 'A7',
+    unit: 'signal',
+  },
+  {
+    title: '增压泵停',
+    code: 'A8',
+    unit: 'signal',
+  },
+  {
+    title: '急停',
+    code: 'A45',
+    unit: 'signal',
+  },
+  {
+    title: '故障复位',
+    code: 'A50',
+    unit: 'signal',
+  },
+
+
+];
+//lxh
+export const groutFanMonitorData = [
+  {
+    title: 'CPU_输出7',
+    code: 'A90',
+    unit: 'signal',
+  },
+  {
+    title: 'CPU_输出8',
+    code: 'A91',
+    unit: 'signal',
+  },
+  {
+    title: 'CPU_输出10',
+    code: 'A93',
+    unit: 'signal',
+  },
+  {
+    title: 'CPU_输出11',
+    code: 'A94',
+    unit: '',
+  },
+  {
+    title: 'CPU_输出12',
+    code: 'A95',
+    unit: '',
+  },
+  {
+    title: 'CPU_输出13',
+    code: 'A96',
+    unit: '',
+  },
+  {
+    title: 'CPU_输出14',
+    code: 'A97',
+    unit: '',
+  },
+  {
+    title: 'CPU_输出15',
+    code: 'A98',
+    unit: '',
+  },
+];
+
 export const warningConfig = reactive({
   header: ['设备名称', '预警信息', '时间'],
   data: [
@@ -319,8 +654,12 @@ export function getMonitorComponent() {
     case 'sdmtjtdltmkhjtj': // 活鸡兔井
       groutHome = defineAsyncComponent(() => import('./components/groutHomeHjt.vue'));
       return groutHome;
+    case 'sdmtjtltmk'://柳塔
+      groutHome = defineAsyncComponent(() => import('./components/groutHomelt.vue'));
+      break;
     default:
-      groutHome = defineAsyncComponent(() => import('./components/groutHomeHjt.vue'));
+      // groutHome = defineAsyncComponent(() => import('./components/groutHomeHjt.vue'));
+      groutHome = defineAsyncComponent(() => import('./components/groutHomelt.vue'));
       return groutHome;
   }
 }