ソースを参照

沙吉海光钎测温页面-提交

lxh 11 ヶ月 前
コミット
62f5a06d3b

+ 0 - 200
src/views/vent/monitorManager/compressor/ceshi.json

@@ -1,200 +0,0 @@
-{
-    "success": true,
-    "message": "",
-    "code": 200,
-    "result": {
-        "cmd": "monitordata",
-        "msgTxt": [
-            {
-                "datalist": [
-                    {
-                        "msgType": null,
-                        "deviceID": "1765901318806863873",
-                        "strname": "注氮机",
-                        "strinstallpos": "注氮机",
-                        "fsectarea": "null",
-                        "stationname": "注氮机",
-                        "deviceType": "nitrogen_auto",
-                        "typeName": "制氮机",
-                        "netStatus": 1,
-                        "warnFlag": 0,
-                        "warnLevel": 0,
-                        "warnLevel_str": "正常",
-                        "warnTime": null,
-                        "readTime": "2024-03-19 11:05:04",
-                        "warnDes": "",
-                        "frontGateOpenCtrl": null,
-                        "rearGateOpenCtrl": null,
-                        "readData": {
-                            "pipe_temperature": "9.54",
-                            "nitrogen_concentration": "98.49",
-                            "adsorption_time": "0",
-                            "prepare_work_str": "制氮中",
-                            "sign": "0",
-                            "remote_local_str": "就地",
-                            "nitrogen_flow_rate": "150.31",
-                            "bypass_valve_opening": "0.0",
-                            "remote_local": "0",
-                            "prepare_work": "0",
-                            "poweron_balance": "0",
-                            "balance_time": "0",
-                            "electric_nitrogen_discharge": "0.0",
-                            "nitrogen_discharge_opening": "51.71",
-                            "isRun": "-2",
-                            "pipe_pressure": "0.0"
-                        },
-                        "readDataDes": null,
-                        "summaryHour": [],
-                        "summaryDay": [],
-                        "history": [],
-                        "totalInfo": null,
-                        "sign": null,
-                        "cameras": [],
-                        "links": [],
-                        "other1": null,
-                        "other2": null,
-                        "other3": null,
-                        "remarkInfo": null,
-                        "groupNumber": "",
-                        "isUnderground": "0",
-                        "deviceId": 1765901318806863873
-                    }
-                ],
-                "avginfo": {
-                    "warnFlag": {
-                        "value": 0
-                    }
-                },
-                "typeName": "制氮机",
-                "type": "nitrogen_auto"
-            },
-            {
-                "datalist": [
-                    {
-                        "msgType": null,
-                        "deviceID": "1765978085252931586",
-                        "strname": "空压机",
-                        "strinstallpos": "空压机",
-                        "fsectarea": "null",
-                        "stationname": "空压机",
-                        "deviceType": "nitrogen_air_compressor",
-                        "typeName": "空压机",
-                        "netStatus": 1,
-                        "warnFlag": 0,
-                        "warnLevel": 0,
-                        "warnLevel_str": "正常",
-                        "warnTime": null,
-                        "readTime": "2024-03-19 11:05:04",
-                        "warnDes": "",
-                        "frontGateOpenCtrl": null,
-                        "rearGateOpenCtrl": null,
-                        "readData": {
-                            "operation_minutes": "30",
-                            "operation_shutdown_str": "工作",
-                            "phase-sequence_protection_str": "正常",
-                            "pipe_temperature": "-50.0",
-                            "unloading_pressure_settting": "0.0",
-                            "oil_pressure_not_established_str": "正常",
-                            "sign": "0",
-                            "fan1_overload": "0",
-                            "hvc_malfunction_str": "正常",
-                            "oil_pressure_setup time": "0",
-                            "fan4_overload": "0",
-                            "exhaust_pressure": "0.0",
-                            "load_time_setting": "0",
-                            "exhaust_pressure_exceeding_limit": "0",
-                            "temperature_upper_setting": "0.0",
-                            "front_axle_temperature": "0.0",
-                            "hvc_malfunction": "0",
-                            "rear_axle_temperature": "0.0",
-                            "oil_pressure_not_established": "0",
-                            "fan2_overload": "0",
-                            "stator_temperature": "10.64",
-                            "host_temperature": "7.74",
-                            "operation_hours": "29",
-                            "delayed_start_dryer": "0",
-                            "exhaust_pressure_setting": "0.0",
-                            "temperature_lower_setting": "0.0",
-                            "operation_shutdown": "0",
-                            "exhaust_pressure_exceeding_limit_str": "正常",
-                            "fan1_overload_str": "正常",
-                            "fan4_overload_str": "正常",
-                            "loading_pressure_settting": "0.0",
-                            "fan2_overload_str": "正常",
-                            "isRun": "-2",
-                            "pipe_pressure": "0.0",
-                            "fan3_overload": "0",
-                            "phase-sequence_protection": "0",
-                            "fan3_overload_str": "正常"
-                        },
-                        "readDataDes": null,
-                        "summaryHour": [],
-                        "summaryDay": [],
-                        "history": [],
-                        "totalInfo": null,
-                        "sign": null,
-                        "cameras": [],
-                        "links": [],
-                        "other1": null,
-                        "other2": null,
-                        "other3": null,
-                        "remarkInfo": null,
-                        "groupNumber": "",
-                        "isUnderground": "0",
-                        "deviceId": 1765978085252931586
-                    }
-                ],
-                "avginfo": {
-                    "warnFlag": {
-                        "value": 0
-                    }
-                },
-                "typeName": "空压机",
-                "type": "nitrogen_air_compressor"
-            },
-            {
-                "subtype": "sys_nitrogen",
-                "datalist": [
-                    {
-                        "msgType": null,
-                        "deviceID": "1765939630447796226",
-                        "strname": "空压机",
-                        "strinstallpos": "空压机",
-                        "fsectarea": "null",
-                        "stationname": null,
-                        "deviceType": "sys_nitrogen",
-                        "typeName": "注氮",
-                        "netStatus": 0,
-                        "warnFlag": 0,
-                        "warnLevel": null,
-                        "warnLevel_str": null,
-                        "warnTime": null,
-                        "readTime": "2024-03-13 16:57:45",
-                        "warnDes": "",
-                        "frontGateOpenCtrl": null,
-                        "rearGateOpenCtrl": null,
-                        "readData": {
-                            "sign": "0",
-                            "isRun": "-2"
-                        },
-                        "readDataDes": null,
-                        "summaryHour": [],
-                        "summaryDay": [],
-                        "history": [],
-                        "totalInfo": null,
-                        "sign": null,
-                        "cameras": [],
-                        "links": [],
-                        "other1": null,
-                        "other2": null,
-                        "other3": null,
-                        "remarkInfo": "设备断线"
-                    }
-                ],
-                "typeName": "综合监测系统",
-                "type": "sys"
-            }
-        ]
-    },
-    "timestamp": 1710817505061
-}

