<template> <el-dialog v-model="visible" :title="type === 'edit' ? '修改' : '新增'" :before-close="fnClose" > <el-form ref="formRef" :rules="rules" :model="form" label-width="150px"> <el-form-item v-if="type === 'add'" label="承诺书名称" prop="COMMITMENTNAME" > <el-input v-model="form.COMMITMENTNAME" placeholder="请输入承诺书名称" style="width: 300px" ></el-input> </el-form-item> <el-form-item v-if="type === 'edit'" label="经营企业" prop="OPERATINGCOMPANY" > <span>{{ operatingCompany }}</span> </el-form-item> <el-form-item label="承诺书文件" prop="file"> <layout-upload v-model:file-list="form.file" accept=".pdf" :limit="9" :before-upload="fnUpload" /> </el-form-item> <el-form-item label="到期时间" prop="EXPIRYDATE"> <el-date-picker v-model="form.EXPIRYDATE" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="选择时间" style="width: 200px" /> </el-form-item> <el-form-item label="备注" prop="MEETING_CONTENT"> <el-input v-model="form.MEETING_CONTENT" type="textarea" placeholder="请输入内容" style="width: 300px" ></el-input> </el-form-item> </el-form> <template #footer> <el-button @click="fnClose">取消</el-button> <el-button type="primary" @click="fnSubmit">确定</el-button> </template> </el-dialog> </template> <script setup> import { onMounted, ref, toRaw } from "vue"; import { useVModels } from "@vueuse/core"; import { ElMessage } from "element-plus"; import LayoutUpload from "@/components/upload/index.vue"; import { addCommitmentView, editCommitmentView, getSafetyCommitmentList, } from "@/request/traffic_safety_commitment.js"; const props = defineProps({ visible: { type: Boolean, required: true, default: false, }, form: { type: {}, required: false, default: false, }, loading: { type: Boolean, required: true, default: false, }, options: { type: Array, required: true, default: () => [], }, type: { type: String, required: true, default: "", }, }); const emits = defineEmits(["update:visible", "update:form", "get-data"]); const { visible, form } = useVModels(props, emits); const rules = { file: [ { required: true, message: "请上传承诺书文件附件", trigger: "change" }, ], COMMITMENTNAME: [ { required: true, message: "请输入承诺书名称", trigger: "blur" }, ], }; const operatingCompany = ref(""); onMounted(async () => { const resData = await getSafetyCommitmentList(); if (resData && resData.varList && resData.varList.length > 0) { operatingCompany.value = resData.varList[0].CORP_NAME; } }); const formRef = ref(null); const fnClose = () => { formRef.value.resetFields(); visible.value = false; }; const fnSubmit = async () => { await formRef.value.validate(); const rawFormValue = toRaw(form.value); const formData = new FormData(); // 处理文件上传 if (Array.isArray(rawFormValue.file)) { rawFormValue.file.forEach((fileItem) => { if (fileItem.raw) { formData.append("FFILE", fileItem.raw); } }); } Object.keys(rawFormValue).forEach((key) => { if (key !== "file") { formData.append(key, rawFormValue[key]); } }); // 执行添加或编辑操作 if (props.type === "add") { formData.append("USER_ID", rawFormValue.USER_ID); await addCommitmentView(formData); } else { formData.append( "SECURITYCOMMITMENT_ID", rawFormValue.SECURITYCOMMITMENT_ID ); await editCommitmentView(formData); } // 操作成功提示 ElMessage.success("操作成功"); // 关闭表单对话框 fnClose(); // 触发更新数据的事件 emits("get-data"); }; const fnUpload = (file) => { const isLt100M = file.size / 1024 / 1024 < 100; if (!isLt100M) { ElMessage.error("文件大小不能超过100M"); return false; } return true; }; </script> <style scoped lang="scss"></style>