<template>
  <customHeader :fieldNames="{ label: 'systemname', value: 'id', options: 'children' }" :options = 'options' @change="getSelectRow" :optionValue="optionValue">均压与低氧管控</customHeader>
  <div class="bg"
    style="width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; overflow: hidden">
    <a-spin :spinning="loading" />
    <div id="balancePress3D" v-show="!loading" style="width: 100%; height: 100%; position: absolute; overflow: hidden"> </div>
  </div>
  <div class="scene-box">
    <div class="center-container">
      <balancePressHome v-if="activeKey == 'monitor'" :deviceId = 'optionValue' />
      <div v-else class="history-group">
        <div class="device-button-group" v-if="deviceList.length > 0">
          <div class="device-button" :class="{ 'device-active': deviceActive == device.deviceType }" v-for="(device, index) in deviceList" :key="index" @click="deviceChange(index)">{{ device.deviceName }}</div>
        </div>
        <div class="history-container">
          <balancePressHistory v-if="activeKey == 'monitor_history'" ref="historyTable" class="vent-margin-t-20" :deviceId = 'optionValue' :device-type="deviceType"/>
          <balancePressHandleHistoryVue v-if="activeKey == 'handler_history'" ref="alarmHistoryTable" class="vent-margin-t-20" :deviceId = 'optionValue' :device-type="deviceType" />
          <balancePressAlarmHistory v-if="activeKey == 'faultRecord'" ref="handlerHistoryTable" class="vent-margin-t-20" :deviceId = 'optionValue' :device-type="deviceType"/>
        </div> 
      </div>      
    </div>
    <BottomMenu @change="changeActive"/>
  </div>
  
</template>

<script setup lang="ts">
import customHeader from '/@/components/vent/customHeader.vue';
import { onBeforeMount, ref, onMounted, onUnmounted, reactive, toRaw } from 'vue';
import { list, getTableList } from './balancePress.api';
import BottomMenu from '/@/views/vent/comment/components/bottomMenu.vue';
import balancePressHome from './components/balancePressHome1.vue';
import balancePressHistory from './components/balancePressHistory.vue';
import balancePressHandleHistoryVue from './components/balancePressHandleHistory.vue';
import balancePressAlarmHistory from './components/balancePressAlarmHistory.vue';
import { useRouter } from 'vue-router';

type DeviceType = { deviceType: string, deviceName: string, datalist: any[] };

const { currentRoute } = useRouter();
const activeKey = ref('monitor');
const loading = ref(false);

const historyTable = ref()
const alarmHistoryTable = ref()
const handlerHistoryTable = ref()


//关联设备
const deviceList = ref<DeviceType[]>([])
const deviceActive = ref('')
const deviceType = ref('')

const options = ref()
const optionValue = ref('')


function changeActive(activeValue) {
  activeKey.value = activeValue
}

function deviceChange(index) {
  deviceActive.value = deviceType.value = deviceList.value[index].deviceType
}

// 查询关联设备列表
async function getDeviceList() {
  const res = await list({ devicetype: 'sys', systemID: optionValue.value });
  
  const result = res.msgTxt;
  const deviceArr = <DeviceType[]>[]
  result.forEach(item => {
    const data = item['datalist'].filter((data: any) => {
      const readData = data.readData;
      return Object.assign(data, readData);
    })
    if (item.type != 'sys') {
      deviceArr.unshift({ deviceType: item.type, deviceName: item['typeName'] ? item['typeName'] : item['datalist'][0]['typeName'], datalist: data })
    }
  })
  deviceList.value = deviceArr
  deviceActive.value = deviceArr[0].deviceType
  deviceChange(0)
};

async function getSysDataSource () {
  const res = await getTableList({ strtype: 'sys_surface_junya', pagetype: 'normal' });
  if (!options.value) {
    // 初始时选择第一条数据
    options.value = res.records || [];
    if (!optionValue.value) {
      optionValue.value = options.value[0]['id']
      getDeviceList()
    }
  }
};

// 切换检测数据
function getSelectRow(deviceID){
  // const currentData = options.value.find((item: any) => {
  //   return item.id == deviceID
  // })
  optionValue.value = deviceID
  getDeviceList()
  // setModelType('balancePressTun')
}

onBeforeMount(() => {

});

onMounted(async() => {
  if (currentRoute.value && currentRoute.value['query'] && currentRoute.value['query']['id']) optionValue.value = currentRoute.value['query']['id']
  await getSysDataSource()
  
});

onUnmounted(() => {
 
});
</script>
<style lang="less" scoped>
@import '/@/design/vent/modal.less';
@ventSpace: zxm;
.scene-box{
  margin-top: 20px;
  pointer-events: none;
  .history-group{
    padding: 0 20px;
    .history-container{
      position: relative;
      background: #6195af1a;
      width: calc(100% + 10px);
      top: 0px;
      left: -10px;
      border: 1px solid #00fffd22;
      padding: 10px 0;
      box-shadow: 0 0 20px #44b4ff33 inset;
    }
  }
  .device-button-group{
    // margin: 0 20px;
    display: flex;
    pointer-events: auto;
    position: relative;
    margin-top: 90px;
    &::after{
      position:absolute;
      content: '';
      width: calc(100% + 10px);
      height: 2px;
      top: 30px;
      left: -10px;
      border-bottom: 1px solid #0efcff;
    }
    .device-button{
      padding: 4px 15px;
      position: relative;
      display: flex;
      justify-content: center;
      align-items: center;
      font-size: 14px;
      
      color: #fff;
      cursor: pointer;
      margin: 0 3px;

      &::before{
        content: '';
        position: absolute;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        border: 1px solid #6176AF;
        transform: skewX(-38deg);
        background-color: rgba(0, 77, 103,85%);
        z-index: -1;
      }
    }
    .device-active{
      // color: #0efcff;
      &::before{
        border-color: #0efcff;
        box-shadow: 1px 1px 3px 1px #0efcff inset;
      }
    }
  }
}
.center-container{
  width: 100%;
  height: calc(100% - 200px);
}


.input-box {
  display: flex;
  align-items: center;
  padding-left: 10px;

  .input-title {
    color: #73e8fe;
    width: auto;
  }

  .@{ventSpace}-input-number {
    border-color: #ffffff88 !important;
  }

  margin-right: 10px;
}
</style>
