3 changed files with 263 additions and 47 deletions
			
			
		@ -0,0 +1,201 @@ | 
				
			|||
<template> | 
				
			|||
  <div class='DeviceParams'> | 
				
			|||
    <div class="no-data" v-if="!devicesList.length" v-loading="secondLoading">暂无设备参数</div> | 
				
			|||
    <Descriptions :list="devicesList" style="gap: 18px;" column="5"> | 
				
			|||
      <template v-for="item in devicesList.slice(0, -1)" #[`content-${getSlotKey(item.key)}`]="{ data }"> | 
				
			|||
        <span>{{ data.text }}</span> | 
				
			|||
        <Switcher v-if="!disabled" class="switcher" :activeOption="activeOption" :value="data.state" | 
				
			|||
          @change="(value) => handleSwitcherChange(value, data)" /> | 
				
			|||
        <ElTag style="margin-left: 20px;" v-else effect="dark" :type="data.state ? '' : 'info'">{{ data.state ? '开' : | 
				
			|||
      '关' }} | 
				
			|||
        </ElTag> | 
				
			|||
      </template> | 
				
			|||
    </Descriptions> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script> | 
				
			|||
import Descriptions from '@screen/components/Descriptions.vue'; | 
				
			|||
import Switcher from '@screen/pages/service/PublishingChannelManagement/components/Switcher.vue'; | 
				
			|||
 | 
				
			|||
import request from "@/utils/request"; | 
				
			|||
import { Message } from 'element-ui'; | 
				
			|||
import { confirm } from "@screen/utils/common"; | 
				
			|||
 | 
				
			|||
