You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							3033 lines
						
					
					
						
							93 KiB
						
					
					
				
			
		
		
	
	
							3033 lines
						
					
					
						
							93 KiB
						
					
					
				<template> | 
						|
  <div class="right-monitor" v-loading="loading"> | 
						|
    <div class="buildingDiv"> | 
						|
      <img | 
						|
        class="title-bg" | 
						|
        src="../../../../assets/images/title-bg.png" | 
						|
        alt="" | 
						|
      /> | 
						|
      <div class="title-word">位置:{{ currentName }}</div> | 
						|
    </div> | 
						|
    <div class="mostDiv"> | 
						|
      <div class="windC"> | 
						|
        <!-- 定时开关机定位 --> | 
						|
        <div class="menu-title" @click="openTimeSwitch"> | 
						|
          <div @click="openTimeSwitch">定时开关机</div> | 
						|
        </div> | 
						|
        <!-- 空调风柜定位 --> | 
						|
        <img | 
						|
          class="wind-img" | 
						|
          src="../../../../assets/images/fenggui2.png" | 
						|
          alt="" | 
						|
        /> | 
						|
        <!-- 风扇定位 --> | 
						|
        <img | 
						|
          class="windMove" | 
						|
          :class="{ tunCircle: runStatusObj.collectValue }" | 
						|
          src="../../../../assets/images/fengshan.png" | 
						|
          alt="" | 
						|
        /> | 
						|
        <div class="arrow-flex2"> | 
						|
          <img | 
						|
            class="wind-arrow" | 
						|
            src="../../../../assets/images/blue-arrow.png" | 
						|
            alt="" | 
						|
          /> | 
						|
          <img | 
						|
            class="wind-arrow" | 
						|
            src="../../../../assets/images/blue-arrow.png" | 
						|
            alt="" | 
						|
          /> | 
						|
          <img | 
						|
            class="wind-arrow" | 
						|
            src="../../../../assets/images/blue-arrow.png" | 
						|
            alt="" | 
						|
          /> | 
						|
          <img | 
						|
            class="wind-arrow" | 
						|
            src="../../../../assets/images/blue-arrow.png" | 
						|
            alt="" | 
						|
          /> | 
						|
        </div> | 
						|
        <div class="arrow-flex3"> | 
						|
          <img | 
						|
            class="wind-arrow" | 
						|
            src="../../../../assets/images/blue-arrow.png" | 
						|
            alt="" | 
						|
          /> | 
						|
          <img | 
						|
            class="wind-arrow" | 
						|
            src="../../../../assets/images/blue-arrow.png" | 
						|
            alt="" | 
						|
          /> | 
						|
          <img | 
						|
            class="wind-arrow" | 
						|
            src="../../../../assets/images/blue-arrow.png" | 
						|
            alt="" | 
						|
          /> | 
						|
          <img | 
						|
            class="wind-arrow" | 
						|
            src="../../../../assets/images/blue-arrow.png" | 
						|
            alt="" | 
						|
          /> | 
						|
        </div> | 
						|
        <div class="wind-tem1" v-if="isObjectValid(backAirObj)"> | 
						|
          <div :class="getTextClass(backAirObj, 'wind-text')">回风温度</div> | 
						|
          <el-form @submit.native.prevent> | 
						|
            <el-form-item> | 
						|
              <el-input | 
						|
                @keyup.enter.native="handleEnter(backAirObj, $event, '℃')" | 
						|
                @input="handleInput(backAirObj)" | 
						|
                @blur="handleBlur()" | 
						|
                v-model="backAirObj.collectValue" | 
						|
                disabled | 
						|
                size="mini" | 
						|
              > | 
						|
                <svg-icon | 
						|
                  slot="prefix" | 
						|
                  icon-class="tem_icon" | 
						|
                  class="tem-icon" | 
						|
                /> | 
						|
              </el-input> </el-form-item | 
						|
          ></el-form> | 
						|
        </div> | 
						|
        <div class="wind-tem1-set" v-if="isObjectValid(backAirObjSet)"> | 
						|
          <div :class="getTextClass(backAirObjSet, 'wind-text')"> | 
						|
            回风温度设置 | 
						|
          </div> | 
						|
          <el-form @submit.native.prevent> | 
						|
            <el-form-item> | 
						|
              <el-input | 
						|
                @keyup.enter.native="handleEnter(backAirObjSet, $event, '℃')" | 
						|
                @input="handleInput(backAirObjSet)" | 
						|
                @blur="handleBlur()" | 
						|
                v-model="backAirObjSet.collectValue" | 
						|
                size="mini" | 
						|
              > | 
						|
                <svg-icon | 
						|
                  slot="prefix" | 
						|
                  icon-class="tem_icon" | 
						|
                  class="tem-icon" | 
						|
                /> | 
						|
              </el-input> </el-form-item | 
						|
          ></el-form> | 
						|
        </div> | 
						|
        <div class="dampers-name1">宴会一厅风阀</div> | 
						|
        <div class="dampers-position1" v-if="isObjectValid(damperOneBackObj)"> | 
						|
          <div :class="getTextClass(damperOneBackObj, 'wind-text')">反馈:</div> | 
						|
          <div :class="getTextClass(damperOneBackObj, 'back-text')"> | 
						|
            {{ damperOneBackObj.collectValue }}% | 
						|
          </div> | 
						|
        </div> | 
						|
        <div class="dampers-position2" v-if="isObjectValid(damperOneObj)"> | 
						|
          <div :class="getTextClass(damperOneObj, 'wind-text')">自动调节:</div> | 
						|
          <el-form @submit.native.prevent> | 
						|
            <el-form-item> | 
						|
              <el-input | 
						|
                style="width: 1.2rem" | 
						|
                @keyup.enter.native="handleEnter(damperOneObj, $event, '%')" | 
						|
                @input="handleInput(damperOneObj)" | 
						|
                @blur="handleBlur()" | 
						|
                v-model="damperOneObj.collectValue" | 
						|
                size="mini" | 
						|
              > | 
						|
                <svg-icon | 
						|
                  slot="prefix" | 
						|
                  icon-class="percentage-icon" | 
						|
                  class="percentage-icon" | 
						|
                /> | 
						|
              </el-input> | 
						|
            </el-form-item> | 
						|
          </el-form> | 
						|
        </div> | 
						|
        <div class="dampers-position3" v-if="isObjectValid(damperOneRemoteObj)"> | 
						|
          <div :class="getTextClass(damperOneRemoteObj, 'wind-text')"> | 
						|
            远程手自动: | 
						|
          </div> | 
						|
          <el-switch | 
						|
            style="display: block" | 
						|
            v-model="damperOneRemoteObj.collectValue" | 
						|
            active-color="#13ce66" | 
						|
            inactive-color="#ff4949" | 
						|
            active-text="手动" | 
						|
            inactive-text="自动" | 
						|
            @change="handleControlText(damperOneRemoteObj, '手动', '自动')" | 
						|
          > | 
						|
          </el-switch> | 
						|
        </div> | 
						|
        <div class="dampers-position4" v-if="isObjectValid(damperOneManualObj)"> | 
						|
          <div :class="getTextClass(damperOneManualObj, 'wind-text')"> | 
						|
            手动调节: | 
						|
          </div> | 
						|
          <el-form @submit.native.prevent> | 
						|
            <el-form-item> | 
						|
              <el-input | 
						|
                style="width: 1.2rem" | 
						|
                @keyup.enter.native=" | 
						|
                  handleEnter(damperOneManualObj, $event, '%') | 
						|
                " | 
						|
                @input="handleInput(damperOneManualObj)" | 
						|
                @blur="handleBlur()" | 
						|
                v-model="damperOneManualObj.collectValue" | 
						|
                size="mini" | 
						|
                :disabled="!damperOneRemoteObj.collectValue" | 
						|
              > | 
						|
                <svg-icon | 
						|
                  slot="prefix" | 
						|
                  icon-class="percentage-icon" | 
						|
                  class="percentage-icon" | 
						|
                /> | 
						|
              </el-input> | 
						|
            </el-form-item> | 
						|
          </el-form> | 
						|
        </div> | 
						|
        <div class="dampers-name2">餐厅风阀</div> | 
						|
        <div class="dampers-position6" v-if="isObjectValid(damperTwoBackObj)"> | 
						|
          <div :class="getTextClass(damperTwoBackObj, 'wind-text')">反馈:</div> | 
						|
          <div :class="getTextClass(damperTwoBackObj, 'back-text')"> | 
						|
            {{ damperTwoBackObj.collectValue }}% | 
						|
          </div> | 
						|
        </div> | 
						|
        <div class="dampers-position7" v-if="isObjectValid(damperTwoObj)"> | 
						|
          <div :class="getTextClass(damperTwoObj, 'wind-text')">自动调节:</div> | 
						|
          <el-form @submit.native.prevent> | 
						|
            <el-form-item> | 
						|
              <el-input | 
						|
                style="width: 1.2rem" | 
						|
                @keyup.enter.native="handleEnter(damperTwoObj, $event, '%')" | 
						|
                @input="handleInput(damperTwoObj)" | 
						|
                @blur="handleBlur()" | 
						|
                v-model="damperTwoObj.collectValue" | 
						|
                size="mini" | 
						|
              > | 
						|
                <svg-icon | 
						|
                  slot="prefix" | 
						|
                  icon-class="percentage-icon" | 
						|
                  class="percentage-icon" | 
						|
                /> | 
						|
              </el-input> | 
						|
            </el-form-item> | 
						|
          </el-form> | 
						|
        </div> | 
						|
        <div class="dampers-position8" v-if="isObjectValid(damperTwoRemoteObj)"> | 
						|
          <div :class="getTextClass(damperTwoRemoteObj, 'wind-text')"> | 
						|
            远程手自动: | 
						|
          </div> | 
						|
          <el-switch | 
						|
            style="display: block" | 
						|
            v-model="damperTwoRemoteObj.collectValue" | 
						|
            active-color="#13ce66" | 
						|
            inactive-color="#ff4949" | 
						|
            active-text="手动" | 
						|
            inactive-text="自动" | 
						|
            @change="handleControlText(damperTwoRemoteObj, '手动', '自动')" | 
						|
          > | 
						|
          </el-switch> | 
						|
        </div> | 
						|
        <div class="dampers-position9" v-if="isObjectValid(damperTwoManualObj)"> | 
						|
          <div :class="getTextClass(damperTwoManualObj, 'wind-text')"> | 
						|
            手动调节: | 
						|
          </div> | 
						|
          <el-form @submit.native.prevent> | 
						|
            <el-form-item> | 
						|
              <el-input | 
						|
                style="width: 1.2rem" | 
						|
                @keyup.enter.native=" | 
						|
                  handleEnter(damperTwoManualObj, $event, '%') | 
						|
                " | 
						|
                @input="handleInput(damperTwoManualObj)" | 
						|
                @blur="handleBlur()" | 
						|
                v-model="damperTwoManualObj.collectValue" | 
						|
                size="mini" | 
						|
                :disabled="!damperTwoRemoteObj.collectValue" | 
						|
              > | 
						|
                <svg-icon | 
						|
                  slot="prefix" | 
						|
                  icon-class="percentage-icon" | 
						|
                  class="percentage-icon" | 
						|
                /> | 
						|
              </el-input> | 
						|
            </el-form-item> | 
						|
          </el-form> | 
						|
        </div> | 
						|
        <div class="dampers-name3">会议风阀</div> | 
						|
        <div | 
						|
          class="dampers-position10" | 
						|
          v-if="isObjectValid(damperThreeBackObj)" | 
						|
        > | 
						|
          <div :class="getTextClass(damperThreeBackObj, 'wind-text')"> | 
						|
            反馈: | 
						|
          </div> | 
						|
          <div :class="getTextClass(damperThreeBackObj, 'back-text')"> | 
						|
            {{ damperThreeBackObj.collectValue }}% | 
						|
          </div> | 
						|
        </div> | 
						|
        <div class="dampers-position11" v-if="isObjectValid(damperThreeObj)"> | 
						|
          <div :class="getTextClass(damperThreeObj, 'wind-text')"> | 
						|
            自动调节: | 
						|
          </div> | 
						|
          <el-form @submit.native.prevent> | 
						|
            <el-form-item> | 
						|
              <el-input | 
						|
                style="width: 1.2rem" | 
						|
                @keyup.enter.native="handleEnter(damperThreeObj, $event, '%')" | 
						|
                @input="handleInput(damperThreeObj)" | 
						|
                @blur="handleBlur()" | 
						|
                v-model="damperThreeObj.collectValue" | 
						|
                size="mini" | 
						|
              > | 
						|
                <svg-icon | 
						|
                  slot="prefix" | 
						|
                  icon-class="percentage-icon" | 
						|
                  class="percentage-icon" | 
						|
                /> | 
						|
              </el-input> | 
						|
            </el-form-item> | 
						|
          </el-form> | 
						|
        </div> | 
						|
        <div | 
						|
          class="dampers-position12" | 
						|
          v-if="isObjectValid(damperThreeRemoteObj)" | 
						|
        > | 
						|
          <div :class="getTextClass(damperThreeRemoteObj, 'wind-text')"> | 
						|
            远程手自动: | 
						|
          </div> | 
						|
          <el-switch | 
						|
            style="display: block" | 
						|
            v-model="damperThreeRemoteObj.collectValue" | 
						|
            active-color="#13ce66" | 
						|
            inactive-color="#ff4949" | 
						|
            active-text="手动" | 
						|
            inactive-text="自动" | 
						|
            @change="handleControlText(damperThreeRemoteObj, '手动', '自动')" | 
						|
          > | 
						|
          </el-switch> | 
						|
        </div> | 
						|
        <div | 
						|
          class="dampers-position13" | 
						|
          v-if="isObjectValid(damperThreeManualObj)" | 
						|
        > | 
						|
          <div :class="getTextClass(damperThreeManualObj, 'wind-text')"> | 
						|
            手动调节: | 
						|
          </div> | 
						|
          <el-form @submit.native.prevent> | 
						|
            <el-form-item> | 
						|
              <el-input | 
						|
                style="width: 1.2rem" | 
						|
                @keyup.enter.native=" | 
						|
                  handleEnter(damperThreeManualObj, $event, '%') | 
						|
                " | 
						|
                @input="handleInput(damperThreeManualObj)" | 
						|
                @blur="handleBlur()" | 
						|
                v-model="damperThreeManualObj.collectValue" | 
						|
                size="mini" | 
						|
                :disabled="!damperThreeRemoteObj.collectValue" | 
						|
              > | 
						|
                <svg-icon | 
						|
                  slot="prefix" | 
						|
                  icon-class="percentage-icon" | 
						|
                  class="percentage-icon" | 
						|
                /> | 
						|
              </el-input> | 
						|
            </el-form-item> | 
						|
          </el-form> | 
						|
        </div> | 
						|
        <div class="fan-satatus3"> | 
						|
          <div | 
						|
            class="context-li" | 
						|
            v-if="isObjectValid(startStopObj)" | 
						|
            style="width: 2.4rem" | 
						|
          > | 
						|
            <div :class="getTextClass(startStopObj, 'wind-text')"> | 
						|
              启停选择: | 
						|
            </div> | 
						|
            <el-select | 
						|
              size="mini" | 
						|
              v-model="startStopObj.collectValue" | 
						|
              placeholder="请选择" | 
						|
              @change="selectThink(startStopObj)" | 
						|
              @visible-change=" | 
						|
                (visible) => handleVisibleChange(visible, startStopObj) | 
						|
              " | 
						|
            > | 
						|
              <el-option | 
						|
                v-for="item in options" | 
						|
                :key="item.value" | 
						|
                :label="item.label" | 
						|
                :value="item.value" | 
						|
              > | 
						|
              </el-option> | 
						|
            </el-select> | 
						|
          </div> | 
						|
          <div | 
						|
            class="context-li" | 
						|
            v-if="isObjectValid(remoteManualObj) && startStopValue === 0" | 
						|
          > | 
						|
            <div class="wind-text">远程手动启停:</div> | 
						|
            <el-switch | 
						|
              style="display: block" | 
						|
              v-model="remoteManualObj.collectValue" | 
						|
              active-color="#13ce66" | 
						|
              inactive-color="#ff4949" | 
						|
              active-text="开启" | 
						|
              inactive-text="停止" | 
						|
              @change="handleControlText(remoteManualObj, '开启', '停止')" | 
						|
              :disabled="automaticObj.collectValue" | 
						|
            > | 
						|
            </el-switch> | 
						|
          </div> | 
						|
          <div | 
						|
            class="context-li" | 
						|
            v-if="isObjectValid(timeScheduleObj) && startStopValue === 1" | 
						|
          > | 
						|
            <div :class="getTextClass(timeScheduleObj, 'wind-text')"> | 
						|
              时间表启停: | 
						|
            </div> | 
						|
            <el-switch | 
						|
              style="display: block" | 
						|
              v-model="timeScheduleObj.collectValue" | 
						|
              active-color="#13ce66" | 
						|
              inactive-color="#ff4949" | 
						|
              active-text="开启" | 
						|
              inactive-text="停止" | 
						|
              @change="handleControlText(timeScheduleObj, '开启', '停止')" | 
						|
              :disabled="automaticObj.collectValue" | 
						|
            > | 
						|
            </el-switch> | 
						|
          </div> | 
						|
          <div | 
						|
            class="context-li" | 
						|
            v-if="isObjectValid(openingBackObj)" | 
						|
            style="width: 2.4rem" | 
						|
          > | 
						|
            <div :class="getTextClass(openingBackObj, 'wind-text')"> | 
						|
              风阀开度设置: | 
						|
            </div> | 
						|
            <el-form @submit.native.prevent> | 
						|
              <el-form-item> | 
						|
                <el-input | 
						|
                  @keyup.enter.native="handleEnter(openingBackObj, $event, '%')" | 
						|
                  @input="handleOpenInput(openingBackObj)" | 
						|
                  @blur="handleBlur()" | 
						|
                  v-model="openingBackObj.collectValue" | 
						|
                  size="mini" | 
						|
                > | 
						|
                  <svg-icon | 
						|
                    slot="prefix" | 
						|
                    icon-class="percentage-icon" | 
						|
                    class="percentage-icon" | 
						|
                  /> | 
						|
                </el-input> | 
						|
              </el-form-item> | 
						|
            </el-form> | 
						|
          </div> | 
						|
          <div class="context-li" v-if="isObjectValid(faultAlarmObj)"> | 
						|
            <div class="wind-text">风机故障状态:</div> | 
						|
            <div class="badStautus" v-if="faultAlarmObj.collectValue">故障</div> | 
						|
            <div class="goodStautus" v-else>正常</div> | 
						|
          </div> | 
						|
          <div class="context-li" v-if="isObjectValid(runStatusObj)"> | 
						|
            <div :class="getTextClass(runStatusObj, 'wind-text')"> | 
						|
              风机运行状态: | 
						|
            </div> | 
						|
            <div class="goodStautus" v-if="runStatusObj.collectValue">运行</div> | 
						|
            <div class="noneStautus" v-else>不运行</div> | 
						|
          </div> | 
						|
          <div class="context-li" v-if="isObjectValid(pressureObj)"> | 
						|
            <div :class="getTextClass(pressureObj, 'wind-text')">风机压差:</div> | 
						|
            <div class="badStautus" v-if="pressureObj.collectValue">故障</div> | 
						|
            <div class="goodStautus" v-else>正常</div> | 
						|
          </div> | 
						|
          <div class="context-li" v-if="isObjectValid(automaticObj)"> | 
						|
            <div :class="getTextClass(automaticObj, 'wind-text')"> | 
						|
              风机手自动状态: | 
						|
            </div> | 
						|
            <div class="noneStautus" v-if="automaticObj.collectValue">手动</div> | 
						|
            <div class="goodStautus" v-else>自动</div> | 
						|
          </div> | 
						|
          <!-- <div class="context-li" v-if="isObjectValid(startControlObj)"> | 
						|
            <div :class="getTextClass(startControlObj, 'wind-text')">风机启停控制</div> | 
						|
            <el-switch | 
						|
              style="display: block" | 
						|
              v-model="startControlObj.collectValue" | 
						|
              active-color="#13ce66" | 
						|
              inactive-color="#ff4949" | 
						|
              active-text="开启" | 
						|
              inactive-text="停止" | 
						|
              @change="handleControlText(startControlObj,'开启','停止')" | 
						|
            > | 
						|
            </el-switch> | 
						|
          </div> --> | 
						|
          <div | 
						|
            class="context-li greenContext" | 
						|
            v-if="isObjectValid(damperHzBackObj)" | 
						|
          > | 
						|
            <div :class="getTextClass(damperHzBackObj, 'wind-text')"> | 
						|
              风机频率反馈: | 
						|
            </div> | 
						|
            <div>{{ damperHzBackObj.collectValue }}Hz</div> | 
						|
          </div> | 
						|
        </div> | 
						|
        <div class="fan-satatus1"> | 
						|
          <div class="context-li" v-if="isObjectValid(damperHzObj)"> | 
						|
            <div :class="getTextClass(damperHzObj, 'wind-text')"> | 
						|
              风机频率调节: | 
						|
            </div> | 
						|
            <div>{{ Math.floor(damperHzObj.collectValue / 2) }}Hz</div> | 
						|
          </div> | 
						|
          <div class="context-li" v-if="isObjectValid(damperHzRemoteObj)"> | 
						|
            <div :class="getTextClass(damperHzRemoteObj, 'wind-text')"> | 
						|
              风机频率远程手自动: | 
						|
            </div> | 
						|
            <el-switch | 
						|
              style="display: block" | 
						|
              v-model="damperHzRemoteObj.collectValue" | 
						|
              active-color="#13ce66" | 
						|
              inactive-color="#ff4949" | 
						|
              active-text="手动" | 
						|
              inactive-text="自动" | 
						|
              @change="handleControlText(damperHzRemoteObj, '手动', '自动')" | 
						|
            > | 
						|
            </el-switch> | 
						|
          </div> | 
						|
          <div class="context-li" v-if="isObjectValid(damperByHandHzObj)"> | 
						|
            <div :class="getTextClass(damperByHandHzObj, 'wind-text')"> | 
						|
              风机频率手动调节: | 
						|
            </div> | 
						|
            <el-form @submit.native.prevent> | 
						|
              <el-form-item> | 
						|
                <el-input | 
						|
                  style="width: 1.2rem" | 
						|
                  @keyup.enter.native=" | 
						|
                    handleEnter(damperByHandHzObj, $event, '%') | 
						|
                  " | 
						|
                  @input="handleInput(damperByHandHzObj)" | 
						|
                  @blur="handleBlur()" | 
						|
                  v-model="damperByHandHzObj.collectValue" | 
						|
                  size="mini" | 
						|
                  :disabled="!damperHzRemoteObj.collectValue" | 
						|
                > | 
						|
                  <svg-icon | 
						|
                    slot="prefix" | 
						|
                    icon-class="percentage-icon" | 
						|
                    class="percentage-icon" | 
						|
                  /> | 
						|
                </el-input> | 
						|
              </el-form-item> | 
						|
            </el-form> | 
						|
          </div> | 
						|
        </div> | 
						|
        <div class="fan-satatus2"> | 
						|
          <div | 
						|
            class="context-li greenContext" | 
						|
            v-if="isObjectValid(waterValveObj)" | 
						|
          > | 
						|
            <div :class="getTextClass(waterValveObj, 'wind-text')"> | 
						|
              水阀反馈 | 
						|
            </div> | 
						|
            <div>{{ waterValveObj.collectValue }}%</div> | 
						|
          </div> | 
						|
        </div> | 
						|
        <div class="fan-satatus2-set"> | 
						|
          <div class="context-li" v-if="isObjectValid(waterValveObjSet)"> | 
						|
            <div :class="getTextClass(waterValveObjSet, 'wind-text')"> | 
						|
              水阀调节 | 
						|
            </div> | 
						|
            <el-form @submit.native.prevent> | 
						|
              <el-form-item> | 
						|
                <el-input | 
						|
                  @keyup.enter.native=" | 
						|
                    handleEnter(waterValveObjSet, $event, '%') | 
						|
                  " | 
						|
                  @input="handleInput(waterValveObjSet)" | 
						|
                  @blur="handleBlur()" | 
						|
                  v-model="waterValveObjSet.collectValue" | 
						|
                  disabled | 
						|
                  size="mini" | 
						|
                > | 
						|
                  <svg-icon | 
						|
                    slot="prefix" | 
						|
                    icon-class="percentage-icon" | 
						|
                    class="percentage-icon" | 
						|
                  /> | 
						|
                </el-input> | 
						|
              </el-form-item> | 
						|
            </el-form> | 
						|
          </div> | 
						|
          <div class="context-li" v-if="isObjectValid(waterValveRemoteObj)"> | 
						|
            <div :class="getTextClass(waterValveRemoteObj, 'wind-text')"> | 
						|
              水阀远程手自动: | 
						|
            </div> | 
						|
            <el-switch | 
						|
              style="display: block" | 
						|
              v-model="waterValveRemoteObj.collectValue" | 
						|
              active-color="#13ce66" | 
						|
              inactive-color="#ff4949" | 
						|
              active-text="手动" | 
						|
              inactive-text="自动" | 
						|
              @change="handleControlText(waterValveRemoteObj, '手动', '自动')" | 
						|
            > | 
						|
            </el-switch> | 
						|
          </div> | 
						|
          <div class="context-li" v-if="isObjectValid(waterValveByHandHzObj)"> | 
						|
            <div :class="getTextClass(waterValveByHandHzObj, 'wind-text')"> | 
						|
              水阀手动调节: | 
						|
            </div> | 
						|
            <el-form @submit.native.prevent> | 
						|
              <el-form-item> | 
						|
                <el-input | 
						|
                  style="width: 1.2rem" | 
						|
                  @keyup.enter.native=" | 
						|
                    handleEnter(waterValveByHandHzObj, $event, '%') | 
						|
                  " | 
						|
                  @input="handleInput(waterValveByHandHzObj)" | 
						|
                  @blur="handleBlur()" | 
						|
                  v-model="waterValveByHandHzObj.collectValue" | 
						|
                  size="mini" | 
						|
                  :disabled="!waterValveRemoteObj.collectValue" | 
						|
                > | 
						|
                  <svg-icon | 
						|
                    slot="prefix" | 
						|
                    icon-class="percentage-icon" | 
						|
                    class="percentage-icon" | 
						|
                  /> | 
						|
                </el-input> | 
						|
              </el-form-item> | 
						|
            </el-form> | 
						|
          </div> | 
						|
        </div> | 
						|
 | 
						|
        <div class="fan-satatus4"> | 
						|
          <div | 
						|
            class="context-li" | 
						|
            v-if="isObjectValid(modeChangeObj)" | 
						|
            style="width: 3rem" | 
						|
          > | 
						|
            <div :class="getTextClass(modeChangeObj, 'wind-text')"> | 
						|
              模式选择: | 
						|
            </div> | 
						|
            <el-select | 
						|
              size="mini" | 
						|
              v-model="modeChangeObj.collectValue" | 
						|
              placeholder="请选择" | 
						|
              @change="selectThink2(modeChangeObj)" | 
						|
              @visible-change=" | 
						|
                (visible) => handleVisibleChange2(visible, modeChangeObj) | 
						|
              " | 
						|
            > | 
						|
              <el-option | 
						|
                v-for="item in modeOptions" | 
						|
                :key="item.value" | 
						|
                :label="item.label" | 
						|
                :value="item.value" | 
						|
              > | 
						|
              </el-option> | 
						|
            </el-select> | 
						|
          </div> | 
						|
          <div class="context-li" v-if="isObjectValid(modeOneObj)"> | 
						|
            <div :class="getTextClass(modeOneObj, 'wind-text')"> | 
						|
              宴会一厅模式-频率设定: | 
						|
            </div> | 
						|
            <el-form @submit.native.prevent> | 
						|
              <el-form-item> | 
						|
                <el-input | 
						|
                  @keyup.enter.native="handleEnter(modeOneObj, $event, 'Hz')" | 
						|
                  @input="handleInput(modeOneObj)" | 
						|
                  @blur="handleBlur()" | 
						|
                  v-model="modeOneObj.collectValue" | 
						|
                  size="mini" | 
						|
                  :disabled="isShowMode1" | 
						|
                > | 
						|
                  <svg-icon | 
						|
                    slot="prefix" | 
						|
                    icon-class="hz-icon" | 
						|
                    class="percentage-icon" | 
						|
                  /> | 
						|
                </el-input> | 
						|
              </el-form-item> | 
						|
            </el-form> | 
						|
          </div> | 
						|
          <div class="context-li" v-if="isObjectValid(modeTwoObj)"> | 
						|
            <div :class="getTextClass(modeTwoObj, 'wind-text')"> | 
						|
              餐厅模式-频率设定: | 
						|
            </div> | 
						|
            <el-form @submit.native.prevent> | 
						|
              <el-form-item> | 
						|
                <el-input | 
						|
                  @keyup.enter.native="handleEnter(modeTwoObj, $event, 'Hz')" | 
						|
                  @input="handleInput(modeTwoObj)" | 
						|
                  @blur="handleBlur()" | 
						|
                  v-model="modeTwoObj.collectValue" | 
						|
                  size="mini" | 
						|
                  :disabled="isShowMode2" | 
						|
                > | 
						|
                  <svg-icon | 
						|
                    slot="prefix" | 
						|
                    icon-class="hz-icon" | 
						|
                    class="percentage-icon" | 
						|
                  /> | 
						|
                </el-input> | 
						|
              </el-form-item> | 
						|
            </el-form> | 
						|
          </div> | 
						|
          <div class="context-li" v-if="isObjectValid(modeThreeObj)"> | 
						|
            <div :class="getTextClass(modeThreeObj, 'wind-text')"> | 
						|
              会议模式-频率设定: | 
						|
            </div> | 
						|
            <el-form @submit.native.prevent> | 
						|
              <el-form-item> | 
						|
                <el-input | 
						|
                  @keyup.enter.native="handleEnter(modeThreeObj, $event, 'Hz')" | 
						|
                  @input="handleInput(modeThreeObj)" | 
						|
                  @blur="handleBlur()" | 
						|
                  v-model="modeThreeObj.collectValue" | 
						|
                  :disabled="isShowMode3" | 
						|
                  size="mini" | 
						|
                > | 
						|
                  <svg-icon | 
						|
                    slot="prefix" | 
						|
                    icon-class="hz-icon" | 
						|
                    class="percentage-icon" | 
						|
                  /> | 
						|
                </el-input> | 
						|
              </el-form-item> | 
						|
            </el-form> | 
						|
          </div> | 
						|
          <div class="context-li" v-if="isObjectValid(modeFourObj)"> | 
						|
            <div :class="getTextClass(modeFourObj, 'wind-text')"> | 
						|
              全开模式-频率设定: | 
						|
            </div> | 
						|
            <el-form @submit.native.prevent> | 
						|
              <el-form-item> | 
						|
                <el-input | 
						|
                  @keyup.enter.native="handleEnter(modeFourObj, $event, 'Hz')" | 
						|
                  @input="handleInput(modeFourObj)" | 
						|
                  @blur="handleBlur()" | 
						|
                  v-model="modeFourObj.collectValue" | 
						|
                  size="mini" | 
						|
                  :disabled="isShowMode4" | 
						|
                > | 
						|
                  <svg-icon | 
						|
                    slot="prefix" | 
						|
                    icon-class="hz-icon" | 
						|
                    class="percentage-icon" | 
						|
                  /> | 
						|
                </el-input> | 
						|
              </el-form-item> | 
						|
            </el-form> | 
						|
          </div> | 
						|
        </div> | 
						|
        <!-- 远程启停 --> | 
						|
        <div | 
						|
          class="offClass" | 
						|
          @click="handleOneKeyButton(remoteManualObj, '远程手动停止')" | 
						|
          v-if=" | 
						|
            isObjectValid(remoteManualObj) && | 
						|
            startStopValue === 0 && | 
						|
            !automaticObj.collectValue | 
						|
          " | 
						|
        > | 
						|
          <div v-if="remoteManualObj.collectValue" class="off-bg">运行</div> | 
						|
          <div v-else class="off-bg">停止</div> | 
						|
        </div> | 
						|
        <!-- 时间表启停 --> | 
						|
        <div | 
						|
          class="offClass" | 
						|
          @click="handleOneKeyButton(timeScheduleObj, '时间表停止')" | 
						|
          v-if=" | 
						|
            isObjectValid(timeScheduleObj) && | 
						|
            startStopValue === 1 && | 
						|
            !automaticObj.collectValue | 
						|
          " | 
						|
        > | 
						|
          <div v-if="timeScheduleObj.collectValue" class="off-bg on-animation"> | 
						|
            运行 | 
						|
          </div> | 
						|
          <div v-else class="off-bg">停止</div> | 
						|
        </div> | 
						|
      </div> | 
						|
    </div> | 
						|
    <!-- 定时开关内容 --> | 
						|
    <el-dialog | 
						|
      title="定时开关机功能" | 
						|
      :visible.sync="isOpenTimeSwitch" | 
						|
      append-to-body | 
						|
      width="805px" | 
						|
      class="custom-dialog" | 
						|
    > | 
						|
      <div class="dialog-content"> | 
						|
        <div class="device-container" v-loading="loading"> | 
						|
          <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> | 
						|
          <div | 
						|
            class="device-li" | 
						|
            v-for="(item, index) in delayList" | 
						|
            :key="index" | 
						|
            :class="{ highlight: item.name.includes(currentWeekday) }" | 
						|
          > | 
						|
            <div class="device-name">{{ item.name }}</div> | 
						|
            <div class="device-name"> | 
						|
              <el-form @submit.native.prevent> | 
						|
                <el-form-item> | 
						|
                  <el-input | 
						|
                    size="mini" | 
						|
                    v-model="item.delayOpenHour" | 
						|
                    @keyup.enter.native=" | 
						|
                      handleSwitchEnter(item, 'openHour', $event) | 
						|
                    " | 
						|
                    @input="handleSwitchInput(item, 'delayOpenHour', 'hour')" | 
						|
                  ></el-input> </el-form-item | 
						|
              ></el-form> | 
						|
              <div class="slip">:</div> | 
						|
              <el-form @submit.native.prevent> | 
						|
                <el-form-item> | 
						|
                  <el-input | 
						|
                    size="mini" | 
						|
                    v-model="item.delayOpenMinute" | 
						|
                    @keyup.enter.native=" | 
						|
                      handleSwitchEnter(item, 'openMinute', $event) | 
						|
                    " | 
						|
                    @input=" | 
						|
                      handleSwitchInput(item, 'delayOpenMinute', 'minute') | 
						|
                    " | 
						|
                  ></el-input> </el-form-item | 
						|
              ></el-form> | 
						|
            </div> | 
						|
            <div class="device-name"> | 
						|
              <el-form @submit.native.prevent> | 
						|
                <el-form-item> | 
						|
                  <el-input | 
						|
                    size="mini" | 
						|
                    v-model="item.delayCloseHour" | 
						|
                    @keyup.enter.native=" | 
						|
                      handleSwitchEnter(item, 'closeHour', $event) | 
						|
                    " | 
						|
                    @input="handleSwitchInput(item, 'delayCloseHour', 'hour')" | 
						|
                  ></el-input></el-form-item | 
						|
              ></el-form> | 
						|
              <div class="slip">:</div> | 
						|
              <el-form @submit.native.prevent> | 
						|
                <el-form-item> | 
						|
                  <el-input | 
						|
                    size="mini" | 
						|
                    v-model="item.delayCloseMinute" | 
						|
                    @keyup.enter.native=" | 
						|
                      handleSwitchEnter(item, 'closeMinute', $event) | 
						|
                    " | 
						|
                    @input=" | 
						|
                      handleSwitchInput(item, 'delayCloseMinute', 'minute') | 
						|
                    " | 
						|
                  ></el-input></el-form-item | 
						|
              ></el-form> | 
						|
            </div> | 
						|
            <div class="device-name"> | 
						|
              <el-switch | 
						|
                style="display: block" | 
						|
                active-color="#13ce66" | 
						|
                inactive-color="#ff4949" | 
						|
                active-text="开启" | 
						|
                inactive-text="停用" | 
						|
                v-model="item.delayStatus" | 
						|
                @change="handleSwitchStatus(item)" | 
						|
              > | 
						|
              </el-switch> | 
						|
            </div> | 
						|
          </div> | 
						|
        </div> | 
						|
      </div> | 
						|
    </el-dialog> | 
						|
  </div> | 
						|
