<template>
  <ContentWrap>
    <!-- 搜索工作栏 -->
    <Search :schema="InspectionRecordMain.allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
  </ContentWrap>

  <!-- 列表头部 -->
  <TableHead :HeadButttondata="HeadButttondata" @button-base-click="buttonBaseClick" :routeName="routeName"
    @updataTableColumns="updataTableColumns" @searchFormClick="searchFormClick"
    :allSchemas="InspectionRecordMain.allSchemas" />

  <!-- 列表 -->
  <ContentWrap>
    <Table v-clientTable :columns="tableColumns" :data="tableObject.tableList" :loading="tableObject.loading" :pagination="{
        total: tableObject.total
      }" v-model:pageSize="tableObject.pageSize" v-model:currentPage="tableObject.currentPage"
      v-model:sort="tableObject.sort">
      <template #number="{row}">
        <el-button type="primary" link @click="openDetail(row, '单据号', row.number)">
          <span>{{ row.number }}</span>
        </el-button>
      </template>
      <template #action="{ row }">
        <ButtonBase :Butttondata="butttondata(row)" @button-base-click="buttonTableClick($event,row)" />
      </template>
    </Table>
  </ContentWrap>

  <!-- 新增  -->
     <AddForm
    ref="basicFormRef"
    basicFormWidth="80"
    :formAllSchemasFeatures="InspectionTemplateFeatures.allSchemas"
    :formAllSchemasProcess="InspectionTemplateProcess.allSchemas"
    :formAllSchemasMain="InspectionTemplateMain.allSchemas"
    :rules="InspectionTemplateRules"
    @submitForm="submitForm"
  />

   <Detail
    ref="detailRef" :isBasic="false" :allSchemas="InspectionRecordMain.allSchemas"
    :detailAllSchemas="InspectionRecordDetail.allSchemas" :detailAllSchemasRules="InspectionRecordDetailRules"
    :apiCreate="InspectionRecordDetailApi.createInspectionRecordDetail"
    :apiUpdate="InspectionRecordDetailApi.updateInspectionRecordDetail"
    :apiPage="InspectionRecordDetailApi.getInspectionRecordDetailPage"
    :apiDelete="InspectionRecordDetailApi.deleteInspectionRecordDetail" @searchTableSuccessDetail="searchTableSuccessDetail"
    :isShowAddBtn="false" :detailButtonIsShow="true"
  /> 
  <!-- 包装信息 --> <ListTable ref="listTableRef" titleName="包装信息" :allSchemas="InspectionRecordMain.allSchemas"
    :detailAllSchemas="InspectionRecordPackage.allSchemas" :detailAllSchemasRules="InspectionRecordPackageRules"
    :list="list"/>
</template>

<script setup lang="ts">
  import download from '@/utils/download'
  import { InspectionRecordMain, InspectionRecordMainRules, InspectionRecordDetail, InspectionRecordDetailRules,InspectionRecordPackage, InspectionRecordPackageRules} from './inspectionRecordFirstMain.data'
  // import { InspectionJobPackage,InspectionJobPackageRules} from '../inspectionJob/inspectionJobMain.data'
  import * as InspectionRecordMainApi from '@/api/qms/inspectionRecord/inspectionRecordMain'
  import * as InspectionRecordDetailApi from '@/api/qms/inspectionRecord/inspectionRecordDetail'
  import * as defaultButtons from '@/utils/disposition/defaultButtons'
  import ListTable from '@/components/ListTable/src/ListTable.vue'
  import TableHead from '@/components/TableHead/src/TableHead.vue'
  import AddForm from './addForm.vue'
import Detail from './detail.vue'

import { InspectionTemplateMain,InspectionTemplateProcess,InspectionTemplateFeatures,InspectionTemplateRules } from '../inspectionTemplate/inspectionTemplate.data'


import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'

  // 采购订单
  defineOptions({ name: 'InspectionRecordMain' })

  const message = useMessage() // 消息弹窗
  const { t } = useI18n() // 国际化
  const route = useRoute() // 路由信息
  const routeName = ref()
  routeName.value = route.name
  const tableColumns = ref(InspectionRecordMain.allSchemas.tableColumns)
  if(routeName.value=='InspectRecordMain'){
    tableColumns.value = tableColumns.value.filter(item=>{
      return item.label!='操作'
    })
  }
  // 字段设置 更新主列表字段
  const updataTableColumns = (val) => {
    if(routeName.value=='InspectRecordMain'){
      tableColumns.value = val.filter(item=>{
        return item.label!='操作'
      })
    }else{
      tableColumns.value = val
    }
  }

  

  // 子表新增的时候选择表格之后需要会显得字段
  const { tableObject, tableMethods } = useTable({
    getListApi: InspectionRecordMainApi.getInspectionRecordMainPage // 分页接口
  })

  // 获得表格的各种操作
  const { getList, setSearchParams } = tableMethods

  // 列表头部按钮
  let HeadButttondata = [
    defaultButtons.defaultAddBtn(null), // 新增
    defaultButtons.defaultExportBtn(null), // 导出
    defaultButtons.defaultFreshBtn(null), // 刷新
    defaultButtons.defaultFilterBtn(null), // 筛选
    defaultButtons.defaultSetBtn(null), // 设置
]