export default { | 
				
			|||
  name: 'DeviceParams', | 
				
			|||
  components: { | 
				
			|||
    Descriptions, | 
				
			|||
    Switcher | 
				
			|||
  }, | 
				
			|||
  props: { | 
				
			|||
    dialogData: { | 
				
			|||
      type: Object, | 
				
			|||
      default: () => ({}) | 
				
			|||
    }, | 
				
			|||
    disabled: Boolean, | 
				
			|||
    isMultiControl: Boolean | 
				
			|||
  }, | 
				
			|||
  data() { | 
				
			|||
    return { | 
				
			|||
      secondLoading: true, | 
				
			|||
      devicesList: [], | 
				
			|||
      activeOption: { | 
				
			|||
        active: { | 
				
			|||
          text: "开" | 
				
			|||
        }, | 
				
			|||
        unActive: { | 
				
			|||
          text: "关" | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  }, | 
				
			|||
  created() { | 
				
			|||
 | 
				
			|||
    Promise.all([this.getAc(), this.getDc()]).then(res => { | 
				
			|||
      // if (result.code != 200) return; | 
				
			|||
 | 
				
			|||
      let ac = res[0].data; | 
				
			|||
      let dc = res[1].data; | 
				
			|||
      let deviceInfo = _.merge({}, ac, dc); | 
				
			|||
      console.log(deviceInfo, "deviceInfo11") | 
				
			|||
      const typeMap = { | 
				
			|||
        ac: '220v', | 
				
			|||
        dc: '12v', | 
				
			|||
      } | 
				
			|||
      for (const key in deviceInfo.formatValue) { | 
				
			|||
        // electricity 电流 | 
				
			|||
        // voltage 电压 | 
				
			|||
        if (key.includes('electricity')) { | 
				
			|||
          const args = key.match(/[a-z]+|[0-9]+$/g); | 
				
			|||
 | 
				
			|||
          const type = args[0], num = args.slice(-1)[0], prefix = args.slice(0, 2).join('_'); | 
				
			|||
          // console.log(type , num , prefix , "+++=========="); //dc 2 dc_out | 
				
			|||
          this.devicesList.push( | 
				
			|||
            { | 
				
			|||
              label: `支路${num} (${typeMap[type]})   电压`, | 
				
			|||
              key: `${prefix}_voltage_${num}`, | 
				
			|||
              text: deviceInfo.formatValue[`${prefix}_voltage_${num}`], | 
				
			|||
              gridColumn: 3 | 
				
			|||
            }, | 
				
			|||
            { | 
				
			|||
              label: '电流', | 
				
			|||
              key: `${prefix}_electricity_${num}`, | 
				
			|||
              text: deviceInfo.formatValue[key], | 
				
			|||
              gridColumn: 2, | 
				
			|||
              state: deviceInfo.value[key] > 0 | 
				
			|||
            } | 
				
			|||
          ); | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
      this.devicesList.push( | 
				
			|||
        { | 
				
			|||
          label: '风扇', | 
				
			|||
          key: `fan_status`, | 
				
			|||
          // key: `aa_electricity_1`, | 
				
			|||
          text: { 0: '正常', 1: '开' }[deviceInfo.formatValue['fan_status']] || '-', | 
				
			|||
          gridColumn: 2, | 
				
			|||
          state: (deviceInfo.formatValue['fan_status'] === '0') | 
				
			|||
        }, | 
				
			|||
 | 
				
			|||
        { | 
				
			|||
          label: '温度', | 
				
			|||
          key: `temperature`, | 
				
			|||
          text: deviceInfo.formatValue['temperature'] ? `${deviceInfo.formatValue['temperature']} °C` : '-', | 
				
			|||
          gridColumn: 2 | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          label: '箱门', | 
				
			|||
          key: `door_status`, | 
				
			|||
          text: { 0: '关闭', 1: '打开' }[deviceInfo.formatValue['door_status']] || '-', | 
				
			|||
          gridColumn: 1 | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          label: '湿度', | 
				
			|||
          key: `humidity`, | 
				
			|||
          text: deviceInfo.formatValue['humidity'] ? `${deviceInfo.formatValue['humidity']} %` : '-', | 
				
			|||
          gridColumn: 2 | 
				
			|||
        }, | 
				
			|||
        { | 
				
			|||
          label: '市电掉电', | 
				
			|||
          key: `power_status`, | 
				
			|||
          text: { 0: '正常', 1: '掉电' }[deviceInfo.formatValue['power_status']] || '-', | 
				
			|||
          gridColumn: 2 | 
				
			|||
        }, | 
				
			|||
      ) | 
				
			|||
      // this.data = result.rows; | 
				
			|||
      // this.total = result.total; | 
				
			|||
    }) | 
				
			|||
      .finally(() => { | 
				
			|||
        this.secondLoading = false | 
				
			|||
      }) | 
				
			|||
  }, | 
				
			|||
  methods: { | 
				
			|||
    getAc() { | 
				
			|||
      return request({ | 
				
			|||
        url: `/business/device/properties/latest/${this.dialogData.iotDeviceId || '10.0.36.143-1883'}/1ac`, | 
				
			|||
        method: "get", | 
				
			|||
        params: {} | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    getDc() { | 
				
			|||
      return request({ | 
				
			|||
        url: `/business/device/properties/latest/${this.dialogData.iotDeviceId || '10.0.36.143-1883'}/1dc`, | 
				
			|||
        method: "get", | 
				
			|||
        params: {} | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    async handleSwitcherChange(value, data) { | 
				
			|||
      let str = data.state ? "关闭" : "开启"; | 
				
			|||
      let deviceName = ""; | 
				
			|||
      if (data.key.includes("fan")) { | 
				
			|||
        str += "风扇?"; | 
				
			|||
        deviceName = "fan_out_en"; | 
				
			|||
      } else { | 
				
			|||
        str += "该支路?" | 
				
			|||
        deviceName = data.key.match(/^[a-z]+_out|[0-9]+/g).join("_") + "_en"; //dc_out_2_en    ac_out_2_en; | 
				
			|||
      } | 
				
			|||
      data.state = value; | 
				
			|||
      const isContinue = await confirm({ message: `${str}` }) | 
				
			|||
        .catch(() => { | 
				
			|||
          console.log(data.state, value, 333) | 
				
			|||
          data.state = !value; | 
				
			|||
        }); | 
				
			|||
 | 
				
			|||
      if (!isContinue) return; | 
				
			|||
 | 
				
			|||
      // https://www.yuque.com/dayuanzhong-ovjwn/gkht0m/ww776d5kzs72ilzh?singleDoc= | 
				
			|||
      request({ | 
				
			|||
        url: `/business/device/functions/${this.dialogData.iotDeviceId}/${102}`, | 
				
			|||
        method: "POST", | 
				
			|||
        data: { | 
				
			|||
          deviceName, | 
				
			|||
          // 开关:1=打开,0=关闭 | 
				
			|||
          value: value ? 1 : 0 | 
				
			|||
        } | 
				
			|||
      }) | 
				
			|||
        .then(result => { | 
				
			|||
          if (result.code != 200) { | 
				
			|||
            Message.error("操作失败"); | 
				
			|||
            data.state = !value; | 
				
			|||
            return; | 
				
			|||
          }; | 
				
			|||
          Message.success("操作成功"); | 
				
			|||
        }) | 
				
			|||
        .catch(() => { | 
				
			|||
          data.state = !value; | 
				
			|||
          Message.error("操作失败"); | 
				
			|||
        }) | 
				
			|||
    }, | 
				
			|||
    getSlotKey(key) { | 
				
			|||
      return key.includes('electricity') || key.includes('fan') ? key : '' | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
 | 
				
			|||
<style lang='scss' scoped> | 
				
			|||
.DeviceParams { | 
				
			|||
  height: 100%; | 
				
			|||
} | 
				
			|||
</style> | 
				
			|||
					Loading…
					
					
				
		Reference in new issue