</template> | 
						|
 | 
						|
<script> | 
						|
import { windList, timeList, undateTime } from "@/api/aircAndWindc/index"; | 
						|
import { operationConrol } from "@/api/hotWater/waterControl"; | 
						|
export default { | 
						|
  props: { | 
						|
    // 定义接收的 currentId 和 currentName | 
						|
    currentId: { | 
						|
      //当前选中高亮的id | 
						|
      type: String, | 
						|
      required: true, | 
						|
    }, | 
						|
    currentName: { | 
						|
      //当前选中的名称 | 
						|
      type: String, | 
						|
      required: true, | 
						|
    }, | 
						|
  }, | 
						|
  data() { | 
						|
    return { | 
						|
      loading: false, | 
						|
      backwaterObj: {}, //回水温度 | 
						|
      waterValveObj: {}, //水阀调节 | 
						|
      waterValveObjSet: {}, //水阀调节设置 | 
						|
      waterValveRemoteObj: {}, //水阀远程手自动选择 | 
						|
      waterValveByHandHzObj: {}, //水阀手动频率调节 | 
						|
      startControlObj: {}, //启停控制 | 
						|
      runStatusObj: {}, //运行状态 | 
						|
      damperOneObj: {}, //风阀1调节 | 
						|
      damperTwoObj: {}, //风阀2调节 | 
						|
      damperThreeObj: {}, //风阀3调节 | 
						|
      damperOneBackObj: {}, //风阀1反馈 | 
						|
      damperTwoBackObj: {}, //风阀2反馈 | 
						|
      damperThreeBackObj: {}, //风阀3反馈 | 
						|
      damperOneRemoteObj: {}, //风阀1远程手自动选择 | 
						|
      damperTwoRemoteObj: {}, //风阀2远程手自动选择 | 
						|
      damperThreeRemoteObj: {}, //风阀3远程手自动选择 | 
						|
      damperOneManualObj: {}, //风阀1手动调节 | 
						|
      damperTwoManualObj: {}, //风阀2手动调节 | 
						|
      damperThreeManualObj: {}, //风阀3手动调节 | 
						|
      openingBackObj: {}, //风阀开度反馈 | 
						|
      startStopObj: {}, //风阀启停选择 | 
						|
      remoteManualObj: {}, //远程手动启停 | 
						|
      timeScheduleObj: {}, //时间表启停 | 
						|
      damperHzBackObj: {}, //风机频率反馈 | 
						|
      damperHzObj: {}, //风机频率调节 | 
						|
      damperHzRemoteObj: {}, //风机频率远程手自动选择 | 
						|
      damperByHandHzObj: {}, //风机手动频率调节 | 
						|
      modeChangeObj: {}, //模式选择 | 
						|
      modeOneObj: {}, //宴会一厅模式 | 
						|
      modeTwoObj: {}, //餐厅模式 | 
						|
      modeThreeObj: {}, //会议模式 | 
						|
      modeFourObj: {}, //全开模式 | 
						|
      pressureObj: {}, //压差 | 
						|
      automaticObj: {}, //手自动状态 | 
						|
      backAirObj: {}, //回风温度 | 
						|
      backAirObjSet: {}, //回风温度设置 | 
						|
      faultAlarmObj: {}, //故障报警 | 
						|
      waterSupplyObj: {}, //供水温度 | 
						|
 | 
						|
      tableData: [], //系统状态表格数据 | 
						|
      temValue: "℃", //回风温度 | 
						|
      temValueSet: "℃", //回风温度设置 | 
						|
      valvePercent: "%", //阀比例 | 
						|
      runStatus: false, //运行状态 | 
						|
      autoStatus: false, //手自动状态 | 
						|
      startStatus: false, //启停控制 | 
						|
      frequency: "v", | 
						|
      isOpenTimeSwitch: false, | 
						|
      delayList: [], | 
						|
      currentWeekday: "", | 
						|
      options: [ | 
						|
        { | 
						|
          label: "远程手动启停", | 
						|
          value: 0, | 
						|
        }, | 
						|
        { | 
						|
          label: "时间表启停", | 
						|
          value: 1, | 
						|
        }, | 
						|
      ], //启停选择列表 | 
						|
      // 用于存储启停选择select选择前的值 | 
						|
      oldValue: null, | 
						|
      //   用于控制启停选择不同select值显示内容 | 
						|
      startStopValue: null, | 
						|
 | 
						|
      modeOptions: [ | 
						|
        { | 
						|
          label: "宴会一厅模式", | 
						|
          value: 0, | 
						|
        }, | 
						|
        { | 
						|
          label: "餐厅模式", | 
						|
          value: 1, | 
						|
        }, | 
						|
        { | 
						|
          label: "会议模式", | 
						|
          value: 2, | 
						|
        }, | 
						|
        { | 
						|
          label: "全开模式", | 
						|
          value: 3, | 
						|
        }, | 
						|
        { | 
						|
          label: "宴会一厅+餐厅模式", | 
						|
          value: 4, | 
						|
        }, | 
						|
        { | 
						|
          label: "餐厅+会议模式", | 
						|
          value: 5, | 
						|
        }, | 
						|
        { | 
						|
          label: "宴会一厅+会议模式", | 
						|
          value: 6, | 
						|
        }, | 
						|
      ], //模式选择列表 | 
						|
      isShowMode1: false, | 
						|
      isShowMode2: false, | 
						|
      isShowMode3: false, | 
						|
      isShowMode4: false, | 
						|
      timer: null, // 用于存储定时器 ID | 
						|
    }; | 
						|
  }, | 
						|
  watch: { | 
						|
    temValue(newVal) { | 
						|
      let valueWithoutTem = newVal.replace(/℃/g, ""); | 
						|
      if (valueWithoutTem === "") { | 
						|
        this.temValue = "℃"; | 
						|
      } else { | 
						|
        this.temValue = valueWithoutTem + "℃"; | 
						|
      } | 
						|
    }, | 
						|
    valvePercent(newVal) { | 
						|
      // 去除输入值中的 % | 
						|
      let valueWithoutPercent = newVal.replace(/%/g, ""); | 
						|
      // 如果输入值为空,保持 % | 
						|
      if (valueWithoutPercent === "") { | 
						|
        this.temValue = "%"; | 
						|
      } else { | 
						|
        // 否则在输入值后面添加 % | 
						|
        this.temValue = valueWithoutPercent + "%"; | 
						|
      } | 
						|
    }, | 
						|
    frequency(newVal) { | 
						|
      let valueWithoutFrequency = newVal.replace(/v/g, ""); | 
						|
      if (valueWithoutFrequency === "") { | 
						|
        this.temValue = "v"; | 
						|
      } else { | 
						|
        this.temValue = valueWithoutFrequency + "v"; | 
						|
      } | 
						|
    }, | 
						|
    // 监听 currentId 的变化 | 
						|
    currentId: { | 
						|
      deep: true, | 
						|
      immediate: true, | 
						|
      handler(newVal, val) { | 
						|
        console.log("子组件改变的值-----", newVal); | 
						|
        if (newVal) { | 
						|
          this.$nextTick(function () { | 
						|
            let val = newVal; | 
						|
            this.getWindList(val); | 
						|
          }); | 
						|
        } | 
						|
      }, | 
						|
    }, | 
						|
  }, | 
						|
 | 
						|
  created() { | 
						|
    const weekdays = [ | 
						|
      "星期日", | 
						|
      "星期一", | 
						|
      "星期二", | 
						|
      "星期三", | 
						|
      "星期四", | 
						|
      "星期五", | 
						|
      "星期六", | 
						|
    ]; | 
						|
    const date = new Date(); | 
						|
    const dayIndex = date.getDay(); | 
						|
    this.currentWeekday = weekdays[dayIndex]; | 
						|
    console.log("今天是星期几", this.currentWeekday); | 
						|
  }, | 
						|
  mounted() { | 
						|
    // 设置定时器,每 10 秒执行一次 | 
						|
    this.timer = setInterval(() => { | 
						|
      this.getWindList(this.currentId); | 
						|
    }, 10000); | 
						|
  }, | 
						|
  beforeDestroy() { | 
						|
    // 组件销毁前清除定时器 | 
						|
    if (this.timer) { | 
						|
      clearInterval(this.timer); | 
						|
    } | 
						|
  }, | 
						|
  methods: { | 
						|
    // 判断对象是否有效(不为空且不为 undefined) | 
						|
    isObjectValid(obj) { | 
						|
      return obj && Object.keys(obj).length > 0; | 
						|
    }, | 
						|
    // 请求数据 | 
						|
    getWindList(val) { | 
						|
      console.log("请求了风柜系统", val); | 
						|
      if (val) { | 
						|
        return new Promise((resolve, reject) => { | 
						|
          let data = { | 
						|
            systemType: "2", | 
						|
            houseId: val, | 
						|
          }; | 
						|
          windList(data) | 
						|
            .then((res) => { | 
						|
              console.log("风柜系统查询返回", res); | 
						|
              if (res.code == 200 && res.rows.length > 0) { | 
						|
                let data = res.rows[0].values; | 
						|
                this.backwaterObj = {}; //回水温度 | 
						|
                this.waterValveObj = {}; //水阀反馈 | 
						|
                this.waterValveObjSet = {}; //水阀调节 | 
						|
                this.waterValveByHandHzObj = {}; //水阀手动调节 | 
						|
                this.waterValveRemoteObj = {}; //水阀远程手自动选择 | 
						|
                this.startControlObj = {}; //启停控制 | 
						|
                this.runStatusObj = {}; //运行状态 | 
						|
                this.airSupplyObj = {}; //送风温度 | 
						|
                this.damperOneObj = {}; //风阀1调节 | 
						|
                this.damperTwoObj = {}; //风阀2调节 | 
						|
                this.damperThreeObj = {}; //风阀3调节 | 
						|
                this.damperOneBackObj = {}; //风阀1反馈 | 
						|
                this.damperTwoBackObj = {}; //风阀2反馈 | 
						|
                this.damperThreeBackObj = {}; //风阀3反馈 | 
						|
                this.damperOneRemoteObj = {}; //风阀1远程手自动选择 | 
						|
                this.damperTwoRemoteObj = {}; //风阀2远程手自动选择 | 
						|
                this.damperThreeRemoteObj = {}; //风阀3远程手自动选择 | 
						|
                this.damperOneManualObj = {}; //风阀1手动调节 | 
						|
                this.damperTwoManualObj = {}; //风阀2手动调节 | 
						|
                this.damperThreeManualObj = {}; //风阀3手动调节 | 
						|
                this.openingBackObj = {}; //风阀开度反馈 | 
						|
                this.startStopObj = {}; //风机启停选择 | 
						|
                this.remoteManualObj = {}; //远程手动启停 | 
						|
                this.timeScheduleObj = {}; //时间表启停 | 
						|
                this.damperHzBackObj = {}; //风机频率反馈 | 
						|
                this.damperHzObj = {}; //风机频率调节 | 
						|
                this.damperHzRemoteObj = {}; //风机频率远程手自动选择 | 
						|
                this.damperByHandHzObj = {}; //风机手动频率调节 | 
						|
                this.modeChangeObj = {}; //模式选择 | 
						|
                this.modeOneObj = {}; //宴会一厅模式 | 
						|
                this.modeTwoObj = {}; //餐厅模式 | 
						|
                this.modeThreeObj = {}; //会议模式 | 
						|
                this.modeFourObj = {}; //全开模式 | 
						|
                this.pressureObj = {}; //压差 | 
						|
                this.automaticObj = {}; //手自动状态 | 
						|
                this.backAirObj = {}; //回风温度 | 
						|
                this.faultAlarmObj = {}; //故障报警 | 
						|
                this.waterSupplyObj = {}; //供水温度 | 
						|
                data.forEach((item) => { | 
						|
                  // 回水温度 | 
						|
                  if ( | 
						|
                    item.paramType === "12" && | 
						|
                    item.collectName.includes("回水") | 
						|
                  ) { | 
						|
                    this.backwaterObj = item; | 
						|
                  } | 
						|
                  //水阀反馈 | 
						|
                  else if ( | 
						|
                    item.paramType === "4" && | 
						|
                    item.collectName.includes("水阀反馈") | 
						|
                  ) { | 
						|
                    this.waterValveObj = item; | 
						|
                  } | 
						|
                  //水阀调节 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("水阀调节") | 
						|
                  ) { | 
						|
                    this.waterValveObjSet = item; | 
						|
                  } | 
						|
                  //   //启停控制 0停止1开启 | 
						|
                  //   else if (item.paramType === "2") { | 
						|
                  //     this.startControlObj = item; | 
						|
                  //     this.startControlObj.collectValue = | 
						|
                  //       Number(item.collectValue) == 0 ? false : true; | 
						|
                  //   } | 
						|
                  //运行状态  0不运行1运行 | 
						|
                  else if (item.paramType === "1") { | 
						|
                    this.runStatusObj = item; | 
						|
                    this.runStatusObj.collectValue = | 
						|
                      Number(item.collectValue) == 0 ? false : true; | 
						|
                  } | 
						|
                  //送风温度 | 
						|
                  else if ( | 
						|
                    item.paramType === "12" && | 
						|
                    item.collectName.includes("送风") | 
						|
                  ) { | 
						|
                    this.airSupplyObj = item; | 
						|
                  } | 
						|
                  //压差 0正常1故障(true) | 
						|
                  else if (item.paramType === "33") { | 
						|
                    this.pressureObj = item; | 
						|
                    this.pressureObj.collectValue = | 
						|
                      Number(item.collectValue) == 0 ? false : true; | 
						|
                  } | 
						|
                  //手自动状态  0手动1自动 | 
						|
                  else if (item.paramType === "6") { | 
						|
                    this.automaticObj = item; | 
						|
                    this.automaticObj.collectValue = | 
						|
                      Number(item.collectValue) == 0 ? true : false; | 
						|
                  } | 
						|
                  //回风温度 | 
						|
                  else if ( | 
						|
                    item.paramType === "12" && | 
						|
                    item.collectName.includes("回风") | 
						|
                  ) { | 
						|
                    this.backAirObj = item; | 
						|
                  } | 
						|
                  //回风温度设置 | 
						|
                  else if ( | 
						|
                    item.paramType === "14" && | 
						|
                    item.collectName.includes("回风") | 
						|
                  ) { | 
						|
                    this.backAirObjSet = item; | 
						|
                  } | 
						|
                  //风阀1调节 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("1号风阀调节") | 
						|
                  ) { | 
						|
                    this.damperOneObj = item; | 
						|
                    console.log("风阀1", item); | 
						|
                  } | 
						|
                  //风阀2调节 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("2号风阀调节") | 
						|
                  ) { | 
						|
                    this.damperTwoObj = item; | 
						|
                  } | 
						|
                  //风阀3调节 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("3号风阀调节") | 
						|
                  ) { | 
						|
                    this.damperThreeObj = item; | 
						|
                  } | 
						|
                  //风阀1反馈 | 
						|
                  else if ( | 
						|
                    item.paramType === "4" && | 
						|
                    item.collectName.includes("1号风阀反馈") | 
						|
                  ) { | 
						|
                    this.damperOneBackObj = item; | 
						|
                    console.log("风阀1", item); | 
						|
                  } | 
						|
                  //风阀2反馈 | 
						|
                  else if ( | 
						|
                    item.paramType === "4" && | 
						|
                    item.collectName.includes("2号风阀反馈") | 
						|
                  ) { | 
						|
                    this.damperTwoBackObj = item; | 
						|
                  } | 
						|
                  //风阀3反馈 | 
						|
                  else if ( | 
						|
                    item.paramType === "4" && | 
						|
                    item.collectName.includes("3号风阀反馈") | 
						|
                  ) { | 
						|
                    this.damperThreeBackObj = item; | 
						|
                  } | 
						|
                  //风阀1远程手自动状态  0自动1手动 | 
						|
                  else if ( | 
						|
                    item.paramType === "0" && | 
						|
                    item.collectName.includes("1号风阀远程手自动") | 
						|
                  ) { | 
						|
                    this.damperOneRemoteObj = item; | 
						|
                    this.damperOneRemoteObj.collectValue = | 
						|
                      Number(item.collectValue) == 1 ? true : false; | 
						|
                  } | 
						|
                  //风阀2远程手自动状态 | 
						|
                  else if ( | 
						|
                    item.paramType === "0" && | 
						|
                    item.collectName.includes("2号风阀远程手自动") | 
						|
                  ) { | 
						|
                    this.damperTwoRemoteObj = item; | 
						|
                    this.damperTwoRemoteObj.collectValue = | 
						|
                      Number(item.collectValue) == 1 ? true : false; | 
						|
                  } | 
						|
                  //风阀3远程手自动状态 | 
						|
                  else if ( | 
						|
                    item.paramType === "0" && | 
						|
                    item.collectName.includes("3号风阀远程手自动") | 
						|
                  ) { | 
						|
                    this.damperThreeRemoteObj = item; | 
						|
                    this.damperThreeRemoteObj.collectValue = | 
						|
                      Number(item.collectValue) == 1 ? true : false; | 
						|
                  } | 
						|
                  //风阀1手动调节 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("1号风阀手动调节") | 
						|
                  ) { | 
						|
                    this.damperOneManualObj = item; | 
						|
                  } | 
						|
                  //风阀2手动调节 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("2号风阀手动调节") | 
						|
                  ) { | 
						|
                    this.damperTwoManualObj = item; | 
						|
                  } | 
						|
                  //风阀3手动调节 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("3号风阀手动调节") | 
						|
                  ) { | 
						|
                    this.damperThreeManualObj = item; | 
						|
                  } | 
						|
                  //风阀开度反馈 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("风阀开度反馈") | 
						|
                  ) { | 
						|
                    this.openingBackObj = item; | 
						|
                  } | 
						|
                  //风阀启停选择 | 
						|
                  else if ( | 
						|
                    item.paramType === "27" && | 
						|
                    item.collectName.includes("启停选择") | 
						|
                  ) { | 
						|
                    this.startStopObj = item; | 
						|
                    if (typeof this.startStopObj.collectValue === "string") { | 
						|
                      // 检查字符串是否为纯数字 | 
						|
                      if ( | 
						|
                        /^\d+$/.test(this.startStopObj.collectValue) || | 
						|
                        this.startStopObj.collectValue.match(/^\d+\.00$/) | 
						|
                      ) { | 
						|
                        this.startStopObj.collectValue = parseInt( | 
						|
                          this.startStopObj.collectValue, | 
						|
                          10 | 
						|
                        ); | 
						|
                        this.startStopValue = this.startStopObj.collectValue; | 
						|
                      } | 
						|
                    } | 
						|
                  } | 
						|
                  //远程手动启停 0停止1开启 | 
						|
                  else if ( | 
						|
                    item.paramType === "2" && | 
						|
                    item.collectName.includes("远程手动启停") | 
						|
                  ) { | 
						|
                    this.remoteManualObj = item; | 
						|
                    this.remoteManualObj.collectValue = | 
						|
                      Number(item.collectValue) == 1 ? true : false; | 
						|
                  } | 
						|
                  //时间表启停 0停止1开启 | 
						|
                  else if ( | 
						|
                    item.paramType === "2" && | 
						|
                    item.collectName.includes("时间表启停") | 
						|
                  ) { | 
						|
                    this.timeScheduleObj = item; | 
						|
                    this.timeScheduleObj.collectValue = | 
						|
                      Number(item.collectValue) == 1 ? true : false; | 
						|
                  } | 
						|
                  //   风机频率反馈 | 
						|
                  else if ( | 
						|
                    item.paramType === "4" && | 
						|
                    item.collectName.includes("频率反馈") | 
						|
                  ) { | 
						|
                    this.damperHzBackObj = item; | 
						|
                  } | 
						|
                  //   风机频率调节 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("硬件频率控制") | 
						|
                  ) { | 
						|
                    this.damperHzObj = item; | 
						|
                  } | 
						|
                  //   风机频率远程手自动调节 | 
						|
                  else if ( | 
						|
                    item.paramType === "0" && | 
						|
                    item.collectName.includes("风机频率远程手自动") | 
						|
                  ) { | 
						|
                    this.damperHzRemoteObj = item; | 
						|
                    this.damperHzRemoteObj.collectValue = | 
						|
                      Number(item.collectValue) == 1 ? true : false; | 
						|
                  } | 
						|
                  //   风机频率手动调节 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("风机频率手动调节") | 
						|
                  ) { | 
						|
                    this.damperByHandHzObj = item; | 
						|
                  } | 
						|
                  //   水阀远程手自动调节 | 
						|
                  else if ( | 
						|
                    item.paramType === "0" && | 
						|
                    item.collectName.includes("水阀远程手自动") | 
						|
                  ) { | 
						|
                    this.waterValveRemoteObj = item; | 
						|
                    this.waterValveRemoteObj.collectValue = | 
						|
                      Number(item.collectValue) == 1 ? true : false; | 
						|
                    console.log("水阀远程手自动", this.waterValveRemoteObj); | 
						|
                  } | 
						|
                  //   水阀手动调节 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("水阀手动调节") | 
						|
                  ) { | 
						|
                    this.waterValveByHandHzObj = item; | 
						|
                    console.log("水阀手动调节", this.waterValveByHandHzObj); | 
						|
                  } | 
						|
                  //   模式选择 | 
						|
                  else if ( | 
						|
                    item.paramType === "25" && | 
						|
                    item.collectName.includes("模式选择") | 
						|
                  ) { | 
						|
                    this.modeChangeObj = item; | 
						|
                    // collectValue转换为整数 | 
						|
                    if (typeof this.modeChangeObj.collectValue === "string") { | 
						|
                      // 检查字符串是否为纯数字 | 
						|
                      if ( | 
						|
                        /^\d+$/.test(this.modeChangeObj.collectValue) || | 
						|
                        this.modeChangeObj.collectValue.match(/^\d+\.00$/) | 
						|
                      ) { | 
						|
                        this.modeChangeObj.collectValue = parseInt( | 
						|
                          this.modeChangeObj.collectValue, | 
						|
                          10 | 
						|
                        ); | 
						|
                      } | 
						|
                    } | 
						|
                    if (this.modeChangeObj.collectValue === 0) { | 
						|
                      this.isShowMode1 = true; | 
						|
                      this.isShowMode2 = false; | 
						|
                      this.isShowMode3 = false; | 
						|
                      this.isShowMode4 = false; | 
						|
                    } else if (this.modeChangeObj.collectValue === 1) { | 
						|
                      this.isShowMode1 = false; | 
						|
                      this.isShowMode2 = true; | 
						|
                      this.isShowMode3 = false; | 
						|
                      this.isShowMode4 = false; | 
						|
                    } else if (this.modeChangeObj.collectValue === 2) { | 
						|
                      this.isShowMode1 = false; | 
						|
                      this.isShowMode2 = false; | 
						|
                      this.isShowMode3 = true; | 
						|
                      this.isShowMode4 = false; | 
						|
                    } else if (this.modeChangeObj.collectValue === 3) { | 
						|
                      this.isShowMode1 = false; | 
						|
                      this.isShowMode2 = false; | 
						|
                      this.isShowMode3 = false; | 
						|
                      this.isShowMode4 = true; | 
						|
                    } | 
						|
                  } | 
						|
                  //   宴会一厅模式-频率设定 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("宴会一厅模式") | 
						|
                  ) { | 
						|
                    this.modeOneObj = item; | 
						|
                  } | 
						|
                  //   餐厅模式-频率设定 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("餐厅模式") | 
						|
                  ) { | 
						|
                    this.modeTwoObj = item; | 
						|
                  } | 
						|
                  //   会议模式-频率设定 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("会议模式") | 
						|
                  ) { | 
						|
                    this.modeThreeObj = item; | 
						|
                  } | 
						|
                  //   全开模式-频率设定 | 
						|
                  else if ( | 
						|
                    item.paramType === "3" && | 
						|
                    item.collectName.includes("全开模式") | 
						|
                  ) { | 
						|
                    this.modeFourObj = item; | 
						|
                  } | 
						|
                  //故障报警 0正常 1故障 | 
						|
                  else if (item.paramType === "5") { | 
						|
                    this.faultAlarmObj = item; | 
						|
                    this.faultAlarmObj.collectValue = | 
						|
                      Number(item.collectValue) == 0 ? false : true; | 
						|
                  } | 
						|
                  //供水温度 | 
						|
                  else if ( | 
						|
                    item.paramType === "12" && | 
						|
                    item.collectName.includes("供水") | 
						|
                  ) { | 
						|
                    this.waterSupplyObj = item; | 
						|
                  } | 
						|
                }); | 
						|
              } else { | 
						|
                this.backwaterObj = {}; //回水温度 | 
						|
                this.waterValveObj = {}; //水阀调节 | 
						|
                this.startControlObj = {}; //启停控制 | 
						|
                this.runStatusObj = {}; //运行状态 | 
						|
                this.airSupplyObj = {}; //送风温度 | 
						|
                this.damperOneObj = {}; //风阀1调节 | 
						|
                this.damperTwoObj = {}; //风阀2调节 | 
						|
                this.damperThreeObj = {}; //风阀3调节 | 
						|
                this.damperOneBackObj = {}; //风阀1反馈 | 
						|
                this.damperTwoBackObj = {}; //风阀2反馈 | 
						|
                this.damperThreeBackObj = {}; //风阀3反馈 | 
						|
                this.damperOneRemoteObj = {}; //风阀1远程手自动选择 | 
						|
                this.damperTwoRemoteObj = {}; //风阀2远程手自动选择 | 
						|
                this.damperThreeRemoteObj = {}; //风阀3远程手自动选择 | 
						|
                this.damperOneManualObj = {}; //风阀1手动调节 | 
						|
                this.damperTwoManualObj = {}; //风阀2手动调节 | 
						|
                this.damperThreeManualObj = {}; //风阀3手动调节 | 
						|
                this.openingBackObj = {}; //风阀开度反馈 | 
						|
                this.startStopObj = {}; //风机启停选择 | 
						|
                this.remoteManualObj = {}; //远程手动启停 | 
						|
                this.timeScheduleObj = {}; //时间表启停 | 
						|
                this.damperHzBackObj = {}; //风机频率反馈 | 
						|
                this.damperHzObj = {}; //风机频率调节 | 
						|
                this.modeChangeObj = {}; //模式选择 | 
						|
                this.modeOneObj = {}; //宴会一厅模式 | 
						|
                this.modeTwoObj = {}; //餐厅模式 | 
						|
                this.modeThreeObj = {}; //会议模式 | 
						|
                this.modeFourObj = {}; //全开模式 | 
						|
                this.pressureObj = {}; //压差 | 
						|
                this.automaticObj = {}; //手自动状态 | 
						|
                this.backAirObj = {}; //回风温度 | 
						|
                this.faultAlarmObj = {}; //故障报警 | 
						|
                this.waterSupplyObj = {}; //供水温度 | 
						|
              } | 
						|
              // 成功时解析 Promise | 
						|
              resolve(res); | 
						|
            }) | 
						|
            .catch((error) => { | 
						|
              // 失败时拒绝 Promise | 
						|
              reject(error); | 
						|
            }); | 
						|
        }); | 
						|
      } | 
						|
    }, | 
						|
    // 根据对象的 quality 属性返回对应的类名 | 
						|
    getTextClass(obj, claseName) { | 
						|
      // console.log("打印所有点位的quality值······",obj.collectName, obj.quality); | 
						|
      return [claseName, obj.quality !== "0" ? "alarm-text" : ""]; | 
						|
    }, | 
						|
    // 处理输入事件,过滤非数字字符 | 
						|
    handleInput(item) { | 
						|
      console.log("校验"); | 
						|
      // 实时校验并过滤非数字字符 | 
						|
      item.collectValue = String(item.collectValue).replace(/[^\d]/g, ""); | 
						|
    }, | 
						|
    handleOpenInput(item) { | 
						|
      console.log("校验"); | 
						|
      // 实时校验并过滤非数字字符 | 
						|
      item.collectValue = String(item.collectValue).replace(/[^\d]/g, ""); | 
						|
    }, | 
						|
    handleOpenBlur(item) { | 
						|
      let inputValue = parseInt(item.collectValue, 10); | 
						|
      if (isNaN(inputValue)) { | 
						|
      } else if (inputValue < 80) { | 
						|
        item.collectValue = ""; | 
						|
        this.$message.error("请输入大于80的值"); | 
						|
      } else if (inputValue > 300) { | 
						|
        item.collectValue = ""; | 
						|
        this.$message.error("请输入小于300的值"); | 
						|
      } | 
						|
    }, | 
						|
    // 失去焦点 | 
						|
    handleBlur() { | 
						|
      // this.currentFocusIndex = ""; | 
						|
    }, | 
						|
    handleEnter(item, event, unit) { | 
						|
      console.log("请求后端"); | 
						|
      console.log("接收到的事件对象:", event); | 
						|
      // 阻止事件的默认行为 | 
						|
      if (event && event.preventDefault) { | 
						|
        event.preventDefault(); | 
						|
      } | 
						|
      // 失去焦点 | 
						|
      event.target.blur(); | 
						|
      if (item.collectValue == "" || item.collectValue == "null") { | 
						|
        this.$message.error("请输入值"); | 
						|
        return; // 确保后续代码不执行 | 
						|
      } | 
						|
      //   针对风阀开度设置 | 
						|
      if (item.collectName.includes("风阀开度")) { | 
						|
        if (item.collectValue < 80) { | 
						|
          this.$message.error("请输入大于80的值"); | 
						|
          return; | 
						|
        } else if (item.collectValue > 300) { | 
						|
          this.$message.error("请输入小于300的值"); | 
						|
          return; | 
						|
        } | 
						|
      } | 
						|
      this.$confirm( | 
						|
        `确定要修改"${item.collectName}"为:${item.collectValue} ${unit}吗?`, | 
						|
        "提示", | 
						|
        { | 
						|
          confirmButtonText: "确定", | 
						|
          cancelButtonText: "取消", | 
						|
          type: "warning", | 
						|
        } | 
						|
      ) | 
						|
        .then(() => { | 
						|
          this.hadleOperationConrol(item.id, item.collectValue); | 
						|
        }) | 
						|
        .catch(() => { | 
						|
          // 用户取消操作,需要更新原来的频率 | 
						|
          // this.$emit("upList"); | 
						|
        }); | 
						|
    }, | 
						|
    // 手自动切换 | 
						|
    handleAutomaticText(item) { | 
						|
      this.$confirm( | 
						|
        `确定要切换设备的状态为:${item.collectValue ? "手动" : "自动 吗?"}`, | 
						|
        "提示", | 
						|
        { | 
						|
          confirmButtonText: "确定", | 
						|
          cancelButtonText: "取消", | 
						|
          type: "warning", | 
						|
        } | 
						|
      ) | 
						|
        .then(() => { | 
						|
          // 这里调用请求函数 | 
						|
          let param = null; | 
						|
          if (item.collectValue) { | 
						|
            param = 1; | 
						|
          } else { | 
						|
            param = 0; | 
						|
          } | 
						|
          this.hadleOperationConrol(item.id, param); | 
						|
        }) | 
						|
        .catch(() => { | 
						|
          // 用户取消操作,恢复开关状态 | 
						|
          item.collectValue = !item.collectValue; | 
						|
          console.log("不请求后台"); | 
						|
        }); | 
						|
    }, | 
						|
    //启停控制/手动控制 | 
						|
    handleControlText(item, name1, name2) { | 
						|
      this.$confirm( | 
						|
        `确定要切换设备的状态为:${item.collectValue ? name1 : name2}吗?`, | 
						|
        "提示", | 
						|
        { | 
						|
          confirmButtonText: "确定", | 
						|
          cancelButtonText: "取消", | 
						|
          type: "warning", | 
						|
        } | 
						|
      ) | 
						|
        .then(() => { | 
						|
          let param = null; | 
						|
          if (item.collectValue) { | 
						|
            param = 1; | 
						|
          } else { | 
						|
            param = 0; | 
						|
          } | 
						|
          this.hadleOperationConrol(item.id, param); | 
						|
        }) | 
						|
        .catch(() => { | 
						|
          // 用户取消操作,恢复开关状态 | 
						|
          item.collectValue = !item.collectValue; | 
						|
          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.getWindList(this.currentId); | 
						|
              // 关闭 loading 效果 | 
						|
              this.loading = false; | 
						|
            }, 8000); | 
						|
          } else { | 
						|
            // this.$modal.msgError("操作失败"); | 
						|
            console.log("应该更新状态的"); | 
						|
            // 更新所有设备状态; | 
						|
            this.getWindList(this.currentId); | 
						|
          } | 
						|
        }) | 
						|
        .catch((error) => { | 
						|
          console.log("请求发生错误,更新设备状态", error); | 
						|
          // 更新所有设备状态; | 
						|
          this.getWindList(this.currentId); | 
						|
        }); | 
						|
    }, | 
						|
    // 打开定时开关弹框 | 
						|
    openTimeSwitch() { | 
						|
      this.isOpenTimeSwitch = true; | 
						|
      this.getPolicyList(); | 
						|
    }, | 
						|
    // 请求列表 | 
						|
    getPolicyList() { | 
						|
      return new Promise((resolve, reject) => { | 
						|
        let data = { | 
						|
          systemType: "2", | 
						|
          funPolicyType: "3", | 
						|
          houseId: this.currentId, | 
						|
        }; | 
						|
        timeList(data) | 
						|
          .then((res) => { | 
						|
            console.log("设备定时开关返回res", res); | 
						|
            if (res.code === 200) { | 
						|
              let handleList = res.rows; | 
						|
              this.delayList = []; | 
						|
              handleList.forEach((element, index) => { | 
						|
                if (element.values && element.values.length > 0) { | 
						|
                  // 初始化一个空对象来存储非蝶阀处理后的结果 | 
						|
                  let delayItem = { | 
						|
                    name: element.name, | 
						|
                  }; | 
						|
                  const limitedChildren = element.values; | 
						|
                  limitedChildren.forEach((child) => { | 
						|
                    // console.log("定时${index}开_时", `定时${index}开_时`); | 
						|
                    // console.log("child.pointName", child.pointName); | 
						|
                    if (child.pointName) { | 
						|
                      // 定时开机-小时 | 
						|
                      if (child.pointName.includes("开_时")) { | 
						|
                        // console.log("定时开机-时·························"); | 
						|
                        delayItem.delayOpenHour = child.curValue; | 
						|
                        delayItem.delayOpenHourId = child.id; | 
						|
                      } | 
						|
                      //   定时开机-分钟 | 
						|
                      else if (child.pointName.includes("开_分")) { | 
						|
                        delayItem.delayOpenMinute = child.curValue; | 
						|
                        delayItem.delayOpenMinuteId = child.id; | 
						|
                      } | 
						|
                      // 定时关机-小时 | 
						|
                      else if (child.pointName.includes("关_时")) { | 
						|
                        delayItem.delayCloseHour = child.curValue; | 
						|
                        delayItem.delayCloseHourId = child.id; | 
						|
                      } | 
						|
                      //   定时关机-分钟 | 
						|
                      else if (child.pointName.includes("关_分")) { | 
						|
                        delayItem.delayCloseMinute = child.curValue; | 
						|
                        delayItem.delayCloseMinuteId = child.id; | 
						|
                      } | 
						|
                      // 启动状态 | 
						|
                      else if (child.pointName.includes(`启动标志`)) { | 
						|
                        delayItem.delayStatus = | 
						|
                          Number(child.curValue) == 0 ? false : true; | 
						|
                        delayItem.delayStatusId = child.id; | 
						|
                      } | 
						|
                    } | 
						|
                  }); | 
						|
                  // 将处理后的对象添加到 delayList 中 | 
						|
                  if (Object.keys(delayItem).length > 1) { | 
						|
                    this.delayList.push(delayItem); | 
						|
                  } | 
						|
                } | 
						|
              }); | 
						|
              console.log("处理后的数组", this.delayList); | 
						|
              //   this.delayList = res.rows; | 
						|
            } else { | 
						|
              this.delayList = []; | 
						|
            } | 
						|
            // 成功时解析 Promise | 
						|
            resolve(res); | 
						|
          }) | 
						|
          .catch((error) => { | 
						|
            // 失败时拒绝 Promise | 
						|
            reject(error); | 
						|
          }); | 
						|
      }); | 
						|
    }, | 
						|
    // 处理输入事件,过滤非数字字符 | 
						|
    handleSwitchInput(item, propertyName, name) { | 
						|
      console.log("校验", item[propertyName]); | 
						|
      // 如果值为空,不进行后续校验 | 
						|
      if (item[propertyName] === "") { | 
						|
        return; | 
						|
      } | 
						|
      let isValid = true; | 
						|
      // 实时校验并过滤非数字字符 | 
						|
      let inputValue = String(item[propertyName]).replace(/[^\d]/g, ""); | 
						|
      if (name === "hour") { | 
						|
        isValid = | 
						|
          !isNaN(inputValue) && | 
						|
          parseInt(inputValue) >= 0 && | 
						|
          parseInt(inputValue) <= 23; | 
						|
        if (!isValid) { | 
						|
          this.$message.error("输入值在0-23区间,请重新输入"); | 
						|
          item[propertyName] = ""; | 
						|
          return; | 
						|
        } | 
						|
      } else if (name === "minute") { | 
						|
        isValid = | 
						|
          !isNaN(inputValue) && | 
						|
          parseInt(inputValue) >= 0 && | 
						|
          parseInt(inputValue) <= 59; | 
						|
        if (!isValid) { | 
						|
          this.$message.error("输入值在0-59区间,请重新输入"); | 
						|
          item[propertyName] = ""; | 
						|
          return; | 
						|
        } | 
						|
      } | 
						|
      item[propertyName] = inputValue; | 
						|
    }, | 
						|
    handleSwitchEnter(item, name, event) { | 
						|
      console.log("item", item); | 
						|
      console.log("接收到的事件对象:", event); | 
						|
      // 阻止事件的默认行为 | 
						|
      if (event && event.preventDefault) { | 
						|
        event.preventDefault(); | 
						|
      } | 
						|
      // 失去焦点 | 
						|
      event.target.blur(); | 
						|
      let id = ""; | 
						|
      let value = ""; | 
						|
      let title = ""; | 
						|
      let unit = ""; | 
						|
      if (name === "openHour") { | 
						|
        id = item.delayOpenHourId; | 
						|
        value = item.delayOpenHour; | 
						|
        title = "定时开机-小时"; | 
						|
        unit = "时"; | 
						|
      } else if (name === "openMinute") { | 
						|
        id = item.delayOpenMinuteId; | 
						|
        value = item.delayOpenMinute; | 
						|
        title = "定时开机-分钟"; | 
						|
        unit = "分"; | 
						|
      } else if (name === "closeHour") { | 
						|
        id = item.delayCloseHourId; | 
						|
        value = item.delayCloseHour; | 
						|
        title = "定时关机-小时"; | 
						|
        unit = "时"; | 
						|
      } else if (name === "closeMinute") { | 
						|
        id = item.delayCloseMinuteId; | 
						|
        value = item.delayCloseMinute; | 
						|
        title = "定时关机-分钟"; | 
						|
        unit = "分"; | 
						|
      } | 
						|
 | 
						|
      if (value === "") { | 
						|
        this.$message.warning("请输入当前设置值!"); | 
						|
        return; | 
						|
      } | 
						|
      console.log("请求后端", item); | 
						|
      this.$confirm( | 
						|
        `确定要把"${item.name}"的${title}设置为:${value} ${unit}吗?`, | 
						|
        "提示", | 
						|
        { | 
						|
          confirmButtonText: "确定", | 
						|
          cancelButtonText: "取消", | 
						|
          type: "warning", | 
						|
        } | 
						|
      ) | 
						|
        .then(() => { | 
						|
          // console.log("打印id",id) | 
						|
          this.handleSwitchOperationConrol(id, value); | 
						|
        }) | 
						|
        .catch(() => { | 
						|
          // 用户取消操作,需要更新原来的频率 | 
						|
          this.getPolicyList(); | 
						|
        }); | 
						|
    }, | 
						|
    handleSwitchOperationConrol(id, param) { | 
						|
      let data = { | 
						|
        policyId: id, | 
						|
        timeValue: param, | 
						|
      }; | 
						|
      console.log("操作参数", data); | 
						|
      undateTime(data) | 
						|
        .then((res) => { | 
						|
          if (res.code == 200) { | 
						|
            this.$modal.msgSuccess("指令下发成功!"); | 
						|
            // 开启 loading 效果 | 
						|
            this.loading = true; | 
						|
            // 更新所有设备状态; | 
						|
            setTimeout(() => { | 
						|
              this.getPolicyList(); | 
						|
              // 关闭 loading 效果 | 
						|
              this.loading = false; | 
						|
            }, 500); | 
						|
          } else { | 
						|
            // this.$modal.msgError("操作失败"); | 
						|
            console.log("应该更新状态的"); | 
						|
            // 更新所有设备状态; | 
						|
            this.getPolicyList(); | 
						|
          } | 
						|
        }) | 
						|
        .catch((error) => { | 
						|
          console.log("请求发生错误,更新设备状态", error); | 
						|
          // 更新所有设备状态; | 
						|
          this.getPolicyList(); | 
						|
        }); | 
						|
    }, | 
						|
    // 启用状态 | 
						|
    handleSwitchStatus(item) { | 
						|
      this.$confirm( | 
						|
        `确定要切换"${item.name}"的状态为:${ | 
						|
          item.delayStatus ? "开启" : "停用 吗?" | 
						|
        }`, | 
						|
        "提示", | 
						|
        { | 
						|
          confirmButtonText: "确定", | 
						|
          cancelButtonText: "取消", | 
						|
          type: "warning", | 
						|
        } | 
						|
      ) | 
						|
        .then(() => { | 
						|
          // 这里调用请求函数 | 
						|
          console.log("请求后台", item.delayStatus); | 
						|
          let param = null; | 
						|
          if (item.delayStatus) { | 
						|
            param = 1; | 
						|
          } else { | 
						|
            param = 0; | 
						|
          } | 
						|
          this.handleSwitchOperationConrol(item.delayStatusId, param); | 
						|
        }) | 
						|
        .catch(() => { | 
						|
          // 用户取消操作,恢复开关状态 | 
						|
          item.delayStatus = !item.delayStatus; | 
						|
          console.log("不请求后台"); | 
						|
        }); | 
						|
    }, | 
						|
    // 处理select的选中值 | 
						|
    selectThink(children) { | 
						|
      console.log( | 
						|
        "this.startStopObj.collectValue ", | 
						|
        this.startStopObj.collectValue | 
						|
      ); | 
						|
      const oldValue = children._oldValue; | 
						|
      let collectText = ""; | 
						|
      if (this.startStopObj.collectValue === 0) { | 
						|
        collectText = "远程手动启停"; | 
						|
      } else if (this.startStopObj.collectValue === 1) { | 
						|
        collectText = "时间表启停"; | 
						|
      } | 
						|
      this.$confirm( | 
						|
        `确定要修改"${children.collectName}"的数据为:${collectText}吗?`, | 
						|
        "提示", | 
						|
        { | 
						|
          confirmButtonText: "确定", | 
						|
          cancelButtonText: "取消", | 
						|
          type: "warning", | 
						|
        } | 
						|
      ) | 
						|
        .then(() => { | 
						|
          this.startStopValue = this.startStopObj.collectValue; | 
						|
          this.hadleOperationConrol(children.id, children.collectValue); | 
						|
        }) | 
						|
        .catch(() => { | 
						|
          // 用户取消操作,恢复原来的值 | 
						|
          children.collectValue = oldValue; | 
						|
        }); | 
						|
    }, | 
						|
    // 处理select下拉框显示或隐藏事件 | 
						|
    handleVisibleChange(visible, children) { | 
						|
      if (visible) { | 
						|
        // 当下拉框打开时保存原值 | 
						|
        this.$set(children, "_oldValue", children.collectValue); | 
						|
      } | 
						|
    }, | 
						|
    // 处理select的选中值 | 
						|
    selectThink2(children) { | 
						|
      const oldValue = children._oldValue; | 
						|
      // 根据选中的 value 从 modeOptions 中找到对应的 label | 
						|
      const selectedOption = this.modeOptions.find( | 
						|
        (item) => item.value === children.collectValue | 
						|
      ); | 
						|
      const collectText = selectedOption ? selectedOption.label : ""; | 
						|
 | 
						|
      this.$confirm( | 
						|
        `确定要修改"${children.collectName}"的数据为:${collectText}吗?`, | 
						|
        "提示", | 
						|
        { | 
						|
          confirmButtonText: "确定", | 
						|
          cancelButtonText: "取消", | 
						|
          type: "warning", | 
						|
        } | 
						|
      ) | 
						|
        .then(() => { | 
						|
          if (this.modeChangeObj.collectValue === 0) { | 
						|
            this.isShowMode1 = true; | 
						|
            this.isShowMode2 = false; | 
						|
            this.isShowMode3 = false; | 
						|
            this.isShowMode4 = false; | 
						|
          } else if (this.modeChangeObj.collectValue === 1) { | 
						|
            this.isShowMode1 = false; | 
						|
            this.isShowMode2 = true; | 
						|
            this.isShowMode3 = false; | 
						|
            this.isShowMode4 = false; | 
						|
          } else if (this.modeChangeObj.collectValue === 2) { | 
						|
            this.isShowMode1 = false; | 
						|
            this.isShowMode2 = false; | 
						|
            this.isShowMode3 = true; | 
						|
            this.isShowMode4 = false; | 
						|
          } else if (this.modeChangeObj.collectValue === 3) { | 
						|
            this.isShowMode1 = false; | 
						|
            this.isShowMode2 = false; | 
						|
            this.isShowMode3 = false; | 
						|
            this.isShowMode4 = true; | 
						|
          } | 
						|
          this.hadleOperationConrol(children.id, children.collectValue); | 
						|
        }) | 
						|
        .catch(() => { | 
						|
          // 用户取消操作,恢复原来的值 | 
						|
          children.collectValue = oldValue; | 
						|
        }); | 
						|
    }, | 
						|
    // 处理select下拉框显示或隐藏事件 | 
						|
    handleVisibleChange2(visible, children) { | 
						|
      if (visible) { | 
						|
        // 当下拉框打开时保存原值 | 
						|
        this.$set(children, "_oldValue", children.collectValue); | 
						|
      } | 
						|
    }, | 
						|
    // 一键启停按钮 | 
						|
    handleOneKeyButton(item, val) { | 
						|
      console.log( | 
						|
        "this.automaticObj.collectValue", | 
						|
        this.automaticObj.collectValue | 
						|
      ); | 
						|
      if (this.automaticObj.collectValue) { | 
						|
        // 如果风机手自动状态为手动,则不可点击该按钮。 | 
						|
        this.$message({ | 
						|
          message: "当前风机手自动状态为手动", | 
						|
          type: "warning", | 
						|
        }); | 
						|
        return; | 
						|
      } | 
						|
      let param = ""; | 
						|
      let paramText = ""; | 
						|
      if (item.collectValue) { | 
						|
        // startControlObj.collectValue为true代表ON开启,此时点击按钮想OFF停止 | 
						|
        param = 0; | 
						|
        paramText = "停止"; | 
						|
      } else { | 
						|
        param = 1; | 
						|
        paramText = "开启"; | 
						|
      } | 
						|
      this.$confirm(`确定把${val}设置为:${paramText}吗?`, "提示", { | 
						|
        confirmButtonText: "确定", | 
						|
        cancelButtonText: "取消", | 
						|
        type: "warning", | 
						|
      }) | 
						|
        .then(() => { | 
						|
          this.hadleOperationConrol(item.id, param); | 
						|
        }) | 
						|
        .catch(() => {}); | 
						|
    }, | 
						|
  }, | 
						|
}; | 
						|
