<!-- 新增签名弹窗 --> <script lang="ts" setup name="addNotice"> import type { FormInstance, FormRules } from 'element-plus' import { ElMessage } from 'element-plus' import dayjs from 'dayjs' import showPhoto from '../showPhoto.vue' import { getDictByCode } from '@/api/system/dict' import userListComp from '@/views/measure/person/components/userListDialog.vue' import { getUserList } from '@/api/system/user' import { uploadApi } from '@/api/system/notice' import { addeFileListPage } from '@/api/system/tool' const emits = defineEmits(['resetData']) const ruleFormRef = ref<FormInstance>() // from组件 const updateTime = ref('') const ruleForm = ref<any>({ businessDownloadType: '', // 业务类型(字典) createTime: '', createUser: '', descn: '', // 描述备注 downloadNo: '', // 文件编号 fileName: '', // 文件名称 fileType: '', id: '', minioFileName: '', // 附件文件名 moduleName: '', // 模块名称 updateTime: '', updateUser: '', }) // 表单 const resetForm1 = () => { ruleForm.value = { businessDownloadType: '', // 业务类型(字典) createTime: '', createUser: '', descn: '', // 描述备注 downloadNo: '', // 文件编号 fileName: '', // 文件名称 fileType: '', id: '', minioFileName: '', // 附件文件名 moduleName: '', // 模块名称 updateTime: '', updateUser: '', } } const title = ref('') const rules = ref<FormRules>({ businessDownloadType: [{ required: true, message: '请选择业务类型', trigger: 'blur' }], descn: [{ required: true, message: '请输入描述备注', trigger: 'blur' }], fileName: [{ required: true, message: '请输入文件名称', trigger: 'blur' }], fileType: [{ required: true, message: '请选择文件类型', trigger: 'blur' }], minioFileName: [{ required: true, message: '请上传附件', trigger: 'blur' }], moduleName: [{ required: true, message: '请输入模块名称', trigger: 'blur' }], }) // 表单验证规则 const dialogVisible = ref<boolean>(false) // 弹窗显示 // 弹窗初始化 const initDialog = (row: any) => { title.value = row.title as string dialogVisible.value = true resetForm1() if (row.title === '新增') { // 新增 ruleFormRef.value?.resetFields() updateTime.value = dayjs().format('YYYY-MM-DD HH:mm') } // 修改 详情 else { ruleForm.value = row updateTime.value = row.updateTime } } defineExpose({ initDialog }) // 关闭弹窗 const close = () => { dialogVisible.value = false emits('resetData') } // 提交 const submitForm = async (formEl: FormInstance | undefined) => { if (!formEl) { return } await formEl.validate((valid, fields) => { if (valid) { if (title.value === '新增') { addeFileListPage(ruleForm.value).then((res) => { ElMessage({ type: 'success', message: '添加成功', }) }) } else { console.log('编辑') } } }) } // 获取文件类型 const fileTypeList = ref([]) const getFileType = () => { getDictByCode('').then((res) => { fileTypeList.value = res.data }) } getFileType() // 获取业务类型 const businessTypeList = ref([]) const getBusinessType = () => { getDictByCode('businessDownloadType').then((res) => { businessTypeList.value = res.data }) } getBusinessType() // 取消 const resetForm = (formEl: FormInstance | undefined) => { formEl?.resetFields() dialogVisible.value = false emits('resetData') } 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]) uploadApi(fd).then((res) => { if (res.code === 200) { ruleFormRef.value?.clearValidate('minioFileName') ruleForm.minioFileName = res.data[0] ElMessage.success('上传成功') } else { ElMessage.error(res.message) } }) } } const upload = () => { fileRef.value.click() } </script> <template> <el-dialog v-if="dialogVisible" v-model="dialogVisible" :title="title" width="80%" append-to-body class="container" @close="resetForm"> <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-position="right" label-width="110px" :class="[title === '详情' ? 'isDetail' : '']"> <el-row :gutter="24"> <el-col :span="6"> <el-form-item label="文件编号" prop="minioFileName"> <el-input v-model="ruleForm.downloadNo" disabled placeholder="系统自动生成" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="模块名称" prop="moduleName"> <el-input v-model="ruleForm.moduleName" :disabled="title === '详情'" :placeholder="title === '详情' ? '' : '请输入模块名称'" /> </el-form-item> </el-col> <!-- <el-col :span="6"> <el-form-item label="创建人" prop="updateUser"> <el-input v-model="ruleForm.updateUser" disabled /> </el-form-item> </el-col> --> <el-col :span="6"> <el-form-item label="创建时间" prop="updateTime"> <el-date-picker v-model="updateTime" type="datetime" format="YYYY-MM-DD hh:mm" value-format="YYYY-MM-DD hh:mm" /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="6"> <el-form-item label="业务类型" prop="businessDownloadType"> <el-select v-model="ruleForm.businessDownloadType" :disabled="title === '详情'" :placeholder="title === '详情' ? '' : '请选择业务类型'"> <el-option v-for="item in businessTypeList" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="文件名称" prop="fileName"> <el-input v-model="ruleForm.fileName" :disabled="title === '详情'" :placeholder="title === '详情' ? '' : '请输入文件名称'" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="文件类型" prop="fileType"> <el-select v-model="ruleForm.fileType" :disabled="title === '详情'" :placeholder="title === '详情' ? '' : '请选择文件类型'"> <el-option v-for="item in fileTypeList" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="12"> <el-form-item label="描述备注" prop="descn"> <el-input v-model="ruleForm.descn" :disabled="title === '详情'" :placeholder="title === '详情' ? '' : '请输入描述备注'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="12"> <el-form-item label="模板附件" prop="minioFileName"> <show-photo :minio-file-name="ruleForm.minioFileName" width="100%" height="125px" /> <el-button v-if="title !== '详情'" type="primary" :disabled="title === '详情'" :style="{ 'margin-left': ruleForm.minioFileName === '' ? '0px' : '20px', 'margin-top': ruleForm.minioFileName === '' ? '0px' : '56px' }" @click="upload"> {{ ruleForm.minioFileName === '' ? '上传' : '更换附件' }} </el-button> <input v-show="title === '123'" ref="fileRef" type="file" @change="onFileChange"> </el-form-item> </el-col> </el-row> </el-form> <template #footer> <div class="dialog-footer footer"> <el-button v-if="title !== '详情'" type="primary" @click="submitForm(ruleFormRef)"> 发布 </el-button> <el-button @click="resetForm(ruleFormRef)"> 关闭 </el-button> </div> </template> <!-- 多选用户弹窗 --> <user-list-comp ref="userListRef" @add="confirmUser" /> </el-dialog> </template> <style lang="scss" scoped> .container { .isDetail { ::v-deep { .el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap > .el-form-item__label::before, .el-form-item.is-required:not(.is-no-asterisk) > .el-form-item__label::before { content: ""; display: none; } } } .center { display: flex; align-items: flex-end; } } </style>