<template>
  <el-card
    v-loading="loading"
    shadow="always"
    class="common-card-container common-card-container-no-title-bg"
  >
    <div slot="header">
      <span class="large-title">单体电池实时数据</span>
    </div>
    <!--    搜索栏-->
    <el-form :inline="true" class="select-container">
      <el-form-item label="编号">
        <el-input
          v-model="search.batteryId"
          placeholder="请输入"
          clearable
          style="width: 150px"
        />
      </el-form-item>
      <el-form-item label="电池堆">
        <el-select
          v-model="search.stackId"
          placeholder="请选择"
          @change="changeStackId"
        >
          <el-option
            :label="item.deviceName"
            :value="item.id"
            v-for="(item, index) in stackOptions"
            :key="index + 'stackOptions'"
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="电池簇">
        <el-select
          v-model="search.clusterId"
          :no-data-text="
            !search.stackId && stackOptions.length > 0
              ? '请先选择电池堆'
              : '无数据'
          "
          placeholder="请选择"
          :loading="clusterloading"
          loading-text="正在加载数据"
        >
          <el-option
            :label="item.deviceName"
            :value="item.id"
            v-for="(item, index) in clusterOptions"
            :key="index + 'clusterOptions'"
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="onSearch" native-type="button"
          >搜索</el-button
        >
      </el-form-item>
      <el-form-item>
        <el-button @click="onReset" native-type="button">重置</el-button>
      </el-form-item>
    </el-form>
    <!-- 切换 -->
    <div class="tip-container">
      <div class="color-tip" v-show="activeBtn === 'list'">
        单体信息
        <span class="tip minwd">最低单体温度</span>
        <span class="tip maxwd">最高单体温度</span>
        <span class="tip mindy">单体最低电压</span>
        <span class="tip maxdy">单体最高电压</span>
      </div>
      <el-button-group class="ems-btns-group">
        <el-button
          :class="{ activeBtn: activeBtn === 'table' }"
          @click="changeMenu('table')"
          >图表</el-button
        >
        <el-button
          :class="{ activeBtn: activeBtn === 'list' }"
          @click="changeMenu('list')"
          >图形</el-button
        >
      </el-button-group>
    </div>
    <component
      :is="activeBtn === 'table' ? 'DtdcTable' : 'DtdcList'"
      :tableData="tableData"
      :totalSize="totalSize"
      :pointIdList="pointIdList"
      @chart="chartDetail"
    ></component>
    <el-pagination
      v-show="tableData.length > 0"
      background
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="pageNum"
      :page-size="pageSize"
      :page-sizes="[10, 20, 30, 40]"
      layout="total, sizes, prev, pager, next, jumper"
      :total="totalSize"
      style="margin-top: 15px; text-align: center"
    >
    </el-pagination>
    <chart-detail ref="chartDetail" />
  </el-card>
</template>

