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

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

  <!-- 列表 -->
  <ContentWrap>
    <Table :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,$index }">
        <ButtonBase :Butttondata="butttondata(row,$index)" @button-base-click="buttonTableClick($event,row)" />
      </template>
    </Table>
  </ContentWrap>

  <!-- 表单弹窗：添加/修改 -->
  <BasicForm ref="basicFormRef" @success="formsSuccess" :rules="CustomerStatementMainRules"
    :formAllSchemas="CustomerStatementMain.allSchemas" :apiUpdate="CustomerStatementMainApi.updateCustomerStatementMain"
    :apiCreate="CustomerStatementMainApi.createCustomerStatementMain" @searchTableSuccess="searchTableSuccess"
    :isBusiness="false" />

  <!-- 详情 -->
  <!-- <Detail ref="detailRef" :isBasic="true" :allSchemas="CustomerStatementMain.allSchemas" /> -->
  <!-- 详情 -->
  <Detail
    ref="detailRef" 
    :isBasic="false" 
    :allSchemas="CustomerStatementMain.allSchemas"
    :detailAllSchemas="DetailAllSchemas"
    :apiPage="apiPage"
    :tabsExtend="tabsExtend"
    :tabs="[{
      label: '明细',
      prop: 'Detail'
    },{
      label: '对账差异',
      prop: 'Reconciliation'
    },{
      label: '模具分摊对账单',
      prop: 'ShareReconciliation'
    }]"
    :otherHeadButttonData="otherHeadButttonData"
    :detailButtonIsShowAdd="false"
    :detailButtonIsShowEdit="false"
    :detailButtonIsShowDelete="false"
    @changeTabs="changeTabs"
    :tableObjectExtend="tableObjectExtend"
    @buttonBaseClick="detailButtonBaseClick"
  >
    <template #qty="{row}">
      <span :style="{color:row.qty>0?'red':row.qty<0?'#409eff':'#000'}">{{ row.qty }}</span>
    </template>
    <template #amount="{row}" v-if="tabCurrent.prop == 'ShareReconciliation'">
      <div style="display: flex;align-items: center;">
        <span style="margin-right:6px">{{ row.amount }}</span>
        <Icon icon="ep:edit" color="#409eff" @click="openDetailForm(row)"/>
      </div>
    </template>
  </Detail>
  <!-- 导入 -->
  <ImportCustomerStatementForm ref="importFormRef" url="/wms/customer-statement-main/import" :importTemplateData="importTemplateData" @success="importSuccess" />
</template>

<script setup lang="ts">
import download from '@/utils/download'
import { CustomerStatementMain, CustomerStatementMainRules,CustomerStatementDetail,CustomerStatementDetailRules,CustomerStatementReconciliation,CustomerStatementShareReconciliation} from './customerStatementMain.data'
import * as CustomerStatementMainApi from '@/api/wms/customerStatementMain'
import * as CustomerStatementDetailApi from '@/api/wms/customerStatementDetail'
import * as defaultButtons from '@/utils/disposition/defaultButtons'
import TableHead from '@/components/TableHead/src/TableHead.vue'
import ImportCustomerStatementForm from '@/components/ImportForm/src/ImportCustomerStatementForm.vue'
import Detail from '@/components/Detail/src/Detail.vue'

defineOptions({ name: 'CustomerStatementMain' })

const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化

const route = useRoute() // 路由信息
const routeName = ref()
routeName.value = route.name
const tableColumns = ref(CustomerStatementMain.allSchemas.tableColumns)

const apiPage = ref(CustomerStatementDetailApi.getCustomerStatementDetailPage)
const DetailAllSchemas = ref(CustomerStatementDetail.allSchemas)

const tabsExtend = ref(false)
const tableObjectExtend = ref()
const otherHeadButttonData = ref()

// 查询页面返回
const searchTableSuccess = (formField, searchField, val, formRef) => {
  nextTick(() => {
    const setV = {}
    setV[formField] = val[0][searchField]
    formRef.setValues(setV)
  })
}

// 字段设置 更新主列表字段
const updataTableColumns = (val) => {
  tableColumns.value = val
}

const { tableObject, tableMethods } = useTable({
  getListApi: CustomerStatementMainApi.getCustomerStatementMainPage // 分页接口
})

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

// 列表头部按钮
const HeadButttondata = [
  //defaultButtons.defaultAddBtn({hasPermi:'wms:customerStatementMain:create'}), // 新增
  //defaultButtons.defaultImportBtn({hasPermi:'wms:customerStatementMain:import'}), // 导入
  //defaultButtons.defaultExportBtn({hasPermi:'wms:customerStatementMain:export'}), // 导出
  defaultButtons.defaultImportBtn(null), // 导入
  defaultButtons.defaultExportBtn(null), // 导出
  defaultButtons.defaultFreshBtn(null), // 刷新
  defaultButtons.defaultFilterBtn(null), // 筛选
  defaultButtons.defaultSetBtn(null), // 设置
  // {
  //   label: '自定义扩展按钮',
  //   name: 'zdy',
  //   hide: false,
  //   type: 'primary',
  //   icon: 'Select',
  //   color: ''
  // },
]

