<template>
  <div class="dashboard-container" :class="isSmallScreen?'is-small':''">
    <!-- github角标 -->
    <el-row :gutter="10" class="mt-3" style="margin-bottom: 12px;">
      <el-col :span="4" v-for="(it, idx) in topInfos" :key="idx">
        <el-card shadow="always" class="top-row1">
          <img :src="it.icon" class="top-icon" />
          <div class="top-row">
            <div class="div-title">{{ it.title }}</div>
            <div class="div-num">{{ it.count }}</div>
          </div>
        </el-card>
      </el-col>
    </el-row>
    <div style="display: flex;">
    <div style="flex-grow: 1;">
    <el-card shadow="never" class="top-row2">
      <template #header>
      <div class="row2-top">
        <div style="color:#333;font-weight: bold;font-size:15px;">设备运行状态</div>
        <div class="div-more" v-if="false">更多</div>
      </div>
      </template>
      <el-scrollbar max-height="504px">        
      <el-row :gutter="20">
        <el-col :span="isSmallScreen?8:6" v-for="it in devInfos" :key="it.id" class="dev-item" style="margin-bottom: 20px;">
          <el-card shadow="hover">
            <template #header>
              <div class="dev-title">{{ it.name }}
                <svg-icon icon-class="enlarge" color="#666" />
              </div>
            </template>
            <div class="dev-row2">
              <div>
                网络类型:<span>{{ it.netType }}</span>
              </div>
            </div>
            <div class="dev-row3">
              <div class="device-state">
                <i class="dev-state" :class="it.state == 0 ? 'dev-s' : it.state == 1 ? 'dev-w' : 'dev-e'"></i>
                <div class="state-text" :class="'state' + it.state">{{ it.state == 0 ? "正常" : (it.state == 1 ? "预警" : "异常") }}</div>
                <div style="color:#999;font-size:12px;">设备运行状态</div>
              </div>
              <div class="dev-chart">
                <div class="chart-item-title">
                  <span>温度</span>
                  <span>{{ it.temperature }}%</span>
                </div>
                <div class="chart-line">
                  <div class="chart-line-inline" :style="'width:' + it.temperature + '%'"></div>
                </div>

                <div class="chart-item-title">
                  <span>内存</span>
                  <span>{{ it.memory }}%</span>
                </div>
                <div class="chart-line">
                  <div class="chart-line-inline" :style="'width:' + it.memory + '%'"></div>
                </div>

                <div class="chart-item-title">
                  <span>CPU</span>
                  <span>{{ it.cpu }}%</span>
                </div>
                <div class="chart-line">
                  <div class="chart-line-inline" :style="'width:' + it.cpu + '%'"></div>
                </div>

              </div>
            </div>
          </el-card>
        </el-col>
      </el-row>
    </el-scrollbar>
    </el-card>

    <el-card shadow="never" class="proc-card">
      <template #header>
        <div class="row2-top">
          <div style="color:#333;font-weight: bold;font-size:15px;">模型仿真评估流程</div>        
        </div>
      </template>
      <ModelFlow/>
    </el-card>
  </div>
  <div style="" class="right-panel">
    <el-card shadow="never" class="top-row2 notice-card">
      <template #header>
        <div class="row2-top">
          <div style="color:#333;font-weight: bold;font-size:15px;">通知中心</div>        
        </div>
      </template>
      <el-scrollbar height="484px">
        <IndexNotice/>
      </el-scrollbar>
    </el-card>

    <el-card shadow="never" class="proc-card server-status">
      <template #header>
        <div class="row2-top">
          <div style="color:#333;font-weight: bold;font-size:15px;">服务器运行状态</div>        
        </div>
      </template>   
      <ServiceStatus :val="svTemp" width="200px" height="200px"></ServiceStatus>
    </el-card>
  </div>
</div>
  </div>
</template>

