| 
		 Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 11 KiB  | 
| 
		 After Width: | Height: | Size: 5.1 KiB  | 
| 
		 After Width: | Height: | Size: 9.0 KiB  | 
| 
		 Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.1 KiB  | 
| 
		 After Width: | Height: | Size: 9.0 KiB  | 
@ -0,0 +1,431 @@ | 
				
			|||||||
 | 
					<template> | 
				
			||||||
 | 
					  <div class="app-container" v-loading="loading"> | 
				
			||||||
 | 
					    <!-- 状态统计 --> | 
				
			||||||
 | 
					    <div class="status-statistics"> | 
				
			||||||
 | 
					      <div class="status-card"> | 
				
			||||||
 | 
					        <div class="status-label">运行设备</div> | 
				
			||||||
 | 
					        <div class="status-value-running"> | 
				
			||||||
 | 
					          {{ statistics.running }}/{{ total }} | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					      </div> | 
				
			||||||
 | 
					      <div class="status-card"> | 
				
			||||||
 | 
					        <div class="status-label">手动模式</div> | 
				
			||||||
 | 
					        <div class="status-value-auto">{{ statistics.manual }}/{{ total }}</div> | 
				
			||||||
 | 
					      </div> | 
				
			||||||
 | 
					      <div class="status-card"> | 
				
			||||||
 | 
					        <div class="status-label">自动模式</div> | 
				
			||||||
 | 
					        <div class="status-value-maintenance"> | 
				
			||||||
 | 
					          {{ statistics.auto }}/{{ total }} | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					      </div> | 
				
			||||||
 | 
					      <div class="status-card"> | 
				
			||||||
 | 
					        <div class="status-label">故障设备</div> | 
				
			||||||
 | 
					        <div class="status-value-error">{{ statistics.warn }}/{{ total }}</div> | 
				
			||||||
 | 
					      </div> | 
				
			||||||
 | 
					    </div> | 
				
			||||||
 | 
					    <el-tabs v-model="activeName" @tab-click="handleClick"> | 
				
			||||||
 | 
					      <el-tab-pane label="主机" name="host"> </el-tab-pane> | 
				
			||||||
 | 
					      <el-tab-pane label="冷却塔" name="second"> </el-tab-pane> | 
				
			||||||
 | 
					      <el-tab-pane label="冷却泵" name="three"> </el-tab-pane> | 
				
			||||||
 | 
					      <el-tab-pane label="冷冻泵" name="three"> </el-tab-pane> | 
				
			||||||
 | 
					      <el-tab-pane label="冷冻蝶阀" name="three"> </el-tab-pane> | 
				
			||||||
 | 
					      <el-tab-pane label="冷却蝶阀" name="three"> </el-tab-pane> | 
				
			||||||
 | 
					      <el-tab-pane label="冷却塔出水阀" name="three"> </el-tab-pane> | 
				
			||||||
 | 
					    </el-tabs> | 
				
			||||||
 | 
					    <!-- 非蝶阀控制列表 --> | 
				
			||||||
 | 
					    <div class="device-container"> | 
				
			||||||
 | 
					      <list-header | 
				
			||||||
 | 
					        :deviceList="hostList" | 
				
			||||||
 | 
					        @operationControl="hadleOperationConrol" | 
				
			||||||
 | 
					      ></list-header> | 
				
			||||||
 | 
					    </div> | 
				
			||||||
 | 
					    <div class="device-container"> | 
				
			||||||
 | 
					      <list-header | 
				
			||||||
 | 
					        :deviceList="coolingTowerFanList" | 
				
			||||||
 | 
					        @operationControl="hadleOperationConrol" | 
				
			||||||
 | 
					      ></list-header> | 
				
			||||||
 | 
					    </div> | 
				
			||||||
 | 
					    <div class="device-container"> | 
				
			||||||
 | 
					      <list-header | 
				
			||||||
 | 
					        :deviceList="coolingPump" | 
				
			||||||
 | 
					        @operationControl="hadleOperationConrol" | 
				
			||||||
 | 
					      ></list-header> | 
				
			||||||
 | 
					    </div> | 
				
			||||||
 | 
					    <div class="device-container"> | 
				
			||||||
 | 
					      <list-header | 
				
			||||||
 | 
					        :deviceList="freezingPump" | 
				
			||||||
 | 
					        @operationControl="hadleOperationConrol" | 
				
			||||||
 | 
					      ></list-header> | 
				
			||||||
 | 
					    </div> | 
				
			||||||
 | 
					    <!-- 蝶阀控制列表 --> | 
				
			||||||
 | 
					    <div class="device-container"> | 
				
			||||||
 | 
					      <vavleheader | 
				
			||||||
 | 
					        :valveList="freezingValve" | 
				
			||||||
 | 
					        @operationControl="hadleOperationConrol" | 
				
			||||||
 | 
					      ></vavleheader> | 
				
			||||||
 | 
					    </div> | 
				
			||||||
 | 
					    <div class="device-container"> | 
				
			||||||
 | 
					      <vavleheader | 
				
			||||||
 | 
					        :valveList="coolingValve" | 
				
			||||||
 | 
					        @operationControl="hadleOperationConrol" | 
				
			||||||
 | 
					      ></vavleheader> | 
				
			||||||
 | 
					    </div> | 
				
			||||||
 | 
					    <div class="device-container"> | 
				
			||||||
 | 
					      <vavleheader | 
				
			||||||
 | 
					        :valveList="coolingTowerOutValve" | 
				
			||||||
 | 
					        @operationControl="hadleOperationConrol" | 
				
			||||||
 | 
					      ></vavleheader> | 
				
			||||||
 | 
					    </div> | 
				
			||||||
 | 
					  </div> | 
				
			||||||
 | 
					</template> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script> | 
				
			||||||
 | 
					import { operationList, operationConrol } from "@/api/centerairC/sysMonitor"; | 
				
			||||||
 | 
					import listHeader from "./listHeader.vue"; | 
				
			||||||
 | 
					import Vavleheader from "./vavleheader.vue"; | 
				
			||||||
 | 
					export default { | 
				
			||||||
 | 
					  components: { listHeader, Vavleheader }, | 
				
			||||||
 | 
					  name: "sysMonitor", | 
				
			||||||
 | 
					  data() { | 
				
			||||||
 | 
					    return { | 
				
			||||||
 | 
					      loading: false, | 
				
			||||||
 | 
					      deviceList: [], //全部 | 
				
			||||||
 | 
					      hostList: [], //主机 | 
				
			||||||
 | 
					      coolingTowerFanList: [], //冷却塔风机 | 
				
			||||||
 | 
					      coolingPump: [], //冷却泵 | 
				
			||||||
 | 
					      freezingPump: [], //冷冻泵 | 
				
			||||||
 | 
					      valveList: [], //阀 | 
				
			||||||
 | 
					      total: null, | 
				
			||||||
 | 
					      freezingValve: [], //冷冻蝶阀 | 
				
			||||||
 | 
					      coolingValve: [], //冷却蝶阀 | 
				
			||||||
 | 
					      coolingTowerOutValve: [], //冷却塔出水阀 | 
				
			||||||
 | 
					      activeName: "host", //设备管理 | 
				
			||||||
 | 
					    }; | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  computed: { | 
				
			||||||
 | 
					    statistics() { | 
				
			||||||
 | 
					      const deviceManual = this.deviceList.filter( | 
				
			||||||
 | 
					        (d) => d.automaticText === false | 
				
			||||||
 | 
					      ).length; | 
				
			||||||
 | 
					      const deviceAuto = this.deviceList.filter( | 
				
			||||||
 | 
					        (d) => d.automaticText === true | 
				
			||||||
 | 
					      ).length; | 
				
			||||||
 | 
					      const valveManual = this.valveList.filter( | 
				
			||||||
 | 
					        (v) => v.automaticText === false | 
				
			||||||
 | 
					      ).length; | 
				
			||||||
 | 
					      const valveAuto = this.valveList.filter( | 
				
			||||||
 | 
					        (v) => v.automaticText === true | 
				
			||||||
 | 
					      ).length; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      return { | 
				
			||||||
 | 
					        running: this.deviceList.filter((d) => d.runStatus === "运行").length, | 
				
			||||||
 | 
					        manual: deviceManual + valveManual, | 
				
			||||||
 | 
					        auto: deviceAuto + valveAuto, | 
				
			||||||
 | 
					        warn: this.deviceList.filter((d) => d.warnText === "故障").length, | 
				
			||||||
 | 
					      }; | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  mounted() { | 
				
			||||||
 | 
					    this.getOperationList(); | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  methods: { | 
				
			||||||
 | 
					    handleClick(tab, event) { | 
				
			||||||
 | 
					      console.log(tab, event); | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					    // 系统控制列表 | 
				
			||||||
 | 
					    getOperationList() { | 
				
			||||||
 | 
					      return new Promise((resolve, reject) => { | 
				
			||||||
 | 
					        operationList({ systemType: 0 }) | 
				
			||||||
 | 
					          .then((res) => { | 
				
			||||||
 | 
					            console.log("列表返回res", res); | 
				
			||||||
 | 
					            if (res.code === 200) { | 
				
			||||||
 | 
					              let handleList = res.rows; | 
				
			||||||
 | 
					              this.deviceList = []; | 
				
			||||||
 | 
					              this.valveList = []; | 
				
			||||||
 | 
					              handleList.forEach((element) => { | 
				
			||||||
 | 
					                if (element.children && element.children.length > 0) { | 
				
			||||||
 | 
					                  // 初始化一个空对象来存储非蝶阀处理后的结果 | 
				
			||||||
 | 
					                  let deviceItem = { | 
				
			||||||
 | 
					                    name: element.name, | 
				
			||||||
 | 
					                  }; | 
				
			||||||
 | 
					                  // 初始化一个空对象来存储阀门处理后的结果 | 
				
			||||||
 | 
					                  let valveItem = { | 
				
			||||||
 | 
					                    name: element.name, | 
				
			||||||
 | 
					                  }; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  const limitedChildren = element.children; | 
				
			||||||
 | 
					                  let valveClosed = false; | 
				
			||||||
 | 
					                  let valveOpened = false; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  limitedChildren.forEach((child) => { | 
				
			||||||
 | 
					                    if (child.name) { | 
				
			||||||
 | 
					                      // 运行状态 | 
				
			||||||
 | 
					                      if ( | 
				
			||||||
 | 
					                        child.paramType === "1" && | 
				
			||||||
 | 
					                        !child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        deviceItem.runStatus = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? "不运行" : "运行"; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 手动控制 | 
				
			||||||
 | 
					                      else if ( | 
				
			||||||
 | 
					                        child.paramType === "2" && | 
				
			||||||
 | 
					                        !child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        deviceItem.controlText = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? false : true; | 
				
			||||||
 | 
					                        deviceItem.controlId = child.id; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 手自动切换    0自动1手动 | 
				
			||||||
 | 
					                      else if ( | 
				
			||||||
 | 
					                        child.paramType === "6" && | 
				
			||||||
 | 
					                        !child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        deviceItem.automaticText = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? true : false; | 
				
			||||||
 | 
					                        deviceItem.automaticId = child.id; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 故障报警 | 
				
			||||||
 | 
					                      else if ( | 
				
			||||||
 | 
					                        child.paramType === "5" && | 
				
			||||||
 | 
					                        !child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        deviceItem.warnText = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? "未故障" : "故障"; | 
				
			||||||
 | 
					                        // 本地远程 | 
				
			||||||
 | 
					                      } else if ( | 
				
			||||||
 | 
					                        child.paramType === "22" && | 
				
			||||||
 | 
					                        !child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        deviceItem.localRemote = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? "本地" : "远程"; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 频率调节 | 
				
			||||||
 | 
					                      else if ( | 
				
			||||||
 | 
					                        child.paramType === "3" && | 
				
			||||||
 | 
					                        !child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        deviceItem.frequencySet = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? "0" : child.value; | 
				
			||||||
 | 
					                        deviceItem.frequencyId = child.id; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 频率反馈 | 
				
			||||||
 | 
					                      else if (child.paramType === "4") { | 
				
			||||||
 | 
					                        deviceItem.frequency = child.value; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                      // 阀门的-手自动切换 | 
				
			||||||
 | 
					                      else if ( | 
				
			||||||
 | 
					                        child.paramType === "6" && | 
				
			||||||
 | 
					                        child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        valveItem.automaticText = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? true : false; | 
				
			||||||
 | 
					                        valveItem.automaticId = child.id; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 阀门的-手动控制 | 
				
			||||||
 | 
					                      else if ( | 
				
			||||||
 | 
					                        child.paramType === "2" && | 
				
			||||||
 | 
					                        child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        valveItem.controlText = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? false : true; | 
				
			||||||
 | 
					                        valveItem.controlId = child.id; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                      // 记录阀关到位状态 | 
				
			||||||
 | 
					                      if ( | 
				
			||||||
 | 
					                        child.name.includes("阀关到位") && | 
				
			||||||
 | 
					                        Number(child.value) == 0 | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        valveClosed = false; | 
				
			||||||
 | 
					                      } else if ( | 
				
			||||||
 | 
					                        child.name.includes("阀关到位") && | 
				
			||||||
 | 
					                        Number(child.value) == 1 | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        valveClosed = true; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 记录阀开到位的状态 | 
				
			||||||
 | 
					                      if ( | 
				
			||||||
 | 
					                        child.name.includes("阀开到位") && | 
				
			||||||
 | 
					                        Number(child.value) == 0 | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        valveOpened = false; | 
				
			||||||
 | 
					                      } else if ( | 
				
			||||||
 | 
					                        child.name.includes("阀开到位") && | 
				
			||||||
 | 
					                        Number(child.value) == 1 | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        valveOpened = true; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                    } | 
				
			||||||
 | 
					                  }); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  // 根据阀关到位和阀开到位的状态设置阀门状态 | 
				
			||||||
 | 
					                  if (valveClosed && !valveOpened) { | 
				
			||||||
 | 
					                    valveItem.closeStatus = "开启"; | 
				
			||||||
 | 
					                    valveItem.openStauts = "关闭"; | 
				
			||||||
 | 
					                  } else if (!valveClosed && valveOpened) { | 
				
			||||||
 | 
					                    valveItem.closeStatus = "关闭"; | 
				
			||||||
 | 
					                    valveItem.openStauts = "开启"; | 
				
			||||||
 | 
					                  } else if (!valveClosed && !valveOpened) { | 
				
			||||||
 | 
					                    valveItem.closeStatus = "关闭"; | 
				
			||||||
 | 
					                    valveItem.openStauts = "关闭"; | 
				
			||||||
 | 
					                  } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  // 将处理后的对象添加到 deviceList 中 | 
				
			||||||
 | 
					                  if (Object.keys(deviceItem).length > 1) { | 
				
			||||||
 | 
					                    this.deviceList.push(deviceItem); | 
				
			||||||
 | 
					                  } | 
				
			||||||
 | 
					                  // 将处理后的对象添加到 valveList 中 | 
				
			||||||
 | 
					                  if (Object.keys(valveItem).length > 1) { | 
				
			||||||
 | 
					                    this.valveList.push(valveItem); | 
				
			||||||
 | 
					                  } | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					              }); | 
				
			||||||
 | 
					              this.valveList = this.valveList.filter( | 
				
			||||||
 | 
					                (item) => item.name && item.name.includes("阀") | 
				
			||||||
 | 
					              ); | 
				
			||||||
 | 
					              console.log("处理过的this.deviceList", this.deviceList); | 
				
			||||||
 | 
					              console.log("处理过的this.valveList", this.valveList); | 
				
			||||||
 | 
					              this.total = this.deviceList.length + this.valveList.length; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              // 再分类不同的设备列表 | 
				
			||||||
 | 
					              this.hostList = []; | 
				
			||||||
 | 
					              this.coolingTowerFanList = []; | 
				
			||||||
 | 
					              this.coolingPump = []; | 
				
			||||||
 | 
					              this.freezingPump = []; | 
				
			||||||
 | 
					              this.freezingValve = []; | 
				
			||||||
 | 
					              this.coolingValve = []; | 
				
			||||||
 | 
					              this.coolingTowerOutValve = []; | 
				
			||||||
 | 
					              this.deviceList.forEach((list) => { | 
				
			||||||
 | 
					                if (list.name.includes("机") && !list.name.includes("风")) { | 
				
			||||||
 | 
					                  this.hostList.push(list); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                if (list.name.includes("风机")) { | 
				
			||||||
 | 
					                  this.coolingTowerFanList.push(list); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                if (list.name.includes("冷却泵")) { | 
				
			||||||
 | 
					                  this.coolingPump.push(list); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                if (list.name.includes("冷冻泵")) { | 
				
			||||||
 | 
					                  this.freezingPump.push(list); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					              }); | 
				
			||||||
 | 
					              this.valveList.forEach((list) => { | 
				
			||||||
 | 
					                if (list.name.includes("冷冻蝶阀")) { | 
				
			||||||
 | 
					                  this.freezingValve.push(list); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                if (list.name.includes("冷却蝶阀")) { | 
				
			||||||
 | 
					                  this.coolingValve.push(list); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					                if (list.name.includes("冷却塔出水阀")) { | 
				
			||||||
 | 
					                  this.coolingTowerOutValve.push(list); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					              }); | 
				
			||||||
 | 
					              console.log("处理过后的主机列表", this.hostList); | 
				
			||||||
 | 
					            } else { | 
				
			||||||
 | 
					              this.deviceList = []; | 
				
			||||||
 | 
					              this.valveList = []; | 
				
			||||||
 | 
					              this.total = 0; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            // 成功时解析 Promise | 
				
			||||||
 | 
					            resolve(res); | 
				
			||||||
 | 
					          }) | 
				
			||||||
 | 
					          .catch((error) => { | 
				
			||||||
 | 
					            // 失败时拒绝 Promise | 
				
			||||||
 | 
					            reject(error); | 
				
			||||||
 | 
					          }); | 
				
			||||||
 | 
					      }); | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					    // 操作 | 
				
			||||||
 | 
					    hadleOperationConrol(id, param) { | 
				
			||||||
 | 
					      let data = { | 
				
			||||||
 | 
					        id: id, | 
				
			||||||
 | 
					        param: param, | 
				
			||||||
 | 
					      }; | 
				
			||||||
 | 
					      console.log("操作参数", data); | 
				
			||||||
 | 
					      operationConrol([data]) | 
				
			||||||
 | 
					        .then((res) => { | 
				
			||||||
 | 
					          if (res.code == 200) { | 
				
			||||||
 | 
					            this.$modal.msgSuccess("指令下发成功!"); | 
				
			||||||
 | 
					            // 开启 loading 效果 | 
				
			||||||
 | 
					            this.loading = true; | 
				
			||||||
 | 
					            // 更新所有设备状态; | 
				
			||||||
 | 
					            setTimeout(() => { | 
				
			||||||
 | 
					              this.getOperationList().finally(() => { | 
				
			||||||
 | 
					                // 关闭 loading 效果 | 
				
			||||||
 | 
					                this.loading = false; | 
				
			||||||
 | 
					              }); | 
				
			||||||
 | 
					            }, 6000); | 
				
			||||||
 | 
					          } else { | 
				
			||||||
 | 
					            // this.$modal.msgError("操作失败"); | 
				
			||||||
 | 
					            console.log("应该更新状态的"); | 
				
			||||||
 | 
					            // 更新所有设备状态; | 
				
			||||||
 | 
					            this.getOperationList(); | 
				
			||||||
 | 
					          } | 
				
			||||||
 | 
					        }) | 
				
			||||||
 | 
					        .catch((error) => { | 
				
			||||||
 | 
					          console.log("请求发生错误,更新设备状态", error); | 
				
			||||||
 | 
					          // 更新所有设备状态; | 
				
			||||||
 | 
					          this.getOperationList(); | 
				
			||||||
 | 
					        }); | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					}; | 
				
			||||||
 | 
					</script> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped> | 
				
			||||||
 | 
					/* 设备控制列表样式 */ | 
				
			||||||
 | 
					.device-container { | 
				
			||||||
 | 
					  display: flex; | 
				
			||||||
 | 
					  flex-direction: column; | 
				
			||||||
 | 
					  width: 100%; | 
				
			||||||
 | 
					  background-color: #142c4e; | 
				
			||||||
 | 
					  padding: 10px 10px 30px 10px; | 
				
			||||||
 | 
					  border-radius: 10px; | 
				
			||||||
 | 
					  margin-bottom: 20px; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					/* 状态统计样式 */ | 
				
			||||||
 | 
					.status-statistics { | 
				
			||||||
 | 
					  margin-bottom: 25px; | 
				
			||||||
 | 
					  display: flex; | 
				
			||||||
 | 
					  flex-direction: row; | 
				
			||||||
 | 
					  justify-content: space-between; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.status-card { | 
				
			||||||
 | 
					  background-color: #142c4e; | 
				
			||||||
 | 
					  border-radius: 10px; | 
				
			||||||
 | 
					  padding: 10px; | 
				
			||||||
 | 
					  width: 24%; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.status-label { | 
				
			||||||
 | 
					  color: #9ca3af; | 
				
			||||||
 | 
					  margin-bottom: 20px; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.status-value-running { | 
				
			||||||
 | 
					  font-size: 24px; | 
				
			||||||
 | 
					  font-weight: bold; | 
				
			||||||
 | 
					  color: #22c55e; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.status-value-auto { | 
				
			||||||
 | 
					  font-size: 24px; | 
				
			||||||
 | 
					  font-weight: bold; | 
				
			||||||
 | 
					  color: #60a5fa; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.status-value-error { | 
				
			||||||
 | 
					  font-size: 24px; | 
				
			||||||
 | 
					  font-weight: bold; | 
				
			||||||
 | 
					  color: #ef4444; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.status-value-maintenance { | 
				
			||||||
 | 
					  font-size: 24px; | 
				
			||||||
 | 
					  font-weight: bold; | 
				
			||||||
 | 
					  color: #f59e0b; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					</style> | 
				
			||||||
@ -0,0 +1,643 @@ | 
				
			|||||||
 | 
					<template> | 
				
			||||||
 | 
					  <div class="app-container" v-loading="loading"> | 
				
			||||||
 | 
					    <!-- 状态统计 --> | 
				
			||||||
 | 
					    <div class="status-statistics"> | 
				
			||||||
 | 
					      <div class="status-card"> | 
				
			||||||
 | 
					        <div class="status-label">运行设备</div> | 
				
			||||||
 | 
					        <div class="status-value-running"> | 
				
			||||||
 | 
					          {{ statistics.running }}/{{ total }} | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					      </div> | 
				
			||||||
 | 
					      <div class="status-card"> | 
				
			||||||
 | 
					        <div class="status-label">手动模式</div> | 
				
			||||||
 | 
					        <div class="status-value-auto">{{ statistics.manual }}/{{ total }}</div> | 
				
			||||||
 | 
					      </div> | 
				
			||||||
 | 
					      <div class="status-card"> | 
				
			||||||
 | 
					        <div class="status-label">自动模式</div> | 
				
			||||||
 | 
					        <div class="status-value-maintenance"> | 
				
			||||||
 | 
					          {{ statistics.auto }}/{{ total }} | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					      </div> | 
				
			||||||
 | 
					      <div class="status-card"> | 
				
			||||||
 | 
					        <div class="status-label">故障设备</div> | 
				
			||||||
 | 
					        <div class="status-value-error">{{ statistics.warn }}/{{ total }}</div> | 
				
			||||||
 | 
					      </div> | 
				
			||||||
 | 
					    </div> | 
				
			||||||
 | 
					    <!-- 非蝶阀控制列表 --> | 
				
			||||||
 | 
					    <div class="device-container"> | 
				
			||||||
 | 
					      <!-- <div class="device-li"> | 
				
			||||||
 | 
					        <div class="device-name">设备名称</div> | 
				
			||||||
 | 
					        <div class="device-name">运行状态</div> | 
				
			||||||
 | 
					        <div class="device-name">手动控制</div> | 
				
			||||||
 | 
					        <div class="device-name">手自动切换</div> | 
				
			||||||
 | 
					        <div class="device-name">本地远程状态</div> | 
				
			||||||
 | 
					        <div class="device-name">故障报警</div> | 
				
			||||||
 | 
					        <div class="device-name">频率调节</div> | 
				
			||||||
 | 
					        <div class="device-name">频率反馈</div> | 
				
			||||||
 | 
					      </div> --> | 
				
			||||||
 | 
					      <list-header :deviceList ="deviceList"></list-header> | 
				
			||||||
 | 
					      <!-- <div class="device-li" v-for="(item, index) in deviceList" :key="index"> | 
				
			||||||
 | 
					        <div class="device-name">{{ item.name }}</div> | 
				
			||||||
 | 
					        <div class="device-name"> | 
				
			||||||
 | 
					          <div | 
				
			||||||
 | 
					            class="run" | 
				
			||||||
 | 
					            :class="item.runStatus === '运行' ? 'run' : 'no-run'" | 
				
			||||||
 | 
					          > | 
				
			||||||
 | 
					            {{ item.runStatus }} | 
				
			||||||
 | 
					          </div> | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					        <div class="device-name"> | 
				
			||||||
 | 
					          <el-switch | 
				
			||||||
 | 
					            style="display: block" | 
				
			||||||
 | 
					            v-model="item.controlText" | 
				
			||||||
 | 
					            active-color="#13ce66" | 
				
			||||||
 | 
					            inactive-color="#ff4949" | 
				
			||||||
 | 
					            active-text="开启" | 
				
			||||||
 | 
					            inactive-text="停止" | 
				
			||||||
 | 
					            @change="handleControlText(item)" | 
				
			||||||
 | 
					          > | 
				
			||||||
 | 
					          </el-switch> | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					        <div class="device-name"> | 
				
			||||||
 | 
					          <el-switch | 
				
			||||||
 | 
					            style="display: block" | 
				
			||||||
 | 
					            v-model="item.automaticText" | 
				
			||||||
 | 
					            active-color="#13ce66" | 
				
			||||||
 | 
					            inactive-color="#ff4949" | 
				
			||||||
 | 
					            active-text="自动" | 
				
			||||||
 | 
					            inactive-text="手动" | 
				
			||||||
 | 
					            @change="handleAutomaticText(item)" | 
				
			||||||
 | 
					          > | 
				
			||||||
 | 
					          </el-switch> | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					        <div class="device-name"> | 
				
			||||||
 | 
					          <span | 
				
			||||||
 | 
					            :class=" | 
				
			||||||
 | 
					              item.localRemote === '远程' ? 'strong-electric' : 'auto-electric' | 
				
			||||||
 | 
					            " | 
				
			||||||
 | 
					            >{{ item.localRemote }}</span | 
				
			||||||
 | 
					          > | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					        <div class="device-name"> | 
				
			||||||
 | 
					          <div :class="item.warnText === '故障' ? 'bad-status' : 'good-status'"> | 
				
			||||||
 | 
					            {{ item.warnText }} | 
				
			||||||
 | 
					          </div> | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					        <div class="device-name"> | 
				
			||||||
 | 
					          <el-input | 
				
			||||||
 | 
					            v-if="item.frequencySet !== null && item.frequencySet !== undefined" | 
				
			||||||
 | 
					            v-model="item.frequencySet" | 
				
			||||||
 | 
					            size="mini" | 
				
			||||||
 | 
					            @keyup.enter.native="handleEnter(item)" | 
				
			||||||
 | 
					            @input="handleInput(item)" | 
				
			||||||
 | 
					          ></el-input> | 
				
			||||||
 | 
					          <div class="device-name" v-else></div> | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					        <div class="device-name" v-if="item.frequency"> | 
				
			||||||
 | 
					          {{ item.frequency }}Hz | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					        <div class="device-name" v-else></div> | 
				
			||||||
 | 
					      </div> --> | 
				
			||||||
 | 
					    </div> | 
				
			||||||
 | 
					    <!-- 蝶阀控制列表 --> | 
				
			||||||
 | 
					    <div class="device-container second"> | 
				
			||||||
 | 
					      <div class="device-li"> | 
				
			||||||
 | 
					        <div class="device-name">设备名称</div> | 
				
			||||||
 | 
					        <div class="device-name">手动控制</div> | 
				
			||||||
 | 
					        <div class="device-name">手自动切换</div> | 
				
			||||||
 | 
					        <div class="device-name">本地远程状态</div> | 
				
			||||||
 | 
					        <div class="device-name">阀关反馈</div> | 
				
			||||||
 | 
					        <div class="device-name">阀开反馈</div> | 
				
			||||||
 | 
					      </div> | 
				
			||||||
 | 
					      <div class="device-li" v-for="(item, index) in valveList" :key="index"> | 
				
			||||||
 | 
					        <div class="device-name">{{ item.name }}</div> | 
				
			||||||
 | 
					        <div class="device-name"> | 
				
			||||||
 | 
					          <el-switch | 
				
			||||||
 | 
					            style="display: block" | 
				
			||||||
 | 
					            v-model="item.controlText" | 
				
			||||||
 | 
					            active-color="#13ce66" | 
				
			||||||
 | 
					            inactive-color="#ff4949" | 
				
			||||||
 | 
					            active-text="开启" | 
				
			||||||
 | 
					            inactive-text="停止" | 
				
			||||||
 | 
					            @change="handleControlText(item)" | 
				
			||||||
 | 
					          > | 
				
			||||||
 | 
					          </el-switch> | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					        <div class="device-name"> | 
				
			||||||
 | 
					          <el-switch | 
				
			||||||
 | 
					            style="display: block" | 
				
			||||||
 | 
					            v-model="item.automaticText" | 
				
			||||||
 | 
					            active-color="#13ce66" | 
				
			||||||
 | 
					            inactive-color="#ff4949" | 
				
			||||||
 | 
					            active-text="自动" | 
				
			||||||
 | 
					            inactive-text="手动" | 
				
			||||||
 | 
					            @change="handleAutomaticText(item)" | 
				
			||||||
 | 
					          > | 
				
			||||||
 | 
					          </el-switch> | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					        <div class="device-name"> | 
				
			||||||
 | 
					          <span | 
				
			||||||
 | 
					            :class=" | 
				
			||||||
 | 
					              item.localRemote === '远程' ? 'strong-electric' : 'auto-electric' | 
				
			||||||
 | 
					            " | 
				
			||||||
 | 
					            >{{ item.localRemote }}</span | 
				
			||||||
 | 
					          > | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					        <div class="device-name"> | 
				
			||||||
 | 
					          <div | 
				
			||||||
 | 
					            :class="item.openStauts === '关闭' ? 'bad-status' : 'good-status'" | 
				
			||||||
 | 
					          > | 
				
			||||||
 | 
					            {{ item.openStauts }} | 
				
			||||||
 | 
					          </div> | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					        <div class="device-name"> | 
				
			||||||
 | 
					          <div | 
				
			||||||
 | 
					            :class="item.closeStatus === '关闭' ? 'bad-status' : 'good-status'" | 
				
			||||||
 | 
					          > | 
				
			||||||
 | 
					            {{ item.closeStatus }} | 
				
			||||||
 | 
					          </div> | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					      </div> | 
				
			||||||
 | 
					    </div> | 
				
			||||||
 | 
					  </div> | 
				
			||||||
 | 
					</template> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script> | 
				
			||||||
 | 
					import { operationList, operationConrol } from "@/api/centerairC/sysMonitor"; | 
				
			||||||
 | 
					import listHeader from "./listHeader.vue"; | 
				
			||||||
 | 
					export default { | 
				
			||||||
 | 
					  components: { listHeader }, | 
				
			||||||
 | 
					  name: "sysMonitor", | 
				
			||||||
 | 
					  data() { | 
				
			||||||
 | 
					    return { | 
				
			||||||
 | 
					      loading: false, | 
				
			||||||
 | 
					      deviceList: [], //全部 | 
				
			||||||
 | 
					      hostList: [], //主机 | 
				
			||||||
 | 
					      coolingTowerFanList: [], //冷却塔风机 | 
				
			||||||
 | 
					      coolingPump: [], //冷却泵 | 
				
			||||||
 | 
					      freezingPump: [], //冷冻泵 | 
				
			||||||
 | 
					      valveList: [], //阀 | 
				
			||||||
 | 
					      total: null, | 
				
			||||||
 | 
					      freezingValve: [], //冷冻蝶阀 | 
				
			||||||
 | 
					      coolingValve: [], //冷却蝶阀 | 
				
			||||||
 | 
					      coolingTowerOutValve: [], //冷却塔出水阀 | 
				
			||||||
 | 
					    }; | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  computed: { | 
				
			||||||
 | 
					    statistics() { | 
				
			||||||
 | 
					      const deviceManual = this.deviceList.filter( | 
				
			||||||
 | 
					        (d) => d.automaticText === false | 
				
			||||||
 | 
					      ).length; | 
				
			||||||
 | 
					      const deviceAuto = this.deviceList.filter( | 
				
			||||||
 | 
					        (d) => d.automaticText === true | 
				
			||||||
 | 
					      ).length; | 
				
			||||||
 | 
					      const valveManual = this.valveList.filter( | 
				
			||||||
 | 
					        (v) => v.automaticText === false | 
				
			||||||
 | 
					      ).length; | 
				
			||||||
 | 
					      const valveAuto = this.valveList.filter( | 
				
			||||||
 | 
					        (v) => v.automaticText === true | 
				
			||||||
 | 
					      ).length; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      return { | 
				
			||||||
 | 
					        running: this.deviceList.filter((d) => d.runStatus === "运行").length, | 
				
			||||||
 | 
					        manual: deviceManual + valveManual, | 
				
			||||||
 | 
					        auto: deviceAuto + valveAuto, | 
				
			||||||
 | 
					        warn: this.deviceList.filter((d) => d.warnText === "故障").length, | 
				
			||||||
 | 
					      }; | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  mounted() { | 
				
			||||||
 | 
					    this.getOperationList(); | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  methods: { | 
				
			||||||
 | 
					    // 系统控制列表 | 
				
			||||||
 | 
					    getOperationList() { | 
				
			||||||
 | 
					      return new Promise((resolve, reject) => { | 
				
			||||||
 | 
					        operationList({ systemType: 0 }) | 
				
			||||||
 | 
					          .then((res) => { | 
				
			||||||
 | 
					            console.log("列表返回res", res); | 
				
			||||||
 | 
					            if (res.code === 200) { | 
				
			||||||
 | 
					              let handleList = res.rows; | 
				
			||||||
 | 
					              this.deviceList = []; | 
				
			||||||
 | 
					              this.valveList = []; | 
				
			||||||
 | 
					              handleList.forEach((element) => { | 
				
			||||||
 | 
					                if (element.children && element.children.length > 0) { | 
				
			||||||
 | 
					                  // 初始化一个空对象来存储非蝶阀处理后的结果 | 
				
			||||||
 | 
					                  let deviceItem = { | 
				
			||||||
 | 
					                    name: element.name, | 
				
			||||||
 | 
					                  }; | 
				
			||||||
 | 
					                  // 初始化一个空对象来存储阀门处理后的结果 | 
				
			||||||
 | 
					                  let valveItem = { | 
				
			||||||
 | 
					                    name: element.name, | 
				
			||||||
 | 
					                  }; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  const limitedChildren = element.children; | 
				
			||||||
 | 
					                  let valveClosed = false; | 
				
			||||||
 | 
					                  let valveOpened = false; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  limitedChildren.forEach((child) => { | 
				
			||||||
 | 
					                    if (child.name) { | 
				
			||||||
 | 
					                      // 运行状态 | 
				
			||||||
 | 
					                      if ( | 
				
			||||||
 | 
					                        child.paramType === "1" && | 
				
			||||||
 | 
					                        !child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        deviceItem.runStatus = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? "不运行" : "运行"; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 手动控制 | 
				
			||||||
 | 
					                      else if ( | 
				
			||||||
 | 
					                        child.paramType === "2" && | 
				
			||||||
 | 
					                        !child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        deviceItem.controlText = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? false : true; | 
				
			||||||
 | 
					                        deviceItem.controlId = child.id; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 手自动切换    0自动1手动 | 
				
			||||||
 | 
					                      else if ( | 
				
			||||||
 | 
					                        child.paramType === "6" && | 
				
			||||||
 | 
					                        !child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        deviceItem.automaticText = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? true : false; | 
				
			||||||
 | 
					                        deviceItem.automaticId = child.id; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 故障报警 | 
				
			||||||
 | 
					                      else if ( | 
				
			||||||
 | 
					                        child.paramType === "5" && | 
				
			||||||
 | 
					                        !child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        deviceItem.warnText = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? "未故障" : "故障"; | 
				
			||||||
 | 
					                        // 本地远程 | 
				
			||||||
 | 
					                      } else if ( | 
				
			||||||
 | 
					                        child.paramType === "22" && | 
				
			||||||
 | 
					                        !child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        deviceItem.localRemote = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? "本地" : "远程"; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 频率调节 | 
				
			||||||
 | 
					                      else if ( | 
				
			||||||
 | 
					                        child.paramType === "3" && | 
				
			||||||
 | 
					                        !child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        deviceItem.frequencySet = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? "0" : child.value; | 
				
			||||||
 | 
					                        deviceItem.frequencyId = child.id; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 频率反馈 | 
				
			||||||
 | 
					                      else if (child.paramType === "4") { | 
				
			||||||
 | 
					                        deviceItem.frequency = child.value; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                      // 阀门的-本地远程状态 | 
				
			||||||
 | 
					                      else if ( | 
				
			||||||
 | 
					                        child.paramType === "22" && | 
				
			||||||
 | 
					                        child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        valveItem.localRemote = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? "本地" : "远程"; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 阀门的-手自动切换 | 
				
			||||||
 | 
					                      else if ( | 
				
			||||||
 | 
					                        child.paramType === "6" && | 
				
			||||||
 | 
					                        child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        valveItem.automaticText = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? true : false; | 
				
			||||||
 | 
					                        valveItem.automaticId = child.id; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 阀门的-手动控制 | 
				
			||||||
 | 
					                      else if ( | 
				
			||||||
 | 
					                        child.paramType === "2" && | 
				
			||||||
 | 
					                        child.name.includes("阀") | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        valveItem.controlText = | 
				
			||||||
 | 
					                          Number(child.value) == 0 ? false : true; | 
				
			||||||
 | 
					                        valveItem.controlId = child.id; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                      // 记录阀关到位状态 | 
				
			||||||
 | 
					                      if ( | 
				
			||||||
 | 
					                        child.name.includes("阀关到位") && | 
				
			||||||
 | 
					                        Number(child.value) == 0 | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        valveClosed = false; | 
				
			||||||
 | 
					                      } else if ( | 
				
			||||||
 | 
					                        child.name.includes("阀关到位") && | 
				
			||||||
 | 
					                        Number(child.value) == 1 | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        valveClosed = true; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                      // 记录阀开到位的状态 | 
				
			||||||
 | 
					                      if ( | 
				
			||||||
 | 
					                        child.name.includes("阀开到位") && | 
				
			||||||
 | 
					                        Number(child.value) == 0 | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        valveOpened = false; | 
				
			||||||
 | 
					                      } else if ( | 
				
			||||||
 | 
					                        child.name.includes("阀开到位") && | 
				
			||||||
 | 
					                        Number(child.value) == 1 | 
				
			||||||
 | 
					                      ) { | 
				
			||||||
 | 
					                        valveOpened = true; | 
				
			||||||
 | 
					                      } | 
				
			||||||
 | 
					                    } | 
				
			||||||
 | 
					                  }); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  // 根据阀关到位和阀开到位的状态设置阀门状态 | 
				
			||||||
 | 
					                  if (valveClosed && !valveOpened) { | 
				
			||||||
 | 
					                    valveItem.closeStatus = "开启"; | 
				
			||||||
 | 
					                    valveItem.openStauts = "关闭"; | 
				
			||||||
 | 
					                  } else if (!valveClosed && valveOpened) { | 
				
			||||||
 | 
					                    valveItem.closeStatus = "关闭"; | 
				
			||||||
 | 
					                    valveItem.openStauts = "开启"; | 
				
			||||||
 | 
					                  } | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  // 将处理后的对象添加到 deviceList 中 | 
				
			||||||
 | 
					                  if (Object.keys(deviceItem).length > 1) { | 
				
			||||||
 | 
					                    this.deviceList.push(deviceItem); | 
				
			||||||
 | 
					                  } | 
				
			||||||
 | 
					                  // 将处理后的对象添加到 valveList 中 | 
				
			||||||
 | 
					                  if (Object.keys(valveItem).length > 1) { | 
				
			||||||
 | 
					                    this.valveList.push(valveItem); | 
				
			||||||
 | 
					                  } | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					              }); | 
				
			||||||
 | 
					              console.log("处理过的this.deviceList", this.deviceList); | 
				
			||||||
 | 
					              console.log("处理过的this.valveList", this.valveList); | 
				
			||||||
 | 
					              this.total = this.deviceList.length + this.valveList.length; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					              // 再分类不同的设备列表 | 
				
			||||||
 | 
					              this.hostList = []; | 
				
			||||||
 | 
					              this.deviceList.forEach((list) => { | 
				
			||||||
 | 
					                if (list.name.includes("机") && !list.name.includes("风")) { | 
				
			||||||
 | 
					                  this.hostList.push(list); | 
				
			||||||
 | 
					                } | 
				
			||||||
 | 
					              }); | 
				
			||||||
 | 
					              console.log("处理过后的主机列表", this.hostList); | 
				
			||||||
 | 
					            } else { | 
				
			||||||
 | 
					              this.deviceList = []; | 
				
			||||||
 | 
					              this.valveList = []; | 
				
			||||||
 | 
					              this.total = 0; | 
				
			||||||
 | 
					            } | 
				
			||||||
 | 
					            // 成功时解析 Promise | 
				
			||||||
 | 
					            resolve(res); | 
				
			||||||
 | 
					          }) | 
				
			||||||
 | 
					          .catch((error) => { | 
				
			||||||
 | 
					            // 失败时拒绝 Promise | 
				
			||||||
 | 
					            reject(error); | 
				
			||||||
 | 
					          }); | 
				
			||||||
 | 
					      }); | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					    // 处理输入事件,过滤非数字字符 | 
				
			||||||
 | 
					    handleInput(item) { | 
				
			||||||
 | 
					      console.log("校验"); | 
				
			||||||
 | 
					      // 实时校验并过滤非数字字符 | 
				
			||||||
 | 
					      item.frequencySet = String(item.frequencySet).replace(/[^\d]/g, ""); | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					    handleEnter(item) { | 
				
			||||||
 | 
					      console.log("请求后端"); | 
				
			||||||
 | 
					      this.$confirm( | 
				
			||||||
 | 
					        `确定要修改"${item.name}"的频率为:${item.frequencySet} Hz吗?`, | 
				
			||||||
 | 
					        "提示", | 
				
			||||||
 | 
					        { | 
				
			||||||
 | 
					          confirmButtonText: "确定", | 
				
			||||||
 | 
					          cancelButtonText: "取消", | 
				
			||||||
 | 
					          type: "warning", | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					      ) | 
				
			||||||
 | 
					        .then(() => { | 
				
			||||||
 | 
					          this.hadleOperationConrol(item.frequencyId, item.frequencySet); | 
				
			||||||
 | 
					        }) | 
				
			||||||
 | 
					        .catch(() => { | 
				
			||||||
 | 
					          // 用户取消操作,需要更新原来的频率 | 
				
			||||||
 | 
					          this.getOperationList(); | 
				
			||||||
 | 
					        }); | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					    //手动控制 | 
				
			||||||
 | 
					    handleControlText(item) { | 
				
			||||||
 | 
					      this.$confirm( | 
				
			||||||
 | 
					        `确定要切换设备"${item.name}"的状态为:${ | 
				
			||||||
 | 
					          item.controlText ? "开启" : "停止 吗?" | 
				
			||||||
 | 
					        }`, | 
				
			||||||
 | 
					        "提示", | 
				
			||||||
 | 
					        { | 
				
			||||||
 | 
					          confirmButtonText: "确定", | 
				
			||||||
 | 
					          cancelButtonText: "取消", | 
				
			||||||
 | 
					          type: "warning", | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					      ) | 
				
			||||||
 | 
					        .then(() => { | 
				
			||||||
 | 
					          // 这里调用请求函数 | 
				
			||||||
 | 
					          console.log("请求后台", item.controlText); | 
				
			||||||
 | 
					          let param = null; | 
				
			||||||
 | 
					          if (item.controlText) { | 
				
			||||||
 | 
					            param = 1; | 
				
			||||||
 | 
					          } else { | 
				
			||||||
 | 
					            param = 0; | 
				
			||||||
 | 
					          } | 
				
			||||||
 | 
					          this.hadleOperationConrol(item.controlId, param); | 
				
			||||||
 | 
					        }) | 
				
			||||||
 | 
					        .catch(() => { | 
				
			||||||
 | 
					          // 用户取消操作,恢复开关状态 | 
				
			||||||
 | 
					          item.controlText = !item.controlText; | 
				
			||||||
 | 
					          console.log("不请求后台"); | 
				
			||||||
 | 
					        }); | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					    // 手自动切换 | 
				
			||||||
 | 
					    handleAutomaticText(item) { | 
				
			||||||
 | 
					      this.$confirm( | 
				
			||||||
 | 
					        `确定要切换设备"${item.name}"的状态为:${ | 
				
			||||||
 | 
					          item.automaticText ? "自动" : "手动 吗?" | 
				
			||||||
 | 
					        }`, | 
				
			||||||
 | 
					        "提示", | 
				
			||||||
 | 
					        { | 
				
			||||||
 | 
					          confirmButtonText: "确定", | 
				
			||||||
 | 
					          cancelButtonText: "取消", | 
				
			||||||
 | 
					          type: "warning", | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					      ) | 
				
			||||||
 | 
					        .then(() => { | 
				
			||||||
 | 
					          // 这里调用请求函数 | 
				
			||||||
 | 
					          console.log("请求后台", item.automaticText); | 
				
			||||||
 | 
					          let param = null; | 
				
			||||||
 | 
					          if (item.automaticText) { | 
				
			||||||
 | 
					            param = 0; | 
				
			||||||
 | 
					          } else { | 
				
			||||||
 | 
					            param = 1; | 
				
			||||||
 | 
					          } | 
				
			||||||
 | 
					          this.hadleOperationConrol(item.automaticId, param); | 
				
			||||||
 | 
					        }) | 
				
			||||||
 | 
					        .catch(() => { | 
				
			||||||
 | 
					          // 用户取消操作,恢复开关状态 | 
				
			||||||
 | 
					          item.automaticText = !item.automaticText; | 
				
			||||||
 | 
					          console.log("不请求后台"); | 
				
			||||||
 | 
					        }); | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					    hadleOperationConrol(id, param) { | 
				
			||||||
 | 
					      let data = { | 
				
			||||||
 | 
					        id: id, | 
				
			||||||
 | 
					        param: param, | 
				
			||||||
 | 
					      }; | 
				
			||||||
 | 
					      console.log("操作参数", data); | 
				
			||||||
 | 
					      operationConrol([data]) | 
				
			||||||
 | 
					        .then((res) => { | 
				
			||||||
 | 
					          if (res.code == 200) { | 
				
			||||||
 | 
					            this.$modal.msgSuccess("操作成功"); | 
				
			||||||
 | 
					            // 开启 loading 效果 | 
				
			||||||
 | 
					            this.loading = true; | 
				
			||||||
 | 
					            // 更新所有设备状态; | 
				
			||||||
 | 
					            setTimeout(() => { | 
				
			||||||
 | 
					              this.getOperationList().finally(() => { | 
				
			||||||
 | 
					                // 关闭 loading 效果 | 
				
			||||||
 | 
					                this.loading = false; | 
				
			||||||
 | 
					              }); | 
				
			||||||
 | 
					            }, 6000); | 
				
			||||||
 | 
					          } else { | 
				
			||||||
 | 
					            // this.$modal.msgError("操作失败"); | 
				
			||||||
 | 
					            console.log("应该更新状态的"); | 
				
			||||||
 | 
					            // 更新所有设备状态; | 
				
			||||||
 | 
					            this.getOperationList(); | 
				
			||||||
 | 
					          } | 
				
			||||||
 | 
					        }) | 
				
			||||||
 | 
					        .catch((error) => { | 
				
			||||||
 | 
					          console.log("请求发生错误,更新设备状态", error); | 
				
			||||||
 | 
					          // 更新所有设备状态; | 
				
			||||||
 | 
					          this.getOperationList(); | 
				
			||||||
 | 
					        }); | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					}; | 
				
			||||||
 | 
					</script> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped> | 
				
			||||||
 | 
					/* 设备控制列表样式 */ | 
				
			||||||
 | 
					.device-container { | 
				
			||||||
 | 
					  display: flex; | 
				
			||||||
 | 
					  flex-direction: column; | 
				
			||||||
 | 
					  width: 100%; | 
				
			||||||
 | 
					  background-color: #142c4e; | 
				
			||||||
 | 
					  padding: 10px 10px 30px 10px; | 
				
			||||||
 | 
					  border-radius: 10px; | 
				
			||||||
 | 
					  .device-li { | 
				
			||||||
 | 
					    flex: 1; | 
				
			||||||
 | 
					    width: 100%; | 
				
			||||||
 | 
					    display: flex; | 
				
			||||||
 | 
					    flex-direction: row; | 
				
			||||||
 | 
					    align-items: center; | 
				
			||||||
 | 
					    padding: 12px 0; | 
				
			||||||
 | 
					    color: #abcdfc; | 
				
			||||||
 | 
					    border-bottom: 1px dashed #0349ac; | 
				
			||||||
 | 
					    .device-name { | 
				
			||||||
 | 
					      flex: 1; | 
				
			||||||
 | 
					      white-space: nowrap; | 
				
			||||||
 | 
					      .el-switch { | 
				
			||||||
 | 
					        width: 120px !important; | 
				
			||||||
 | 
					      } | 
				
			||||||
 | 
					      .run { | 
				
			||||||
 | 
					        display: flex; | 
				
			||||||
 | 
					        flex-direction: row; | 
				
			||||||
 | 
					        align-items: center; | 
				
			||||||
 | 
					        display: block; | 
				
			||||||
 | 
					      } | 
				
			||||||
 | 
					      .run::before { | 
				
			||||||
 | 
					        content: ""; | 
				
			||||||
 | 
					        display: inline-block; | 
				
			||||||
 | 
					        width: 10px; | 
				
			||||||
 | 
					        height: 10px; | 
				
			||||||
 | 
					        background-color: rgb(16, 231, 16); | 
				
			||||||
 | 
					        border-radius: 50%; | 
				
			||||||
 | 
					        margin-right: 5px; | 
				
			||||||
 | 
					      } | 
				
			||||||
 | 
					      .no-run { | 
				
			||||||
 | 
					        display: flex; | 
				
			||||||
 | 
					        flex-direction: row; | 
				
			||||||
 | 
					        align-items: center; | 
				
			||||||
 | 
					        display: block; | 
				
			||||||
 | 
					      } | 
				
			||||||
 | 
					      .no-run::before { | 
				
			||||||
 | 
					        content: ""; | 
				
			||||||
 | 
					        display: inline-block; | 
				
			||||||
 | 
					        width: 10px; | 
				
			||||||
 | 
					        height: 10px; | 
				
			||||||
 | 
					        background-color: rgb(180, 180, 180); | 
				
			||||||
 | 
					        border-radius: 50%; | 
				
			||||||
 | 
					        margin-right: 5px; | 
				
			||||||
 | 
					      } | 
				
			||||||
 | 
					      .el-input { | 
				
			||||||
 | 
					        width: 100px; | 
				
			||||||
 | 
					      } | 
				
			||||||
 | 
					      .strong-electric { | 
				
			||||||
 | 
					        background-color: rgba(59, 130, 246, 0.2); | 
				
			||||||
 | 
					        color: #60a5fa; | 
				
			||||||
 | 
					        padding: 5px 20px; | 
				
			||||||
 | 
					        border-radius: 10px; | 
				
			||||||
 | 
					      } | 
				
			||||||
 | 
					      .auto-electric { | 
				
			||||||
 | 
					        background-color: rgba(231, 144, 45, 0.2); | 
				
			||||||
 | 
					        color: #e47f21; | 
				
			||||||
 | 
					        padding: 5px 20px; | 
				
			||||||
 | 
					        border-radius: 10px; | 
				
			||||||
 | 
					      } | 
				
			||||||
 | 
					      .good-status { | 
				
			||||||
 | 
					        color: #4ade80; | 
				
			||||||
 | 
					      } | 
				
			||||||
 | 
					      .bad-status { | 
				
			||||||
 | 
					        color: #f05348; | 
				
			||||||
 | 
					      } | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					  } | 
				
			||||||
 | 
					  .device-li:nth-child(1) { | 
				
			||||||
 | 
					    color: #9ca3af; | 
				
			||||||
 | 
					  } | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					.second { | 
				
			||||||
 | 
					  margin-top: 20px; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 状态统计样式 */ | 
				
			||||||
 | 
					.status-statistics { | 
				
			||||||
 | 
					  margin-bottom: 25px; | 
				
			||||||
 | 
					  display: flex; | 
				
			||||||
 | 
					  flex-direction: row; | 
				
			||||||
 | 
					  justify-content: space-between; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.status-card { | 
				
			||||||
 | 
					  background-color: #142c4e; | 
				
			||||||
 | 
					  border-radius: 10px; | 
				
			||||||
 | 
					  padding: 10px; | 
				
			||||||
 | 
					  width: 24%; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.status-label { | 
				
			||||||
 | 
					  color: #9ca3af; | 
				
			||||||
 | 
					  margin-bottom: 20px; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.status-value-running { | 
				
			||||||
 | 
					  font-size: 24px; | 
				
			||||||
 | 
					  font-weight: bold; | 
				
			||||||
 | 
					  color: #22c55e; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.status-value-auto { | 
				
			||||||
 | 
					  font-size: 24px; | 
				
			||||||
 | 
					  font-weight: bold; | 
				
			||||||
 | 
					  color: #60a5fa; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.status-value-error { | 
				
			||||||
 | 
					  font-size: 24px; | 
				
			||||||
 | 
					  font-weight: bold; | 
				
			||||||
 | 
					  color: #ef4444; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.status-value-maintenance { | 
				
			||||||
 | 
					  font-size: 24px; | 
				
			||||||
 | 
					  font-weight: bold; | 
				
			||||||
 | 
					  color: #f59e0b; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					</style> | 
				
			||||||
@ -0,0 +1,199 @@ | 
				
			|||||||
 | 
					<template> | 
				
			||||||
 | 
					  <div> | 
				
			||||||
 | 
					    <div class="device-li"> | 
				
			||||||
 | 
					      <div class="device-name">设备名称</div> | 
				
			||||||
 | 
					      <div class="device-name">手动控制</div> | 
				
			||||||
 | 
					      <div class="device-name">手自动切换</div> | 
				
			||||||
 | 
					      <div class="device-name">阀开反馈</div> | 
				
			||||||
 | 
					      <div class="device-name">阀关反馈</div> | 
				
			||||||
 | 
					    </div> | 
				
			||||||
 | 
					    <div class="device-li" v-for="(item, index) in valveList" :key="index"> | 
				
			||||||
 | 
					      <div class="device-name">{{ item.name }}</div> | 
				
			||||||
 | 
					      <div class="device-name"> | 
				
			||||||
 | 
					        <el-switch | 
				
			||||||
 | 
					          style="display: block" | 
				
			||||||
 | 
					          v-model="item.controlText" | 
				
			||||||
 | 
					          active-color="#13ce66" | 
				
			||||||
 | 
					          inactive-color="#ff4949" | 
				
			||||||
 | 
					          active-text="开启" | 
				
			||||||
 | 
					          inactive-text="停止" | 
				
			||||||
 | 
					          @change="handleControlText(item)" | 
				
			||||||
 | 
					        > | 
				
			||||||
 | 
					        </el-switch> | 
				
			||||||
 | 
					      </div> | 
				
			||||||
 | 
					      <div class="device-name"> | 
				
			||||||
 | 
					        <el-switch | 
				
			||||||
 | 
					          style="display: block" | 
				
			||||||
 | 
					          v-model="item.automaticText" | 
				
			||||||
 | 
					          active-color="#13ce66" | 
				
			||||||
 | 
					          inactive-color="#ff4949" | 
				
			||||||
 | 
					          active-text="自动" | 
				
			||||||
 | 
					          inactive-text="手动" | 
				
			||||||
 | 
					          @change="handleAutomaticText(item)" | 
				
			||||||
 | 
					        > | 
				
			||||||
 | 
					        </el-switch> | 
				
			||||||
 | 
					      </div> | 
				
			||||||
 | 
					      <div class="device-name"> | 
				
			||||||
 | 
					        <div :class="item.openStauts === '关闭' ? 'bad-status' : 'good-status'"> | 
				
			||||||
 | 
					          {{ item.openStauts }} | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					      </div> | 
				
			||||||
 | 
					      <div class="device-name"> | 
				
			||||||
 | 
					        <div | 
				
			||||||
 | 
					          :class="item.closeStatus === '关闭' ? 'bad-status' : 'good-status'" | 
				
			||||||
 | 
					        > | 
				
			||||||
 | 
					          {{ item.closeStatus }} | 
				
			||||||
 | 
					        </div> | 
				
			||||||
 | 
					      </div> | 
				
			||||||
 | 
					    </div> | 
				
			||||||
 | 
					  </div> | 
				
			||||||
 | 
					</template> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script> | 
				
			||||||
 | 
					export default { | 
				
			||||||
 | 
					  props: { | 
				
			||||||
 | 
					    valveList: { | 
				
			||||||
 | 
					      type: Array, | 
				
			||||||
 | 
					      default: () => [], | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					  methods: { | 
				
			||||||
 | 
					    //手动控制 | 
				
			||||||
 | 
					    handleControlText(item) { | 
				
			||||||
 | 
					      this.$confirm( | 
				
			||||||
 | 
					        `确定要切换设备"${item.name}"的状态为:${ | 
				
			||||||
 | 
					          item.controlText ? "开启" : "停止 吗?" | 
				
			||||||
 | 
					        }`, | 
				
			||||||
 | 
					        "提示", | 
				
			||||||
 | 
					        { | 
				
			||||||
 | 
					          confirmButtonText: "确定", | 
				
			||||||
 | 
					          cancelButtonText: "取消", | 
				
			||||||
 | 
					          type: "warning", | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					      ) | 
				
			||||||
 | 
					        .then(() => { | 
				
			||||||
 | 
					          // 这里调用请求函数 | 
				
			||||||
 | 
					          console.log("请求后台", item.controlText); | 
				
			||||||
 | 
					          let param = null; | 
				
			||||||
 | 
					          if (item.controlText) { | 
				
			||||||
 | 
					            param = 1; | 
				
			||||||
 | 
					          } else { | 
				
			||||||
 | 
					            param = 0; | 
				
			||||||
 | 
					          } | 
				
			||||||
 | 
					          // 触发自定义事件 operationControl,并传递两个参数 | 
				
			||||||
 | 
					          this.$emit("operationControl", item.controlId, param); | 
				
			||||||
 | 
					        }) | 
				
			||||||
 | 
					        .catch(() => { | 
				
			||||||
 | 
					          // 用户取消操作,恢复开关状态 | 
				
			||||||
 | 
					          item.controlText = !item.controlText; | 
				
			||||||
 | 
					          console.log("不请求后台"); | 
				
			||||||
 | 
					        }); | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					    // 手自动切换 | 
				
			||||||
 | 
					    handleAutomaticText(item) { | 
				
			||||||
 | 
					      this.$confirm( | 
				
			||||||
 | 
					        `确定要切换设备"${item.name}"的状态为:${ | 
				
			||||||
 | 
					          item.automaticText ? "自动" : "手动 吗?" | 
				
			||||||
 | 
					        }`, | 
				
			||||||
 | 
					        "提示", | 
				
			||||||
 | 
					        { | 
				
			||||||
 | 
					          confirmButtonText: "确定", | 
				
			||||||
 | 
					          cancelButtonText: "取消", | 
				
			||||||
 | 
					          type: "warning", | 
				
			||||||
 | 
					        } | 
				
			||||||
 | 
					      ) | 
				
			||||||
 | 
					        .then(() => { | 
				
			||||||
 | 
					          // 这里调用请求函数 | 
				
			||||||
 | 
					          console.log("请求后台", item.automaticText); | 
				
			||||||
 | 
					          let param = null; | 
				
			||||||
 | 
					          if (item.automaticText) { | 
				
			||||||
 | 
					            param = 0; | 
				
			||||||
 | 
					          } else { | 
				
			||||||
 | 
					            param = 1; | 
				
			||||||
 | 
					          } | 
				
			||||||
 | 
					          // 触发自定义事件 operationControl,并传递两个参数 | 
				
			||||||
 | 
					          this.$emit("operationControl", item.automaticId, param); | 
				
			||||||
 | 
					        }) | 
				
			||||||
 | 
					        .catch(() => { | 
				
			||||||
 | 
					          // 用户取消操作,恢复开关状态 | 
				
			||||||
 | 
					          item.automaticText = !item.automaticText; | 
				
			||||||
 | 
					          console.log("不请求后台"); | 
				
			||||||
 | 
					        }); | 
				
			||||||
 | 
					    }, | 
				
			||||||
 | 
					  }, | 
				
			||||||
 | 
					}; | 
				
			||||||
 | 
					</script> | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped> | 
				
			||||||
 | 
					.device-li { | 
				
			||||||
 | 
					  flex: 1; | 
				
			||||||
 | 
					  width: 100%; | 
				
			||||||
 | 
					  display: flex; | 
				
			||||||
 | 
					  flex-direction: row; | 
				
			||||||
 | 
					  align-items: center; | 
				
			||||||
 | 
					  padding: 12px 0; | 
				
			||||||
 | 
					  color: #abcdfc; | 
				
			||||||
 | 
					  border-bottom: 1px dashed #0349ac; | 
				
			||||||
 | 
					  .device-name { | 
				
			||||||
 | 
					    flex: 1; | 
				
			||||||
 | 
					    white-space: nowrap; | 
				
			||||||
 | 
					    .el-switch { | 
				
			||||||
 | 
					      width: 120px !important; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    .run { | 
				
			||||||
 | 
					      display: flex; | 
				
			||||||
 | 
					      flex-direction: row; | 
				
			||||||
 | 
					      align-items: center; | 
				
			||||||
 | 
					      display: block; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    .run::before { | 
				
			||||||
 | 
					      content: ""; | 
				
			||||||
 | 
					      display: inline-block; | 
				
			||||||
 | 
					      width: 10px; | 
				
			||||||
 | 
					      height: 10px; | 
				
			||||||
 | 
					      background-color: rgb(16, 231, 16); | 
				
			||||||
 | 
					      border-radius: 50%; | 
				
			||||||
 | 
					      margin-right: 5px; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    .no-run { | 
				
			||||||
 | 
					      display: flex; | 
				
			||||||
 | 
					      flex-direction: row; | 
				
			||||||
 | 
					      align-items: center; | 
				
			||||||
 | 
					      display: block; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    .no-run::before { | 
				
			||||||
 | 
					      content: ""; | 
				
			||||||
 | 
					      display: inline-block; | 
				
			||||||
 | 
					      width: 10px; | 
				
			||||||
 | 
					      height: 10px; | 
				
			||||||
 | 
					      background-color: rgb(180, 180, 180); | 
				
			||||||
 | 
					      border-radius: 50%; | 
				
			||||||
 | 
					      margin-right: 5px; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    .el-input { | 
				
			||||||
 | 
					      width: 100px; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    .strong-electric { | 
				
			||||||
 | 
					      background-color: rgba(59, 130, 246, 0.2); | 
				
			||||||
 | 
					      color: #60a5fa; | 
				
			||||||
 | 
					      padding: 5px 20px; | 
				
			||||||
 | 
					      border-radius: 10px; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    .auto-electric { | 
				
			||||||
 | 
					      background-color: rgba(231, 144, 45, 0.2); | 
				
			||||||
 | 
					      color: #e47f21; | 
				
			||||||
 | 
					      padding: 5px 20px; | 
				
			||||||
 | 
					      border-radius: 10px; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    .good-status { | 
				
			||||||
 | 
					      color: #4ade80; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					    .bad-status { | 
				
			||||||
 | 
					      color: #f05348; | 
				
			||||||
 | 
					    } | 
				
			||||||
 | 
					  } | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					.device-li:nth-child(1) { | 
				
			||||||
 | 
					  color: #9ca3af; | 
				
			||||||
 | 
					} | 
				
			||||||
 | 
					</style> | 
				
			||||||