<script>
import BarChart from "./BarChart";
import {
  getStackNameList,
  getClusterNameList,
  getClusterDataInfoList,
} from "@/api/ems/dzjk";
import getQuerySiteId from "@/mixins/ems/getQuerySiteId";
import ChartDetail from "./ChartDetail.vue";
import Table from "./Table.vue";
import List from "./List.vue";
export default {
  name: "DzjkSbjkDtdc",
  mixins: [getQuerySiteId],
  components: { BarChart, ChartDetail, DtdcTable: Table, DtdcList: List },
  computed: {
    pointIdList() {
      let obj = {};
      this.pointData.forEach((item) => {
        const {
          maxCellTempId,
          maxCellVoltageId,
          minCellTempId,
          minCellVoltageId,
        } = item;
        obj[item.clusterId] = [
          parseInt(minCellTempId || 0),
          parseInt(maxCellTempId || 0),
          parseInt(minCellVoltageId || 0),
          parseInt(maxCellVoltageId || 0),
        ]; //最低单体温度 最高温度 最低电压 最高电压 todo 这里的顺序需要和图形组件里的顺序保持一致，
      });
      return obj;
    },
  },
  data() {
    return {
      loading: false,
      clusterloading: false,
      search: { stackId: "", clusterId: "", batteryId: "" },
      stackOptions: [], //{id:'',deviceName:''}
      clusterOptions: [], //{id:'',deviceName:''}
      tableData: [],
      pointData: [],
      pageSize: 40, //分页栏当前每个数据总数
      pageNum: 1, //分页栏当前页数
      totalSize: 0, //table表格数据总数
      activeBtn: "table",
    };
  },
  methods: {
    changeMenu(menu) {
      const { activeBtn } = this;
      activeBtn !== menu && (this.activeBtn = menu);
    },
    //查看表格行图表
    chartDetail({ clusterDeviceId, deviceId, dataType = "" }) {
      const { siteId } = this;
      this.$refs.chartDetail.initChart(
        { siteId, clusterDeviceId, deviceId },
        dataType
      );
    },
    // 分页
    handleSizeChange(val) {
      this.pageSize = val;
      this.$nextTick(() => {
        this.getTableData();
      });
    },
    handleCurrentChange(val) {
      this.pageNum = val;
      this.$nextTick(() => {
        this.getTableData();
      });
    },
    // 搜索
    onSearch() {
      this.pageNum = 1; //每次搜索从1开始搜索
      this.getTableData();
    },
    // 重置
    // 清空搜索栏选中数据
    // 清空电池簇列表，保留电池堆列表
    onReset() {
      this.search = { stackId: "", clusterId: "", batteryId: "" };
      this.clusterOptions = [];
      this.pageNum = 1;
      this.getTableData();
    },
    changeStackId(val) {
      if (val) {
        console.log(
          "选择了电池堆，需要获取对应的电池簇",
          val,
          this.search.stackId
        );
        this.search.clusterId = "";
        this.getClusterList();
      }
    },
    //表格数据
    getTableData() {
      this.loading = true;
      const {
        stackId: stackDeviceId,
        clusterId: clusterDeviceId,
        batteryId,
      } = this.search;
      const { siteId, pageNum, pageSize } = this;
      getClusterDataInfoList({
        stackDeviceId,
        clusterDeviceId,
        siteId,
        batteryId,
        pageNum,
        pageSize,
      })
        .then((response) => {
          this.tableData = response?.rows?.[0]?.batteryList || []; //todo check
          this.pointData = response?.rows?.[0]?.clusterList || []; //todo check
          this.totalSize = response?.total || 0;
        })
        .finally(() => {
          this.loading = false;
        });
    },
    getStackList() {
      getStackNameList(this.siteId).then((response) => {
        this.stackOptions = JSON.parse(JSON.stringify(response?.data || []));
      });
    },
    getClusterList() {
      this.clusterloading = true;
      getClusterNameList({
        stackDeviceId: this.search.stackId,
        siteId: this.siteId,
      })
        .then((response) => {
          this.clusterOptions = JSON.parse(
            JSON.stringify(response?.data || [])
          );
        })
        .finally(() => {
          this.clusterloading = false;
        });
    },
    init() {
      // 只有页面初次加载或切换站点的时候调用电池堆列表，其他情况不需要
      this.search = { stackId: "", clusterId: "", batteryId: "" }; //保证切换站点时，清空选择项
      this.clusterOptions = [];
      this.pageNum = 1;
      this.totalSize = 0;
      this.getStackList();
      this.getTableData();
    },
  },
  mounted() {},
};
</script>
<style scoped lang="scss">
.tip-container {
  text-align: right;
  position: relative;
  .color-tip {
    position: absolute;
    top: 50%;
    left: 0;
    transform: translateY(-50%);
    font-size: 11px;
    line-height: 12px;
    color: #333;
    .tip {
      padding-left: 30px;
      position: relative;
      &::before {
        display: block;
        content: "";
        position: absolute;
        left: 14px;
        top: 50%;
        transform: translateY(-50%);
        width: 8px;
        height: 8px;
        border-radius: 50%;
      }
      &.minwd {
        color: #3794ff;
        &::before {
          background: #3794ff;
        }
      }
      &.maxwd {
        color: #ff3a3b;
        &::before {
          background: #ff3a3b;
        }
      }
      &.mindy {
        color: #de6902;
        &::before {
          background: #de6902;
        }
      }
      &.maxdy {
        color: #ffb521;
        &::before {
          background: #ffb521;
        }
      }
    }
  }
  ::v-deep {
    .el-button-group.ems-btns-group {
      & > .el-button {
        padding: 5px 30px !important;
        font-size: 11px;
        line-height: 16px;
        // padding-left: 50px;
        // padding-right: 50px;
        // font-size: 16px;
        // line-height: 24px;
      }
    }
  }
}
</style>