</script> | 
						|
 | 
						|
<style lang="scss" scoped> | 
						|
.buildingDiv { | 
						|
  padding-left: 54px; | 
						|
  display: flex; | 
						|
  flex-direction: row; | 
						|
  align-items: center; | 
						|
  margin-bottom: 20px; | 
						|
  position: relative; | 
						|
  .title-bg { | 
						|
    width: 208px; | 
						|
    height: 38px; | 
						|
    position: absolute; | 
						|
    left: 0; | 
						|
    z-index: 0; | 
						|
  } | 
						|
  .title-word { | 
						|
    z-index: 10; | 
						|
    font-family: YouSheBiaoTiHei; | 
						|
    font-size: 24px; | 
						|
    color: #ffffff; | 
						|
    white-space: nowrap; | 
						|
  } | 
						|
} | 
						|
.mostDiv { | 
						|
  width: 100%; | 
						|
  display: flex; | 
						|
  flex-direction: column; | 
						|
  align-items: center; | 
						|
  justify-content: center; | 
						|
  //   align-items: flex-start; | 
						|
} | 
						|
.windC { | 
						|
  width: 13rem; | 
						|
  height: 5.38rem; | 
						|
  margin-right: 1rem; | 
						|
  position: relative; | 
						|
  .menu-title { | 
						|
    color: #e1f4ff; | 
						|
    font-size: 0.18rem; | 
						|
    --bRadius: 0.05rem; | 
						|
    text-align: center; | 
						|
    position: absolute; | 
						|
    top: 0; | 
						|
    right: 0.5rem; | 
						|
    width: 1.25rem; | 
						|
    cursor: pointer; | 
						|
    z-index: 9; | 
						|
    div { | 
						|
      position: relative; | 
						|
      text-align: center; | 
						|
      border-radius: var(--bRadius); | 
						|
      transition: all 0.3s; | 
						|
      padding: 0.01rem 0.02rem; | 
						|
      background-color: rgba(85, 139, 211, 0.2); | 
						|
      cursor: pointer; | 
						|
      &::before, | 
						|
      &::after { | 
						|
        content: ""; | 
						|
        position: absolute; | 
						|
        top: -10px; | 
						|
        left: -10px; | 
						|
        right: -10px; | 
						|
        bottom: -10px; | 
						|
        border: 2px solid #46b2f1; | 
						|
        transition: all 0.5s; | 
						|
        border-radius: var(--bRadius); | 
						|
        animation: clippath 3s infinite linear; | 
						|
        cursor: pointer; | 
						|
      } | 
						|
      &::after { | 
						|
        animation: clippath 3s infinite -1.5s linear; | 
						|
      } | 
						|
      @keyframes clippath { | 
						|
        0%, | 
						|
        100% { | 
						|
          clip-path: inset(0 0 98% 0); | 
						|
        } | 
						|
        25% { | 
						|
          clip-path: inset(0 98% 0 0); | 
						|
        } | 
						|
        50% { | 
						|
          clip-path: inset(98% 0 0 0); | 
						|
        } | 
						|
        75% { | 
						|
          clip-path: inset(0 0 0 98%); | 
						|
        } | 
						|
      } | 
						|
    } | 
						|
  } | 
						|
  .wind-img { | 
						|
    width: 13.1rem; | 
						|
    height: 5.7rem; | 
						|
    position: absolute; | 
						|
    top: 0.2rem; | 
						|
    left: 0; | 
						|
    z-index: 1; | 
						|
  } | 
						|
  .wind-tem1 { | 
						|
    z-index: 10; | 
						|
    width: 1.3rem; | 
						|
    position: absolute; | 
						|
    top: 0rem; | 
						|
    left: 4.7rem; | 
						|
    display: flex; | 
						|
    flex-direction: column; | 
						|
    align-items: center; | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      margin-bottom: 0.15rem; | 
						|
    } | 
						|
  } | 
						|
  .wind-tem1-set { | 
						|
    z-index: 10; | 
						|
    width: 1.3rem; | 
						|
    position: absolute; | 
						|
    top: 1rem; | 
						|
    left: 4.7rem; | 
						|
    display: flex; | 
						|
    flex-direction: column; | 
						|
    align-items: center; | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      margin-bottom: 0.15rem; | 
						|
    } | 
						|
  } | 
						|
  .dampers-name1 { | 
						|
    z-index: 10; | 
						|
    position: absolute; | 
						|
    top: 1.5rem; | 
						|
    left: 10.1rem; | 
						|
    color: #00d2ff; | 
						|
    font-size: 0.18rem; | 
						|
    white-space: nowrap; | 
						|
    font-weight: bold; | 
						|
  } | 
						|
  .dampers-position1 { | 
						|
    z-index: 10; | 
						|
    // width: 3.8rem; | 
						|
    position: absolute; | 
						|
    top: 1.1rem; | 
						|
    left: 12rem; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    font-size: 0.18rem; | 
						|
    .wind-text { | 
						|
      //color: #00d2ff; | 
						|
      color: #39f833; | 
						|
      font-size: 0.18rem; | 
						|
      font-weight: bold; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
    .back-text { | 
						|
      margin-right: 0.1rem; | 
						|
      color: #39f833; | 
						|
      font-size: 0.18rem; | 
						|
      font-weight: bold; | 
						|
    } | 
						|
  } | 
						|
  .dampers-position2 { | 
						|
    z-index: 10; | 
						|
    // width: 3.8rem; | 
						|
    position: absolute; | 
						|
    top: 1.45rem; | 
						|
    left: 12rem; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    font-size: 0.18rem; | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
    .back-text { | 
						|
      margin-right: 0.1rem; | 
						|
    } | 
						|
  } | 
						|
  .dampers-position3 { | 
						|
    z-index: 10; | 
						|
    width: 3rem; | 
						|
    position: absolute; | 
						|
    top: 1.85rem; | 
						|
    left: 12rem; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    font-size: 0.18rem; | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
    .back-text { | 
						|
      margin-right: 0.1rem; | 
						|
    } | 
						|
  } | 
						|
  .dampers-position4 { | 
						|
    z-index: 10; | 
						|
    // width: 3.8rem; | 
						|
    position: absolute; | 
						|
    top: 2.2rem; | 
						|
    left: 12rem; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    font-size: 0.18rem; | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
    .back-text { | 
						|
      margin-right: 0.1rem; | 
						|
    } | 
						|
  } | 
						|
  .dampers-name2 { | 
						|
    z-index: 10; | 
						|
    position: absolute; | 
						|
    top: 3.3rem; | 
						|
    left: 10.3rem; | 
						|
    color: #00d2ff; | 
						|
    font-size: 0.18rem; | 
						|
    white-space: nowrap; | 
						|
    font-weight: bold; | 
						|
  } | 
						|
  .dampers-position6 { | 
						|
    z-index: 10; | 
						|
    // width: 3.57rem; | 
						|
    position: absolute; | 
						|
    top: 2.9rem; | 
						|
    left: 12rem; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    font-size: 0.18rem; | 
						|
    .wind-text { | 
						|
      color: #39f833; | 
						|
      font-size: 0.18rem; | 
						|
      font-weight: bold; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
    .back-text { | 
						|
      margin-right: 0.1rem; | 
						|
      color: #39f833; | 
						|
      font-size: 0.18rem; | 
						|
      font-weight: bold; | 
						|
    } | 
						|
  } | 
						|
  .dampers-position7 { | 
						|
    z-index: 10; | 
						|
    // width: 3.57rem; | 
						|
    position: absolute; | 
						|
    top: 3.25rem; | 
						|
    left: 12rem; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    font-size: 0.18rem; | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
    .back-text { | 
						|
      margin-right: 0.1rem; | 
						|
    } | 
						|
  } | 
						|
  .dampers-position8 { | 
						|
    z-index: 10; | 
						|
    width: 3rem; | 
						|
    position: absolute; | 
						|
    top: 3.7rem; | 
						|
    left: 12rem; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    font-size: 0.18rem; | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
    .back-text { | 
						|
      margin-right: 0.1rem; | 
						|
    } | 
						|
  } | 
						|
  .dampers-position9 { | 
						|
    z-index: 10; | 
						|
    // width: 3.57rem; | 
						|
    position: absolute; | 
						|
    top: 4.1rem; | 
						|
    left: 12rem; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    font-size: 0.18rem; | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
    .back-text { | 
						|
      margin-right: 0.1rem; | 
						|
    } | 
						|
  } | 
						|
  .dampers-name3 { | 
						|
    z-index: 10; | 
						|
    position: absolute; | 
						|
    top: 5.2rem; | 
						|
    left: 10.45rem; | 
						|
    color: #00d2ff; | 
						|
    font-size: 0.18rem; | 
						|
    white-space: nowrap; | 
						|
    font-weight: bold; | 
						|
  } | 
						|
  .dampers-position10 { | 
						|
    z-index: 10; | 
						|
    // width: 3.57rem; | 
						|
    position: absolute; | 
						|
    top: 4.8rem; | 
						|
    left: 12rem; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    font-size: 0.18rem; | 
						|
    .wind-text { | 
						|
      color: #39f833; | 
						|
      font-size: 0.18rem; | 
						|
      font-weight: bold; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
    .back-text { | 
						|
      margin-right: 0.1rem; | 
						|
      color: #39f833; | 
						|
      font-size: 0.18rem; | 
						|
      font-weight: bold; | 
						|
    } | 
						|
  } | 
						|
  .dampers-position11 { | 
						|
    z-index: 10; | 
						|
    // width: 3.57rem; | 
						|
    position: absolute; | 
						|
    top: 5.15rem; | 
						|
    left: 12rem; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    font-size: 0.18rem; | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
    .back-text { | 
						|
      margin-right: 0.1rem; | 
						|
    } | 
						|
  } | 
						|
  .dampers-position12 { | 
						|
    z-index: 10; | 
						|
    width: 3rem; | 
						|
    position: absolute; | 
						|
    top: 5.6rem; | 
						|
    left: 12rem; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    font-size: 0.18rem; | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
    .back-text { | 
						|
      margin-right: 0.1rem; | 
						|
    } | 
						|
  } | 
						|
  .dampers-position13 { | 
						|
    z-index: 10; | 
						|
    // width: 3.57rem; | 
						|
    position: absolute; | 
						|
    top: 6rem; | 
						|
    left: 12rem; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    font-size: 0.18rem; | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
    .back-text { | 
						|
      margin-right: 0.1rem; | 
						|
    } | 
						|
  } | 
						|
  .fan-frequency { | 
						|
    z-index: 10; | 
						|
    position: absolute; | 
						|
    top: 1.7rem; | 
						|
    left: 8.5rem; | 
						|
    width: 1.3rem; | 
						|
    display: flex; | 
						|
    flex-direction: column; | 
						|
    align-items: center; | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      margin-bottom: 0.15rem; | 
						|
    } | 
						|
  } | 
						|
  .fan-satatus1 { | 
						|
    position: absolute; | 
						|
    top: 4.3rem; | 
						|
    left: 6rem; | 
						|
    display: flex; | 
						|
    flex-direction: column; | 
						|
    align-items: flex-start; | 
						|
    .context-li { | 
						|
      z-index: 10; | 
						|
      // width: 2rem; | 
						|
      margin-bottom: 0.1rem; | 
						|
      display: flex; | 
						|
      flex-direction: row; | 
						|
      align-items: center; | 
						|
      font-size: 0.18rem; | 
						|
    } | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      margin-right: 0.15rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
  } | 
						|
  .fan-satatus2 { | 
						|
    position: absolute; | 
						|
    top: 5.3rem; | 
						|
    left: 3.5rem; | 
						|
    display: flex; | 
						|
    flex-direction: column; | 
						|
    align-items: flex-start; | 
						|
    .context-li { | 
						|
      z-index: 10; | 
						|
      width: 2rem; | 
						|
      margin-bottom: 0.1rem; | 
						|
      display: flex; | 
						|
      flex-direction: row; | 
						|
      align-items: center; | 
						|
      color: #00d2ff; | 
						|
    } | 
						|
    .greenContext { | 
						|
      color: #39f833; | 
						|
      font-size: 0.18rem; | 
						|
      font-weight: bold; | 
						|
    } | 
						|
    .wind-text { | 
						|
      font-size: 0.18rem; | 
						|
      margin-right: 0.15rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
  } | 
						|
  .fan-satatus2-set { | 
						|
    position: absolute; | 
						|
    top: 5.7rem; | 
						|
    left: 3.5rem; | 
						|
    display: flex; | 
						|
    flex-direction: column; | 
						|
    align-items: flex-start; | 
						|
    .context-li { | 
						|
      z-index: 10; | 
						|
      width: 2rem; | 
						|
      margin-bottom: 0.1rem; | 
						|
      display: flex; | 
						|
      flex-direction: row; | 
						|
      align-items: center; | 
						|
    } | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      margin-right: 0.15rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
  } | 
						|
  .fan-satatus3 { | 
						|
    position: absolute; | 
						|
    top: 0.1rem; | 
						|
    left: 6.4rem; | 
						|
    display: flex; | 
						|
    flex-direction: column; | 
						|
    align-items: flex-start; | 
						|
    .context-li { | 
						|
      z-index: 10; | 
						|
      // width: 2rem; | 
						|
      margin-bottom: 0.1rem; | 
						|
      display: flex; | 
						|
      flex-direction: row; | 
						|
      align-items: center; | 
						|
      font-size: 0.18rem; | 
						|
      color: #00d2ff; | 
						|
    } | 
						|
    .greenContext { | 
						|
      color: #39f833; | 
						|
      font-size: 0.18rem; | 
						|
      font-weight: bold; | 
						|
    } | 
						|
    .wind-text { | 
						|
      font-size: 0.18rem; | 
						|
      margin-right: 0.15rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
  } | 
						|
  .fan-satatus4 { | 
						|
    position: absolute; | 
						|
    top: 5rem; | 
						|
    left: 0rem; | 
						|
    display: flex; | 
						|
    flex-direction: column; | 
						|
    align-items: flex-start; | 
						|
    .context-li { | 
						|
      z-index: 10; | 
						|
      width: 3rem; | 
						|
      margin-bottom: 0.1rem; | 
						|
      display: flex; | 
						|
      flex-direction: row; | 
						|
      align-items: center; | 
						|
    } | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      margin-right: 0.15rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
  } | 
						|
  .goodStautus { | 
						|
    color: rgb(57, 248, 51); | 
						|
    font-size: 0.18rem; | 
						|
    font-weight: bold; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
  } | 
						|
  .goodStautus::before { | 
						|
    content: ""; | 
						|
    display: inline-block; | 
						|
    width: 0.1rem; | 
						|
    height: 0.1rem; | 
						|
    margin-right: 0.1rem; | 
						|
    border-radius: 50%; | 
						|
    background-color: rgb(57, 248, 51); | 
						|
  } | 
						|
  .badStautus { | 
						|
    color: rgb(248, 48, 41); | 
						|
    font-size: 0.18rem; | 
						|
    font-weight: bold; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    animation: blink 1s infinite; | 
						|
  } | 
						|
  .badStautus::before { | 
						|
    content: ""; | 
						|
    display: inline-block; | 
						|
    width: 0.1rem; | 
						|
    height: 0.1rem; | 
						|
    margin-right: 0.1rem; | 
						|
    border-radius: 50%; | 
						|
    background-color: rgb(248, 48, 41); | 
						|
    animation: blink 1s infinite; | 
						|
  } | 
						|
  .noneStautus { | 
						|
    color: rgb(194, 191, 191); | 
						|
    font-size: 0.18rem; | 
						|
    font-weight: bold; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
  } | 
						|
  .noneStautus::before { | 
						|
    content: ""; | 
						|
    display: inline-block; | 
						|
    width: 0.1rem; | 
						|
    height: 0.1rem; | 
						|
    margin-right: 0.1rem; | 
						|
    border-radius: 50%; | 
						|
    background-color: rgb(194, 191, 191); | 
						|
  } | 
						|
  /* 定义灯闪烁的动画 */ | 
						|
  @keyframes blink { | 
						|
    0% { | 
						|
      opacity: 1; | 
						|
    } | 
						|
    50% { | 
						|
      opacity: 0.7; | 
						|
    } | 
						|
    100% { | 
						|
      opacity: 1; | 
						|
    } | 
						|
  } | 
						|
  .wind-valve { | 
						|
    z-index: 10; | 
						|
    position: absolute; | 
						|
    top: 4.4rem; | 
						|
    left: 1.8rem; | 
						|
    width: 2rem; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    font-size: 0.18rem; | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
  } | 
						|
  .wind-valve2 { | 
						|
    z-index: 10; | 
						|
    position: absolute; | 
						|
    top: 4.8rem; | 
						|
    left: 1.8rem; | 
						|
    width: 2rem; | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    .wind-text { | 
						|
      color: #00d2ff; | 
						|
      font-size: 0.18rem; | 
						|
      margin-right: 0.1rem; | 
						|
      white-space: nowrap; | 
						|
    } | 
						|
  } | 
						|
  .windMove { | 
						|
    width: 0.72rem; | 
						|
    height: 0.73rem; | 
						|
    position: absolute; | 
						|
    top: 3.11rem; | 
						|
    right: 6.24rem; | 
						|
    z-index: 10; | 
						|
  } | 
						|
  .tunCircle { | 
						|
    /* 应用动画 */ | 
						|
    animation: rotate 2s linear infinite; | 
						|
  } /* 定义旋转动画 */ | 
						|
  @keyframes rotate { | 
						|
    from { | 
						|
      transform: rotate(0deg); | 
						|
    } | 
						|
    to { | 
						|
      transform: rotate(360deg); | 
						|
    } | 
						|
  } | 
						|
  .arrow-flex2 { | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    z-index: 10; | 
						|
    position: absolute; | 
						|
    top: 3.2rem; | 
						|
    right: 2.9rem; | 
						|
  } | 
						|
  .arrow-flex3 { | 
						|
    display: flex; | 
						|
    flex-direction: row; | 
						|
    align-items: center; | 
						|
    z-index: 10; | 
						|
    position: absolute; | 
						|
    top: 0.6rem; | 
						|
    right: 8.7rem; | 
						|
    transform: rotateY(180deg); | 
						|
  } | 
						|
  .wind-arrow { | 
						|
    width: 0.4rem; | 
						|
    height: 0.6rem; | 
						|
    margin-right: 0.15rem; | 
						|
    animation: moveArrow 2s linear infinite; | 
						|
  } | 
						|
  /* 定义每个箭头的透明度 */ | 
						|
  .wind-arrow:nth-child(1) { | 
						|
    opacity: 1; | 
						|
  } | 
						|
 | 
						|
  .wind-arrow:nth-child(2) { | 
						|
    opacity: 0.6; | 
						|
  } | 
						|
 | 
						|
  .wind-arrow:nth-child(3) { | 
						|
    opacity: 0.4; | 
						|
  } | 
						|
  .wind-arrow:nth-child(4) { | 
						|
    opacity: 0.2; | 
						|
  } | 
						|
 | 
						|
  /* 定义箭头移动的动画 */ | 
						|
  @keyframes moveArrow { | 
						|
    0% { | 
						|
      transform: translateX(0); | 
						|
    } | 
						|
 | 
						|
    100% { | 
						|
      transform: translateX(0.2rem); | 
						|
      /* 箭头向右移动的距离 */ | 
						|
    } | 
						|
  } | 
						|
  .offClass { | 
						|
    position: absolute; | 
						|
    width: 1.6rem; | 
						|
    height: 1.6rem; | 
						|
    background-image: url(../../../../assets/images/border2.png); | 
						|
    background-repeat: no-repeat; | 
						|
    background-size: 100% 100%; | 
						|
    top: 5.6rem; | 
						|
    left: 7rem; | 
						|
    z-index: 10; | 
						|
    display: flex; | 
						|
    flex-direction: column; | 
						|
    align-items: center; | 
						|
    justify-content: center; | 
						|
    cursor: pointer; | 
						|
    .off-bg { | 
						|
      position: absolute; | 
						|
      left: 0.38rem; | 
						|
      top: 0.32rem; | 
						|
      width: 1rem; | 
						|
      height: 1rem; | 
						|
      background-image: url(../../../../assets/images/border3.png); | 
						|
      background-repeat: no-repeat; | 
						|
      background-size: 100% 100%; | 
						|
      text-align: center; | 
						|
      line-height: 1rem; | 
						|
      font-family: DIN; | 
						|
      font-size: 0.22rem; | 
						|
      color: #6cf02f; | 
						|
      font-weight: bold; | 
						|
    } | 
						|
    .on-animation { | 
						|
      animation: rotateZ 5s linear infinite; | 
						|
      transition: 0.6s; /* 设置过渡时间,控制翻转速度 */ | 
						|
      transform-style: preserve-3d; /* 保持子元素的 3D 效果 */ | 
						|
    } | 
						|
    /* 定义旋转动画 */ | 
						|
    @keyframes rotateZ { | 
						|
      0% { | 
						|
        transform: rotateY(0deg); /* 初始状态,不旋转 */ | 
						|
      } | 
						|
      50% { | 
						|
        transform: rotateY(180deg); /* 旋转到 180 度,呈现翻面效果 */ | 
						|
      } | 
						|
      100% { | 
						|
        transform: rotateY(360deg); /* 旋转回 360 度,回到初始状态 */ | 
						|
      } | 
						|
    } | 
						|
  } | 
						|
  /* 鼠标悬停时移除动画 */ | 
						|
  .offClass:hover .on-animation { | 
						|
    animation: none; | 
						|
  } | 
						|
} | 
						|
.device-container { | 
						|
  display: flex; | 
						|
  flex-direction: column; | 
						|
  width: 100%; | 
						|
  min-height: 530px; | 
						|
  background-color: #142c4e; | 
						|
  padding: 10px 10px 30px 10px; | 
						|
  border-radius: 10px; | 
						|
  font-size: 14px; | 
						|
  .device-li { | 
						|
    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; | 
						|
      display: flex; | 
						|
      flex-direction: row; | 
						|
      align-items: center; | 
						|
      justify-content: center; | 
						|
      flex-wrap: nowrap; | 
						|
      padding: 0 5px; | 
						|
      .el-form-item { | 
						|
        margin-bottom: 0 !important; | 
						|
      } | 
						|
      .slip { | 
						|
        margin: 0 5px; | 
						|
        color: #1282d8; | 
						|
        font-weight: bold; | 
						|
      } | 
						|
    } | 
						|
  } | 
						|
  .device-li:nth-child(1) { | 
						|
    color: #9ca3af; | 
						|
  } | 
						|
} | 
						|
.highlight { | 
						|
  background-color: #003863 !important; /* 定义高亮的背景颜色 */ | 
						|
  color: #ffffff !important; | 
						|
  font-weight: bold; | 
						|
} | 
						|
.device-container .highlight .device-name .slip { | 
						|
  color: #ffffff !important; | 
						|
  font-weight: bold; | 
						|
} | 
						|
/* 为高亮行添加图片箭头 */ | 
						|
.device-li.highlight::before { | 
						|
  content: ""; | 
						|
  background-image: url("../../../../assets/images/step.png"); | 
						|
  background-size: contain; | 
						|
  background-repeat: no-repeat; | 
						|
  width: 30px; | 
						|
  height: 30px; | 
						|
  position: absolute; | 
						|
  left: 2px; /* 图片位置,根据实际情况调整 */ | 
						|
  top: 20%; | 
						|
  transform: translateY(-50%); | 
						|
  z-index: 999; | 
						|
  animation: moveRight 1s ease-in-out infinite alternate; | 
						|
} | 
						|
@keyframes moveRight { | 
						|
  0% { | 
						|
    transform: translateX(0); /* 初始位置,不移动 */ | 
						|
  } | 
						|
  100% { | 
						|
    transform: translateX(0.04rem); /* 向右移动 1rem 的距离 */ | 
						|
  } | 
						|
} | 
						|
 | 
						|
/* 确保 device-li 有相对定位 */ | 
						|
.device-li { | 
						|
  position: relative; | 
						|
} | 
						|
 | 
						|
/* 报警文字样式 */ | 
						|
.alarm-text { | 
						|
  color: red !important; | 
						|
  animation: blink 1s infinite; | 
						|
} | 
						|
 | 
						|
// 媒体查询,适配大于2000px分辨率的大屏样式 | 
						|
@media (min-width: 2000px) { | 
						|
  .device-container { | 
						|
    min-height: 7rem !important; | 
						|
    padding: 0.1rem 0.1rem 0.3rem 0.1rem !important; | 
						|
    border-radius: 0.1rem !important; | 
						|
    font-size: 0.14rem !important; | 
						|
    .device-li { | 
						|
      padding: 0.12rem 0 !important; | 
						|
      .device-name { | 
						|
        .slip { | 
						|
          margin: 0 0.05rem !important; | 
						|
        } | 
						|
      } | 
						|
    } | 
						|
  } | 
						|
} | 
						|
@media (min-width: 1360px) and (max-width: 1680px) { | 
						|
  .windC { | 
						|
    transform: scale(0.9); | 
						|
  } | 
						|
} | 
						|
@media (min-width: 990px) and (max-width: 1360px) { | 
						|
  .windC { | 
						|
    transform: scale(0.8); | 
						|
    .fan-satatus3 { | 
						|
      top: -0.3rem !important; | 
						|
    } | 
						|
  } | 
						|
} | 
						|
// @media (min-width: 990px) and (max-width: 1160px) { | 
						|
//   .windC { | 
						|
//     transform: scale(0.7); | 
						|
//   } | 
						|
// } | 
						|
// 手机端样式 | 
						|
@media (min-width: 0px) and (max-width: 990px) { | 
						|
  .right-monitor { | 
						|
    width: calc(100% - 210px) !important; | 
						|
  } | 
						|
  .windC { | 
						|
    transform: scale(0.86); | 
						|
    .fan-satatus3 { | 
						|
      top: -0.2rem !important; | 
						|
    } | 
						|
  } | 
						|
  .buildingDiv { | 
						|
    padding-left: 0.54rem !important; | 
						|
    margin-bottom: 0.2rem !important; | 
						|
    .title-bg { | 
						|
      width: 2.08rem !important; | 
						|
      height: 0.38rem !important; | 
						|
    } | 
						|
    .title-word { | 
						|
      font-size: 15px !important; | 
						|
    } | 
						|
  } | 
						|
  .dampers-position2 { | 
						|
    top: 1.3rem !important; | 
						|
  } | 
						|
  .dampers-position7 { | 
						|
    top: 3.1rem !important; | 
						|
  } | 
						|
  .dampers-position11 { | 
						|
    top: 5rem !important; | 
						|
  } | 
						|
} | 
						|
</style> | 
						|
<style scoped> | 
						|
.windC >>> .el-input__inner { | 
						|
  background-color: #04193a; | 
						|
  border: 1px solid #1262db; | 
						|
  color: #3ef0fd; | 
						|
  font-weight: 700; | 
						|
  text-align: center; | 
						|
  padding: 0 0.1rem !important; | 
						|
  font-size: 0.18rem !important; | 
						|
} | 
						|
.windC >>> .el-select .el-input__inner { | 
						|
  background-color: #04193a; | 
						|
  border: 1px solid #1262db; | 
						|
  color: #3ef0fd; | 
						|
  font-weight: 700; | 
						|
  text-align: left !important; | 
						|
  padding: 0 0.1rem !important; | 
						|
  font-size: 0.17rem !important; | 
						|
} | 
						|
.windC >>> .el-input__prefix { | 
						|
  display: flex; | 
						|
  flex-direction: row; | 
						|
  align-items: center; | 
						|
  justify-content: center; | 
						|
} | 
						|
.windC >>> .svg-icon { | 
						|
  width: 0.2rem !important; | 
						|
  height: 0.2rem !important; | 
						|
  fill: #ffffff !important; | 
						|
} | 
						|
.windC >>> .el-form-item { | 
						|
  margin-bottom: 0 !important; | 
						|
} | 
						|
.windC >>> .el-form-item--medium .el-form-item__content { | 
						|
  line-height: 0 !important; | 
						|
} | 
						|
.windC >>> .el-switch { | 
						|
  display: flex !important; | 
						|
  flex-wrap: nowrap !important; | 
						|
} | 
						|
.windC >>> .el-switch__label { | 
						|
  white-space: nowrap !important; | 
						|
} | 
						|
/* 手机端样式 */ | 
						|
@media (min-width: 0px) and (max-width: 990px) { | 
						|
  .windC >>> .el-input--mini .el-input__inner { | 
						|
    height: 0.28rem !important; | 
						|
    line-height: 0.28rem !important; | 
						|
    padding: 0.2rem 0.1rem !important; | 
						|
  } | 
						|
  .windC >>> .el-switch { | 
						|
    height: 0.2rem !important; | 
						|
    line-height: 0.2rem !important; | 
						|
    font-size: 0.18rem !important; | 
						|
  } | 
						|
  .windC >>> .el-switch__label { | 
						|
    height: 0.2rem !important; | 
						|
    line-height: 0.2rem !important; | 
						|
    font-size: 0.18rem !important; | 
						|
  } | 
						|
  .windC >>> .el-switch__label * { | 
						|
    font-size: 0.18rem !important; | 
						|
  } | 
						|
  .windC >>> .el-switch__core { | 
						|
    width: 0.4rem !important; | 
						|
    height: 0.2rem !important; | 
						|
    border-radius: 0.1rem !important; | 
						|
  } | 
						|
  .windC >>> .el-switch__core:after { | 
						|
    width: 0.16rem !important; | 
						|
    height: 0.16rem !important; | 
						|
    top: 0.01rem !important; | 
						|
  } | 
						|
  .windC >>> .el-switch.is-checked .el-switch__core::after { | 
						|
    margin-left: -0.17rem !important; | 
						|
  } | 
						|
  .custom-dialog >>> .el-dialog { | 
						|
    width: 550px !important; | 
						|
  } | 
						|
  .custom-dialog >>> .el-dialog__title { | 
						|
    width: 224px !important; | 
						|
    height: 35px !important; | 
						|
    font-size: 18px !important; | 
						|
    line-height: 20px !important; | 
						|
  } | 
						|
  .custom-dialog >>> .el-dialog__body { | 
						|
    padding: 10px 20px !important; | 
						|
  } | 
						|
  .device-li .device-name { | 
						|
    font-size: 12px !important; | 
						|
  } | 
						|
  .device-container .device-li { | 
						|
    padding: 10px 0 !important; | 
						|
  } | 
						|
  .device-li .device-name .el-input { | 
						|
    width: 50px !important; | 
						|
  } | 
						|
  .device-li.highlight::before { | 
						|
    left: -5px !important; | 
						|
    width: 20px !important; | 
						|
    height: 20px !important; | 
						|
    top: 30% !important; | 
						|
  } | 
						|
  .custom-dialog >>> .el-switch__label * { | 
						|
    font-size: 12px !important; | 
						|
  } | 
						|
  .custom-dialog >>> .el-switch__core { | 
						|
    width: 37px !important; | 
						|
    height: 17px !important; | 
						|
  } | 
						|
  .custom-dialog >>> .el-switch__core:after { | 
						|
    width: 13px !important; | 
						|
    height: 13px !important; | 
						|
  } | 
						|
  .custom-dialog >>> .el-form-item { | 
						|
    margin-bottom: 0 !important; | 
						|
  } | 
						|
  .custom-dialog >>> .el-form-item--medium .el-form-item__content { | 
						|
    line-height: 0 !important; | 
						|
  } | 
						|
  .windC >>> .el-select .el-input .el-select__caret { | 
						|
    font-size: 0.14rem !important; | 
						|
  } | 
						|
  .windC >>> .el-input--mini .el-input__icon { | 
						|
    line-height: 0.28rem !important; | 
						|
  } | 
						|
  .windC >>> .el-input__icon { | 
						|
    width: 0.25rem !important; | 
						|
  } | 
						|
} | 
						|
</style>
 | 
						|
 |