<template>
  <div class="station">
    <searchBox :btn-option-list="btnOptionList" @operateForm="operateForm"></searchBox>

    <div class="content-table">
      <ComTable
        :columns="columns"
        :table-data="tableData"
        @handlePagesizeChange="handlePagesizeChange"
        ref="comTable"
        :table-option="tableOption"
        :page-option="pageOption"
      >
        <template #status="record">
          <a-tag :color="record.status == 0 ? 'red' : 'green'">{{
            record.status == 0 ? '未投运' : '投运'
          }}</a-tag>
          <span>{{}}</span>
        </template>
        <template #work_mode="record">
          <span>{{
            workModeList.find((item) => record.work_mode == item.value)?.label || ''
          }}</span>
        </template>
        <template #policy_id="record">
          <span>{{ policyList.find((item) => record.policy_id == item.value)?.label || '' }}</span>
        </template>
        <template #action="record">
          <OperateCom :record="record" :operate-list="operateList" @operateForm="operateForm" />
        </template>
      </ComTable>
    </div>
    <a-modal
      v-model:open="formModal"
      width="750px"
      style="top: 80px"
      :footer="null"
      :destroy-on-close="true"
    >
      <!-- action:edit add -->
      <EditCom
        ref="EditCom"
        :record="record"
        @operateForm="operateForm"
        type="station"
        :action="formStatus"
      ></EditCom>
    </a-modal>
  </div>
</template>

<script>
import { columnList, stationOptions } from '../../../public/config/columnList'
import { getReq, postReq } from '@/request/api.js'
import ComTable from '@/components/ComTable'
import OperateCom from '@/components/OperateCom'
import EditCom from '@/components/EditCom.vue'
import { ExclamationCircleOutlined } from '@ant-design/icons-vue'
import { createVNode } from 'vue'

import searchBox from '@/components/SearchBox.vue'
export default {
  name: '',
  components: {
    searchBox,
    EditCom,
    ComTable,
    OperateCom
  },
  props: {},
  data() {
    return {
      tableData: [],
      tableOption: {
        select: false
      },
      formModal: false,
      formState: {},
      formStatus: 'add', //表单状态辑状态 add:新增 edit:编辑
      pageOption: {
        pageSize: 10,
        page: 1
      },
      btnOptionList: [],
      paramsDate: {},
      workModeList: [
        {
          label: '峰谷套利',
          value: '1'
        },
        {
          label: '配网增容',
          value: '2'
        },
        {
          label: '应急供电',
          value: '3'
        },
        {
          label: '并网保电',
          value: '4'
        },
        {
          label: '运营支撑',
          value: '5'
        }
      ],
      policyList: [
        {
          label: '削峰套利',
          value: 1
        },
        {
          label: '需求响应',
          value: 2
        },
        {
          label: '自发自用',
          value: 3
        }
      ]
    }
  },
  computed: {},
  created() {
    let info = []
    let col = columnList.find((i) => i.page == 'station').columns
    if (col.length) {
      col.forEach((item) => {
        info.push(this.$setWidth(item))
      })
    }
    this.columns = info
  },

  mounted() {
    this.operateList = this.$getBtns(['查看', '修改', '删除'])
    this.btnOptionList = this.$getBtns(['新增'])
    this.getList()
  },

  methods: {
    async getList() {
      this.$refs.comTable.loading = true

      const { page, pageSize } = this.pageOption

      const params = {
        ...this.paramsDate,
        page_size: pageSize,
        page
      }

      try {
        const res = await getReq('/queryStationList', params)
        if (res.errcode === 0) {
          this.$refs.comTable.loading = false

          this.tableData = res.data

          this.pageOption = {
            page: res.page,
            pageSize: res.page_size,
            count: res.count
          }
        } else {
          const err = { tip: res.errmsg }
          throw err
        }
      } catch (error) {
        //统一处理报错提示
        this.$refs.comTable.loading = false
      }
    },
    operateForm(type, record = {}) {
      this.formStatus = type
      switch (type) {
      case 'add':
        this.formModal = true
        this.formState = {}
        this.getRuleFormInfo()

        break
      case 'edit':
      case 'read':
        this.formModal = true
        this.formState = record
        this.getRuleFormInfo(record)
        break

      case 'del':
        this.handleDelete([record.station_id], this.getList)

        break

      case 'back':
        this.formModal = false
        this.getList()
        break

      default:
        break
      }
    },
    //  删除操作
    async handleDelete(id, callback) {
      const that = this
      this.$Modal.confirm({
        title: '你确认删除数据吗?',
        icon: createVNode(ExclamationCircleOutlined),

        async onOk() {
          try {
            const res = await getReq('/deleteStation', { station_id: id })
            if (res.errcode === 0) {
              this.$message.success(res.errmsg)
              this.pageOption.page = 1
              callback()
            } else {
              throw res
            }
          } catch (error) {
            callback()
          }
        },
        onCancel() {},
        class: 'test'
      })
    },
    async getRuleFormInfo(record) {
      function getInfo(data, url) {
        return new Promise((reslove, reject) => {
          getReq(data, url).then((res) => {
            reslove(res.data)
          })
        })
      }

      let row = {}
      if (record && record.station_id) {
        // row = await getInfo({ station_id: record.station_id},'/queryStationInfo')
        this.record = record
        row = record
        // this.type='edit'
      }
      stationOptions.forEach((e, index) => {
        e.list.forEach((i) => {
          if (i.key == 'work_mode') {
            if (row[i.key] == 1 || row[i.key] == 5) {
              stationOptions[0].list[stationOptions[0].list.length - 1].type = 'select'
              e.ruleForm[i.key] = row[i.key]
              e.ruleForm['policy_id'] = row ? row['policy_id'] : ''
            } else {
              e.ruleForm[i.key] = row[i.key]

              stationOptions[0].list[stationOptions[0].list.length - 1].type = 'unshow'
            }
          } else if (i.key == 'status') {
            e.ruleForm.status = row ? Boolean(Number(row.status)) : ''
            
          } else {
            e.ruleForm[i.key] = row ? row[i.key] : ''
          }
        })
      })
    },
    handlePagesizeChange(pageOption) {
      this.pageOption.pageSize = pageOption.pageSize
      this.pageOption.page = pageOption.page
      this.getList()
    }
  }
}
</script>

<style lang="scss" scoped>
.station {
  height: 100%;

  padding:  20px;
  .content-table {
    height: calc(100% - 52px);
  }
}
</style>
