<!-- 溯源证书管理详情 -->
<script lang="ts" setup name="EquipmentSourceCertDetail">
import { ref } from 'vue'
import dayjs from 'dayjs'
import { ElLoading, ElMessage } from 'element-plus'
import type { IForm } from '../cert/cert-interface'
import selectApproveList from './dialog/selectFieldTestApprove.vue'
import selectSourceDialog from '@/views/equipement/source/plan/dialog/selectSourceDialog.vue'
import { getStaffList } from '@/api/resource/register'
import useUserStore from '@/store/modules/user'
import { getDictByCode } from '@/api/system/dict'
import type { dictType } from '@/global'
import { useCheckList } from '@/commonMethods/useCheckList'
import { getInfo } from '@/api/business/fieldTest/approve'
import { UploadFile } from '@/api/file'
import SelectEquipmentDialog from '@/views/business/fieldTest/approve/dialog/selectEquipmentDialog.vue'
import { getInfo as getEquipmentDetail } from '@/api/equipment/info/book'
import { addSourceCertList, updateSourceCert } from '@/api/equipment/source/cert'
// import type { IOptions } from '@/views/device/standardEquipment/standard_interface'
const user = useUserStore() // 用户信息
const textMap: { [key: string]: string } = {
edit: '编辑',
add: '新建',
detail: '详情',
}// 字典
const $router = useRouter() // 关闭页面使用
const $route = useRoute() // 路由参数
const pageType = ref('add') // 页面类型: add, edit, detail
const infoId = ref('') // 列表id
const ruleFormRef = ref() // 表单ref
const form = ref<IForm>({
certificateName: '', // 证书名称
certificateNo: '', // 证书编号
equipmentId: '', // 设备id
equipmentName: '', // 设备名称
equipmentNo: '', // 设备编号
traceCompany: '', // 溯源单位名
traceDate: '', // 检定日期
validDate: '', // 证书有效期
meterIdentify: '', // 计量标识(字典code)
meterIdentifyName: '', // 计量标识(字典value)
remark: '', // 备注
certificateFile: '', // 证书报告附件
})
const list = ref([]) // 记录结果表
// 校验规则
const formRules = ref({
certificateNo: [{ required: true, message: '证书编号不能为空', trigger: ['blur', 'change'] }],
certificateName: [{ required: true, message: '证书名称不能为空', trigger: ['blur', 'change'] }],
equipmentNo: [{ required: true, message: '统一编号不能为空', trigger: ['blur', 'change'] }],
equipmentName: [{ required: true, message: '设备名称不能为空', trigger: ['blur', 'change'] }],
traceCompany: [{ required: true, message: '溯源单位不能为空', trigger: ['blur', 'change'] }],
traceDate: [{ required: true, message: '检定日期不能为空', trigger: ['blur', 'change'] }],
validDate: [{ required: true, message: '证书有效期不能为空', trigger: ['blur', 'change'] }],
meterIdentify: [{ required: true, message: '计量标识不能为空', trigger: ['blur', 'change'] }],
})
// -------------------------------------------字典------------------------------------------
const meterIdentifyDict = ref<dictType[]>([]) // 计量标识
// 获取字典值
async function getDict() {
// 计量标识
getDictByCode('bizMeterIdentify').then((response) => {
meterIdentifyDict.value = response.data
})
}
// ----------------------------------路由参数--------------------------------------------
if ($route.params && $route.params.type) {
pageType.value = $route.params.type as string
console.log(pageType.value)
if ($route.params.id) {
infoId.value = $route.params.id as string
}
}
// --------------------------------------选择设备编号-------------------------------------------------
const selectEquipmentDialogRef = ref() // 选择设备编号组件ref
// 批量添加
const selectEquipment = () => {
selectEquipmentDialogRef.value.initDialog()
}
// 确定选择设备
const confirmSelectEquipment = (val: any) => {
if (val.length) {
getEquipmentDetail({ id: val[0].id, type: '1' }).then((res) => {
form.value.equipmentId = val[0].id // 设备id
form.value.equipmentName = res.data.equipmentInfoApproval.equipmentName // 设备名称
form.value.equipmentNo = res.data.equipmentInfoApproval.equipmentNo // 统一编号
})
}
}
// --------------------------------------------选择溯源机构---------------------------------------
const selectSourceDialogRef = ref() // 选择溯源机构组件ref
// 点击选择溯源机构
const selectsupplier = () => {
selectSourceDialogRef.value.initDialog()
}
// 确定选择溯源机构
const confirmSelectedSource = (val: any) => {
form.value.traceCompany = val[0].supplierName // 溯源机构名称
}
// -------------------------------------------文件上传--------------------------------------
const fileRef = ref() // 文件上传input
const onFileChange = (event: any) => {
if (event.target.files?.length !== 0) {
// 创建formdata对象
const fd = new FormData()
fd.append('multipartFile', event.target.files[0])
const loading = ElLoading.service({
lock: true,
background: 'rgba(255, 255, 255, 0.8)',
})
UploadFile(fd).then((res) => {
if (res.code === 200) {
form.value.certificateFile = res.data[0]
// 重置当前验证
ElMessage.success('文件上传成功')
loading.close()
}
else {
ElMessage.error(res.message)
loading.close()
}
})
}
}
const upload = () => {
fileRef.value.click()
}
// -------------------------------------------------------------------------------------
// 关闭新增页面的回调
const close = () => {
$router.back()
}
// 保存
const save = () => {
ruleFormRef.value!.validate((valid: boolean) => {
if (valid) {
const loading = ElLoading.service({
lock: true,
background: 'rgba(255, 255, 255, 0.8)',
})
// 新建
if (pageType.value === 'add') { // 新建
addSourceCertList(form.value).then((res) => {
ElMessage.success('保存成功')
pageType.value = 'detail'
loading.close()
}).catch(() => {
loading.close()
})
}
// 保存
else if (pageType.value === 'edit') { // 编辑
updateSourceCert({ ...form.value, id: infoId.value }).then((res) => {
ElMessage.success('保存成功')
pageType.value = 'detail'
loading.close()
}).catch(() => {
loading.close()
})
}
}
else {
console.log('表单校验不通过')
}
})
}
onMounted(async () => {
getDict().then(() => {
if (pageType.value !== 'add') {
form.value = $route.query as any
form.value.certificateName = $route.query.certificateName as string // 证书名称
form.value.certificateNo = $route.query.certificateNo as string // 证书编号
form.value.equipmentId = $route.query.equipmentId as string // 设备id
form.value.equipmentName = $route.query.equipmentName as string // 设备名称
form.value.equipmentNo = $route.query.equipmentNo as string // 设备编号
form.value.traceCompany = $route.query.traceCompany as string // 溯源单位名
form.value.traceDate = $route.query.traceDate as string // 检定日期
form.value.validDate = $route.query.validDate as string // 证书有效期
form.value.meterIdentify = $route.query.meterIdentify as string // 计量标识(字典code)
form.value.meterIdentifyName = $route.query.meterIdentifyName as string// 计量标识(字典value)
form.value.remark = $route.query.remark as string // 备注
form.value.certificateFile = $route.query.certificateFile as string // 证书报告附件
infoId.value = $route.query.id as string// id
}
})
})
</script>
<template>
<app-container class="fieldtest-record-detail">
<detail-page :title="`溯源证书管理-${textMap[pageType]}`">
<template #btns>
<el-button v-if="pageType !== 'detail'" type="primary" @click="save">
保存
</el-button>
<!-- <el-button v-if="pageType === 'detail'" type="primary" @click="print">
打印
</el-button> -->
<el-button type="info" @click="close">
关闭
</el-button>
</template>
<el-form
ref="ruleFormRef"
:model="form"
label-width="120"
label-position="right"
:rules="formRules"
>
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="证书编号:" prop="certificateNo">
<el-input v-model="form.certificateNo" class="full-width-input" :disabled="pageType === 'detail'" :placeholder="pageType === 'detail' ? '' : '请输入证书编号'" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="证书名称:" prop="certificateName">
<el-input v-model="form.certificateName" class="full-width-input" :disabled="pageType === 'detail'" placeholder="请输入证书名称" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="统一编号:" prop="equipmentNo">
<el-input
v-model="form.equipmentNo"
:placeholder="pageType === 'detail' ? '' : '请选择统一编号'"
:class="{ 'detail-input': pageType === 'detail' }"
disabled
>
<template v-if="pageType !== 'detail'" #append>
<el-button size="small" @click="selectEquipment">
选择
</el-button>
</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="设备名称:" prop="equipmentName">
<el-input
v-model.trim="form.equipmentName"
:placeholder="pageType === 'detail' ? '' : '设备名称'"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="溯源单位:" prop="traceCompany">
<el-input
v-model="form.traceCompany"
placeholder="请选择溯源单位"
class="input"
disabled
>
<template v-if="pageType !== 'detail'" #append>
<el-button
size="small"
@click="selectsupplier"
>
选择
</el-button>
</template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="检定日期:" prop="traceDate">
<el-date-picker
v-model="form.traceDate"
type="date"
:placeholder="pageType === 'detail' ? ' ' : '请输入检定日期'"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
:disabled="pageType === 'detail'"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="证书有效期:" prop="validDate">
<el-date-picker
v-model="form.validDate"
type="date"
:placeholder="pageType === 'detail' ? ' ' : '请输入证书有效期'"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
:disabled="pageType === 'detail'"
/>
</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="pageType === 'detail'"
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">
<el-col :span="12">
<el-form-item label="备注:" prop="remark">
<el-input
v-model="form.remark"
class="full-width-input"
:placeholder="pageType === 'detail' ? ' ' : '请输入备注'"
autosize
type="textarea"
:disabled="pageType === 'detail'"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24" class="marg">
<el-col :span="24">
<el-form-item label="附件:">
<show-photo v-if="form.certificateFile" :minio-file-name="form.certificateFile" />
<span v-else-if="pageType === 'detail'">无</span>
<input v-show="pageType === ''" ref="fileRef" type="file" @change="onFileChange">
<el-button v-if="pageType !== 'detail'" id="file" type="primary" :disabled="pageType === 'detail'" :style="{ 'margin-left': form.certificateFile === '' ? '0px' : '20px' }" @click="upload">
{{ form.certificateFile === '' ? '上传' : '更换附件' }}
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</detail-page>
<!-- 选择溯源供方 -->
<select-source-dialog ref="selectSourceDialogRef" @confirm="confirmSelectedSource" />
<!-- 选择设备台账 -->
<select-equipment-dialog ref="selectEquipmentDialogRef" @confirm="confirmSelectEquipment" />
</app-container>
</template>
<style lang="scss">
.fieldtest-record-detail {
.el-table thead.is-group th.el-table__cell {
background: #f2f6ff;
}
}
</style>