<!-- 分包证书管理详情 -->
<script lang="ts" setup name="CertificateEdit">
import type { Ref } from 'vue'
import { ElLoading, ElMessage } from 'element-plus'
import type { FormInstance } from 'element-plus'
import { ref } from 'vue'
import type { IForm } from './certificate-interface'
import { getPhotoUrl } from '@/api/file'
import type { dictType } from '@/global'
import { printPdf } from '@/utils/printUtils'
import { getDictByCode } from '@/api/system/dict'
const $router = useRouter() // 初始化router
const $route = useRoute()
const textMap: { [key: string]: string } = {
edit: '编辑',
add: '新建',
detail: '详情',
}// 字典
const pageType = ref('add') // 页面类型: add, edit, detail
const loading = ref(false) // 表单加载状态
const infoId = ref('') // id
const form: Ref<IForm> = ref({ // 表单
certificateNo: '', // 证书号
certificateName: '', // 证书名称
sampleName: '', // 受检设备名称
model: '', // 型号
manufactureNo: '', // 出厂编号
manufacturer: '', // 生产厂家
orderNo: '', // 任务单编号
customerName: '', // 委托方
outsourcerName: '', // 检测单位名称-分包方名称
contacts: '', // 联系人
checkDate: '', // 检定(校准)日期
certificateValid: '', // 证书有效期
conclusion: '', // 检定结论
meterIdentify: '', // 计量标识
id: '', // id
certificateReportFile: '', // 证书文件
originalRecordFile: '', // 原始记录文件
})
const ruleFormRef = ref<FormInstance>() // 表单ref
// 关闭
const close = () => {
$router.back()
}
// -----------------------------------------路由参数--------------------------------
if ($route.params && $route.params.type) {
pageType.value = $route.params.type as string
if ($route.params.id) {
infoId.value = $route.params.id as string
}
}
// ------------------------------------------字典----------------------------------------------
const meterIdentifyDict = ref<dictType[]>([]) // 计量标识
/**
* 获取字典
*/
async function getDict() {
// 计量标识
const response = await getDictByCode('eqptMeterIdentify')
meterIdentifyDict.value = response.data
}
// 点击打印
const print = () => {
if (form.value.certificateReportFile.lastIndexOf('.pdf') > 0) {
const loading = ElLoading.service({
lock: true,
text: '加载文件中...',
background: 'rgba(255, 255, 255, 0.6)',
})
getPhotoUrl(form.value.certificateReportFile).then((res) => {
printPdf(res.data)
loading.close()
}).catch(() => loading.close())
}
else {
ElMessage.warning('只允许打印pdf文件,请检查文件后缀!')
}
}
onMounted(() => {
getDict().then(() => {
const row = JSON.parse($route.query.row as any)
form.value.certificateNo = row.certificateNo// 证书号
form.value.certificateName = row.certificateName// 证书名称
form.value.sampleName = row.sampleName// 受检设备名称
form.value.model = row.model// 型号
form.value.manufactureNo = row.manufactureNo// 出厂编号
form.value.manufacturer = row.manufacturer// 生产厂家
form.value.orderNo = row.orderNo// 任务单编号
form.value.customerName = row.customerName// 委托方
form.value.outsourcerName = row.outsourcerName// 检测单位名称-分包方名称
form.value.contacts = row.contacts// 联系人
form.value.checkDate = row.checkDate// 检定(校准)日期
form.value.certificateValid = row.certificateValid// 证书有效期
form.value.conclusion = row.conclusion// 检定结论
form.value.meterIdentify = row.meterIdentify// 计量标识
form.value.id = row.id// id
form.value.certificateReportFile = row.certificateReportFile// 证书文件
form.value.originalRecordFile = row.originalRecordFile// 原始记录文件
})
})
</script>
<template>
<div>
<!-- 布局 -->
<app-container>
<detail-page v-loading="loading" :title="`分包证书管理-${textMap[pageType]}`">
<template #btns>
<el-button type="info" @click="close">
关闭
</el-button>
</template>
<div id="form">
<el-form
ref="ruleFormRef"
:model="form"
:label-width="120"
label-position="right"
:rules="rules"
>
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="证书编号:" prop="certificateNo">
<el-input
v-model="form.certificateNo"
:placeholder="pageType === 'detail' ? '' : '证书编号'"
:class="{ 'detail-input': pageType === 'detail' }"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="证书名称:" prop="certificateName">
<el-input
v-model.trim="form.certificateName"
:placeholder="pageType === 'detail' ? '' : '证书名称'"
:class="{ 'detail-input': pageType === 'detail' }"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="受检设备名称:" prop="sampleName">
<el-input
v-model="form.sampleName"
:placeholder="pageType === 'detail' ? ' ' : '受检设备名称'"
:class="{ 'detail-input': pageType === 'detail' }"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="规格型号:" prop="model">
<el-input
v-model="form.model"
:placeholder="pageType === 'detail' ? ' ' : '规格型号'"
:class="{ 'detail-input': pageType === 'detail' }"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="出厂编号:" prop="manufactureNo">
<el-input
v-model="form.manufactureNo"
:placeholder="pageType === 'detail' ? ' ' : '出厂编号'"
:class="{ 'detail-input': pageType === 'detail' }"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="生产厂家:" prop="manufacturer">
<el-input
v-model="form.manufacturer"
:placeholder="pageType === 'detail' ? ' ' : '生产厂家'"
:class="{ 'detail-input': pageType === 'detail' }"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="任务单编号:" prop="orderNo">
<el-input
v-model.trim="form.orderNo"
:placeholder="pageType === 'detail' ? ' ' : '任务单编号'"
disabled
class="full-width-input"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="委托方:" prop="customerName">
<el-input
v-model.trim="form.customerName"
:placeholder="pageType === 'detail' ? ' ' : '委托方'"
disabled
class="full-width-input"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="分包方名称:" prop="outsourcerName">
<el-input
v-model.trim="form.outsourcerName"
:placeholder="pageType === 'detail' ? ' ' : '分包方名称'"
disabled
class="full-width-input"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="联系人:" prop="contacts">
<el-input
v-model.trim="form.contacts"
:placeholder="pageType === 'detail' ? ' ' : '联系人'"
disabled
class="full-width-input"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="检定日期:" prop="checkDate">
<el-date-picker
v-model="form.checkDate"
type="date"
style="width: 100%;"
:placeholder="pageType === 'detail' ? '' : '检定日期'"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="检定有效期:" prop="certificateValid">
<el-date-picker
v-model="form.certificateValid"
type="date"
style="width: 100%;"
:placeholder="pageType === 'detail' ? '' : '检定有效期'"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="检定结论:" prop="conclusion">
<el-input
v-model.trim="form.conclusion"
:placeholder="pageType === 'detail' ? ' ' : '检定结论'"
disabled
class="full-width-input"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="计量标识:" prop="meterIdentify">
<el-select
v-model="form.meterIdentify"
:placeholder="pageType === 'detail' ? ' ' : '计量标识'"
disabled
class="full-width-input"
>
<el-option v-for="item of meterIdentifyDict" :key="item.value" :label="item.name" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" class="marg">
<el-col :span="24">
<el-form-item label="证书报告:" prop="certificateReportFile">
<show-photo v-if="form.certificateReportFile" :minio-file-name="form.certificateReportFile" />
<span v-if="!form.certificateReportFile">无</span>
<el-button v-if="form.certificateReportFile" id="file" type="primary" :style="{ 'margin-left': form.certificateReportFile === '' ? '0px' : '20px' }" @click="print">
打印
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</detail-page>
</app-container>
</div>
</template>