<template>
  <div class="alarm-center-1">
    <div class="action-bar">
      <div class="query mg-b-16">
        <div class="query-items">
          <div class="query-item">
            <div class="lable">风场：</div>
            <div class="search-input">
              <el-select
                v-model="wpvalue"
                clearable
                placeholder="请选择"
                popper-class="select"
              >
                <el-option
                  v-for="item in wpoptions"
                  :key="item.id"
                  :label="item.name"
                  :value="item.id"
                >
                </el-option>
              </el-select>
            </div>
          </div>
          <div class="query-item">
            <div class="lable">开始日期：</div>
            <div class="search-input">
              <el-date-picker
                v-model="startdate"
                type="date"
                placeholder="选择日期"
                popper-class="date-select"
              >
              </el-date-picker>
            </div>
          </div>
          <div class="query-item">
            <div class="lable">结束日期：</div>
            <div class="search-input">
              <el-date-picker
                v-model="enddate"
                type="date"
                placeholder="选择日期"
                popper-class="date-select"
              >
              </el-date-picker>
            </div>
          </div>
          <div class="query-item">
            <div class="lable">规则：</div>
            <el-cascader
              style="width: 240px"
              size="mini"
              popper-class="search-select"
              :options="cascaderOptions"
              :props="cascaderProps"
              v-model="cascaderSel"
              collapse-tags
              :clearable="true"
            ></el-cascader>
          </div>
        </div>
        <div class="query-actions">
          <button class="btn green" @click="searchData">搜索</button>
          <button class="btn green" @click="searchTree">筛选</button>
          <!-- <button class="btn green" @click="fx">分析</button> -->
        </div>
      </div>
    </div>
    <panel-3 class="table-panel">
      <table-3 :data="tableData" :height="'85vh'">
        <template v-for="(item, i) in column" :key="i" #[item]="scope">
          <div class="bar" @click="showChart(scope)">
            <div
              class="bar-percent"
              :style="{ width: scope?.data?.countStyle }"
            ></div>
            <span class="value">{{ scope?.data?.count }} 次数</span>
          </div>

          <div class="bar" @click="showChart(scope)">
            <div
              class="bar-percent"
              :style="{ width: scope?.data?.timeStyle }"
            ></div>
            <span class="value">{{ scope?.data?.time }} 分钟</span>
          </div>
        </template>
      </table-3>
    </panel-3>
    <el-dialog
      :title="dialogTitle"
      v-model="dialogVisible"
      width="70%"
      top="10vh"
      custom-class="modal"
      :close-on-click-modal="false"
    >
      <div class="searchForm">
        <div class="choose">
          <button class="btn green">等间隔</button>
          <!-- <button :class="chooseStatus?'btn green':'btn'" @click="switchChange(1,'original')">原始数据</button> -->
        </div>
        <el-select
          v-if="!chooseStatus"
          @change="switchChange(selectValue)"
          class="inputs"
          v-model="selectValue"
          placeholder="请选择"
        >
          <el-option
            v-for="item in timeoptions"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          >
          </el-option>
        </el-select>
      </div>
      <multiple-y-line-chart-normal
        height="500px"
        :list="Analysis"
        :yAxises="AnalysisYAxises"
        :showLegend="true"
      />
    </el-dialog>
    <el-dialog
      :title="dialogTitleFX"
      v-model="dialogVisibleFX"
      width="70%"
      top="10vh"
      custom-class="modal"
      :close-on-click-modal="false"
      :destroy-on-close="true"
    >
      <FX :date="startdate" :wpid="wpvalue" />
    </el-dialog>
  </div>
</template>

