<!-- 新增通知公告弹窗 --> <script lang="ts" setup name="addNotice"> import type { FormInstance, FormRules } from 'element-plus' import { ElMessage } from 'element-plus' import dayjs from 'dayjs' import type { templateType } from '../tool_interface' import { getUserList } from '@/api/system/user' import { uploadApi } from '@/api/system/notice' import { templateAdd, templatePageDetail, templateUpdate } from '@/api/system/tool' import type { userType } from '@/views/system/user/user-interface' const emits = defineEmits(['resetData']) const ruleFormRef = ref<FormInstance>() // from组件 const ruleForm = reactive<templateType>({ userIdList: [], // 可使用人列表 templateType: '', // 类型 templateName: '', // 名称 templateCreator: '', // 负责人 minioFileName: '', // 上传文件名 templateDesc: '', // 描述 templateNo: '', createTime: '', id: '0', }) // 表单 const title = ref('') const rules = ref<FormRules>({ userIdList: [{ required: true, message: '可使用人列表不能为空', trigger: 'blur' }], templateName: [{ required: true, message: '模板名称不能为空', trigger: 'blur' }], templateCreator: [{ required: true, message: '模板负责人不能为空', trigger: 'blur' }], minioFileName: [{ required: true, message: '上传文件不能为空', trigger: 'blur' }], templateDesc: [{ required: true, message: '模板描述不能为空', trigger: 'blur' }], }) // 表单验证规则 const dialogVisible = ref<boolean>(false) // 弹窗显示 const userList = ref<userType[]>([]) // 可使用人列表 const baseUrl = 'http://111.198.10.15:21409' + '/static/' const getuser = () => { getUserList({ offset: 1, limit: 99999 }).then((res) => { userList.value = res.data.rows }) } // 获取可使用人列表 // 弹窗初始化 const initDialog = (row: templateType) => { title.value = row.title as string ruleForm.templateNo = '' ruleForm.templateName = '' ruleForm.createTime = '' ruleForm.templateDesc = '' ruleForm.minioFileName = '' ruleForm.userIdList = [] ruleForm.templateCreator = '' dialogVisible.value = true // ruleForm.noticePublisher = userInfo.$state.name // ruleForm.noticeCompany = userInfo.$state.deptName // ruleForm.noticeTime = dayjs().format('YYYY-MM-DD') if (row.title === '新增') { // 新增 ruleFormRef.value?.resetFields() ruleForm.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') } else if (row.title === '更新') { ruleForm.templateNo = row.templateNo ruleForm.templateName = row.templateName // ruleForm.createTime = row.createTime ruleForm.templateDesc = row.templateDesc ruleForm.minioFileName = row.minioFileName ruleForm.userIdList = row.userIdList ruleForm.templateCreator = row.templateCreator ruleForm.id = row.id ruleForm.createTime = dayjs().format('YYYY-MM-DD HH:mm:ss') // 获取详情列表 templatePageDetail({ templateNo: row.templateNo, templateType: row.templateType, templateName: row.templateName, templateCreator: row.templateCreator, createTime: row.createTime }).then((res) => { ruleForm.userIdList = res.data.rows[0].userIdList }) // 修改 } else { // 详情 ruleForm.templateNo = row.templateNo ruleForm.templateName = row.templateName ruleForm.createTime = row.createTime ruleForm.templateDesc = row.templateDesc ruleForm.minioFileName = row.minioFileName ruleForm.userIdList = row.userIdList ruleForm.templateCreator = row.templateCreator // 获取详情列表 templatePageDetail({ ...row }).then((res) => { ruleForm.userIdList = res.data.rows[0].userIdList }) } ruleForm.templateType = row.templateType getuser() } 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 === '新增') { templateAdd(ruleForm).then((res) => { if (res.code === 200) { ElMessage.success('新增成功') close() } }) } else { templateUpdate(ruleForm).then((res) => { if (res.code === 200) { ElMessage.success('更新成功') close() } }) } } }) } // 取消 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) { 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="50%" append-to-body @close="resetForm"> <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-position="right" label-width="110px"> <el-row :gutter="20"> <el-col :span="12"> <el-form-item label="模板编号" prop="templateNo"> <el-input v-model.trim="ruleForm.templateNo" placeholder="模板编号" disabled /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="模板名称" prop="templateName"> <el-input v-model.trim="ruleForm.templateName" placeholder="模板名称" :disabled="title === '详情'" /> </el-form-item> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="12"> <el-form-item label="创建时间"> <el-input v-model.trim="ruleForm.createTime" disabled /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="模板负责人" prop="templateCreator"> <el-input v-model.trim="ruleForm.templateCreator" placeholder="模板负责人" :disabled="title === '详情'" /> </el-form-item> </el-col> </el-row> <el-form-item label="模板描述" prop="templateDesc"> <el-input v-model.trim="ruleForm.templateDesc" placeholder="模板描述" :disabled="title === '详情'" /> </el-form-item> <el-form-item label="可使用人" prop="userIdList"> <el-select v-model="ruleForm.userIdList" placeholder="请选择可使用人" multiple :disabled="title === '详情'"> <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id" /> </el-select> </el-form-item> <!-- <el-form-item label="发布内容" prop="noticeContent"> <el-input v-model.trim="ruleForm.noticeContent" :rows="4" type="textarea" /> </el-form-item> --> <el-form-item label="附件" prop="minioFileName"> <span>{{ ruleForm.minioFileName }}</span> <el-button type="primary" :disabled="title === '详情'" @click="upload"> 上传 </el-button> <el-link v-if="title === '详情'" :href="baseUrl + ruleForm.minioFileName" type="primary" target="_blank" > 附件 </el-link> <input v-show="title === ''" ref="fileRef" type="file" accept="pdf/*" @change="onFileChange"> </el-form-item> <el-form-item> <el-button v-if="title !== '详情'" type="primary" @click="submitForm(ruleFormRef)"> 发布 </el-button> <el-button @click="resetForm(ruleFormRef)"> 关闭 </el-button> </el-form-item> </el-form> </el-dialog> </template> <style lang="ts" scoped></style>