+ 2 - 1
src/views/vent/monitorManager/deviceMonitor/components/device/device.data.ts

@@ -58,7 +58,8 @@ export function getMonitorComponent() {
       FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal.vue'));
       break;
     default:
-      FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal1.vue'));
+      // FiberModal = defineAsyncComponent(() => import('./modal/fiber.modal1.vue'));
+      FiberModal = defineAsyncComponent(() => import('./modal/fiber.sjh.vue'));
   }
   const BundleModal = defineAsyncComponent(() => import('./modal/bundle.modal.vue'));
   const DustModal = defineAsyncComponent(() => import('./modal/dust.modal.vue'));

+ 457 - 0
src/views/vent/monitorManager/deviceMonitor/components/device/modal/fiber.sjh.vue

@@ -0,0 +1,457 @@
+<template>
+    <BasicModal v-bind="$attrs" @register="register" :title="`光纤测温详情${currentTime}`" width="1200px" @ok="handleOk"
+        @cancel="handleCancel">
+        <div class="fiber-modal">
+            <div class="modal-left">
+                <div v-for="device in deviceList" class="link-item"
+                    :class="{ 'active-device-title': device.deviceID === activeDeviceID }" :key="device.deviceID">
+                    <span class="" @click="selectDevice(device.deviceID)">{{ device.strinstallpos }}</span>
+                </div>
+            </div>
+            <div class="modal-right">
+                <div class="right-top">
+                    <div class="top-item">
+                        <div class="icon">
+                            <SvgIcon class="icon-style max-temperature" size="38" name="max-temperature" />
+                        </div>
+                        <div class="item-container">
+                            <div class="title">最高温度</div>
+                            <div class="value">{{ posMonitor.fmax || '--' }} <span>℃</span> </div>
+                        </div>
+                    </div>
+                    <div class="top-item">
+                        <div class="icon">
+                            <SvgIcon class="icon-style min-temperature" size="38" name="min-temperature" />
+                        </div>
+                        <div class="item-container">
+                            <div class="title">最低温度</div>
+                            <div class="value">{{ posMonitor.fmin || '--' }} <span>℃</span></div>
+                        </div>
+                    </div>
+                    <div class="top-item">
+                        <div class="icon">
+                            <SvgIcon class="icon-style aveg-temperature" size="38" name="aveg-temperature" />
+                        </div>
+                        <div class="item-container">
+                            <div class="title">平均温度</div>
+                            <div class="value">{{ posMonitor.favg || '--' }} <span>℃</span></div>
+                        </div>
+                    </div>
+                    <div class="top-item warning-box">
+                        <div class="icon">
+                            <SvgIcon class="icon-style" size="38" name="risk-level" />
+                        </div>
+                        <div class="item-container">
+                            <div class="title">风险等级</div>
+                            <div class="warning-value">低风险</div>
+                        </div>
+                    </div>
+                </div>
+                <div class="right-center">
+                    <div class="table-box">
+                        <span class="base-title">测点监测详情</span>
+                        <a-table size="small" :columns="columns" :data-source="posList" :pagination="false"
+                            :scroll="{ y: 200 }" />
+                    </div>
+                    <div class="warning-box">
+                        <span class="base-title">预警历史详情</span>
+                        <div class="warning-container">
+                            <dv-scroll-board ref="scrollBoard" :config="warningConfig"
+                                style="width: 100%; height: 240px; overflow-y: auto; border: 1px solid #39e8ff33" />
+                        </div>
+                    </div>
+                </div>
+                <div class="right-bottom">
+                    <span class="base-title">测点监测曲线</span>
+                    <div class="echarts-box">
+                        <BarAndLine xAxisPropType="tempmax" :dataSource="posList1" height="100%"
+                            :chartsColumns="chartsColumns" :option="echatsOption" chartsType="listMonitor" />
+                    </div>
+                </div>
+            </div>
+        </div>
+    </BasicModal>
+</template>
+<script lang="ts">
+import { defineComponent, ref, watch, shallowRef, reactive } from 'vue';
+import { BasicModal, useModalInner } from '/@/components/Modal';
+import BarAndLine from '/@/components/chart/BarAndLine.vue';
+import { SvgIcon } from '/@/components/Icon';
+import { Decoration7 as DvDecoration7, ScrollBoard as DvScrollBoard } from '@kjgl77/datav-vue3';
+import dayjs from 'dayjs';
+
+export default defineComponent({
+    components: { BasicModal, BarAndLine, SvgIcon, DvScrollBoard, DvDecoration7 },
+    props: {
+        dataSource: { type: Array },
+        activeID: { type: String },
+    },
+    setup(props) {
+        const currentTime = ref(dayjs().format('YYYY-MM-DD HH:mm:ss'));
+        const modelRef = ref({});
+        const loading = ref(true);
+        const activeDeviceID = ref<any>('');
+        const deviceList = ref<any[]>([]);
+        const posList = reactive<any[]>([]);
+        const posList1 = reactive<any[]>([]);
+        const posMonitor = shallowRef({});
+
+        const echatsOption = {
+            grid: {
+                top: '20%',
+                left: '2px',
+                right: '10px',
+                bottom: '3%',
+                containLabel: true,
+            },
+            toolbox: {
+                feature: {},
+            },
+        };
+
+        const chartsColumns = [
+            {
+                legend: '测点报警温度',
+                seriesName: '(℃)',
+                ymax: 200,
+                yname: '℃',
+                linetype: 'line',
+                yaxispos: 'left',
+                color: '#FDB146',
+                sort: 1,
+                xRotate: 0,
+                dataIndex: 'value',
+            },
+        ];
+        const columns = [
+            {
+                title: '位置',
+                dataIndex: 'maxposition',
+                align: 'center',
+                width: 120,
+            },
+            {
+                title: '最高温度(℃)',
+                dataIndex: 'tempmax',
+                align: 'center',
+                width: 100,
+            },
+            {
+                title: '起点',
+                dataIndex: 'fiberstart',
+                align: 'center',
+            },
+            {
+                title: '终点',
+                dataIndex: 'fiberend',
+                align: 'center',
+            },
+            {
+                title: '报警状态',
+                dataIndex: 'alarmflag',
+                align: 'center',
+            },
+        ];
+
+        const warningConfig = reactive({
+            header: ['测点', '温度', '预警信息'],
+            data: [
+                ['测点6', '318℃', '严重报警'],
+                ['测点43', '142℃', '一般预警'],
+                ['测点23', '167℃', '一般预警'],
+                ['测点6', '198℃', '超高预警'],
+                ['测点65', '197℃', '超高预警'],
+                ['测点78', '154℃', '一般预警'],
+                ['测点61', '104℃', '一般预警'],
+                ['测点87', '150℃', '一般信息'],
+            ],
+            index: false,
+            columnWidth: [150],
+            headerHeight: 38,
+            headerBGC: '#3d9dd45d',
+            oddRowBGC: '#009acd10',
+            evenRowBGC: '#009acd05',
+            align: ['center', 'center', 'center'],
+        });
+
+        const [register, { setModalProps, closeModal }] = useModalInner();
+
+        function handleVisibleChange(visible) {
+            if (visible) {
+                loading.value = true;
+                setModalProps({ loading: true, confirmLoading: true });
+
+                setTimeout(() => {
+                    loading.value = false;
+                    setModalProps({ loading: false, confirmLoading: false });
+                }, 1000);
+            }
+        }
+
+        // 选择监测
+        function selectDevice(id) {
+            loading.value = true;
+            setModalProps({ loading: true, confirmLoading: true });
+            setTimeout(() => {
+                loading.value = false;
+                activeDeviceID.value = id;
+                setModalProps({ loading: false, confirmLoading: false });
+            }, 300);
+        }
+
+        function handleOk(e) {
+            e.preventDefault();
+            closeModal();
+        }
+
+        function handleCancel(e) {
+            e.preventDefault();
+            closeModal();
+        }
+
+        watch([() => props.dataSource, () => props.activeID], ([newDataSource, newActiveID], [oldDataSource, oldActiveID]) => {
+            console.log(newDataSource, 'newDataSource--------------');
+            deviceList.value = newDataSource as any[];
+            activeDeviceID.value = activeDeviceID.value ? activeDeviceID.value : newActiveID;
+            posList.length = 0;
+            posList1.length = 0
+            newDataSource?.forEach((item: any, index) => {
+                if ((!activeDeviceID.value && index == 0) || item.deviceID === activeDeviceID.value) {
+                    posMonitor.value = item.readData;
+                    posList.push({
+                        maxposition: item.readData['maxposition'],
+                        tempmax: item.readData['tempmax'],
+                        fiberstart: item.readData['fiberstart'],
+                        fiberend: item.readData['fiberend'],
+                        alarmflag: item.readData['alarmflag']=='0' ? '正常' : '报警',
+                    })
+                    let echartList =item.readData.TempStr ? item.readData.TempStr.split(',') : []
+                    echartList.forEach((el, index) => {
+                        posList1.push({ tempmax: index + 1, value: el });
+                    })
+                }
+            });
+        });
+
+        return {
+            register,
+            model: modelRef,
+            currentTime,
+            handleVisibleChange,
+            selectDevice,
+            handleOk,
+            handleCancel,
+            deviceList,
+            activeDeviceID,
+            posMonitor,
+            echatsOption,
+            posList,
+            posList1,
+            chartsColumns,
+            columns,
+            warningConfig,
+        };
+    },
+});
+</script>
+<style lang="less" scoped>
+.fiber-modal {
+    width: 100%;
+    height: 650px;
+    display: flex;
+    flex-direction: row;
+    justify-content: space-between;
+
+    .modal-left {
+        width: 200px;
+        height: 100%;
+        overflow-y: auto;
+        background: #ffffff11;
+        padding: 5px;
+        border-radius: 5px;
+
+        .active-device-title {
+            color: aqua;
+        }
+
+        .link-item {
+            position: relative;
+            cursor: pointer;
+            line-height: 30px;
+            padding-left: 30px;
+
+            span:hover {
+                color: #89ffff;
+            }
+
+            &::after {
+                content: '';
+                position: absolute;
+                display: block;
+                width: 8px;
+                height: 8px;
+                top: 12px;
+                left: 10px;
+                transform: rotateZ(45deg) skew(10deg, 10deg);
+                background: #45d3fd;
+            }
+        }
+    }
+
+    .modal-right {
+        width: calc(100% - 220px);
+        overflow-y: auto;
+
+        .base-title {
+            line-height: 32px;
+            position: relative;
+            padding-left: 20px;
+
+            &::after {
+                content: '';
+                position: absolute;
+                display: block;
+                width: 4px;
+                height: 12px;
+                top: 4px;
+                left: 10px;
+                background: #45d3fd;
+                border-radius: 4px;
+            }
+        }
+
+        .right-top {
+            display: flex;
+            flex-direction: row;
+            justify-content: space-between;
+            margin-bottom: 10px;
+
+            .top-item {
+                width: 200px;
+                height: 80px;
+                display: flex;
+                flex-direction: row;
+                justify-content: center;
+                border: 1px solid rgba(25, 237, 255, 0.4);
+                box-shadow: inset 0 0 10px rgba(0, 197, 255, 0.6);
+                background: rgba(0, 0, 0, 0.06666666666666667);
+                padding-top: 16px;
+
+                .icon {
+                    margin-right: 10px;
+                    margin-top: 5px;
+                    color: #fdb146;
+                }
+
+                .item-container {
+                    width: 100px;
+                    display: flex;
+                    flex-direction: column;
+                    justify-content: center;
+
+                    div {
+                        text-align: center;
+                    }
+
+                    .title {
+                        font-size: 18px;
+                    }
+
+                    .value {
+                        text-shadow: 0 0 25px #00fbfe;
+                        background: linear-gradient(0deg, #45d3fd, #45d3fd, #61ddb1, #61ddb1);
+                        font-style: normal;
+                        background-size: cover;
+                        font-family: electronicFont;
+                        font-size: 30px;
+                        -webkit-background-clip: text;
+                        background-clip: text;
+                        -webkit-text-fill-color: transparent;
+                        position: relative;
+                        top: -8px;
+
+                        span {
+                            font-family: Arial, Helvetica, sans-serif;
+                            font-size: 18px;
+                            color: aliceblue;
+                        }
+                    }
+                }
+            }
+
+            .warning-box {
+                padding-top: 0px;
+
+                .icon {
+                    margin-top: 20px;
+
+                    .icon-style {
+                        color: #fdb146;
+                    }
+                }
+
+                .warning-value {
+                    font-size: 18px;
+                    color: #61ddb1;
+                }
+            }
+        }
+
+        .right-center {
+            margin-top: 20px;
+            display: flex;
+            flex-direction: row;
+            justify-content: space-between;
+
+            .table-box {
+                position: relative;
+                width: 500px;
+                height: 250px;
+            }
+
+            .warning-box {
+                width: calc(100% - 520px);
+
+                .warning-container {
+                    width: 100%;
+                    height: convert;
+                    background: #009acd00;
+
+                    :deep(.dv-scroll-board) {
+                        .row-item {
+                            height: 40px !important;
+                            line-height: 40px !important;
+                        }
+
+                        .header-item {
+                            border-top: 1px solid #91e9fe !important;
+                            border-bottom: 1px solid #91e9fe !important;
+                        }
+                    }
+                }
+            }
+        }
+
+        .right-bottom {
+            margin-top: 20px;
+
+            .echarts-box {
+                width: 100%;
+                height: 230px;
+            }
+        }
+    }
+}
+
+:deep(.zxm-table-body) {
+    border: 1px solid rgba(57, 232, 255, 0.2) !important;
+
+    .zxm-table-tbody>tr>td {
+        border: none !important;
+    }
+}
+
+:deep(.zxm-table-cell) {
+    border-right: none !important;
+}
+</style>