// 头部按钮事件
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 butttondata = (row, $index) => {
  const findIndex = row['masterId'] ? tableObject.tableList.findIndex(item => item['masterId'] == row['masterId']) : -1
  if (findIndex > -1 && findIndex < $index) {
    return []
  }
  return [
    // defaultButtons.mainListEditBtn({hasPermi:'wms:customerStatementMain:update'}), // 编辑
    // defaultButtons.mainListDeleteBtn({hasPermi:'wms:customerStatementMain:delete'}), // 删除
    { 
      label: t('重新比对'),
      name: 'rematch',
      hide: isShowMainButton(row, ['2']),
      type: 'primary',
      icon: '',
      color: '',
      hasPermi: '',
      link: true // 文本展现按钮
    },
    {
      label: t('确认对比结果'),
      name: 'confirmationContrast',
      hide: isShowMainButton(row, ['2']),
      type: 'primary',
      icon: '',
      color: '',
      hasPermi: '',
      link: true // 文本展现按钮
    },
    defaultButtons.mainSendBackBtn({ hide: isShowMainButton(row, ['3','4','5']) }), // 退回
    //defaultButtons.mainListCancelBtn({ hide: isShowMainButton(row, ['2','3','4','5']), hasPermi: 'wms:purchase-plan-main:update' }), // 作废
    defaultButtons.mainListCancelBtn({ hide: isShowMainButton(row, ['2','3','4','5'])}), // 作废
    {
      label: t('导入'),
      name: 'import',
      hide: isShowMainButton(row, ['3','4']),
      type: 'warning',
      color: '',
      hasPermi: '',
      link: true // 文本展现按钮
    },

  ]
}

// 列表-操作按钮事件
const buttonTableClick = async (val, row) => {
  if (val == 'rematch') { //重新比对
    tapRematch(row.id);
  } else if (val == 'confirmationContrast') { // 确认对比结果
    tapConfirmationContrast(row.id)
  }else if (val == 'sendBack') { // 退回
    tapSendBack(row.id)
  }else if (val == 'cancel') { // 作废
    tapCancel(row.id)
  }else if (val == 'import') { // 导入
    handleDelete(row.id)
  }
}

/** 添加/修改操作 */
const basicFormRef = ref()
const openForm = (type: string, row?: any) => {
  basicFormRef.value.open(type, row)
}

// form表单提交
const formsSuccess = async (formType, data) => {
  var isHave = CustomerStatementMain.allSchemas.formSchema.some(function (item) {
    return item.field === 'activeTime' || item.field === 'expireTime';
  });
  if (isHave) {
    if (data.activeTime && data.expireTime && data.activeTime >= data.expireTime) {
      message.error('失效时间要大于生效时间')
      return;
    }
  }
  if (data.activeTime == 0) data.activeTime = null;
  if (data.expireTime == 0) data.expireTime = null;
  if (formType === 'create') {
    await CustomerStatementMainApi.createCustomerStatementMain(data)
    message.success(t('common.createSuccess'))
  } else {
    await CustomerStatementMainApi.updateCustomerStatementMain(data)
    message.success(t('common.updateSuccess'))
  }
  basicFormRef.value.dialogVisible = false
  getList()
}

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

/** 删除按钮操作 */
const handleDelete = async (id: number) => {
  try {
    // 删除的二次确认
    await message.delConfirm()
    // 发起删除
    await CustomerStatementMainApi.deleteCustomerStatementMain(id)
    message.success(t('common.delSuccess'))
    // 刷新列表
    await getList()
  } catch { }
}

/** 导出按钮操作 */
const exportLoading = ref(false) // 导出的加载中
const handleExport = async () => {
  try {
    // 导出的二次确认
    await message.exportConfirm()
    // 发起导出
    exportLoading.value = true
    const data = await CustomerStatementMainApi.exportCustomerStatementMain(tableObject.params)
    download.excel(data, '客户对账单主信息表（WMS）.xlsx')
  } catch {
  } finally {
    exportLoading.value = false
  }
}

/** 导入 */
const importFormRef = ref()
const handleImport = () => {
  importFormRef.value.open()
}
// 导入附件弹窗所需的参数
const importTemplateData = reactive({
  templateUrl: '',
  templateTitle: '客户对账单导入模版.xlsx'
})
// 导入成功之后
const importSuccess = () => {
  getList()
}

// 筛选提交
const searchFormClick = (searchData) => {
  tableObject.params = {
    isSearch: true,
    filters: searchData.filters
  }
  getList() // 刷新当前列表
}

