<template>
  <div class="RoadNetworkMonitoring">
    <!-- 搜索栏 -->
    <div class="filter">
      <ButtonGradient @click="onRefreshForm" class="refresh-btn">
        <template #prefix>
          <img src="./images/refresh.svg" />
        </template>
        刷新
      </ButtonGradient>

      <InputSearch
        ref="searchComp"
        style="width: 402px"
        :formList="searchFormList"
        :formConfigOptions="{ dFormData: { eventState: '0' } }"
        @handleSearch="handleSearch"
      />
    </div>

    <!-- 内容 -->
    <div class="body">
      <RoadStateCard
        v-for="(item, index) in data"
        :key="index"
        :cardData="item"
        @firstBtnClick="firstBtnClick"
        @lastBtnClick="lastBtnClick"
      />
    </div>

    <!-- 分页 -->
    <div class="footer">
      <Pagination
        @current-change="initData"
        @size-change="onSizeChange"
        width="'100%'"
        :page-sizes="[12, 16, 20, 30, 50]"
        :page-size="searchData.pageSize"
        :current-page.sync="searchData.pageNum"
        layout="total, sizes, prev, pager, next"
        :total="total"
      >
      </Pagination>
    </div>

    <EventDetailDialog
      :visible="eventDetailDialogVisible"
      :formData="detailDialogFormData"
      @update:value="handleClose"
    />
    <EventDispatchDialog
      :visible="eventDispatchDialogVisible"
      @update:value="handleClose"
      :eventId="eventId"
    />
  </div>
</template>

<script>
import ButtonGradient from "@screen/components/Buttons/ButtonGradient.vue";
import Pagination from "@screen/components/Pagination.vue";
import InputSearch from "@screen/components/InputSearch/index.vue";
import RoadStateCard from "@screen/components/RoadStateCard/index.vue";
import EventDetailDialog from "./EventDetailDialog/index";
import EventDispatchDialog from "./EventDispatchDialog/index";
import { searchFormList } from "./data";
import request from "@/utils/request";

const directionMapping = {
  1: "菏泽方向",
  2: "双向",
  3: "济南方向",
};

export default {
  name: "RoadNetworkMonitoring",
  components: {
    Pagination,
    RoadStateCard,
    InputSearch,
    EventDispatchDialog,
    EventDetailDialog,
    Pagination,
    ButtonGradient,
  },
  data() {
    return {
      eventDetailDialogVisible: false,
      eventDispatchDialogVisible: false,
      searchFormList,
      detailDialogFormData: {},
      total: 0,
      data: [],
      eventId: "0",
      searchData: {
        pageSize: 16,
        pageNum: 1,
        eventState: "0",
      },
    };
  },
  created() {
    this.initData();
  },
  methods: {
    onRefreshForm(){
      this.searchData.pageNum = 1;
      this.$refs.searchComp.handleResetForm();
    },
    initData() {
      request({
        // url: `/dc/system/event/dispatchEventList`,
        url: "/dc/system/event/list",
        method: "get",
        params: this.searchData,
      }).then((result) => {
        if (result.code != 200) return Message.error(result?.msg);
        this.total = result.total;
        result.rows.forEach((it) => {
          it.stringDirection = directionMapping[it.direction] || it.direction;
        });
        this.data = result.rows;
      });
    },
    onSizeChange(pageSize) {
      this.searchData.pageSize = pageSize;
      this.initData();
    },
    getStateCardBind(item) {
      const { state, textColor, text } = tabMap[this.activeName];

      return {
        cardData: { ...item, state },
        lastBtnColor: textColor,
        lastBtnText: text,
      };
    },
    onRefresh() {
      this.data = [];
      setTimeout(() => {
        this.initData();
      }, 100);
    },
    firstBtnClick(id) {
      console.log("id", id);
      request({
        url: `/dc/system/event/${id}`,
        method: "get",
      }).then((result) => {
        if (result.code != 200) return Message.error(result?.msg);
        this.detailDialogFormData = result.data;

        this.eventDetailDialogVisible = true;
      });
    },
    lastBtnClick(id) {
      console.log(id);
      this.eventDispatchDialogVisible = true;
      this.eventId = id;
    },
    handleSearch(data) {
      console.log("data", data);
      let daterange = data.daterange;

      let dStakeMark = data.stakeMark;
      let dendStakeMark = data.endStakeMark;

      let stakeMark = dStakeMark[0] ? `K${dStakeMark[0]}+${dStakeMark[1]}` : "";
      let endStakeMark = dendStakeMark[0]
        ? `K${dendStakeMark[0]}+${dendStakeMark[1]}`
        : "";

      this.searchData = {
        ...this.searchData,
        eventState: data.eventState || 0,
        eventType: data.eventType,
        eventSources: data.eventSources,
        startTime: daterange && daterange.length > 0 ? daterange[0] : "",
        endTime: daterange && daterange.length > 0 ? daterange[1] : "",
        stakeMark: stakeMark,
        endStakeMark: endStakeMark,
      };
      this.initData();
    },
    handleClose() {
      this.eventDetailDialogVisible = false;
      this.eventDispatchDialogVisible = false;
    },
  },
};
</script>

<style lang="scss" scoped>
.RoadNetworkMonitoring {
  padding: 21px;

  height: 100%;
  display: flex;
  flex-direction: column;
  z-index: 6;

  .filter {
    height: 38px;
    display: flex;
    // justify-content: flex-end;
    justify-content: space-between;
    .refresh-btn {
    }
  }

  .body {
    flex: 1;
    overflow: auto;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-gap: 20px;
    // grid-row-gap: 9px;
    // grid-column-gap: 9px;
    grid-auto-rows: min-content;
  }

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