Newer
Older
xc-business-system / src / views / resource / person / register / component / verifier.vue
<!-- 人员登记 人员证书 -->
<script name="RegisterVerifier" lang="ts" setup>
import { ElMessage, ElMessageBox, dayjs } from 'element-plus'
import type { IStaffVerifierInfo } from '../person-regitster'
import VerifierDialog from './verifierDialog.vue'
import FilePreviewDialog from '@/components/filePreview/filePreviewDialog.vue'
import ImagePreviewDialog from '@/components/ImagePreview/imagePreviewDialog.vue'
import type { TableColumn } from '@/components/NormalTable/table_interface'
import { delVerifierRecList, getVerifierList } from '@/api/resource/register'

const props = defineProps({
  operation: { type: String, default: '' },
  staffId: { type: String, default: '' },
})

/** ******* 授权信息表格 ********/
const verListQuery = {
  id: '',
  limit: 10,
  offset: 1,
}
const verifierColumns = ref<Array<TableColumn>>([
  { text: '证书类型', value: 'certTypeName', align: 'center', width: '160' },
  { text: '证书号', value: 'certNo', align: 'center', width: '200' },
  { text: '证书名称', value: 'certName', align: 'center' },
  { text: '发放日期', value: 'grantDate', align: 'center', width: '120' },
  { text: '有效日期', value: 'effectiveDate', align: 'center', width: '120' },
  { text: '发放单位', value: 'grantCompany', align: 'center' },
]) // 表头
const verTotal = ref<number>(0) // 数据总条数
const verifierList = ref<IStaffVerifierInfo[]>([]) // 表格数据

// 表格被选中的行
const verifierSelected = ref<IStaffVerifierInfo[]>([])

// 子组件引用
const refVerifierDialog = ref()
const refFilePreviewDlg = ref()
const refImagePreviewDlg = ref()

// 逻辑
const verMultiSelect = (e: any) => {
  verifierSelected.value = e
}

const getVerifierListByStaffId = (staffId = '') => {
  if (staffId !== '') {
    verListQuery.id = staffId
  }
  getVerifierList(verListQuery).then((res) => {
    if (res.code === 200) {
      verTotal.value = res.data.total
      verifierList.value = res.data.rows.map((item: any) => ({
        ...item,
        fileList: item.file.split(','),
        grantDate: dayjs(item.grantDate).format('YYYY-MM-DD'),
        effectiveDate: dayjs(item.effectiveDate).format('YYYY-MM-DD'),
      }))
    }
  })
}

// 表格换页
const changeVerifierPage = (val: { size?: number; page?: number }) => {
  if (val && val.size) {
    verListQuery.limit = val.size
  }
  if (val && val.page) {
    verListQuery.offset = val.page
  }
  getVerifierListByStaffId()
}

// 删除检定员信息记录
const delVerifierRecords = () => {
  if (verifierSelected.value.length === 0) {
    ElMessage.warning('请至少选择一行')
    return
  }

  ElMessageBox.confirm('是否删除检定员证书记录,此操作不可恢复', '提示', {
    confirmButtonText: '确认删除',
    cancelButtonText: '取消',
    type: 'warning',
  }).then(() => {
  // 前端界面删除
    verifierList.value = verifierList.value.filter(item => verifierSelected.value.includes(item) === false)

    // 调用后端接口进行删除
    const verIdsSelected = ref<string[]>([])
    verIdsSelected.value = verifierSelected.value.map((item: { id: string }) => item.id)
    verIdsSelected.value = verIdsSelected.value.filter(item => item !== '')
    if (verIdsSelected.value.length > 0) {
      delVerifierRecList({ ids: verIdsSelected.value }).then((res) => {
        if (res.code === 200) {
          ElMessage.success('删除检定员证书记录成功')
        }
        else {
          ElMessage.error(`删除检定员证书记录失败:${res.message}`)
        }

        getVerifierListByStaffId()
      })
    }
  })
}

const openFilePreviewDialog = (filename: string) => {
  if (filename.lastIndexOf('.pdf') > 0) {
    refFilePreviewDlg.value.initDialog(filename)
  }
  else {
    refImagePreviewDlg.value.initDialog(filename)
  }
}

// 编辑
const showEditDialog = (row: IStaffVerifierInfo, tableName: string, type = 'update') => {
  switch (tableName) {
    case 'verifier' :
      refVerifierDialog.value.initRecordData(row)

      if (type === 'update') {
        refVerifierDialog.value.showRecordDialog(true, '编辑', type)
      }
      else if (type === 'detail') {
        refVerifierDialog.value.showRecordDialog(true, '', type)
      }

      break

    default:
      break
  }
}

const addEditableRow = (tableName: string) => {
  switch (tableName) {
    case 'verifier':
      refVerifierDialog.value.showRecordDialog(true, '新增', 'create')
      break

    default:
      break
  }
}

watch(() => props.staffId, (newVal: string) => {
  verListQuery.id = newVal

  getVerifierListByStaffId()
})

defineExpose({
  getVerifierListByStaffId,
})
</script>

<template>
  <app-container>
    <el-form ref="verifierFormRef" label-position="right" label-width="110px" border stripe>
      <table-container title="人员证书">
        <template v-if="props.operation !== 'detail'" #btns-right>
          <el-button type="primary" @click="addEditableRow('verifier')">
            增加行
          </el-button>
          <el-button type="info" @click="delVerifierRecords">
            删除行
          </el-button>
        </template>

        <!-- 表格区域 -->
        <normal-table
          id="verifierTabel"
          :data="verifierList" :total="verTotal" :columns="verifierColumns"
          :query="{ limit: verListQuery.limit, offset: verListQuery.offset }"
          :is-showmulti-select="props.operation !== 'detail'"
          @change="changeVerifierPage"
          @multi-select="verMultiSelect"
        >
          <template #preColumns>
            <el-table-column label="序号" width="55" align="center">
              <template #default="scope">
                {{ (verListQuery.offset - 1) * verListQuery.limit + scope.$index + 1 }}
              </template>
            </el-table-column>
          </template>

          <template #columns>
            <el-table-column label="附件" align="center">
              <template #default="scope">
                <el-link
                  v-for="file in scope.row.fileList"
                  :key="file"
                  @click="openFilePreviewDialog(file)"
                >
                  {{ file }}
                </el-link>
              </template>
            </el-table-column>
            <el-table-column fixed="right" label="操作" align="center" width="130">
              <template #default="{ row }">
                <el-button size="small" type="primary" link @click="showEditDialog(row, 'verifier', 'detail')">
                  详情
                </el-button>
                <el-button v-if="props.operation !== 'detail'" size="small" type="primary" link @click="showEditDialog(row, 'verifier', 'update')">
                  编辑
                </el-button>
              </template>
            </el-table-column>
          </template>
        </normal-table>
      </table-container>
    </el-form>

    <verifier-dialog ref="refVerifierDialog" :staff-id="props.staffId" @record-saved="getVerifierListByStaffId" />
    <file-preview-dialog ref="refFilePreviewDlg" />
    <image-preview-dialog ref="refImagePreviewDlg" />
  </app-container>
</template>