<template>
  <div class='board_record'>
    <!-- 搜索栏 -->
    <div class="filter">
      <div>
         <ButtonGradient @click.native="handleExport">
          <template #prefix>
            <img src="@screen/images/export.svg" />
          </template>
          导出
        </ButtonGradient>
        <ButtonGradient @click="onRefreshForm" class="refresh-btn">
          <template #prefix>
            <img src="@screen/images/refresh.svg" />
          </template>
          刷新
        </ButtonGradient>
      </div>

      <InputSearch ref="searchComp" style="width: 400px" :formList="searchFormList" @handleSearch="handleSearch" />
    </div>
    <!-- 内容 -->
    <div class="body">
      <div class="flowstate">
        <div class="tag1" >方向：济南<span>←</span></div>
        <div class="tag2"><span>→</span>方向：菏泽</div>
        <div class="chartsFs " id="surveyChart"></div>
      </div>
      <Table :data="tableData" :span-method="mergeRow" :height="'50%'">

        <ElTableColumn label="设备名称" prop="stakeMark" width="200"  align="center" header-align="center" >
          <template slot-scope="scope">
            <span>一类交调站{{scope.row.stakeMark}}</span>
          </template>
        </ElTableColumn>
        <ElTableColumn label="方向" prop="direction"  align="center" header-align="center" width="120">
          <template slot-scope="scope">
            <span v-if="scope.row.direction == '1'">菏泽</span>
            <span v-if="scope.row.direction == '3'">济南</span>
          </template>
        </ElTableColumn>
        <ElTableColumn v-for="item in columnList" :label="item.label" :prop="item.key" min-width="80" align="center" header-align="center" />
        <ElTableColumn label="合计" prop="total" width="150" align="center" header-align="center" />
      </Table>
    </div>


  </div>
</template>

<script>
import ButtonGradient from '@screen/components/Buttons/ButtonGradient.vue';
import Pagination from '@screen/components/Pagination.vue';
import Table from '@screen/components/Table.vue';
import request from "@/utils/request";
import BoardRecordPreview from '@screen/components/infoBoard/BoardRecordPreview.vue'
import InputSearch from "@screen/components/InputSearch/index.vue";
import { searchFormList } from "./data";
import { delay, exportFile, confirm } from "@screen/utils/common";
import Button from "@screen/components/Buttons/Button.vue";
import Form from "@screen/components/FormConfig";
import Dialog from "@screen/components/Dialog/index.vue";
import {  mapState } from "vuex";
import moment from 'moment';
import * as echarts from "echarts";
import chartOptions from "./charts";


