<script lang="ts" setup name="ReportOnCredentialsAdd"> import { ref } from 'vue' import { ElMessage, ElMessageBox } from 'element-plus' import type { FormInstance, UploadProps, UploadUserFile } from 'element-plus' import dayjs from 'dayjs' import ApprovalDialog from '@/components/Approval/ApprovalDialog.vue' import { getStaffList } from '@/api/measure/person' import { getTypeSelect } from '@/api/system/price' import EquipmentDialog from '@/views/device/standardEquipment/components/standardList/equipmentDialog.vue' import { getStandardLisAdd, getStandardLisdetali, getStandardListDetail, getUsersDept, submitStandardEquipmentApply, updateStandardEquipmentApply, } from '@/api/device/standard' import { UploadFile } from '@/api/measure/file' import useUserStore from '@/store/modules/user' import showPhoto from '@/views/system/tool/showPhoto.vue' import { submitApproval } from '@/api/approval' const loading = ref(false) // 表单加载状态 const infoId = ref('') // id const buttonArray = ref<string[]>([]) // 顶部按钮数组 const pageType = ref('add') // 页面类型: add,edit, detail const buttonLoading = ref(false) // 按钮加载状态 const textMap: { [key: string]: string } = { edit: '编辑', add: '新建', detail: '查看', } // 字典 // 从路由中获取页面类型参数 const $route = useRoute() const formId = ref<string>('') const { username } = useUserStore() if ($route.params && $route.params.type) { pageType.value = $route.params.type as string formId.value = $route.query.formId as string if (pageType.value === 'add') { buttonArray.value = ['提交', '保存'] } else if (pageType.value === 'edit') { buttonArray.value = ['保存'] } else { buttonArray.value = ['同意', '驳回', '拒绝'] } if ($route.query.id) { infoId.value = $route.query.id as string } } const ruleFormRef = ref<FormInstance>() // 逻辑代码 const formInline = ref({ certificateReportCategory: '', // 证书类别,多个逗号分割 certificateReportName: '', // 证书报告名称 orderId: '', // 委托书id certificateReportCode: '', // 证书报告编号 sampleId: '', // 样品id measureDeptId: '', // 检定部门id calibrationMajor: '', // 检校专业 issuanceDate: '', // 出具日期 expirationDate: '', // expirationDate templateId: '', // 证书报告模板id signId: '', // 电子签章id approvalSignId: '', // 认可标志专用章id certificateReportFile: '', // 证书报告附件 originalRecordId: '', // 原始记录id remark: '', // 备注 createUser: '', // 创建人id constructionStandardUnitName: '', assessmentUnit: '', category: '', categoryName: '', contactInfo: '', createTime: null, id: '', isDel: null, laboratoryOwner: '', laboratoryOwnerContact: '', minioFileName: '', laboratoryOwnerName: '', managerState: '', managerStateName: '', measureMajor: '', fileList: [], measureMajorName: '', mesureRange: '', organizeNo: '', preparationDate: '', standardHumidity: null, standardLaboratory: '', standardLaboratoryName: '', standardLevel: '', standardLevelName: '', standardName: '', standardNo: '', standardOwner: '', standardOwnerName: '', standardTemperature: null, totalInvestment: null, transmitRange: '', transmitRangeName: '', authorityOfDate: '', data: '', uncertainty: '', updateTime: null, version: null, }) const fromListInfo = ref({ applyDept: '', applyNo: '', applyType: $route.query.applyType, applyTypeName: '', approvalStatus: '', applyEquipmentList: [], fixedAssetsList: [], approvalStatusName: '', constructionStandardUnitName: '', createTime: null, createUser: null, fileList: [], id: null, isDel: '', processId: '', remark: '', standardEquipmentId: '', standardName: '', standardNo: '', standardOwner: '', updateTime: null, version: null, taskId: '', }) // 下拉框数组类型 interface IOptions { id: string name: string value: string organizeName: string deptId: string } const checkTypeOptions = ref<IOptions[]>([]) const standardOwnerOptions = ref<IOptions[]>([]) // 标准负责人 const fileList = ref<UploadUserFile[]>([]) // 文件对象数组 const measureMajorList = ref<IOptions[]>([]) // 计量专业下拉框 const standardManagerStateList = ref<IOptions[]>([]) // 管理状态下拉框 const standardLevelList = ref<IOptions[]>([]) // 标准等级下拉框 const transmitRangeList = ref<IOptions[]>([]) // 传递范围下拉框 // 标准所在部门下拉框 const standardUsersDeptList = ref<IOptions[]>([]) // 获取下拉框 const getSelectList = (code: string) => { getTypeSelect(code).then((res) => { if (code === 'measureMajor') { measureMajorList.value = res.data } else if (code === 'standardManagerState') { standardManagerStateList.value = res.data } else if (code === 'standardLevel') { standardLevelList.value = res.data } else if (code === 'transmitRange') { transmitRangeList.value = res.data } else if (code === 'standardCategory') { checkTypeOptions.value = res.data } }) } getSelectList('measureMajor') // 获取计量专业下拉框 getSelectList('standardManagerState') // 获取管理状态下拉框 getSelectList('standardLevel') // 获取标准等级下拉框 getSelectList('transmitRange') // 获取传递范围下拉框 getSelectList('standardCategory') // 获取类别下拉框 const approvalDialog = ref() const params = ref({ director: '', meterMajor: '', createEndTime: '', createstartTime: '', organizeName: '', organizeNo: '', organizeType: '2', pdeptId: null, offset: 1, limit: 999999, }) // 获取部门信息 getUsersDept(params.value).then((res) => { standardUsersDeptList.value = res.data.rows }) // 获取到标准负责人数组 const getStandardOwnerOptions = () => { const params = { staffNo: '', // 人员编号 name: '', // 姓名 deptId: '', // 工作部门 major: '', // 计量专业 verifierCertificateNo: '', // 证书号 certificateStatus: '', // 证书状态 limit: 100000, offset: 1, } getStaffList(params).then((res) => { standardOwnerOptions.value = res.data.records }) } // 数据 const list = ref<object[]>([]) // 标准配套设备更换表格总数 const total = ref(0) // 审批弹窗开关 const applyShow = ref(false) // 审批弹窗信息收集类型 interface applyListType { select: string epilog: string approval: string approvalTime: string } // 审批弹窗信息收集 const applyList = ref<applyListType>({ select: '', epilog: '', approval: '', approvalTime: '', }) // 标准配套设备表头类型 interface columnsType { text: string value: string align: string required: Boolean choose: Boolean time: Boolean } // 标准配套设备更换表头 const columns = ref<columnsType[]>([ { text: '设备名称', value: 'equipmentName', align: 'center', required: true, choose: true, time: false, }, { text: '设备编号', value: 'equipmentNo', align: 'center', required: true, choose: false, time: false, }, { text: '型号', value: 'modelNo', align: 'center', required: true, choose: false, time: false, }, { text: '出厂编号', value: 'mesureResult', align: 'center', required: true, choose: false, time: false, }, { text: '证书有效期', value: 'validDate', align: 'center', required: true, choose: false, time: false, }, ]) // 标准配套设备更换查询条件 const listQuery = ref<object>({ limit: 10, offset: 1, }) // 标准配套设备更换表格loding const loadingTable = ref(false) // 申请文档表头 const columnsFiles = ref<columnsType[]>([ { text: '文件编号', value: 'fileName', align: 'center', required: true, choose: true, time: false, }, { text: '文件名称', value: 'createTime', align: 'center', required: true, choose: false, time: true, }, { text: '文件代号', value: 'remark', align: 'center', required: true, time: false, choose: false, }, ]) // 标准配套设备更换表格分页 const changePage = () => {} getStandardOwnerOptions() // 添加表格数据对象 const addList = ref({}) // 添加表格弹窗开关 const dialogVisible = ref(false) // 选择标准装置数据列表下拉框类型 interface standardListType { id: string standardName: string } // 选择标准装置数据列表下拉框 const standardList = ref<standardListType[]>([]) // 初始化路由 const $router = useRouter() // 关闭 const close = () => { // emit('close') $router.back() } const rules = ref({ calibrationMajor: [ { required: true, message: '检校专业不能为空', trigger: 'blur' }, ], certificateReportCode: [{ required: true, message: '证书编号不能为空', trigger: 'blur' }], certificateReportName: [ { required: true, message: '证书名称不能为空', trigger: 'blur' }, ], issuanceDate: [ { required: true, message: '出具日期不能为空', trigger: 'blur' }, ], constructionStandardUnitName: [ { required: true, message: '建标单位名称不能为空', trigger: 'blur' }, ], standardOwner: [ { required: true, message: '标准负责人不能为空', trigger: 'blur' }, ], contactInfo: [ { required: true, message: '联系方式不能为空', trigger: 'blur' }, ], category: [{ required: true, message: '类 别不能为空', trigger: 'blur' }], standardLevel: [ { required: true, message: '标准等级不能为空', trigger: 'blur' }, ], transmitRange: [ { required: true, message: '传递范围不能为空', trigger: 'blur' }, ], preparationDate: [ { required: true, message: '筹建日期不能为空', trigger: 'blur' }, ], managerState: [ { required: true, message: '管理状态不能为空', trigger: 'blur' }, ], measureMajor: [ { required: true, message: '计量专业不能为空', trigger: 'blur' }, ], assessmentUnit: [ { required: true, message: '考核单位不能为空', trigger: 'blur' }, ], assessDate: [ { required: true, message: '考核日期不能为空', trigger: 'blur' }, ], uncertainty: [ { required: true, message: '不确定度不能为空', trigger: 'blur' }, ], mesureRange: [ { required: true, message: '测量范围不能为空', trigger: 'blur' }, ], standardTemperature: [ { required: true, message: '标准温度不能为空', trigger: 'blur' }, { pattern: /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/, message: '标准温度只能为数字', trigger: 'blur', }, ], standardHumidity: [ { required: true, message: '标准湿度不能为空', trigger: 'blur' }, { pattern: /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/, message: '标准湿度只能为数字', trigger: 'blur', }, ], }) // 表单验证规则 // 第几条数据选择 const listIndex = ref(0) const uploadIndex = (row) => { listIndex.value = row.$index } // 上传请求 const uploadQuarterlyEvaluateFile = (file: any) => { const fd = new FormData() fd.append('multipartFile', file.file) UploadFile(fd).then((res) => { if (res.code === 200) { fromListInfo.value.fileList[listIndex.value].minioFileName = res.data[0] // 重置当前验证 ElMessage.success('文件上传成功') fromListInfo.value.fileList[listIndex.value].choose = true } }) } // 选择标准配套设备 const equipmentDialog = ref() // 点击标准配套设备选择按钮 const chooseList = (row: object, index: number) => { listIndex.value = index equipmentDialog.value.initDialog() } // 测试数据 const simulateObject = { data: dayjs(`${new Date()}`).format('YYYY.MM.DD'), // 有效日期 certificateNo: '199926465422', // 证书编号 authorityOfIssue: 'xxx公司', // 发证单位 authorityOfDate: dayjs(`${new Date()}`).format('YYYY.MM.DD'), // 发证日期 } // 点击增加行 const addRoow = () => { if ( fromListInfo.value.applyEquipmentList.length >= 1 && fromListInfo.value.applyEquipmentList[ fromListInfo.value.applyEquipmentList.length - 1 ].equipmentId === '' ) { ElMessage.warning('请完善上一条设备信息') } else { fromListInfo.value.applyEquipmentList.push({ equipmentId: '', standardApplyId: '', }) fromListInfo.value.fixedAssetsList.push({}) } } // 选择设备之后 const equipmentAddRow = (data: object) => { fromListInfo.value.fixedAssetsList[listIndex.value] = data fromListInfo.value.applyEquipmentList[listIndex.value].equipmentId = data.id fromListInfo.value.applyEquipmentList[listIndex.value].standardApplyId = infoId.value || '' } // 增加申请文档列表 const addRow = () => { if ( fromListInfo.value.fileList.length >= 1 && !fromListInfo.value.fileList[fromListInfo.value.fileList.length - 1] .fileName ) { ElMessage.warning('请完善上一条文件信息') } else { fromListInfo.value.fileList.push({ choose: false }) } } // 点击文件预览 const uploadShow = (e: any) => { const URL = window.URL || window.webkitURL window.open(URL.createObjectURL(e.raw)) } const fileRef = ref() // 文件上传input const onFileChange = (event: any) => { // 原生上传 console.log(event.target.files) if (event.target.files?.length !== 0) { // 创建formdata对象 const fd = new FormData() fd.append('multipartFile', event.target.files[0]) UploadFile(fd).then((res) => { if (res.code === 200) { formInline.value.minioFileName = res.data[0] // 重置当前验证 ElMessage.success('文件上传成功') } else { ElMessage.error(res.message) } }) } } const upload = () => { fileRef.value.click() } // 表格选中的数组 const SelectionList = ref<object[]>([]) // 标准实验室发生改变row类型 interface rowReturn { phone: string director: string deptId: string organizeName: string id: string } // 标准实验室发生改变 const changeDeptList = (row: rowReturn) => {} // 标准实验室清空时 const clearDeptList = () => {} // 获取详情信息 const getInfo = (id: string | number) => { getStandardLisdetali({ id }).then((res) => { Object.keys(res.data).map((item) => { if (typeof res.data[item] === 'number') { res.data[item] = res.data[item].toString() } }) formInline.value = res.data.meterStandardEquipment fromListInfo.value.standardEquipmentId = res.data.id fromListInfo.value.fixedAssetsList = res.data.fixedAssetsList fromListInfo.value.fileList = res.data.fileList.map((item) => { item.choose = true return item }) }) } if (pageType.value !== 'add') { getInfo(infoId.value) } // 取消 const handleCancel = () => { const params = { taskId: fromListInfo.value.taskId!, comments: '', } ElMessageBox.confirm('确认取消该审批吗?', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', }).then(() => { submitApproval('revoke', params).then((res) => { ElMessage({ type: 'success', message: '取消成功', }) }) }) } // 点击数据后的操作按钮 const clickBtn = (buttonType: string) => { switch (buttonType) { case '同意': approvalDialog.value.initDialog('agree', fromListInfo.value.taskId) break case '驳回': approvalDialog.value.initDialog('reject', fromListInfo.value.taskId) break case '拒绝': approvalDialog.value.initDialog('refuse', fromListInfo.value.taskId) break case '取消': handleCancel() break } } // 保存后的id const addId = ref('') // 点击顶部一排按钮 const getAddList = async (item: string, formEl: FormInstance | undefined) => { if (item === '保存' && pageType.value === 'add') { if (!formEl) { return } await formEl.validate((valid, fields) => { if (valid) { ElMessageBox.confirm('确认保存吗?', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', }).then(() => { getStandardLisAdd(fromListInfo.value).then((res) => { if (res.code === 200) { ElMessage.success('保存成功') addId.value = res.data.id } }) }) } }) } else if (item === '保存' && pageType.value === 'edit') { if (!formEl) { return } await formEl.validate((valid, fields) => { if (valid) { ElMessageBox.confirm('确认保存吗?', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', }).then(() => { updateStandardEquipmentApply(fromListInfo.value).then((res) => { if (res.code === 200) { ElMessage.success('保存成功') addId.value = res.data.id } }) }) } }) } else if (item === '提交') { if (addId.value === '') { ElMessage.warning('请先保存') } else { submitStandardEquipmentApply({ id: addId.value, formId: formId.value, }).then((res) => { if (res.code === 200) { close() } }) } } else { clickBtn(item) } } // 审批流程模拟数据 const approvalActivities = [ { name: '张三', deptName: '审计局', content: '同意', timestamp: '2018-04-15 08:00:00', }, { name: '张三', content: 'Approved', timestamp: '2018-04-13', }, { name: '张三', content: 'Success', timestamp: '2018-04-11', }, ] // 审批完成后的回调 const approvalSuccess = () => {} // 选择标准装置弹窗ref const standarDialog = ref() // 选择了标准名称后 const standardChange = () => { standarDialog.value.initDialog() } // 点击关闭 const handleClose = () => { dialogVisible.value = false } // 标准配套设备更换表格删除行 const removeRow = (type: string) => { if (SelectionList.value.length > 0) { ElMessageBox.confirm('确认删除选中的数据吗?', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', }).then(() => { if (type == '1') { // 删除设备行 fromListInfo.value.fixedAssetsList = fromListInfo.value.fixedAssetsList.filter((item) => { return !SelectionList.value.includes(item) }) fromListInfo.value.applyEquipmentList = fromListInfo.value.fixedAssetsList.filter((item) => { return !SelectionList.value.includes(item) }) ElMessage.success('删除成功') } else { // 删除文件行 fromListInfo.value.fileList = fromListInfo.value.fileList.filter( (item) => { return !SelectionList.value.includes(item) }, ) ElMessage.success('删除成功') } }) } else { ElMessage.warning('请先选择需要删除的数据') } } // 文件表格多选框 const handleSelectionChange = (e: any) => { SelectionList.value = e } watch( () => formInline.value, (newVal) => { // 变化后存储 }, { deep: true, immediate: true }, ) // 审批弹窗的关闭 const applyListClose = () => { applyShow.value = false } // 审批弹窗的提交 const applyListSubmit = () => { console.log(applyList.value) if (applyList.value.select == '') { return ElMessage.error('必须选择审批意见') } applyListClose() } // 标准装置发生改变data类型 interface dataReturn { id: string } // 获取详情信息 const getStandarInfo = (id: string | number) => { getStandardListDetail({ id }).then((res) => { Object.keys(res.data).map((item) => { if (typeof res.data[item] === 'number') { res.data[item] = res.data[item].toString() } }) formInline.value = res.data fromListInfo.value.standardEquipmentId = res.data.id }) } // 选择标准装置完成之后 const StandarAddRow = (data: dataReturn) => { getStandarInfo(data.id) } </script> <template> <app-container> <detail-page :title="`证书报告 -- ${textMap[pageType]}`"> <template #btns> <el-button v-for="(item, index) in buttonArray" :key="index" type="primary" @click="getAddList(item, ruleFormRef)" > {{ item }} </el-button> <el-button type="info" @click="close"> 关闭 </el-button> </template> <el-form ref="ruleFormRef" :model="formInline" label-position="right" label-width="auto" :rules="rules" > <el-row :gutter="20"> <el-col :span="6"> <el-form-item label="检校专业:" prop="calibrationMajor"> <el-select v-model="formInline.calibrationMajor" clearable :placeholder="pageType === 'detail' ? '' : '请选择检校专业'" size="default" style="width: 100%;" :disabled="pageType === 'detail'" > <el-option v-for="item in standardOwnerOptions" :key="item.id" :label="item.name" :value="item.id" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="出具日期:" prop="issuanceDate"> <el-date-picker v-model="formInline.issuanceDate" type="date" style="width: 100%;" clearable :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="certificateReportCode"> <el-input v-model.trim="formInline.certificateReportCode" :placeholder="pageType === 'detail' ? '' : '请输入证书编号'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="证书报告名称:" prop="certificateReportName"> <el-input v-model.trim="formInline.certificateReportName" :placeholder="pageType === 'detail' ? '' : '请输入证书报告名称'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="6"> <el-form-item label="证书报告模板:" prop="organizeNo"> <el-input v-model.trim="formInline.organizeNo" :placeholder="pageType === 'detail' ? '' : '请选择组织机构代码'" class="full-width-input" :disabled="pageType === 'detail'" > <template v-if="pageType !== 'detail'" #append> <el-button size="small" > 选择 </el-button> </template> </el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="电子签章:" prop="constructionStandardUnitName" > <el-input v-model.trim="formInline.constructionStandardUnitName" :placeholder="pageType === 'detail' ? '' : '请选择电子签章'" class="full-width-input" :disabled="pageType === 'detail'" > <template v-if="pageType !== 'detail'" #append> <el-button size="small" > 选择 </el-button> </template> </el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="认可标志专用章:" prop="standardOwner"> <el-input v-model.trim="formInline.standardOwner" :placeholder="pageType === 'detail' ? '' : '请选择认可标志专用章'" class="full-width-input" :disabled="pageType === 'detail'" > <template v-if="pageType !== 'detail'" #append> <el-button size="small" > 选择 </el-button> </template> </el-input> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="10"> <el-form-item label="证书报告附件:" prop="contactInfo"> <show-photo v-if="formInline.minioFileName" :minio-file-name="formInline.minioFileName" /> <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': formInline.minioFileName === '' ? '0px' : '20px' }" @click="upload"> {{ formInline.minioFileName === '' ? '上传' : '更换附件' }} </el-button> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="6"> <el-form-item label="原始记录编号:" prop="category"> <el-input v-model.trim="formInline.category" :placeholder="pageType === 'detail' ? '' : '请选择原始记录编号'" class="full-width-input" :disabled="pageType === 'detail'" > <template v-if="pageType !== 'detail'" #append> <el-button size="small" > 选择 </el-button> </template> </el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="检校地点:" prop="standardLevel"> <el-input v-model.trim="formInline.standardLevel" :placeholder="pageType === 'detail' ? '' : '请输入检校地点'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="温度(℃):" prop="transmitRange"> <el-input v-model.trim="formInline.transmitRange" :placeholder="pageType === 'detail' ? '' : '请输入温度(℃)'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="相对湿度(%):"> <el-input v-model.trim="formInline.transmitRange" :placeholder="pageType === 'detail' ? '' : '请输入相对湿度(%)'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="6"> <el-form-item label="样品编号:" prop="preparationDate"> <el-input v-model.trim="formInline.preparationDate" :placeholder="pageType === 'detail' ? '' : '请输入样品编号'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="样品名称:" prop="standardLaboratory"> <el-input v-model.trim="formInline.standardLaboratory" :placeholder="pageType === 'detail' ? '' : '请输入样品名称'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="出厂编号:" prop="laboratoryOwner"> <el-input v-model.trim="formInline.laboratoryOwner" :placeholder="pageType === 'detail' ? '' : '请输入出厂编号'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="型号:" prop="laboratoryOwnerContact"> <el-input v-model.trim="formInline.laboratoryOwnerContact" :placeholder="pageType === 'detail' ? '' : '请输入型号'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="6"> <el-form-item label="生产厂家:" prop="managerState"> <el-input v-model.trim="formInline.managerState" :placeholder="pageType === 'detail' ? '' : '请输入生产厂家'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="委托方代码:" prop="measureMajor"> <el-input v-model.trim="formInline.measureMajor" :placeholder="pageType === 'detail' ? '' : '请输入委托方代码'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="委托方名称:" prop="assessmentUnit"> <el-input v-model.trim="formInline.assessmentUnit" :placeholder="pageType === 'detail' ? '' : '请输入委托方名称'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="委托方电话:" prop="assessDate"> <el-input v-model.trim="formInline.standardLevelName" :placeholder="pageType === 'detail' ? '' : '请输入委托方电话'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="12"> <el-form-item label="委托方地址:" prop="uncertainty"> <el-input v-model.trim="formInline.uncertainty" :placeholder="pageType === 'detail' ? '' : '请输入委托方地址'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="6"> <el-form-item label="送检人:" prop="mesureRange"> <el-input v-model.trim="formInline.mesureRange" :placeholder="pageType === 'detail' ? '' : '请输入送检人'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="联系方式:" prop="mesureRange"> <el-input v-model.trim="formInline.mesureRange" :placeholder="pageType === 'detail' ? '' : '请输入联系方式'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="预计送达时间:" prop="authorityOfDate"> <el-date-picker v-model="formInline.authorityOfDate" type="datetime" style="width: 100%;" clearable :placeholder="pageType === 'detail' ? '' : '请选择预计送达时间'" format="YYYY-MM-DD hh:mm:ss" value-format="YYYY-MM-DD h:m:s a" :disabled="pageType === 'detail'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="预计检完时间:" prop="data"> <el-date-picker v-model="formInline.data" type="datetime" style="width: 100%;" :placeholder="pageType === 'detail' ? '' : '请选择预计送达时间'" format="YYYY-MM-DD hh:mm:ss" clearable value-format="YYYY-MM-DD h:m:s a" :disabled="pageType === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="12"> <el-form-item label="检定项目:" prop="standardTemperature"> <el-input v-model.trim="formInline.standardTemperature" :placeholder="pageType === 'detail' ? '' : '请输入检定项目'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="12"> <el-form-item label="备注:"> <el-input v-model.trim="formInline.remark" :placeholder="pageType === 'detail' ? '' : '请输入备注'" class="full-width-input" clearable :disabled="pageType === 'detail'" /> </el-form-item> </el-col> </el-row> </el-form> </detail-page> <detail-block title=" 所用设备"> <template v-if="pageType !== 'detail'" #btns> <el-button v-if="pageType !== 'detail'" type="primary" @click="addRoow"> 增加行 </el-button> <el-button v-if="pageType !== 'detail'" type="info" @click="removeRow('1')" > 删除行 </el-button> </template> <el-table :data="fromListInfo.fixedAssetsList" border style="width: 100%;" @selection-change="handleSelectionChange" > <el-table-column v-if="pageType !== 'detail'" type="selection" width="38" /> <el-table-column align="center" label="序号" width="80" type="index" /> <el-table-column v-for="item in columns" :key="item.value" :prop="item.value" :label="item.text" align="center" > <template #header> <span v-show="item.required" style="color: red;">*</span><span>{{ item.text }}</span> </template> <template v-if="item.text === '设备名称' && pageType !== 'detail'" #default="scope" > <el-input v-model="scope.row[item.value]" :placeholder="`${item.text}`" class="input" > <template v-if="item.choose" #append> <el-button v-if="pageType !== 'detail'" size="small" @click="chooseList(scope.row, scope.$index)" > 选择 </el-button> </template> </el-input> </template> </el-table-column> </el-table> </detail-block> <detail-block title="所依据的技术文件"> <template v-if="pageType !== 'detail'" #btns> <el-button type="primary" @click="addRow"> 增加行 </el-button> <el-button type="info" @click="removeRow('2')"> 删除行 </el-button> </template> <el-table :data="fromListInfo.fileList" border style="width: 100%;" @selection-change="handleSelectionChange" > <el-table-column v-if="pageType !== 'detail'" type="selection" width="38" /> <el-table-column align="center" label="序号" width="80" type="index" /> <el-table-column v-for="item in columnsFiles" :key="item.value" :prop="item.value" :label="item.text" align="center" > <template #header> <span v-show="item.required" style="color: red;">*</span><span>{{ item.text }}</span> </template> <template v-if="item.text === '文件编号' && pageType !== 'detail'" #default="scope" > <el-input v-model="scope.row[item.value]" :placeholder="`${item.text}`" class="input" > <template v-if="item.choose" #append> <el-button v-if="pageType !== 'detail'" size="small" > 选择 </el-button> </template> </el-input> </template> </el-table-column> </el-table> </detail-block> <div v-if="pageType === 'detail'"> <detail-block title="审批流程"> <!-- 审批流程 --> <div> <el-timeline> <el-timeline-item v-for="(activity, index) in approvalActivities" :key="index" :timestamp="activity.timestamp" > <div> <span>审批人:</span>{{ activity.name }} <span style="margin-left: 10px;">审批意见:</span>{{ activity.content }} </div> </el-timeline-item> </el-timeline> </div> </detail-block> </div> </app-container> <!-- 审批弹窗信息收集 --> <approval-dialog ref="approvalDialog" @on-success="approvalSuccess" /> <!-- 选择设备弹窗 --> <equipment-dialog ref="equipmentDialog" @add="equipmentAddRow" /> </template> <style lang="scss"> .el-upload-list { display: none !important; } </style>