<template>
  <div class="table-box">
    <ProTable ref="proTable" :columns="columns" row-key="id" :request-api="listToInfraredApi">
      <!-- 表格 header 按钮 -->
      <template #tableHeader="scope">
        <el-button type="primary" v-auth="['demo:toInfrared:add']" icon="CirclePlus" @click="openDialog(1, '可见光转红外新增')"> 新增 </el-button>
        <!-- <el-button type="primary" v-auth="['demo:toInfrared:import']" icon="Upload" plain @click="batchAdd"> 导入 </el-button>
        <el-button type="primary" v-auth="['demo:toInfrared:export']" icon="Download" plain @click="downloadFile"> 导出 </el-button> -->
        <el-button
          type="danger"
          v-auth="['demo:toInfrared:remove']"
          icon="Delete"
          plain
          :disabled="!scope.isSelected"
          @click="batchDelete(scope.selectedListIds)"
        >
          批量删除
        </el-button>
      </template>
      <!-- 表格操作 -->
      <template #operation="scope">
        <el-button
          type="primary"
          link
          icon="View"
          v-auth="['demo:video2image:start']"
          v-if="scope.row.status == '0' || scope.row.status == '3' || scope.row.status == '4'"
          ><!-- @click="startVideo2image(scope.row)" -->
          <!-- @confirm="stopVideo2image(scope.row)" -->
          开始
        </el-button>
        <el-popconfirm title="确定终止此任务吗?" v-if="scope.row.status == '1'">
          <template #reference>
            <el-button type="primary" link icon="Delete"> 终止 </el-button>
          </template>
        </el-popconfirm>
        <el-button type="primary" link icon="View" v-auth="['demo:video2image:download']" v-if="scope.row.status == '2'">
          <!-- @click="dowloadVideo2image(scope.row)" -->
          下载
        </el-button>
        <!-- <el-button type="primary" link icon="View" v-auth="['demo:toInfrared:query']" @click="openDialog(3, '查看', scope.row)"> 查看 </el-button> -->
        <!-- <el-button type="primary" link icon="EditPen"v-auth="['demo:toInfrared:edit']" @click="openDialog(2, '编辑', scope.row)"> 编辑 </el-button> -->
        <el-button
          type="primary"
          link
          icon="Delete"
          v-auth="['demo:toInfrared:remove']"
          @click="deleteToInfrared(scope.row)"
          :disabled="scope.row.status == '1'"
        >
          删除
        </el-button>
      </template>
    </ProTable>
    <FormDialog ref="formDialogRef" />
    <ImportExcel ref="dialogRef" />
  </div>
</template>

<script setup lang="tsx" name="ToInfrared">
import { ref, reactive } from 'vue'
import { useHandleData } from '@/hooks/useHandleData'
import { useDownload } from '@/hooks/useDownload'
import { ElMessageBox } from 'element-plus'
import ProTable from '@/components/ProTable/index.vue'
import ImportExcel from '@/components/ImportExcel/index.vue'
import FormDialog from '@/components/FormDialog/index.vue'
import { ProTableInstance, ColumnProps } from '@/components/ProTable/interface'
import {
  listToInfraredApi,
  delToInfraredApi,
  addToInfraredApi,
  updateToInfraredApi,
  importTemplateApi,
  importToInfraredDataApi,
  exportToInfraredApi,
  getToInfraredApi
} from '@/api/modules/demo/toInfrared'
import statusEnums from '@/utils/status'

// ProTable 实例
const proTable = ref<ProTableInstance>()

// 删除可见光转红外信息
const deleteToInfrared = async (params: any) => {
  await useHandleData(delToInfraredApi, params.id, '删除【' + params.id + '】可见光转红外')
  proTable.value?.getTableList()
}

// 批量删除可见光转红外信息
const batchDelete = async (ids: string[]) => {
  await useHandleData(delToInfraredApi, ids, '删除所选可见光转红外信息')
  proTable.value?.clearSelection()
  proTable.value?.getTableList()
}

// 导出可见光转红外列表
const downloadFile = async () => {
  ElMessageBox.confirm('确认导出可见光转红外数据?', '温馨提示', { type: 'warning' }).then(() =>
    useDownload(exportToInfraredApi, '可见光转红外列表', proTable.value?.searchParam)
  )
}

// 批量添加可见光转红外
const dialogRef = ref<InstanceType<typeof ImportExcel> | null>(null)
const batchAdd = () => {
  const params = {
    title: '可见光转红外',
    tempApi: importTemplateApi,
    importApi: importToInfraredDataApi,
    getTableList: proTable.value?.getTableList
  }
  dialogRef.value?.acceptParams(params)
}

const formDialogRef = ref<InstanceType<typeof FormDialog> | null>(null)
// 打开弹框的功能
const openDialog = async (type: number, title: string, row?: any) => {
  let res = { data: {} }
  if (row?.id) {
    res = await getToInfraredApi(row?.id || null)
  }
  // 重置表单
  setItemsOptions()
  const params = {
    title,
    width: 580,
    isEdit: type !== 3,
    itemsOptions: itemsOptions,
    model: type == 1 ? {} : res.data,
    api: type == 1 ? addToInfraredApi : updateToInfraredApi,
    getTableList: proTable.value?.getTableList
  }
  formDialogRef.value?.openDialog(params)
}

// 表格配置项
const columns = reactive<ColumnProps<any>[]>([
  { type: 'selection', fixed: 'left', width: 70 },
  { prop: 'id', label: '主键ID', width: 180 },
  {
    prop: 'name',
    label: '任务名称',
    search: {
      el: 'input'
    },
    width: 150
  },
  {
    prop: 'status',
    label: '任务状态',
    search: {
      el: 'select'
    },
    tag: true,
    enum: statusEnums,
    width: 150
  },
  {
    prop: 'startTime',
    label: '开始时间',
    width: 180
  },
  {
    prop: 'endTime',
    label: '结束时间',
    width: 180
  },
  {
    prop: 'costSecond',
    label: '耗时',
    width: 120
  },
  {
    prop: 'log',
    label: '日志',
    width: 120
  },
  {
    prop: 'outputPath',
    label: '输出路径',
    width: 120
  },
  {
    prop: 'remarks',
    label: '备注',
    search: {
      el: 'input'
    },
    width: 120
  },
  { prop: 'operation', label: '操作', width: 230, fixed: 'right' }
])
// 表单配置项
let itemsOptions: ProForm.ItemsOptions[] = []
const setItemsOptions = () => {
  itemsOptions = [
    {
      label: '任务名称',
      prop: 'name',
      rules: [{ required: true, message: '任务名称不能为空', trigger: 'blur' }],
      compOptions: {
        placeholder: '请输入任务名称'
      }
    },
    {
      label: '上传图片集',
      prop: 'inputOssId',
      rules: [{ required: true, message: '图片集不能为空', trigger: 'blur' }],
      compOptions: {
        elTagName: 'file-upload',
        fileSize: 4096,
        fileType: ['zip'],
        placeholder: '请上传图片集'
      }
    },
    {
      label: '备注',
      prop: 'remarks',
      rules: [],
      compOptions: {
        placeholder: '请输入备注'
      }
    }
  ]
}
</script>
