<!-- eslint-disable vue/multi-word-component-names -->
<template>
  <!-- 新增Tabs组件区分实时/历史数据 -->
  <Tabs v-model:activeKey="activeTab" type="line" class="common-page-tabs">
    <TabPane tab="实时监测" key="realtime">
      <div class="board-info">
        <MiniBoard
          v-for="(item, index) in boardData"
          :key="index"
          type="A"
          :label="item.label"
          :value="item.value"
          layout="label-top"
          class="board-item"
        />
      </div>
      <!-- 实时数据表格 -->
      <BasicTable @register="registerRealtimeTable" :scroll="{ x: 'max-content' }" :style="{ padding: 0 }">
        <template #action="{ record }">
          <div class="action-buttons">
            <!-- 操作按钮 -->
            <!-- <button @click="openModal(record, 'detail')" class="action-btn detail-btn" title="操作">
              <span class="action-text">详情</span>
            </button> -->
            <!-- 已解决按钮 -->
            <button @click="openModal(record)" class="resolved-btn" title="解决">
              <SvgIcon name="details" />
            </button>
          </div>
        </template>
        <template #resetBefore>
          <a-button type="default" class="ml-8px" preIcon="mdi:download" @click="onExportXlsTime"> 导出 </a-button>
        </template>
      </BasicTable>
    </TabPane>

    <TabPane tab="历史数据" key="history">
      <!-- 历史数据表格 -->
      <BasicTable @register="registerHistoryTable" :scroll="{ x: 'max-content' }" :style="{ padding: 0 }">
        <!-- <template #action="{ record }">
          <div class="action-buttons">
            <button @click="openModal(record, 'history')" class="action-btn">
              <SvgIcon name="details" />
            </button>
          </div>
        </template> -->
        <template #resetBefore>
          <a-button type="default" class="ml-8px" preIcon="mdi:download" @click="onExportXls"> 导出 </a-button>
        </template>
        <template #form-goaf-select>
          <a-select v-model:value="goafId" :options="goafOptions" placeholder="请选择" />
        </template>
      </BasicTable>
    </TabPane>
  </Tabs>
  <!-- 弹窗组件 -->
  <!-- <a-modal
    style="top: 30%; left: 170px"
    v-model:visible="visibleModal"
    :width="450"
    title="实时监测数据"
    @ok="handleOkEdit"
    @cancel="handleCancelEdit"
  >
    <a-table></a-table>
  </a-modal> -->
  <!-- 弹窗组件 -->
  <BasicModal @register="registerModal" :width="600" :minHeight="100" centered title="处理情况" @ok="handleResolve">
    <a-textarea class="ml-10px" :style="{ width: `calc(100% - 20px)` }" v-model:value="resolveValue" placeholder="请输入解决情况" :rows="4" />
  </BasicModal>
</template>