export default {
  name: 'survey',
  components: {
    ButtonGradient,
    Pagination,
    Table,
    Button,
    Form,
    Dialog,
    BoardRecordPreview,
    InputSearch
  },
  data() {
    return {
      tableData: [],
      searchFormList,
      total: 20,
      searchData: {
      },
      columnList:[],
    }
  },
  computed: {
    ...mapState(["menu"]),
  },
  created() {
    this.initData();
  },
  mounted(){
    this.$nextTick(()=>{
      if(!this.myChart){
        this.myChart = echarts.init(document.getElementById("surveyChart"));
      }
      this.initData();
      // this.searchQuery()
    })

    window.addEventListener("resize", () => {
      if(this.myChart)
        this.myChart.resize();
    });
  },
  methods: {
    mergeRow({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 0) {
        const start = this.tableData.findIndex(data => data.stakeMark === row.stakeMark);
        if (start !== -1) {
          const count = this.tableData.filter((data, index) => index >= start && data.stakeMark === row.stakeMark).length;
          if (rowIndex === start) {
            return [count, 1]; // 返回要合并的行数和列数
          } else {
            return [0, 0]; // 不合并
          }
        }
      }
      return [1, 1];
    },

    onRefreshForm(){
      this.searchData.pageNum = 1;
      this.$refs.searchComp.handleResetForm();
    },
    handleSearch(data) {
      data.timestamp = data.startTime + " 00:00:01";
      this.searchData = { ...data };
      this.initData();
    },
    indexMethod(index) {
        return this.searchData.pageSize*(this.searchData.pageNum-1) + index + 1;
    },
    //
    /** 导出按钮操作 */
    handleExport() {
      exportFile({
        url: "/trafficSurveyData/dcTrafficSurveyData/export",
        filename: "一类交调站",
        data: this.searchData,
      });
    },
    async initData() {

      if(!this.searchData.timestamp){
        this.searchData.timestamp = moment().format('YYYY-MM-DD') + " 00:00:01"
      }
      if(!this.searchData.type){
        this.searchData.type = 'day'
      }
      request({
        url: `/trafficSurveyData/dcTrafficSurveyData/list`,
        method: "get",
        params: this.searchData,
      }).then((result) => {
        this.columnList = result.data.columnList
        this.tableData = result.data.rowList
        this.loadCharts(result.data)
      });
    },
    onSizeChange(pageSize) {
      this.tableData = [];
      this.searchData.pageSize = pageSize;
      this.searchData.pageNum = 1;
      this.initData();
    },
    loadCharts(data){

      const xAxis = data.columnList.map(x=>x.label);
      chartOptions.xAxis[0].data = xAxis;
      chartOptions.xAxis[1].data = xAxis;

      let color = ["#2ef7f5", "#4780f5", "#b346f6", "#25ea77", "#d2040a", "#eadb06", "#0600f2", "#e67500"]
      let series = []
      let legendData = []
      const stakeMarkMap = new Map();
      data.rowList.forEach(item => {
        stakeMarkMap.set(item.stakeMark, item);
      });
      data.rowList.forEach(item => {
        const stakeMark = item.stakeMark;
        if (!stakeMarkMap[stakeMark]) {
          stakeMarkMap[stakeMark] = [];
        }
        stakeMarkMap[stakeMark].push(item);
      });

      stakeMarkMap.keys().forEach((stakeMark,index) =>{

        legendData.push({
          name: stakeMark,
          itemStyle: {
            color: color[index]
          }
        })
        stakeMarkMap[stakeMark].forEach(stakeMarkData => {
          let seriesData = []
          data.columnList.forEach(x =>{
            seriesData.push(stakeMarkData[x.key])
          })
          debugger

          if (stakeMarkData.direction == '3'){
            series.push({
              name: stakeMark,
              type: "line",
              symbolSize: 0,
              lineStyle: {
                color: color[index],
              },
              smooth: true,
              areaStyle: {
                normal: {
                  color: new echarts.graphic.LinearGradient(
                    0,
                    0,
                    0,
                    1,
                    [
                      {
                        offset: 1,
                        color: "#06AED300",
                      },
                      {
                        offset: 0,
                        color: color[index],
                      },
                    ],
                    false
                  ),
                },
              },
              data: seriesData,
            },)
          } else {
            series.push({
              name: stakeMark,
              type: "line",
              symbol: "circle",
              symbolSize: 0,
              xAxisIndex: 1,
              yAxisIndex: 1,
              smooth: true,
              lineStyle: {
                color: color[index],
              },
              areaStyle: {
                normal: {
                  color: new echarts.graphic.LinearGradient(
                    0,
                    0,
                    0,
                    1,
                    [
                      {
                        offset: 0,
                        color: "#06AED300",
                      },
                      {
                        offset: 1,
                        color: color[index],
                      },
                    ],
                    false
                  ),
                },
              },
              data: seriesData,
            })
          }
        })

      })
      debugger
      chartOptions.series = series
      chartOptions.legend.data = legendData
      this.myChart.setOption(chartOptions);
    },
  }
}
</script>

<style lang='scss' scoped>
  .flowstate {
    width: 100%;
    height: 50%;
    display: flex;
    justify-content: space-between;
    align-items: center;

    .chartsFs {
      height: 35vh;
      width: 200vh;
    }

    .tag1 {
      position: absolute;
      margin-top: -15%;
      margin-left: 2%;
      font-size: 12px;
      span{
        color: #8be8fe;
        font-weight: bold;
        margin-left: 10px;
      }
    }

    .tag2 {
      position: absolute;
      font-size: 12px;
      margin-top: 15%;
      margin-left: 90%;
      span{
        color: #8be8fe;
        font-weight: bold;
        margin-right: 10px;
      }
    }
  }
.board_record {
  width:100%;
  height: 100%;
  display: flex;
  flex-direction: column;

  .filter {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 20px;
    >div {
      display: flex;
      gap: 6px;
    }
  }

  .body {
    flex: 1;
    height: 0;
  }

  .footer {
    margin-top: 15px;
    height: 36px;
    display: flex;
    align-items: center;
    justify-content: center;
  }

  .board_shower{
    margin: 4px;
  }
  ::v-deep .el-carousel__indicators--horizontal{
    line-height: 0; height: 16px;
    .el-carousel__indicator--horizontal{
      padding: 7px 4px;
    }
  }
  ::v-deep .el-table__cell div.cell {
    padding: 0 10px !important;
  }
}
.upload-file{
  position: absolute;
  width: 120px;
  height: 120px;
  margin-left: 55%;
  bottom: 210px;
  z-index: 9999;
}
::v-deep .el-upload-dragger{
    background-color: #104c66 !important;
    border: 1px solid #359cbc !important;

}
</style>
