<!-- 要求、委托书及合同评审表列表详情 --> <script name="ExamineDetail" lang="ts" setup> import { ElLoading, ElMessage, ElMessageBox, dayjs } from 'element-plus' import type { ICustomerExamineInfo, ICustomerExamineTemplate } from './customer-examine' import SaveAsTemplateDialog from './saveAsTemplateDialog.vue' import ListTemplateDialog from './listTemplateDialog.vue' import type { IDictType } from '@/commonInterface/resource-interface' import { getDictByCode } from '@/api/system/dict' import { getInfo } from '@/api/equipment/standard/book' import { deleteExamineRevoked, failUpdateExamine, getExamineDetail, refuseApproval, revokeApproval, saveExamine, submitExamine, updateDraftExamine } from '@/api/resource/examine' import ApprovalDialog from '@/views/resource/common/approvalDialog.vue' import ApprovalRecordTable from '@/components/ApprovalRecord/ApprovalRecordTable.vue' import useUserStore from '@/store/modules/user' import { SCHEDULE } from '@/utils/scheduleDict' import FilterStandard from '@/views/resource/common/filterStandard.vue' // 从路由中传过来的参数 const type = ref<string>('') const id = ref<string>('') const status = ref<string>('') // 关键字段是否可以编辑 const keyFieldsDisable = ref<boolean>(true) const userInfo = useUserStore() const route = useRoute() const router = useRouter() const title = ref('') const radioItems = ref([ { name: '基本信息', value: 'examine-basic' }, { name: '审批详情', value: 'examine-approval' }, ]) const current = ref('') const currentLabel = ref('') // 弹窗子组件 const apprDial = ref() const examineRef = ref() const examineDemandForm = ref() const examineAbilityForm = ref() const examineMethodForm = ref() const standardFilterRef = ref() const saveAsTempRef = ref() const listTempRef = ref() // 是否显示相关按钮 const saveButtVisable = ref<boolean>(false) // 是否显示 保存 按钮 const submitButtVisable = ref<boolean>(false) // 是否显示 提交 按钮 const flowButtsVisable = ref<boolean>(false) // 是否显示 同意和拒绝 按钮 const cancelButtVisable = ref<boolean>(false) // 是否显示 取消 按钮 const deleteButtVisable = ref<boolean>(false) // 是否显示 删除 按钮 const editButtVisable = ref<boolean>(false) // 是否显示 编辑 按钮 const examineInfo = ref<ICustomerExamineInfo>({ id: '', formNo: '', formName: '要求、委托书及合同评审表', labCode: '', labCodeName: '', groupCode: '', groupCodeName: '', customerId: '', customerName: '', signUserId: '', signStatus: '', signStatusName: '', customerContent: '', measureItem: '', otherRequire: '', equipmentName: '', performanceIndex: '', measureStatus: '合格', numberOfPeople: undefined, staffCert: undefined, measureMethodName: '', measureMethodType: '', measureMethodTypeName: '', measureMethodConfirm: undefined, measureMethodControlled: undefined, approvalStatus: '', approvalStatusName: '', appealUserId: '', appealUserName: '', processId: '', taskId: '', remark: '', decisionItem: '', createUserId: '', createUserName: '', createTime: '', }) const measureMethodTypeArray = ref<Array<string>>([]) // 校验方法 const methodTypeValidator = (rule: any, value: string, callback: any) => { if (measureMethodTypeArray.value.length === 0) { return callback(new Error('测试、校准或检定方法类型不能为空,请勾选')) } else { examineInfo.value.measureMethodType = measureMethodTypeArray.value.join(',') callback() } } const examineRules = ref({ labCode: [{ required: true, message: '实验室代码不能为空', trigger: ['change', 'blur'] }], groupCode: [{ required: true, message: '部门不能为空', trigger: ['change', 'blur'] }], customerContent: [{ required: true, message: '委托方信息不能为空', trigger: 'blur' }], measureItem: [{ required: true, message: '测试、校准或检定项目不能为空', trigger: 'blur' }], otherRequire: [{ required: true, message: '其他要求不能为空', trigger: 'blur' }], equipmentName: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }], performanceIndex: [{ required: true, message: '设备性能指标不能为空', trigger: 'blur' }], measureStatus: [{ required: true, message: '设备校准状态不能为空', trigger: 'blur' }], numberOfPeople: [{ required: true, message: '检定人员人数不能为空', trigger: 'blur' }], staffCert: [{ required: true, message: '人员持证情况不能为空', trigger: 'blur' }], measureMethodName: [{ required: true, message: '方法名称不能为空', trigger: 'blur' }], measureMethodType: [{ required: true, trigger: ['change', 'blur'], validator: methodTypeValidator }], measureMethodControlled: [{ required: true, message: '方法是否受控不能为空', trigger: ['change', 'blur'] }], measureMethodConfirm: [{ required: true, message: '方法是否确认不能为空', trigger: ['change', 'blur'] }], }) // 表单验证规则 // 字典值 const labCodeDict = ref<IDictType[]>([]) const groupCodeDict = ref<IDictType[]>([]) const methodTypeDict = ref<IDictType[]>([]) const yesOrNoDict = ref([ { id: '1', value: 1, name: '是', methodName: '已确认' }, { id: '0', value: 0, name: '否', methodName: '未确认' }, ]) // 逻辑 // 详情页的各个tab切换操作 const radioChangeHandler = (newVal: string | number | boolean) => { const radioTarget = radioItems.value.filter(item => item.name === newVal) if (radioTarget.length > 0) { currentLabel.value = radioTarget[0].name current.value = radioTarget[0].value } else { currentLabel.value = radioItems.value[0].name current.value = radioItems.value[0].value } } // 将所有流程操作的按钮隐藏 const hideAllOpterationButtons = () => { saveButtVisable.value = false submitButtVisable.value = false flowButtsVisable.value = false cancelButtVisable.value = false deleteButtVisable.value = false editButtVisable.value = false } // 根据审批状态显示对应的流程操作按钮 const showOperationButtonByStatus = () => { switch (status.value) { case '1': // 草稿箱:保存、提交按钮可见 saveButtVisable.value = true submitButtVisable.value = true break case '2': // 待审批:同意、拒绝按钮可见 flowButtsVisable.value = true break case '3': // 审批中:取消按钮可见 cancelButtVisable.value = true break case '5': // 未通过:编辑 按钮可见 editButtVisable.value = true break case '6': // 已取消:编辑 删除按钮可见 editButtVisable.value = true deleteButtVisable.value = true break default: // 默认不显示所有的操作按钮 hideAllOpterationButtons() break } } // 关闭 const resetForm = () => { sessionStorage.removeItem('examineInfo') // 返回列表时 将缓存中的数据删除 router.go(-1) } // 保存至草稿箱 const saveExamineInfo = () => { examineInfo.value.createTime = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss') // 创建时间改为提交时间 saveExamine(examineInfo.value).then((res) => { if (res.code === 200) { // 提示保存成功 ElMessage.success('保存成功') // 设置返回的评审表单编号和id examineInfo.value.formNo = res.data.formNo examineInfo.value.id = res.data.id id.value = res.data.id type.value = 'update' status.value = '1' // 保存成功后进入草稿箱 为了不显示审批详情 } else { // 提示失败信息 ElMessage.error(`保存失败:${res.message}`) } }) } // 编辑草稿箱(不走流程审批) const updateSuggestInfo = () => { updateDraftExamine(examineInfo.value).then((res) => { if (res.code === 200) { // 提示保存成功 ElMessage.success('保存成功') } else { // 提示失败信息 ElMessage.error(`保存失败:${res.message}`) } }) } // 编辑按钮点击事件处理函数 const editClickedHandler = () => { type.value = 'update' title.value = '要求、委托书及合同评审表(编辑)' // 隐藏编辑按钮 显示提交按钮 editButtVisable.value = false submitButtVisable.value = true } // 新建时保存后的处理 获取返回的id const saveButtonHandler = async () => { if (!examineRef || !examineDemandForm || !examineAbilityForm || !examineMethodForm) { return } let examineValid // 校验委托方要求表单 await examineDemandForm.value.validate((valid: boolean) => { examineValid = valid }) if (examineValid === false) { return } // 校验本站能力表单 await examineAbilityForm.value.validate((valid: boolean) => { examineValid = valid }) if (examineValid === false) { return } // 校验检测方法表单 await examineMethodForm.value.validate((valid: boolean) => { examineValid = valid }) if (examineValid === false) { return } await examineRef.value.validate((valid: boolean, fields: any) => { if (valid === true) { ElMessageBox.confirm( '确认保存吗?', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', }, ).then(() => { if (type.value === 'create') { saveExamineInfo() } else if (type.value === 'update') { updateSuggestInfo() } }) } }) } // 提交按钮 const submitButtonHandler = async () => { if (examineInfo.value === null || examineInfo.value.processId === undefined || examineInfo.value.processId === '') { // 流程id为空 表示还未进入流程中 直接提交 ElMessageBox.confirm(`是否提交审批表 ${examineInfo.value.formNo}`, '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', }).then(() => { submitExamine({ formId: SCHEDULE.CONTRACT_REVIEW_APPROVAL, id: examineInfo.value.id, }).then((res) => { if (res.code === 200) { ElMessage.success(`审批表 ${examineInfo.value.formNo} 提交成功`) type.value = 'detail' hideAllOpterationButtons() } else { ElMessage.error(`审批表 ${examineInfo.value.formNo} 提交失败:${res.message}`) } }) }) } else { // 之前已经在流程中的表单 保存提交 let examineValid // 校验委托方要求表单 await examineDemandForm.value.validate((valid: boolean) => { examineValid = valid }) if (examineValid === false) { return } // 校验本站能力表单 await examineAbilityForm.value.validate((valid: boolean) => { examineValid = valid }) if (examineValid === false) { return } // 校验检测方法表单 await examineMethodForm.value.validate((valid: boolean) => { examineValid = valid }) if (examineValid === false) { return } await examineRef.value.validate((valid: boolean) => { if (valid === true) { failUpdateExamine(examineInfo.value).then((res) => { if (res.code === 200) { // 提示保存成功 ElMessage.success(`审批表 ${examineInfo.value.formNo} 提交成功`) type.value = 'detail' hideAllOpterationButtons() } else { // 提示失败信息 ElMessage.error(`审批表 ${examineInfo.value.formNo} 提交失败:${res.message}`) } }) } }) } } const saveAsTemplate = () => { sessionStorage.setItem('examineInfo', JSON.stringify(examineInfo.value)) saveAsTempRef.value.showOrHideDialog(true) } const listTemplate = () => { listTempRef.value.showOrHideDialog(true) } const templateSelectedHandler = (row: ICustomerExamineTemplate) => { // 将模板中的值填入 委托方要求 if (row.customerContent !== undefined && row.customerContent !== null && row.customerContent !== '') { examineInfo.value.customerContent = row.customerContent examineDemandForm.value.validateField('customerContent') } if (row.measureItem !== undefined && row.measureItem !== null && row.measureItem !== '') { examineInfo.value.measureItem = row.measureItem examineDemandForm.value.validateField('measureItem') } if (row.otherRequire !== undefined && row.otherRequire !== null && row.otherRequire !== '') { examineInfo.value.otherRequire = row.otherRequire examineDemandForm.value.validateField('otherRequire') } // 本站能力 if (row.equipmentName !== undefined && row.equipmentName !== null && row.equipmentName !== '') { examineInfo.value.equipmentName = row.equipmentName examineAbilityForm.value.validateField('equipmentName') } if (row.performanceIndex !== undefined && row.performanceIndex !== null && row.performanceIndex !== '') { examineInfo.value.performanceIndex = row.performanceIndex examineAbilityForm.value.validateField('performanceIndex') } if (row.measureStatus !== undefined && row.measureStatus !== null && row.measureStatus !== '') { examineInfo.value.measureStatus = row.measureStatus examineAbilityForm.value.validateField('measureStatus') } if (row.staffCert !== undefined && row.staffCert !== null && `${row.staffCert}` !== '') { examineInfo.value.staffCert = row.staffCert examineAbilityForm.value.validateField('staffCert') } if (row.numberOfPeople !== undefined && row.numberOfPeople !== null && `${row.numberOfPeople}` !== '') { examineInfo.value.numberOfPeople = row.numberOfPeople examineAbilityForm.value.validateField('numberOfPeople') } // 测试方法 if (row.measureMethodName !== undefined && row.measureMethodName !== null && row.measureMethodName !== '') { examineInfo.value.measureMethodName = row.measureMethodName examineMethodForm.value.validateField('measureMethodName') } if (row.measureMethodType !== undefined && row.measureMethodType !== null && row.measureMethodType !== '') { examineInfo.value.measureMethodType = row.measureMethodType measureMethodTypeArray.value = row.measureMethodType.split(',') examineMethodForm.value.validateField('measureMethodType') } if (row.measureMethodControlled !== undefined && row.measureMethodControlled !== null && `${row.measureMethodControlled}` !== '') { examineInfo.value.measureMethodControlled = row.measureMethodControlled examineMethodForm.value.validateField('measureMethodControlled') } if (row.measureMethodConfirm !== undefined && row.measureMethodConfirm !== null && `${row.measureMethodConfirm}` !== '') { examineInfo.value.measureMethodConfirm = row.measureMethodConfirm examineMethodForm.value.validateField('measureMethodConfirm') } // 其他事项 if (row.remark !== undefined && row.remark !== null && row.remark !== '') { examineInfo.value.remark = row.remark } } // 显示弹窗 筛选标准装置 const showStandardEquipmentFilter = () => { standardFilterRef.value.showOrHideFilterDialog(true, userInfo.deptId, userInfo.bizLabCode, userInfo.groupNo) } // 选中标准装置返回 const standardSelected = (row: any) => { examineInfo.value.equipmentName = row.standardName standardFilterRef.value.showOrHideFilterDialog(false) // 查询详情里的技术指标要求 getInfo({ id: row.id, type: '1' }).then((res) => { if (res.code === 200) { let performanceIndex = '' res.data.technologyIndexRelationList.forEach((item: any, index: number) => { performanceIndex += `${index + 1}. ${item.measureItem}:${item.measureRange},${item.uncertainty}。\n` }) examineInfo.value.performanceIndex = performanceIndex.substring(0, performanceIndex.length - 1) } }) } // 流程审批-同意 const approvalAgreeHandler = () => { apprDial.value.initDialog('agree', examineInfo.value.id, examineInfo.value.taskId || route.query.taskId, '') } // 流程审批-拒绝 const approvalRefuseHandler = () => { apprDial.value.initDialog('refuse', examineInfo.value.id, examineInfo.value.taskId || route.query.taskId, '') } // 取消(撤回审批单) const revokeClickedHandler = () => { const params = { processInstanceId: examineInfo.value.processId!, comments: '', id: examineInfo.value.id, } ElMessageBox.confirm( '确认取消该审批吗?', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', }, ) .then(() => { revokeApproval(params).then((res) => { if (res.code === 200) { ElMessage.success('已取消') } else { ElMessage.error(`流程取消失败:${res.message}`) } // 关闭弹窗 apprDial.value.handleClose() }) }) } // 删除(只有已取消的可以在详情中删除) const deleteClickedHandler = () => { ElMessageBox.confirm( `确认删除审批表 ${examineInfo.value.formNo} 吗?`, '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', }, ).then(() => { deleteExamineRevoked({ id: examineInfo.value.id, taskId: examineInfo.value.taskId || route.query.taskId }).then((res) => { if (res.code === 200) { ElMessage.success(`审批表 ${examineInfo.value.formNo} 删除成功`) resetForm() } else { ElMessage.error(`审批表 ${examineInfo.value.formNo} 删除失败:${res.message}`) } }) }) } // 流程操作之后刷新 const approvalSuccessHandler = (type: string) => { if (type === 'agree' || type === 'refuse') { flowButtsVisable.value = false } else if (type === 'revoke') { cancelButtVisable.value = false } } // 拒绝 const examineRefuseHandler = (param: any) => { refuseApproval(param).then((res) => { if (res.code === 200) { ElMessage.success('拒绝审批完成') } else { ElMessage.error(`拒绝审批失败:${res.message}`) } // 关闭弹窗 apprDial.value.handleClose() flowButtsVisable.value = false }) } const getLabCodeDict = async () => { if (sessionStorage.getItem('bizLabCode') !== null && sessionStorage.getItem('bizLabCode') !== undefined) { labCodeDict.value = JSON.parse(sessionStorage.getItem('bizLabCode')!) } else { await getDictByCode('bizLabCode').then((res) => { if (res.code === 200) { labCodeDict.value = res.data sessionStorage.setItem('bizLabCode', JSON.stringify(res.data)) } }) } } const getGroupCodeDict = async () => { if (sessionStorage.getItem('bizGroupCode') !== null && sessionStorage.getItem('bizGroupCode') !== undefined) { groupCodeDict.value = JSON.parse(sessionStorage.getItem('bizGroupCode')!) } else { await getDictByCode('bizGroupCode').then((res) => { if (res.code === 200) { groupCodeDict.value = res.data sessionStorage.setItem('bizGroupCode', JSON.stringify(res.data)) } }) } } const getMethodTypeDict = async () => { await getDictByCode('bizMeasureMethodType').then((res) => { if (res.code === 200) { methodTypeDict.value = res.data } }) } const initDict = () => { getLabCodeDict() getGroupCodeDict() getMethodTypeDict() // 从缓存中取出实验室和分组代码 examineInfo.value.groupCode = localStorage.getItem('groupNo') === 'undefined' ? '' : localStorage.getItem('groupNo')! examineInfo.value.labCode = localStorage.getItem('bizLabCode') === 'undefined' ? '' : localStorage.getItem('bizLabCode')! } // 获取详情 const fetchExamineDetail = () => { const loading = ElLoading.service({ lock: true, text: '加载中...', background: 'rgba(255, 255, 255, 0.6)', }) getExamineDetail({ id: id.value }).then((res) => { examineInfo.value = res.data measureMethodTypeArray.value = examineInfo.value.measureMethodType.split(',') loading.close() }).catch(() => { loading.close() }) } const initDialog = (params: any) => { // 从路由中获取参数 type.value = params.type id.value = params.id !== undefined ? params.id : '' status.value = params.status !== undefined ? params.status : '' // 默认显示第一个tab内容 current.value = radioItems.value[0].value currentLabel.value = radioItems.value[0].name switch (params.type) { case 'create' : title.value = '要求、委托书及合同评审表(新增)' saveButtVisable.value = true submitButtVisable.value = true sessionStorage.removeItem('examineInfo') examineInfo.value.createUserId = userInfo.id examineInfo.value.createUserName = userInfo.name examineInfo.value.createTime = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss') keyFieldsDisable.value = false break case 'update': title.value = '要求、委托书及合同评审表(编辑)' fetchExamineDetail() // 判断显示哪些流程操作按钮 showOperationButtonByStatus() keyFieldsDisable.value = true break case 'detail': title.value = '要求、委托书及合同评审表' id.value = params.id fetchExamineDetail() // 查看详情时所有的操作按钮都隐藏 showOperationButtonByStatus() keyFieldsDisable.value = true break default: title.value = '' keyFieldsDisable.value = true break } } // 监听 显示中文 watch(() => examineInfo.value.labCode, (newVal) => { if (labCodeDict.value.length > 0) { const targetList = labCodeDict.value.filter(item => item.value === newVal) if (targetList.length > 0) { examineInfo.value.labCodeName = targetList[0].name } else { examineInfo.value.labCodeName = '' } } }) watch(() => examineInfo.value.groupCode, (newVal) => { if (groupCodeDict.value.length > 0) { const targetList = groupCodeDict.value.filter(item => item.value === newVal) if (targetList.length > 0) { examineInfo.value.groupCodeName = targetList[0].name } else { examineInfo.value.groupCodeName = '' } } }) watch(() => status.value, (val) => { if (val === '1' || type.value === 'create') { // 草稿箱、新建把审批详情删了 if (radioItems.value[radioItems.value.length - 1].value === 'examine-approval') { radioItems.value.pop() } console.log(radioItems.value) } else { // 非全部和草稿箱把审批详情加上 if (radioItems.value[radioItems.value.length - 1].value !== 'examine-approval') { radioItems.value.push({ name: '审批详情', value: 'examine-approval' }) } } }) onMounted(() => { console.log('要求委托书、合同评审表详情页面') initDict() initDialog(route.query) }) </script> <template> <app-container class="resource-customer-examine"> <el-form ref="examineRef" :model="examineInfo" :rules="examineRules" label-position="right" label-width="110px" border stripe> <detail-page :title="`${title}`"> <template #btns> <el-button v-if="editButtVisable" type="primary" @click="editClickedHandler()"> 编辑 </el-button> <template v-if="flowButtsVisable"> <el-button type="primary" @click="approvalAgreeHandler"> 同意 </el-button> <el-button type="danger" @click="approvalRefuseHandler"> 拒绝 </el-button> </template> <el-button v-if="submitButtVisable" type="primary" @click="saveAsTemplate"> 存为模板 </el-button> <el-button v-if="submitButtVisable" type="primary" @click="listTemplate"> 引用模板 </el-button> <el-button v-if="submitButtVisable" :disabled="id === ''" type="primary" @click="submitButtonHandler"> 提交 </el-button> <el-button v-if="saveButtVisable" type="primary" @click="saveButtonHandler"> 保存 </el-button> <el-button v-if="deleteButtVisable" type="danger" @click="deleteClickedHandler"> 删除 </el-button> <el-button v-if="cancelButtVisable" type="info" @click="revokeClickedHandler"> 取消 </el-button> <el-button type="info" @click="resetForm()"> 关闭 </el-button> </template> <el-radio-group v-show="type !== 'create'" v-model="currentLabel" style="margin-bottom: 20px;" @change="radioChangeHandler"> <el-radio-button v-for="item in radioItems" :key="item.value" :label="item.name" :disabled="id === ''" /> </el-radio-group> <template v-if="current === 'examine-basic'"> <el-row :gutter="24"> <!-- 第一行 第一列 --> <el-col :span="6"> <el-form-item label="实验室" prop="labCode"> <el-select v-model="examineInfo.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="examineInfo.labCodeName" type="hidden" /> </el-form-item> <el-form-item label="创建人"> <el-input v-model="examineInfo.createUserName" :disabled="true" /> <el-input v-model="examineInfo.createUserId" type="hidden" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="部门" prop="groupCode"> <el-select v-model="examineInfo.groupCode" placeholder="请选择部门" :disabled="keyFieldsDisable" style="width: 100%;"> <el-option v-for="dict in groupCodeDict" :key="dict.id" :label="dict.name" :value="dict.value" /> </el-select> <el-input v-model="examineInfo.groupCodeName" type="hidden" /> </el-form-item> <el-form-item label="创建时间"> <el-input v-model="examineInfo.createTime" :disabled="true" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="文件编号"> <el-input v-model="examineInfo.formNo" placeholder="默认为保存后自动生成,可手动修改" :disabled="keyFieldsDisable" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="评审表名称"> <el-input v-model="examineInfo.formName" :disabled="true" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="6"> <el-input v-model="examineInfo.customerContent" type="hidden" /> </el-col> <el-col :span="6"> <el-input v-model="examineInfo.measureItem" type="hidden" /> </el-col> <el-col :span="6"> <el-input v-model="examineInfo.otherRequire" type="hidden" /> </el-col> <el-col :span="6"> <el-input v-model="examineInfo.equipmentName" type="hidden" /> </el-col> <el-col :span="6"> <el-input v-model="examineInfo.performanceIndex" type="hidden" /> </el-col> <el-col :span="6"> <el-input v-model="examineInfo.measureStatus" type="hidden" /> </el-col> <el-col :span="6"> <el-input v-model="examineInfo.numberOfPeople" type="hidden" /> </el-col> <el-col :span="6"> <el-input v-model="examineInfo.staffCert" type="hidden" /> </el-col> <el-col :span="6"> <el-input v-model="examineInfo.measureMethodName" type="hidden" /> </el-col> <el-col :span="6"> <el-input v-model="examineInfo.measureMethodType" type="hidden" /> </el-col> <el-col :span="6"> <el-input v-model="examineInfo.measureMethodControlled" type="hidden" /> </el-col> <el-col :span="6"> <el-input v-model="examineInfo.measureMethodConfirm" type="hidden" /> </el-col> <el-col :span="6"> <el-input v-model="examineInfo.remark" type="hidden" /> </el-col> </el-row> </template> </detail-page> <template v-if="current === 'examine-basic'"> <el-form ref="examineDemandForm" :model="examineInfo" :rules="examineRules" label-position="top"> <detail-block title="委托方要求"> <el-row :gutter="24"> <el-col :span="24"> <el-form-item label="委托方信息(名称、地址、联系人、联系电话等)" prop="customerContent"> <el-input v-model="examineInfo.customerContent" placeholder="请填写委托方信息" type="textarea" ::rows="5" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="24"> <el-form-item label="测试、校准或检定项目" prop="measureItem"> <el-input v-model="examineInfo.measureItem" placeholder="请填写测试、校准或检定项目" type="textarea" :rows="5" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="24"> <el-form-item label="其他要求(完成时限、证书报告出具、计量标识张贴等)" prop="otherRequire"> <el-input v-model="examineInfo.otherRequire" placeholder="请填写其他要求" type="textarea" :rows="5" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> </el-col> </el-row> </detail-block> </el-form> <el-form ref="examineAbilityForm" :model="examineInfo" :rules="examineRules" label-position="right" label-width="250"> <detail-block :title="`本站能力 (实验室:${examineInfo.labCode})`"> <el-row :gutter="24"> <el-col :span="12"> <el-form-item label="测试、校准或检定设备名称" prop="equipmentName"> <el-input v-model="examineInfo.equipmentName" placeholder="请选择测试、校准或检定设备" :clearable="true" :disabled="true"> <template #append> <el-button size="small" :disabled="type === 'detail'" @click="showStandardEquipmentFilter"> 选择 </el-button> </template> </el-input> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="24"> <el-form-item label="测试、校准或检定设备性能指标" prop="performanceIndex"> <el-input v-model="examineInfo.performanceIndex" placeholder="请填写测试、校准或检定设备性能指标" type="textarea" :rows="5" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="12"> <el-form-item label="测试、校准或检定设备校准状态" prop="measureStatus"> <el-input v-model="examineInfo.measureStatus" placeholder="请填写测试、校准或检定设备校准状态" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="12"> <el-form-item label="测试、校准或检定人员人数" prop="numberOfPeople"> <el-input-number v-model="examineInfo.numberOfPeople" :step="1" :precision="0" :min="1" :clearable="true" controls-position="right" :disabled="type === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="24"> <el-form-item label="测试、校准或检定人员持证情况" prop="staffCert"> <el-input-number v-model="examineInfo.staffCert" :step="1" :precision="0" :min="1" :clearable="true" controls-position="right" :disabled="type === 'detail'" /> </el-form-item> </el-col> </el-row> </detail-block> </el-form> <el-form ref="examineMethodForm" :model="examineInfo" :rules="examineRules" label-position="right" label-width="250"> <detail-block title="测试、校准或检定方法"> <el-row :gutter="24"> <el-col :span="24"> <el-form-item label="测试、校准或检定方法名称" prop="measureMethodName"> <el-input v-model="examineInfo.measureMethodName" type="textarea" :rows="3" placeholder="请填写测试、校准或检定方法名称" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="24"> <el-form-item label="测试、校准或检定方法类型" prop="measureMethodType"> <el-checkbox-group v-model="measureMethodTypeArray" :disabled="type === 'detail'"> <el-checkbox v-for="dict in methodTypeDict" :key="dict.id" :label="dict.value"> {{ dict.name }} </el-checkbox> </el-checkbox-group> <el-input v-model="examineInfo.measureMethodType" type="hidden" /> <el-input v-model="examineInfo.measureMethodTypeName" type="hidden" /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="24"> <el-form-item label="测试、校准或检定方法受控" prop="measureMethodControlled"> <el-radio-group v-model="examineInfo.measureMethodControlled" :clearable="true" :disabled="type === 'detail'"> <el-radio v-for="dict in yesOrNoDict" :key="dict.id" :label="dict.value"> {{ dict.name }} </el-radio> </el-radio-group> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="24"> <el-form-item label="方法是否确认" prop="measureMethodConfirm"> <el-radio-group v-model="examineInfo.measureMethodConfirm" :clearable="true" :disabled="type === 'detail'"> <el-radio v-for="dict in yesOrNoDict" :key="dict.id" :label="dict.value"> {{ dict.methodName }} </el-radio> </el-radio-group> </el-form-item> </el-col> </el-row> </detail-block> </el-form> <el-form :model="examineInfo" :rules="examineRules" label-position="right" label-width="110"> <detail-block title="" style="margin-bottom: 20px;"> <el-row :gutter="24"> <el-col :span="24"> <el-form-item label="其他事项"> <el-input v-model="examineInfo.remark" type="textarea" autosize placeholder="请填写其他事项" :clearable="true" :disabled="type === 'detail'" /> </el-form-item> </el-col> </el-row> </detail-block> </el-form> </template> </el-form> <filter-standard ref="standardFilterRef" @record-selected="standardSelected" /> <approval-dialog ref="apprDial" @on-success="approvalSuccessHandler" @on-refuse="examineRefuseHandler" @on-revoke="examineRevokeHandler" /> <save-as-template-dialog ref="saveAsTempRef" /> <list-template-dialog ref="listTempRef" @record-selected="templateSelectedHandler" /> <template v-if="current === 'examine-approval' && status !== '1'"> <approval-record-table :process-id="examineInfo.processId" /> </template> </app-container> </template> <style lang="scss"> .resource-customer-examine { .el-radio__label { display: block !important; } } </style>