<script setup lang="ts">
  import { ref } from 'vue';
  import { BasicTable } from '/@/components/Table';
  import { Tabs, TabPane, message } from 'ant-design-vue';
  import MiniBoard from '/@/components/Configurable/detail/MiniBoard.vue';
  import { SvgIcon } from '/@/components/Icon';
  // 引入模拟数据
  import { columns } from './pressureDiffAnalysis.data';
  import { getProvinceAlarm, getProvinceAlarmHistory, getProvinceAlarmNum } from './pressureDiff.api';
  import { useInitForm } from '../../common/analysis';
  import { BasicModal } from '/@/components/Modal/index';
  import { historicalFormSchema } from '/@/views/monitor/sealedMonitor/monitor.data';
  // import { useIntervalFn } from '@vueuse/core';
  import { useListPage } from '/@/hooks/system/useListPage';

  // 激活的Tab页签
  const activeTab = ref('realtime');

  const boardData = ref([
    {
      label: '存在风险情况数量',
      value: '-',
    },
    {
      label: '低风险',
      value: '-',
    },
    {
      label: '一般风险',
      value: '-',
    },
    {
      label: '较高风险',
      value: '-',
    },
    {
      label: '高风险',
      value: '-',
    },
  ]);

  const wrappedGetMineData = (params) => {
    // 调用原接口
    return Promise.all([getAlarmTotalData(params), getProvinceAlarm(params)]).then(([__, res]) => res);
  };

  // 注册实时数据表格
  const { tableContext: ctxRealtime, onExportXls: onExportXlsTime } = useListPage({
    tableProps: {
      columns,
      api: wrappedGetMineData,
      formConfig: {
        labelWidth: 120,
        schemas: [
          {
            label: '煤矿名称',
            field: 'deptId',
            component: 'MineCascader', // 自定义组件名
            colProps: { span: 6 },
            rules: [],
          },
        ],
        showAdvancedButton: false,
        schemaGroupNames: ['常规查询'],
      },
      pagination: true,
      striped: true,
      useSearchForm: true,
      bordered: true,
      showIndexColumn: false,
      actionColumn: {
        width: 80,
        title: '操作',
        dataIndex: 'action',
        slots: { customRender: 'action' },
        fixed: undefined,
      },
    },
    exportConfig: {
      url: '/ventanaly-province/province/alarm/exportProvinceAlarmReal',
      name: '内外压差变化风险分析',
      params: {
        alarmType: 'sourcePressureAlarm',
      },
    },
  });
  const [registerRealtimeTable] = ctxRealtime;
  const { goafOptions, goafId, hiscode, resolveValue, registerModal, openModal, initGoafOptions, handleResolve } = useInitForm();

  // 注册历史数据表格
  const { tableContext, onExportXls } = useListPage({
    tableProps: {
      columns,
      // columns: historyColumns,
      api: (params) => {
        if (!goafId.value) {
          message.info('请先选择煤矿及老空区');
          return Promise.reject();
        }
        params.goafId = goafId.value;
        return getProvinceAlarmHistory(params);
      },
      formConfig: {
        model: { customField: hiscode },
        labelWidth: 120,
        schemas: [
          // {
          //   label: '开始时间',
          //   field: 'startTime',
          //   component: 'DatePicker',
          //   defaultValue: dayjs().add(-30, 'day').format('YYYY-MM-DD HH:mm:ss'),
          //   componentProps: {
          //     showTime: true,
          //     placeholder: '请选择开始时间',
          //     valueFormat: 'YYYY-MM-DD HH:mm:ss',
          //   },
          //   colProps: { span: 6 },
          //   rules: [{ required: true, message: '请选择开始时间' }],
          // },
          // {
          //   label: '结束时间',
          //   field: 'endTime',
          //   component: 'DatePicker',
          //   defaultValue: dayjs(),
          //   componentProps: {
          //     showTime: true,
          //     placeholder: '请选择结束时间',
          //     valueFormat: 'YYYY-MM-DD HH:mm:ss',
          //   },
          //   colProps: { span: 6 },
          //   rules: [{ required: true, message: '请选择结束时间' }],
          // },
          {
            label: '煤矿名称',
            field: 'customField',
            component: 'MineCascader', // 自定义组件名
            componentProps: {
              initFromStore: false,
              syncToStore: false,
              changeOnSelect: false,
              onChange: (e) => {
                historyTable.setLoading(true);
                initGoafOptions(e).finally(() => {
                  historyTable.setLoading(false);
                });
              },
            },
            colProps: { span: 6 },
            rules: [],
          },
          ...historicalFormSchema,
        ],
        showAdvancedButton: false,
        schemaGroupNames: ['常规查询'],
      },
      pagination: true,
      striped: true,
      useSearchForm: true,
      bordered: true,
      showIndexColumn: true,
      showActionColumn: false,
    },
    exportConfig: {
      url: '/province/alarm/exportProvinceAlarmHistory',
      name: '历史数据',
      params: {
        alarmType: 'sourcePressureAlarm',
        goafId,
      },
    },
  });

  const [registerHistoryTable, historyTable] = tableContext;

  async function getAlarmTotalData(p) {
    const params = {
      ...p,
      alarmType: 'sourcePressureAlarm',
    };
    const result = await getProvinceAlarmNum(params);
    boardData.value[1].value = result.alarmLevel1;
    boardData.value[2].value = result.alarmLevel2;
    boardData.value[3].value = result.alarmLevel3;
    boardData.value[4].value = result.alarmLevel4;
    boardData.value[0].value = result.alarmLevel1 + result.alarmLevel2 + result.alarmLevel3 + result.alarmLevel4;
  }
</script>

<style lang="less" scoped>
  @import url(../../common/board.less);
</style>