/** 初始化 **/
onMounted(async () => {
  getList()
  importTemplateData.templateUrl = await CustomerStatementMainApi.importTemplate()
})
//点击重新比对方法
const tapRematch = async (id:number) => {
  try {
    // 确认
    await message.confirm('是否重新比对')
    await CustomerStatementMainApi.recontrast(id);
    // 发起导出
    //exportLoading.value = true
  } catch {

  } finally {
    // 刷新列表
    await getList()
  }
}

//点击确认对比方法
const tapConfirmationContrast = async (id:number) => {
  try {
    await message.confirm('是否确认对比结果')
    await CustomerStatementMainApi.confirmationContrast(id);
    // 发起导出
    //exportLoading.value = true
  } catch {

  } finally {
    // 刷新列表
    await getList()
  }
}

//点击退回方法
const tapSendBack = async (id:number) => {
  try {
    await message.confirm('是否退回')
    await CustomerStatementMainApi.sendBack(id);
    // 发起导出
    //exportLoading.value = true
  } catch {

  } finally {
    // 刷新列表
    await getList()
  }
}

//点击作废方法
const tapCancel = async (id:number) => {
  try {
    await message.confirm('是否作废')
    await CustomerStatementMainApi.nodeAbrogate(id);
    // 发起导出
    //exportLoading.value = true
  } catch {

  } finally {
    // 刷新列表
    await getList()
  }
}

  // 根据状态返回该按钮是否显示
  const isShowMainButton = (row, val) => {
    if (val.indexOf(row.status) > -1) {
      return false
    } else {
      return true
    }
}
const tabCurrent = ref({})
const changeTabs = async (item) => {
  tabCurrent.value = item
  if (item.prop == 'Detail') {
    // 点击明细按钮
    tabsExtend.value = true
    // 当前物料代码作为条件
    tableObjectExtend.value = [{
      key: 'masterId',
      value: chooseRow.value.id
    }]
    apiPage.value = CustomerStatementDetailApi.getCustomerStatementDetailPage
    DetailAllSchemas.value = CustomerStatementDetail.allSchemas
     otherHeadButttonData.value = [{
        label: t(`ts.导出`).replace('ts.', ''),
        name: 'exportDetail',
        hide: false,
        type: 'success',
        icon: 'ep:download',
        color: '',
        hasPermi: ''
      }]
  } else  if (item.prop == 'Reconciliation') {
    // 点击对账差异按钮
    tabsExtend.value = true
    // 当前物料代码作为条件
    tableObjectExtend.value = [{
      key: 'masterId',
      value: chooseRow.value.id
    }]
    DetailAllSchemas.value = CustomerStatementReconciliation.allSchemas
    apiPage.value = CustomerStatementMainApi.getCustomerStatementMainPage
    otherHeadButttonData.value = [
      {
        label: t(`ts.导出`).replace('ts.', ''),
        name: 'exportReconciliation',
        hide: false,
        type: 'success',
        icon: 'ep:download',
        color: '',
        hasPermi: ''
      },
      {
        label:'重新对比',
        name: 'againContrast',
        hide: false,
        type: 'primary',
        color: '',
        float:'left',
        hasPermi: ''
      },{
        label: t('ts.确认对比结果'),
        name: 'confirmResults',
        hide: false,
        type: 'primary',
        color: '',
        float:'left',
        hasPermi: ''
      }]
  } else if (item.prop == 'ShareReconciliation') {
    // 点击模具分摊对账单按钮
    tabsExtend.value = true
    // 当前物料代码作为条件
    tableObjectExtend.value = [{
      key: 'masterId',
      value: chooseRow.value.id
    }]
    apiPage.value = CustomerStatementDetailApi.getCustomerStatementDetailPage
    DetailAllSchemas.value = CustomerStatementShareReconciliation.allSchemas
    otherHeadButttonData.value = [
       {
        label: t(`ts.导出`).replace('ts.', ''),
        name: 'exportConfirmShareMoney',
        hide: false,
        type: 'success',
        icon: 'ep:download',
        color: '',
        hasPermi: ''
      },
      {
        label: t('ts.确认分摊金额'),
        name: 'confirmShareMoney',
        hide: false,
        type: 'primary',
        color: '',
        float:'left',
        hasPermi: ''
      }]
  } else{
    tableObjectExtend.value = []
    tabsExtend.value = false
    apiPage.value = ''
    otherHeadButttonData.value = []
  }
}
// 点击子表按钮事件
const detailButtonBaseClick = (val, item) => {
  if (val == 'exportReconciliation') {
    // 子表导出对账差异
  }else if (val == 'againContrast') {
    // 重新对比
  }else if (val == 'confirmResults') {
    // 确认对比结果
  }else if (val == 'exportConfirmShareMoney') {
    //  子表导出模具分摊对账单
  }else if (val == 'confirmShareMoney') {
    // 确认分摊金额
  }
}
// 模具分摊对账单修改进屋金额
const openDetailForm = (row) => {
  detailRef.value.openForm('update', row)
}
</script>