<script setup lang="ts">
import { reactive } from 'vue'
import ModelFlow from './components/ModelFlow.vue'
import IndexNotice from './components/IndexNotice.vue'
import ServiceStatus from './components/ServiceStatus.vue'
import DeviceAPI from "@/api/device";
let svTemp=ref(55.5)
let topInfos = reactive([
  { title: '模型总数', count: 158, clsName: 'c1', icon: "images/nav/nav1.png" },
  { title: '算子总数', count: 158, clsName: 'c1', icon: "images/nav/nav2.png" },
  { title: '数据集总数', count: 158, clsName: 'c1', icon: "images/nav/nav3.png" },
  { title: '评估报告总数', count: 158, clsName: 'c1', icon: "images/nav/nav4.png" },
  { title: '互联总数', count: 158, clsName: 'c1', icon: "images/nav/nav5.png" },
  { title: '总访问量', count: 158, clsName: 'c1', icon: "images/nav/nav1.png" },
]);

let devInfos = reactive([
  { id: 1001, name: '设备名称1', netType: 'network001', modelName: '模型名称', state: 0, temperature: 25, memory: 85, cpu: 51 },
  { id: 1002, name: '设备名称2', netType: 'network001', modelName: '模型名称', state: 1, temperature: 25, memory: 85, cpu: 51 },
  { id: 1003, name: '设备名称3', netType: 'network001', modelName: '模型名称', state: 2, temperature: 25, memory: 85, cpu: 51 },
  { id: 1004, name: '设备名称4', netType: 'network001', modelName: '模型名称', state: 0, temperature: 25, memory: 85, cpu: 51 },
  { id: 1005, name: '设备名称5', netType: 'network001', modelName: '模型名称', state: 1, temperature: 25, memory: 85, cpu: 51 },
  { id: 1006, name: '设备名称6', netType: 'network001', modelName: '模型名称', state: 2, temperature: 25, memory: 85, cpu: 51 },
  { id: 1007, name: '设备名称1', netType: 'network001', modelName: '模型名称', state: 0, temperature: 25, memory: 85, cpu: 51 },
  { id: 1008, name: '设备名称2', netType: 'network001', modelName: '模型名称', state: 1, temperature: 25, memory: 85, cpu: 51 },
  { id: 1009, name: '设备名称3', netType: 'network001', modelName: '模型名称', state: 2, temperature: 25, memory: 85, cpu: 51 },
  { id: 1010, name: '设备名称4', netType: 'network001', modelName: '模型名称', state: 0, temperature: 25, memory: 85, cpu: 51 },
  { id: 1011, name: '设备名称5', netType: 'network001', modelName: '模型名称', state: 1, temperature: 25, memory: 85, cpu: 51 },
  { id: 1012, name: '设备名称6', netType: 'network001', modelName: '模型名称', state: 2, temperature: 25, memory: 85, cpu: 51 },
])
const winWidth=ref(0)
const isSmallScreen=computed(()=>{
  return winWidth.value<1440;
});
onMounted(()=>{
  winWidth.value=window.outerWidth;
  window.onresize=()=>{
    setTimeout(()=>{
      winWidth.value=window.outerWidth;
    },100);
  }
  DeviceAPI.getStatus().then(d=>{
    debugger;
  });
});
</script>