// 头部按钮事件
const buttonBaseClick = (val, item) => {
    if (val == 'add') { // 新增
      openForm('create')
    } else if (val == 'import') { // 导入
      handleImport()
    } else if (val == 'export') { // 导出
      handleExport()
    } else if (val == 'refresh') { // 刷新
      getList()
    } else if (val == 'filtrate') { // 筛选
    } else { // 其他按钮
      console.log('其他按钮', item)
    }
  }

  const isShowMainButton = (row, val) => {
    if(!row.callbackRequestNumber) {//callbackRequestNumber为空是手工创建订单,不需要使用决策和发布
      return true;
    }
    if(row.useDecision) {
      return row.isPublished
    } else {
      return val ? true : false
    }
  }

  // 列表-操作按钮
  const butttondata = (row) => {
    return [
    defaultButtons.mainListEditBtn({hasPermi: 'wms:inspection-recode-first-main:update' }), // 编辑
      defaultButtons.mainListDeleteBtn({hasPermi: 'wms:inspection-recode-first-main:delete' }), // 删除
      defaultButtons.mainListOrderPubBtn({ hide: isShowMainButton(row, 'publish'), hasPermi:'qms:inspection-recode-first-main:pub'}), // 发布
    ]
  }

  const listTableRef = ref()
  const list = ref([])
  const useDecisionList =  getStrDictOptions(DICT_TYPE.USAGE_DECISION)
  // const useDecisionList = InspectionRecordMain.allSchemas.formSchema.filter(item=>item.field == "useDecision")
  // 列表-操作按钮事件
  const buttonTableClick = async (val, row) => {
    if (val == 'edit') { // 编辑
      openForm('update', row)
    }else if (val == 'delete') { // 删除
      handleDelete(row.id)
    }else if (val == 'mainOrderPub') { //发布
      handleOrderPub(row)
    }
  }
 /** 添加/修改操作 */
  const basicFormRef = ref()
  const openForm = async (type : string, row ?: number) => {
    tableData.value = [] // 重置明细数据
    basicFormRef.value.open(type, row)
  }

  /** 详情操作 */
  const detailRef = ref()
  const openDetail = (row : any, titleName : any, titleValue : any) => {
    detailRef.value.openDetail(row, titleName, titleValue, 'basicInspectionRecordMain')
  }

  /** 删除按钮操作 */
  const handleDelete = async (id : number) => {
    try {
      // 删除的二次确认
      await message.delConfirm()
      // 发起删除
      await InspectionRecordMainApi.deleteInspectionRecordMain(id)
      message.success(t('common.delSuccess'))
      // 刷新列表
      await getList()
    } catch { }
  }
  /** 发布按钮操作 */
  const handleOrderPub = async (row : object) => {
    try {
      // 删除的二次确认
      await message.confirm(t('common.confirmPublish'))
      // 发起删除
      await InspectionRecordMainApi.publishInspectionRecordMain(row.id)
      message.success(t('common.publishSuccess'))
      // 刷新列表
      await getList()
    } catch { }
  }

  

  /** 导出按钮操作 */
  const exportLoading = ref(false) // 导出的加载中
  const handleExport = async () => {
    try {
      // 导出的二次确认
      await message.exportConfirm()
      // 发起导出
      exportLoading.value = true
      const data = await InspectionRecordMainApi.exportInspectionRecordMain(tableObject.params)
      download.excel(data, '备件申领记录主.xlsx')
    } catch {
    } finally {
      exportLoading.value = false
    }
  }

  /**
    * tableForm方法
  */
  const tableFormKeys = {}
  InspectionRecordDetail.allSchemas.tableFormColumns.forEach(item => {
    tableFormKeys[item.field] = item.default ? item.default : ''
  })
  const tableData = ref([])

//   // 主子数据 提交
  const submitForm = async (formType, data) => {
    // data.subList = tableData.value // 拼接子表数据参数
    try {
      if (formType === 'create') {
        await InspectionRecordMainApi.createInspectionRecordMain(data)
        message.success(t('common.createSuccess'))
      }else {
        await InspectionRecordMainApi.updateInspectionRecordMain(data)
        message.success(t('common.updateSuccess'))
      }
      basicFormRef.value.dialogVisible = false
      // 刷新当前列表
      getList()
    } finally {
      basicFormRef.value.formLoading = false
    }
  }
  // 筛选提交
const searchFormClick = (searchData) => {
  searchData.filters.push({
      action: "==",
      column: "firstInspectionAdded",
      value: "TRUE" 
    })
    tableObject.params = {
      isSearch: true,
      filters: searchData.filters
    }
    getList() // 刷新当前列表
  }

  /** 初始化 **/
onMounted(async () => {
    tableObject.params = {
      available: true,
      firstInspectionAdded:'TRUE'
    }
    getList()
  })
</script>