<!-- 批量检完并更新信息 --> <script lang="ts" setup name="BatchFinishDialog"> import type { FormInstance, FormRules } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus' import { reactive, ref } from 'vue' import dayjs from 'dayjs' import { getDictByCode } from '@/api/system/dict' import type { dictType } from '@/global' import { batchTerminate } from '@/api/business/manager/sendReceive' const emits = defineEmits(['onSuccess']) // 弹窗显示状态 const dialogVisible = ref(false) // 默认表单 const form = ref({ checkOrganization: '中国西昌卫星发射中心计量测试站', // 检定校准机构 traceDate: '', // 检定日期 measureValidDate: '', // 检定有效期至 conclusion: '', // 检定结论 meterIdentify: '', // 计量标识 restrictionInstruction: '', // 限用说明 orderId: '', // 委托书id sampleId: '', // 样品id }) const getList = ref([]) as any // 保存按钮加载状态 const btnLoading = ref(false) // -------------------------------------------字典---------------------------------------------+ const conclusionList = ref<dictType[]>([]) // 结论 const meterIdentifyDict = ref<dictType[]>([]) // 计量标识 // 获取字典值 async function getDict() { // 结论 getDictByCode('bizConclusion').then((response) => { conclusionList.value = response.data }) // 计量标识 getDictByCode('eqptMeterIdentify').then((response) => { meterIdentifyDict.value = response.data }) } // ---------------表单提交-------------------------------- // 表单对象 const dataFormRef = ref<FormInstance>() // 校验规则 const rules = reactive<FormRules>({ traceDate: [{ required: true, message: '检定日期不能为空', trigger: ['blur', 'change'] }], measureValidDate: [{ required: true, message: '检定有效期至不能为空', trigger: ['blur', 'change'] }], conclusion: [{ required: true, message: '检定结论不能为空', trigger: ['blur', 'change'] }], meterIdentify: [{ required: true, message: '计量标识不能为空', trigger: ['blur', 'change'] }], restrictionInstruction: [{ required: true, message: '限用说明不能为空', trigger: ['blur', 'change'] }], }) /** * 初始化审批弹窗 * @param orderId 委托书id * @param sampleId 样品id */ function initDialog(list: any) { if (list && list.length) { getList.value = list.map((item: any) => { return { orderId: item.orderId, // 委托书id sampleId: item.sampleId, // 样品id } }) } // 检定日期默认今天 form.value.traceDate = dayjs().format('YYYY-MM-DD') // 检定日期默认检定日期一年后 form.value.measureValidDate = dayjs().add(1, 'y').format('YYYY-MM-DD') getDict() dialogVisible.value = true } // 检定日期变化事件 const changeTraceDate = (val: string) => { form.value.measureValidDate = dayjs(val).add(1, 'y').format('YYYY-MM-DD') } // 提交表单 function submitForm(formEl: FormInstance | undefined) { if (!formEl) { return } formEl.validate((valid) => { if (valid) { btnLoading.value = true const param = getList.value.map((item: any) => { return { ...item, checkOrganization: '中国西昌卫星发射中心计量测试站', // 检定校准机构 traceDate: form.value.traceDate, // 检定日期 measureValidDate: form.value.measureValidDate, // 检定有效期至 conclusion: form.value.conclusion, // 检定结论 meterIdentify: form.value.meterIdentify, // 计量标识 restrictionInstruction: form.value.restrictionInstruction, // 限用说明 status: '5', // 完成状态需要变为5 } }) batchTerminate(param).then((res) => { ElMessage.success('操作成功') btnLoading.value = false dialogVisible.value = false emits('onSuccess') }).catch((_) => { btnLoading.value = false }) } }) } // 关闭弹窗 function handleClose() { dataFormRef.value?.resetFields() // 清除填入的信息和校验 dialogVisible.value = false } // 检定结论变化 const changeConclusion = (val: string) => { if (val === '所检项目合格') { form.value.meterIdentify = '合格' } else { form.value.meterIdentify = '停用' } } // ----------------------- 以下是暴露的方法内容 ---------------------------- defineExpose({ initDialog }) </script> <template> <el-dialog v-model="dialogVisible" title="批量检完并更新智能模型信息" width="600" :before-close="handleClose" > <el-form ref="dataFormRef" label-position="top" label-width="80px" :model="form" :rules="rules" > <el-row :gutter="24"> <el-col :span="24"> <el-form-item label="检定(校准)机构:"> <el-input v-model="form.checkOrganization" disabled /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="检定日期:" prop="traceDate"> <el-date-picker v-model="form.traceDate" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择日期" class="full-width-input" @change="changeTraceDate" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="检定有效期至:" prop="measureValidDate"> <el-date-picker v-model="form.measureValidDate" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择日期" class="full-width-input" /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="检定结论:" prop="conclusion"> <el-select v-model="form.conclusion" placeholder="请选择检定结论" filterable class="full-width-input" @change="changeConclusion" > <el-option v-for="item in conclusionList" :key="item.id" :label="item.name" :value="item.name" /> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="计量标识:" prop="meterIdentify"> <el-select v-model="form.meterIdentify" class="full-width-input" placeholder="计量标识" > <el-option v-for="item of meterIdentifyDict" :key="item.value" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> <el-col v-if="form.conclusion === '除*外其余所检项目合格'" :span="24"> <el-form-item label="限用说明:" prop="restrictionInstruction"> <el-input v-model="form.restrictionInstruction" type="textarea" autosize placeholder="请输入限用说明" /> </el-form-item> </el-col> </el-row> </el-form> <template #footer> <el-button type="primary" :loading="btnLoading" @click="submitForm(dataFormRef)"> 提交 </el-button> <el-button type="info" @click="handleClose"> 取消 </el-button> </template> </el-dialog> </template> <style lang="scss" scoped> // 样式 </style>