<style lang="scss" scoped>
.dashboard-container {
  position: relative;
  min-width:960px;
  padding: 0px 24px;
  &.is-small{
    padding: 0px 12px;
  }

  .user-avatar {
    width: 40px;
    height: 40px;
    border-radius: 50%;
  }

  .github-corner {
    position: absolute;
    top: 0;
    right: 0;
    z-index: 1;
    border: 0;
  }

  .data-box {
    display: flex;
    justify-content: space-between;
    padding: 20px;
    font-weight: bold;
    color: var(--el-text-color-regular);
    background: var(--el-bg-color-overlay);
    border-color: var(--el-border-color);
    box-shadow: var(--el-box-shadow-dark);
  }

  .svg-icon {
    fill: currentcolor !important;
  }
}
</style>
<style lang="scss">
.dashboard-container {
  &.is-small{
    .dev-row3 {
      padding:0px !important;
      .device-state{
        width:80px !important;
      }
    }
    .right-panel{
      min-width: 240px;
      padding-left:8px;
    }
    .model-flow {
      .card-item{
        width:100px;
      }
      .row-1 {
        .line{
          width: calc(20% - 100px);
          top:10px;
        }
      }
      .row-3 {
        .line{
          width: calc(20% - 100px);
        }
        .card-center{
          .card-center-item{
            width:100px;
            &:first-child{
              &::after{
                left:50px;
              }
              &::before{
                left:50px;
              }
            }
            &:last-child{
              &::after{
                left:-20px;
              }
              &::before{
                left:51px;
              }
            }
          }
        }
        .card-item{
            &.line-top{
              &::after{
                left:50px; 
              }              
              &::before{
                left:48px;
              }
            }
          }
      }
    }
  }
  .right-panel{
    min-width: 300px;
    padding-left:12px;
  }
  .el-card__body {
    padding: 10px 10px;
  }

  .top-row1 {
    position: relative;

    .top-icon {
      top: 20px;
      position: absolute;
      background: #409eff2b;
      width: 40px;
      height: 40px;
      border-radius: 50%;

      svg {
        width: 20px;
        height: 20px;

        * {
          fill: #3399ff;
          ;
        }
      }
    }

    .top-row {
      padding-left: 40px;
      line-height: 30px;
      text-align: center;

      .div-title {
        font-weight: bold;
        font-size: 14px;
        color: #333;
      }

      .div-num {
        font-size: 20px;
        font-weight: bolder;
        color: #333;
      }
    }
  }

  .top-row2 {
    &.notice-card{
      .el-card__header{
        border-bottom: 1px solid #ebeef5;
      }  
      .el-card__body {
        .el-scrollbar{
          padding:10px;
        }
      }
    }
    .el-card__header{
      padding: 8px;
      border:none;
    .row2-top {
      position: relative;

      .div-more {
        position: absolute;
        right: 12px;
        top: 0px;
        font-size: 12px;
      }

    }
  }
    .el-card__body{
      padding:0px;
      .el-scrollbar{
        padding:0px 10px;
        .el-scrollbar__bar.is-horizontal{
          display: none;
        }
      }
    }

    .dev-item {
      .el-card {
        background: #EEF7FE;
        padding: 8px;

        .el-card__header {
          padding: 4px;
          border: none;

          .dev-title {
            color: var(--el-color-primary);
            position: relative;
            font-size: 16px;
            font-weight: bold;

            .svg-icon {
              position: absolute;
              right: 0px;
              cursor: pointer;
            }
          }
        }

        .el-card__body {
          background: #fff;
          box-shadow: var(--el-box-shadow-light);
          border-radius: 8px;
          padding:10px;
          .dev-row3 {
            display: flex;
            padding:12px;
            align-items: center;
            .device-state {
              width: 100px;
              text-align: center;
            }
            .state-text{
              font-size:16px;
              &.state0{
                color:var(--el-color-primary);
              }
              &.state1{
                color:var(--el-color-warning);
              }
              &.state2{
                color:var(--el-color-danger);
              }
            }

            .dev-chart{
              flex-grow: 1;
              .chart-item-title{
                margin: 12px 0px 0px;
                font-size:12px;
                position: relative;
                span{
                  &:first-child{
                    font-weight: bold;
                  }
                  &:last-child{
                    position: absolute;
                    right: 0px;
                  }
                }
              }
              .chart-line{                
                background-color: #ccc;
                height:8px;
                border-radius:4px; 
                .chart-line-inline{
                  background-color: var(--el-color-primary);
                  height:8px;
                  border-radius:4px; 
                }
              }
            }
            
          }
        }
      }
    }
  }
  .proc-card{
    margin-top:20px;   
    padding: 8px;
    .el-card__header{
      padding: 8px;
      border:none;
    }
    .el-card__body{
      background: #EEF7FE;
      border-radius: 8px;
      height:300px;
    }
    &.server-status{
      background: #EEF7FE;
      padding: 8px;
      .el-card__header{
      }
      .el-card__body {
          background: #fff;
          box-shadow: var(--el-box-shadow-light);
      }
    }
  }
}
</style>
