Newer
Older
xc-business-system / src / views / resource / person / cert / detail.vue
<!-- 证书详情 -->
<script name="CertDetail" lang="ts" setup>
import { dayjs } from 'element-plus'
import type { IStaffVerifierDetail } from '../register/person-regitster'
import type { ICertInfo } from './cert-interface'
import { getCertDetailList } from '@/api/resource/certRemind'
import type { TableColumn } from '@/components/NormalTable/table_interface'
import FilePreviewDialog from '@/components/filePreview/filePreviewDialog.vue'
import ImagePreviewDialog from '@/components/ImagePreview/imagePreviewDialog.vue'

const type = ref<string>('')
const id = ref<string>('')

const route = useRoute()
const router = useRouter()

const refFilePreviewDlg = ref()
const refImagePreviewDlg = ref()

const loading = ref<boolean>(false)

const certInfo = ref<ICertInfo>({
  id: '',
  staffId: '',
  staffNo: '',
  staffName: '',
  gender: '',
  genderName: '',
  staffType: '',
  staffTypeName: '',
  officerNo: '',
  deptId: '',
  deptName: '',
  station: '',
  major: '',
  engageDate: '',
  certNo: '',
  certName: '',
  certType: '',
  certTypeName: '',
  grantDate: '',
  effectiveDate: '',
  grantCompany: '',
  file: '',
})
const fileList = ref<Array<string>>([])

const detailColumns = ref<Array<TableColumn>>([
  { text: '持证参数', value: 'certificateParameters', align: 'center' },
  { text: '可开展检定项工作', value: 'identifiableWork', align: 'center' },
  { text: '发证日期', value: 'certificationDate', align: 'center', width: '200' },

]) // 表头

const verifierDetailList = ref<IStaffVerifierDetail[]>([]) // 表格数据

// 逻辑
// 关闭
const resetForm = () => {
  sessionStorage.removeItem('certInfo')
  router.go(-1)
}

const gerCertParamDetailList = (verifierId: string) => {
  loading.value = true
  getCertDetailList({ id: verifierId }).then((res) => {
    if (res.code === 200) {
      verifierDetailList.value = res.data.map((item: any) => ({
        ...item,
        certificationDate: dayjs(item.grantDate).format('YYYY-MM-DD'),
      }))
    }
    loading.value = false
  }).catch(() => {
    loading.value = false
  })
}

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

const initDialog = (params: any) => {
  type.value = params.type
  id.value = params.id

  switch (params.type) {
    case 'detail':
      certInfo.value = JSON.parse(sessionStorage.getItem('certInfo')!)
      fileList.value = certInfo.value.file === '' ? [] : certInfo.value.file!.split(',')
      if (certInfo.value.certType === '1') {
        gerCertParamDetailList(certInfo.value.id!)
      }

      break
    default:

      break
  }
}

onMounted(async () => {
  initDialog(route.query)
})
</script>

<template>
  <app-container>
    <detail-page title="证书管理详情">
      <template #btns>
        <el-button type="info" @click="resetForm()">
          关闭
        </el-button>
      </template>

      <el-form ref="basicStaffFormRef" :model="certInfo" label-position="right" label-width="110px" border stripe>
        <el-row :gutter="24">
          <!-- 第一行 第一列 -->
          <el-col :span="6">
            <el-form-item label="姓名">
              <el-input v-model="certInfo.staffName" :disabled="true" />
            </el-form-item>

            <el-form-item label="工作部门">
              <el-input v-model="certInfo.deptName" :disabled="true" />
            </el-form-item>
          </el-col>

          <!-- 第一行 第二列 -->
          <el-col :span="6">
            <el-form-item label="性别">
              <el-input v-model="certInfo.genderName" :disabled="true" />
            </el-form-item>

            <el-form-item label="岗位">
              <el-input v-model="certInfo.station" :disabled="true" />
            </el-form-item>
          </el-col>

          <!-- 第一行 第三列 -->
          <el-col :span="6">
            <el-form-item label="人员类别">
              <el-input v-model="certInfo.staffTypeName" :disabled="true" />
            </el-form-item>

            <el-form-item label="从事专业">
              <el-input v-model="certInfo.major" :disabled="true" />
            </el-form-item>
          </el-col>

          <!-- 第一行 第四列 -->
          <el-col :span="6">
            <el-form-item label="军官/文职证号">
              <el-input v-model="certInfo.officerNo" :disabled="true" />
            </el-form-item>

            <el-form-item label="从事专业时间">
              <el-input v-model="certInfo.engageDate" :disabled="true" />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>

      <el-form ref="basicCertFormRef" :model="certInfo" label-position="right" label-width="110px" border stripe>
        <el-row :gutter="24">
          <!-- 第一行 第一列 -->
          <el-col :span="6">
            <el-form-item label="证书类型">
              <el-input v-model="certInfo.certTypeName" :disabled="true" />
            </el-form-item>

            <el-form-item label="有效日期">
              <el-input v-model="certInfo.effectiveDate" :disabled="true" />
            </el-form-item>
          </el-col>

          <!-- 第一行 第二列 -->
          <el-col :span="6">
            <el-form-item label="证书号">
              <el-input v-model="certInfo.certNo" :disabled="true" />
            </el-form-item>

            <el-form-item label="发放单位">
              <el-input v-model="certInfo.grantCompany" :disabled="true" />
            </el-form-item>
          </el-col>

          <!-- 第一行 第三列 -->
          <el-col :span="6">
            <el-form-item label="证书名称">
              <el-input v-model="certInfo.certName" :disabled="true" />
            </el-form-item>
          </el-col>

          <!-- 第一行 第四列 -->
          <el-col :span="6">
            <el-form-item label="发放日期">
              <el-input v-model="certInfo.grantDate" :disabled="true" />
            </el-form-item>
          </el-col>
        </el-row>

        <el-row :gutter="24">
          <el-col :span="24">
            <el-form-item label="附件">
              <template v-if="fileList.length > 0">
                <el-tag
                  v-for="file in fileList" :key="file" size="large" style="margin-right: 10px; margin-bottom: 10px; cursor: pointer;"
                  @click="openFilePreviewDialog(file)"
                >
                  {{ file }}
                </el-tag>
              </template>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>

      <el-form ref="certFormRef" label-position="right" label-width="110px" border stripe>
        <table-container v-if="certInfo.certType === '1'" v-loading="loading" title="持证参数列表" style="margin-top: 20px;">
          <!-- 表格区域 -->
          <el-table :data="verifierDetailList" :columns="detailColumns" border>
            <el-table-column align="center" label="序号" width="55" type="index" />
            <el-table-column
              v-for="item in detailColumns"
              :key="item.value"
              :prop="item.value"
              :label="item.text"
              :width="item.width"
              align="center"
            >
              <template #header>
                <span>{{ item.text }}</span>
              </template>
            </el-table-column>
          </el-table>
        </table-container>
      </el-form>
    </detail-page>

    <file-preview-dialog ref="refFilePreviewDlg" />
    <image-preview-dialog ref="refImagePreviewDlg" />
  </app-container>
</template>