<script>
import Panel3 from "../../components/coms/panel/panel3.vue";
import Table3 from "../../components/coms/table/table3.vue";
import MultipleYLineChartNormal from "./multiple-y-line-chart-normal.vue";
import FX from "./alarm-center-yjfx.vue";
import BASE from "@tools/basicTool.js";
export default {
  components: {
    Panel3,
    Table3,
    MultipleYLineChartNormal,
    FX,
  },
  data() {
    return {
      dialogTitleFX: "",
      dialogVisibleFX: false,
      dialogTitle: "",
      chooseStatus: false,
      dialogVisible: false,
      chooseTime: [],
      wpvalue: "",
      wpid: "",
      wtId: "",
      descName: "",
      AnalysisName: "",
      AnalysisUnit: "",
      Analysis: [
        {
          title: "",
          yAxisIndex: 0, // 使用单位
          value: [],
        },
      ],
      AnalysisYAxises: [
        {
          name: "",
          min: "",
          max: "",
          unit: "",
          position: "left",
        },
        {
          name: "",
          min: "",
          max: "",
          unit: "",
          position: "right",
        },
      ],
      selectValue: "60",
      timeoptions: [
        {
          value: "60",
          label: "一分钟",
        },
        {
          value: "300",
          label: "五分钟",
        },
        {
          value: "600",
          label: "十分钟",
        },
        {
          value: "1800",
          label: "三十分钟",
        },
        {
          value: "3600",
          label: "一小时",
        },
        {
          value: "86400",
          label: "一天",
        },
      ],
      wpoptions: "",
      options: [],
      cascaderOptions: [],
      cascaderSel: [],
      cascaderProps: {
        multiple: true,
      },
      column: [
        "风机偏航过程震动",
        "齿轮箱轴承温升超过40度",
        "三相电流不平衡",
        "断轴或联轴器打滑",
        "风速突变",
      ],
      columnObj: [
        {
          name: "风机编号",
          field: "name",
          width: "100px",
          minWidth: "100px",
        },
        {
          name: "风机偏航过程震动",
          field: "风机偏航过程震动",
          align: "left",
          slot: true,
          sortable: true,
          minWidth: "200px",
        },
        {
          name: "齿轮箱轴承温升超过40度",
          field: "齿轮箱轴承温升超过40度",
          align: "left",
          slot: true,
          sortable: true,
          minWidth: "200px",
        },
        {
          name: "三相电流不平衡",
          field: "三相电流不平衡",
          align: "left",
          slot: true,
          sortable: true,
          minWidth: "200px",
        },
        {
          name: "断轴或联轴器打滑",
          field: "断轴或联轴器打滑",
          align: "left",
          slot: true,
          sortable: true,
          minWidth: "200px",
        },
        {
          name: "风速突变",
          align: "left",
          field: "风速突变",
          slot: true,
          sortable: true,
          minWidth: "200px",
        },
      ],
      startdate: new Date(
        new Date(new Date().setDate(new Date().getDate() - 1))
      ).formatDate("yyyy-MM-dd"),
      enddate: new Date(new Date()).formatDate("yyyy-MM-dd"),
      tableData: {
        column: [
          {
            name: "风机编号",
            field: "name",
          },
          {
            name: "主轴温度温差大于8度",
            field: "v1",
            align: "left",
            slot: true,
          },
          {
            name: "浆叶角过小",
            field: "v2",
            align: "left",
            slot: true,
          },
        ],
        data: [
          {
            name: "MG01_01",
            v1: {
              count: 12,
              time: 0,
            },
          },
        ],
      },
    };
  },
  created() {
    this.$nextTick(() => {
      this.search();
    });
  },
  methods: {
    //对比
    showChart(column) {
      let that = this;
      that.dialogTitle = column.column.name + ` (${column.row.name})`;
      that.wtId = column.row.name;
      that.descName = column.column.name;

      that.requestDetailData(
        that.wpvalue,
        that.startdate,
        that.enddate,
        60,
        column.row.name,
        column.column.name
      );
    },
    requestDetailData(station, startTs, endTs, interval, wtId, name) {
      let that = this;
      BASE.showLoading();
      that.API.requestData({
        method: "GET",
        subUrl: "/analysis/detail",
        data: {
          // station: that.wpvalue,
          // startTs: new Date(that.startdate).getTime(),
          // endTs: new Date(that.enddate).getTime(),
          // // interval: 360,
          // interval:1,
          // wtId: column.row.name,
          // name: column.column.name,
          station: station,
          startTs: new Date(
            new Date(startTs).formatDate("yyyy/MM/dd")
          ).getTime(),
          endTs: new Date(new Date(endTs).formatDate("yyyy/MM/dd")).getTime(),
          interval: interval,
          wtId: wtId,
          name: name,
        },
        success(res) {
          if (res.data.length == 1) {
            that.dialogVisible = true;
            BASE.closeLoading();
            let yaxises = [
              {
                name: "",
                min: 0,
                max: null,
                unit: "",
                position: "left",
              },
            ];
            // yaxises.name = res.data[0].name;
            yaxises.unit = res.data[0].unit;
            that.AnalysisYAxises = yaxises;
            let aKey1 = ["doubleValue"];
            let aList1 = [
              {
                title: "",
                // yAxisIndex:"",
                smooth: true,
                value: [],
              },
            ];
            aKey1.forEach((keyEle, keyIndex) => {
              aList1[keyIndex].title = res.data[keyIndex].name;
              res.data[keyIndex].data.forEach((rEle) => {
                aList1[keyIndex].value.push({
                  text: new Date(rEle.ts).formatDate("hh:mm"),
                  value: rEle.doubleValue,
                });
              });
            });
            that.Analysis = aList1;
          } else if (res.data.length == 2) {
            that.dialogVisible = true;
            BASE.closeLoading();
            let aKey2 = ["doubleValue", "doubleValue"];
            let aList2 = [
              {
                title: "",
                //  yAxisIndex:"",
                smooth: true,
                value: [],
              },
              {
                title: "",
                // yAxisIndex:"",
                smooth: true,
                value: [],
              },
            ];
            let yaxises1 = [
              {
                name: "",
                min: 0,
                max: null,
                unit: "",
                position: "left",
              },
              {
                name: "",
                min: 0,
                max: null,
                unit: "",
                position: "right",
              },
            ];
            yaxises1.forEach((aEle, aIndex) => {
              res.data.forEach((rEle) => {
                // aEle.name = rEle.name;
                aEle.unit = rEle.unit;
              });
            });
            that.AnalysisYAxises = yaxises1;
            aKey2.forEach((keyEle, keyIndex) => {
              aList2[keyIndex].title = res.data[keyIndex].name;
              res.data[keyIndex].data.forEach((rEle) => {
                aList2[keyIndex].value.push({
                  text: new Date(rEle.ts).formatDate("hh:mm"),
                  value: rEle.doubleValue,
                });
              });
            });
            // res.data.forEach((rEle,rIndex)=>{
            // })
            // aKey2.forEach((keyEle, keyIndex) => {
            //   res.data.forEach((rEle) => {
            //     // alist2[keyIndex].yAxisIndex = keyIndex;
            //     aList2[keyIndex].title = res.data[keyIndex].name;
            //     rEle.data.forEach((tEle,tIndex) => {
            //       aList2[keyIndex].value.push({
            //         text: new Date(tEle.ts).formatDate("hh:mm"),
            //         // value: tEle[keyEle],
            //         // value:res.data[keyIndex].data[tIndex].doubleValue

            //       });
            //     });
            //   });
            // });

            that.Analysis = aList2;
          } else if (res.data.length >=3) {
            that.dialogVisible = true;
            BASE.closeLoading();
            let aList4 = []
            let yaxises2 = [
              {
                name: "",
                min: 0,
                max: null,
                unit: '',
                position: 'left'
              },
              {
                name: "",
                min: 0,
                max: null,
                unit: '',
                position: 'right'
              }
            ]
            res.data.forEach((aEle, keyIndex) => {
              yaxises2[0].unit = aEle.unit
              yaxises2[1].unit = aEle.unit
              aList4.push({
                title: aEle.name,
                yAxisIndex: 0,
                smooth: true,
                value: aEle.data.map(o => {
                  return {
                    text: new Date(o.ts).formatDate("hh:mm"),
                    value: o.doubleValue,
                  }
                }),
              })
            });
            that.AnalysisYAxises = yaxises2;
            that.Analysis = aList4;
          } else if (res.data.length == 0) {
            that.dialogVisible = false;
            BASE.closeLoading();
            that.BASE.showMsg({
              type: "warning",
              msg: "暂无数据",
            });
          }
        },
      });
    },
    //切换数据类型
    switchChange(interval, status) {
      if (status === "interval") {
        this.chooseStatus = false;
        this.selectValue = "60";
      } else if (status === "original") {
        this.chooseStatus = true;
      }
      this.requestDetailData(
        this.wpvalue,
        this.startdate,
        this.enddate,
        interval,
        this.wtId,
        this.descName
      );
    },

    async search() {
      const { data } = await this.API.requestData({
        subUrl: "powercompare/windfarmAjax",
      });
      this.wpoptions = data.data;
      this.wpvalue = data.data[0].id;
      this.searchData();
    },

    async searchTree() {
      let arr = [];
      let columnObj = [
        {
          name: "风机编号",
          field: "name",
          minWidth: "100px",
        },
      ];
      this.cascaderSel.forEach((e) => {
        let obj = {
          name: e[1],
          field: e[1],
          align: "left",
          slot: true,
          sortable: true,
          minWidth: "200px",
        };
        columnObj.push(obj);

        arr.push(e[1]);
      });
      this.columnObj = columnObj;
      this.column = arr;
      this.searchData();
    },

    async searchData() {
      let enddate = new Date(
        Date.parse(new Date(this.enddate))
      ).formatDate("yyyy-MM-dd");
      const { data } = await this.API.requestData({
        showLoading: true,
        baseURL: "http://192.168.1.82:8075/",
        subUrl: "alarm/count/query/new2",
        data: {
          stationid: this.wpvalue,
          startdate: new Date(this.startdate).formatDate("yyyy-MM-dd"),
          enddate: enddate,
        },
      });

      ////////
      this.tableData = [];
      const resData = data.data;
      // const resData =this.resdata;
      const column = this.columnObj;
      let dataAll = []; // 总数据集合
      resData.forEach((e) => {
        let obj = {
          name: Object.keys(e)[0],
        };
        let wpid = Object.keys(e)[0];
        this.wpid = wpid;

        e[wpid].forEach((k) => {
          column.forEach((c) => {
            if (k.alertText == c.name) {
              const countStyle = k.count / (k.count + k.time);
              const timeStyle = k.time / (k.count + k.time);
              let obj1 = {
                count: k.count,
                countStyle: countStyle ? countStyle * 100 + "px" : "0",
                time: k.time,
                timeStyle: timeStyle ? timeStyle * 100 + "px" : "0",
              };
              obj[k.alertText] = obj1;
            }
          });
        });
        dataAll.push(obj);
      });

      this.tableData.column = column;
      this.tableData.data = dataAll;

      ///////////////////// 获取规则list
      const map = {};
      var windNum = [];
      for (let i in resData) {
        for (let k in resData[i]) {
          map[k] = resData[i][k];
        }
      }
      // nmap为新的map 整理数据结构
      const nmap = {};
      for (let kv in map) {
        var nchildMap = {};
        var childrenMap = map[kv];
        for (var ckv in childrenMap) {
          var cckey = childrenMap[ckv].alertText;
          var ccvalue = childrenMap[ckv];
          nchildMap[cckey] = ccvalue;
        }
        nmap[kv] = nchildMap;
      }
      windNum = Object.keys(nmap);
      var cascaderOptions = [];
      var root = {}; // 原始根节点
      var clumnsOnes = nmap[windNum[0]];
      for (let k in clumnsOnes) {
        let f = clumnsOnes[k].relatePartsText
          ? clumnsOnes[k].relatePartsText
          : "其他";
        let fvalue = clumnsOnes[k].relateParts ? clumnsOnes[k].relateParts : "";

        if (root[f]) {
          // 已经存在此子节点
          if (!root[f].children[k]) {
            // 不存在子节点
            root[f].children[k] = {};
            root[f].children[k].value = root[f].children[k].label = k;
            root[f].fobj.children.push(root[f].children[k]);
          }
        } else {
          // 不存在子节点
          root[f] = {};
          // root[f].value = fvalue;
          // root[f].label = f;
          root[f].children = {};
          root[f].children[k] = {};
          root[f].children[k].value = root[f].children[k].label = k;

          // 将对象放入 cascaderOptions
          let childrenArray = [];
          childrenArray.push(root[f].children[k]);
          let fobj = {};
          fobj.value = fvalue;
          fobj.label = f;
          fobj.children = childrenArray;
          cascaderOptions.push(fobj);
          root[f].fobj = fobj;
        }
      }
      this.cascaderOptions = cascaderOptions;
    },
    fx() {
      this.startdate = new Date(this.startdate).formatDate("yyyy-MM-dd");
      this.dialogTitleFX = "预警分析";
      this.dialogVisibleFX = true;
    },
  },
};
</script>

<style lang="less">
.alarm-center-1 {
  .action-bar {
    display: flex;

    .query {
      justify-content: flex-start;
    }
  }

  .table-panel {
    width: 100%;
    background: transparent;
    padding: 0;

    .bar {
      display: flex;
      align-items: center;
      height: 16px;
      margin: 8px 0;

      .bar-percent {
        height: 100%;
        background: @green;
        margin-right: 8px;
      }
    }
  }

  .searchForm {
    display: flex;
    margin-left: 36px;
    flex-direction: row-reverse;

    .inputs {
      width: 15%;
      margin-right: 18px;
    }
  }
}
</style>
