<!-- 授权代理委托书详情 --> <script name="ReviewNoticeDetail" lang="ts" setup> import { ElMessage, ElMessageBox, dayjs } from 'element-plus' import type{ ICustomerNoticeInfo } from './customer-notice' import useUserStore from '@/store/modules/user' import { saveReviewNotice, updateReviewNotice } from '@/api/resource/reviewNotice' import type { IDictType } from '@/commonInterface/resource-interface' import { getDictByCode } from '@/api/system/dict' import FilterSysUser from '@/views/resource/person/register/filterSysUser.vue' // 从路由中传过来的参数 const type = ref<string>('') const id = ref<string>('') const userInfo = useUserStore() const route = useRoute() const router = useRouter() const title = ref('') // 关键字段是否可以编辑 const keyFieldsDisable = ref<boolean>(true) const noticeFormRef = ref() const refFilterDialog = ref() const noticeInfo = ref<ICustomerNoticeInfo>({ id: '', customerId: '', customerName: '', deptId: '', labCode: '', labCodeName: '', noticeUserId: '', noticeUserName: '', noticeNo: '', noticeName: '检测结果复查通知单', submitDate: '', deviceName: '', deviceModel: '', deviceNo: '', returnDate: '', noticeDate: '', createUserId: '', createUserName: '', createTime: '', }) const noticeFormRules = ref({ labCode: [{ required: true, message: '实验室代码不能为空,请选择', trigger: ['change', 'blur'] }], deptId: [{ required: true, message: '委托单位不能为空,请选择', trigger: ['change', 'blur'] }], submitDate: [{ required: true, message: '送检日期不能为空,请选择', trigger: 'blur' }], deviceName: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }], deviceNo: [{ required: true, message: '设备编号不能为空', trigger: 'blur' }], deviceModel: [{ required: true, message: '设备型号不能为空', trigger: 'blur' }], returnDate: [{ required: true, message: '寄回日期不能为空', trigger: 'blur' }], noticeDate: [{ required: true, message: '通知日期不能为空,请选择', trigger: 'blur' }], }) // 表单验证规则 // 字典值 const labCodeDict = ref<IDictType[]>([]) // 逻辑 // 保存至草稿箱 const saveNoticeInfo = () => { noticeInfo.value.createTime = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss') // 创建时间改为提交时间 saveReviewNotice(noticeInfo.value).then((res) => { if (res.code === 200) { // 提示保存成功 ElMessage.success('保存成功') // 设置返回的委托方id和委托方编号 noticeInfo.value.noticeNo = res.data.noticeNo noticeInfo.value.id = res.data.id id.value = res.data.id type.value = 'detail' } else { // 提示失败信息 ElMessage.error(`保存失败:${res.message}`) } }) } // 编辑 const updateNoticeInfo = () => { updateReviewNotice(noticeInfo.value).then((res) => { if (res.code === 200) { // 提示保存成功 ElMessage.success('保存成功') } else { // 提示失败信息 ElMessage.error(`保存失败:${res.message}`) } }) } // 新建时保存后的处理 获取返回的id const saveButtonHandler = async () => { if (!noticeFormRef) { return } await noticeFormRef.value.validate((valid: boolean, fields: any) => { if (valid === true) { ElMessageBox.confirm( '确认保存吗?', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', }, ).then(() => { if (type.value === 'create') { saveNoticeInfo() } else if (type.value === 'update') { updateNoticeInfo() } }) } }) } // 点击 发送 按钮 const sendToCustomer = () => { refFilterDialog.value.showOrHideFilterDialog(true) } const recordSelectedHandler = (row: any) => { refFilterDialog.value.showOrHideFilterDialog(false) if (row.id !== '') { noticeInfo.value.noticeUserId = row.id noticeInfo.value.noticeUserName = row.name updateReviewNotice(noticeInfo.value).then((res) => { if (res.code === 200) { // 提示保存成功 ElMessage.success(`发送到 ${noticeInfo.value.customerName} 的 ${noticeInfo.value.noticeUserName} 成功`) } else { // 提示失败信息 ElMessage.error(`通知单发送至受检单位失败:${res.message}`) } }) } else { ElMessage.error('发送至人员不能为空,请重新选择') } } const getLabCodeDict = async () => { // 先从缓存中获取 if (sessionStorage.getItem('bizLabCode') === null || sessionStorage.getItem('bizLabCode') === undefined) { // 缓存中没有则调用接口查询 await getDictByCode('bizLabCode').then((res) => { if (res.code === 200) { labCodeDict.value = res.data sessionStorage.setItem('bizLabCode', JSON.stringify(labCodeDict.value)) // 放到缓存中 } }) } else { labCodeDict.value = JSON.parse(sessionStorage.getItem('bizLabCode')!) } } // 关闭 const resetForm = () => { sessionStorage.removeItem('reviewNoticeInfo') // 返回列表时 将缓存中的数据删除 router.go(-1) } const initDialog = (params: any) => { // 从路由中获取参数 type.value = params.type id.value = params.id !== undefined ? params.id : '' switch (params.type) { case 'create' : title.value = '检测结果复查通知单(新增)' sessionStorage.removeItem('reviewNoticeInfo') noticeInfo.value.createUserId = userInfo.id noticeInfo.value.createUserName = userInfo.name noticeInfo.value.createTime = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss') // 新建时组别代码和实验室代码可以编辑 keyFieldsDisable.value = false break case 'update': title.value = '检测结果复查通知单(编辑)' noticeInfo.value = JSON.parse(sessionStorage.getItem('reviewNoticeInfo')!) break case 'detail': title.value = '检测结果复查通知单(详情)' id.value = params.id noticeInfo.value = JSON.parse(sessionStorage.getItem('reviewNoticeInfo')!) keyFieldsDisable.value = true break default: title.value = '' keyFieldsDisable.value = true break } } const initDict = () => { getLabCodeDict() } // 监听 显示中文 watch(() => noticeInfo.value.labCode, (newVal) => { labCodeDict.value = JSON.parse(sessionStorage.getItem('bizLabCode')!) if (labCodeDict.value.length > 0) { const targetList = labCodeDict.value.filter(item => item.value === newVal) if (targetList.length > 0) { noticeInfo.value.labCodeName = targetList[0].name } else { noticeInfo.value.labCodeName = '' } } }) onMounted(() => { initDict() initDialog(route.query) }) </script> <template> <app-container> <el-form ref="noticeFormRef" :model="noticeInfo" :rules="noticeFormRules" label-position="right" label-width="110px" border stripe> <detail-page :title="`${title}`"> <template #btns> <template v-if="type === 'detail'"> <el-button type="primary" @click="sendToCustomer"> 发送给受检单位 </el-button> <el-button type="primary" @click="printToWord"> 导出Word </el-button> <el-button type="primary" @click="printToPDF"> 导出PDF </el-button> <el-button type="primary" @click="printNotice"> 打印 </el-button> </template> <el-button v-else type="primary" @click="saveButtonHandler"> 保存 </el-button> <el-button type="info" @click="resetForm()"> 关闭 </el-button> </template> <el-row :gutter="24"> <!-- 第一行 第一列 --> <el-col :span="6"> <el-form-item label="实验室代码" prop="labCode"> <el-select v-model="noticeInfo.labCode" placeholder="请选择实验室代码" :disabled="keyFieldsDisable" style="width: 100%;"> <el-option v-for="dict in labCodeDict" :key="dict.id" :label="dict.name" :value="dict.value" /> </el-select> <el-input v-model="noticeInfo.labCodeName" type="hidden" /> </el-form-item> <el-form-item label="创建时间"> <el-input v-model="noticeInfo.createTime" :readonly="true" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="通知单编号"> <el-input v-model="noticeInfo.noticeNo" placeholder="通知单编号,保存后自动生成" :disabled="true" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="通知单名称"> <el-input v-model="noticeInfo.noticeName" :readonly="true" :disabled="true" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="创建人"> <el-input v-model="noticeInfo.createUserId" type="hidden" /> <el-input v-model="noticeInfo.createUserName" :readonly="true" /> </el-form-item> </el-col> </el-row> </detail-page> <detail-page style="margin-top: 20px;" title="样表"> <el-row :gutter="24"> <el-col :span="6"> <el-form-item label="单位" prop="deptId"> <dept-select v-model="noticeInfo.deptId" placeholder="委托单位" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> <el-form-item label="送检日期" prop="submitDate"> <el-date-picker v-model="noticeInfo.submitDate" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择送检时间" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="设备名称" prop="deviceName"> <el-input v-model="noticeInfo.deviceName" placeholder="设备名称" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> <el-form-item label="寄回时间" prop="returnDate"> <el-date-picker v-model="noticeInfo.returnDate" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择寄回时间" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="设备型号" prop="deviceModel"> <el-input v-model="noticeInfo.deviceModel" placeholder="设备型号" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> <el-form-item label="设备编号" prop="deviceNo"> <el-input v-model="noticeInfo.deviceNo" placeholder="设备编号" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="通知日期" prop="noticeDate"> <el-date-picker v-model="noticeInfo.noticeDate" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" placeholder="请选择通知日期" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> </el-col> </el-row> </detail-page> </el-form> <filter-sys-user ref="refFilterDialog" @record-selected="recordSelectedHandler" /> </app-container> </template>