<!-- 要求、委托书及合同评审表列表详情 -->
<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 { getFileMethodList } from '@/api/resource/fileTechnology'
import { getInfo } from '@/api/equipment/standard/book'
import { deleteExamineRevoked, failUpdateExamine, getExamineDetail, refuseApproval, rejectApproval, 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'
import FilterTechnologyMethod from '@/views/resource/common/filterTechMethod.vue'
// 从路由中传过来的参数
const type = ref<string>('')
const id = ref<string>('')
const status = ref<string>('')
const decisionItem = ref('')
// 关键字段是否可以编辑
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, 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 approvalRejectHandler = () => {
apprDial.value.initDialog('reject', 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 reject = (comments: string, taskId: string, id: string) => {
const param = {
id,
taskId, // 任务id
comments, // 拒绝原因
}
rejectApproval(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 methodFilterRef = ref()
// 点击选择测试校准检定方法
const showTechMethodFilter = () => {
methodFilterRef.value.showOrHideFilterDialog(true)
}
// 选好测试校准检定方法
const methodSelectedHandler = (method: { fileName: string }) => {
examineInfo.value.measureMethodName = method.fileName
methodFilterRef.value.showOrHideFilterDialog(false)
}
// ====================下拉========================
const measureMethodNameList = ref([]) // 选择测试校准检定方法下拉数据
const fecthTechMethodList = () => {
const params = {
labCode: '',
groupCode: '',
fileNo: '', // 文件编号
fileName: '', // 文件名
fileDistributeNo: '', // 文件发放号
activeDateStart: '', //
activeDateEnd: '',
noveltyStatus: '',
offset: 1,
limit: 20,
}
getFileMethodList(params).then((response) => {
measureMethodNameList.value = response.data.rows
})
}
// -------------------------------------------------------------------------------------------------
const initDialog = (params: any) => {
// 从路由中获取参数
type.value = params.type
id.value = params.id !== undefined ? params.id : ''
status.value = params.status !== undefined ? params.status : ''
decisionItem.value = params.decisionItem as string
// 默认显示第一个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('要求委托书、合同评审表详情页面')
fecthTechMethodList() // 获取测试校准检定方法
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 v-if="(`${decisionItem}` === '1' || `${decisionItem}` === '2')" type="warning" @click="approvalRejectHandler">
驳回
</el-button>
<el-button v-if="(`${decisionItem}` === '1' || `${decisionItem}` === '3')" 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="12">
<el-form-item label="测试、校准或检定方法名称" prop="measureMethodName">
<!-- <el-input v-model="examineInfo.measureMethodName" disabled placeholder="请选择测试、校准或检定方法名称" :disabled="type === 'detail'">
<template #append>
<el-button size="small" @click="showTechMethodFilter">
选择
</el-button>
</template>
</el-input> -->
<el-select
v-model="examineInfo.measureMethodName"
placeholder="测试、校准或检定方法名称"
filterable
style="width: 100%;"
>
<el-option v-for="item in measureMethodNameList" :key="item.id" :label="item.fileName" :value="item.fileName">
<span style="float: left;">{{ item.fileName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px;">{{ item.noveltyStatusName }}</span>
</el-option>
</el-select>
</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-radio-group v-model="examineInfo.measureMethodType" style="margin-bottom: 20px;">
<el-radio v-for="item in methodTypeDict" :key="item.id" :label="item.value">
{{ item.name }}
</el-radio>
</el-radio-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"
@reject="reject"
/>
<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>
<!-- 选择测试校准检定方法组件 -->
<filter-technology-method ref="methodFilterRef" @record-selected="methodSelectedHandler" />
</template>
<style lang="scss">
.resource-customer-examine {
.el-radio__label {
display: block !important;
}
}
</style>