| | |
| | | } |
| | | |
| | | // 文件移除 |
| | | // const handleFileRemove = (file, fileListVal) => { |
| | | // uploadedFiles.value = fileListVal |
| | | // } |
| | | const handleFileRemove = (file, fileListVal) => { |
| | | uploadedFiles.value = fileListVal |
| | | // 从展示列表中移除 |
| | | fileList.value = fileListVal |
| | | |
| | | // 从已上传列表中移除 |
| | | const index = uploadedFiles.value.findIndex(item => |
| | | item.attachId === file.attachId || item.name === file.name |
| | | ) |
| | | if (index > -1) { |
| | | uploadedFiles.value.splice(index, 1) |
| | | } |
| | | } |
| | | |
| | | // 上传前验证 |
| | | const beforeFileUpload = file => { |
| | | const allowedExtensions = ['.zip', '.rar', '.7z', '.tar', '.gz'] |
| | |
| | | |
| | | // 提交数据的通用函数 |
| | | async function submitForm(objectionStatus) { |
| | | const isValid = await formRef.value?.validate().catch(() => false) |
| | | if (!isValid) return |
| | | // 只在新增时校验附件是否上传 |
| | | if (dialogMode.value === 'add' && uploadedFiles.value.length === 0) { |
| | | ElMessage.warning('请上传附件') |
| | | return |
| | | } |
| | | submitting.value = true |
| | | const isValid = await formRef.value?.validate().catch(() => false) |
| | | if (!isValid) return |
| | | |
| | | // 在编辑模式下,如果已有附件,可以不强制上传新附件 |
| | | if (dialogMode.value === 'add' && uploadedFiles.value.length === 0) { |
| | | return ElMessage.warning('请上传附件') |
| | | } |
| | | |
| | | submitting.value = true |
| | | |
| | | try { |
| | | // 构建符合接口要求的提交数据 |
| | | const submitData = { |
| | | // 编辑模式下传递id |
| | | ...(formData.value.id && { id: formData.value.id }), |
| | | title: formData.value.title, |
| | | objectionType: formData.value.objectionType, |
| | | submitter: formData.value.submitter, |
| | | submitterContact: formData.value.submitterContact, |
| | | catalogResourceName: formData.value.catalogResourceName, |
| | | objectionDesc: formData.value.objectionDesc, |
| | | objectionBasis: formData.value.objectionBasis, |
| | | areaCode: formData.value.areaCode || '', |
| | | handleUnit: formData.value.handleUnit || '', |
| | | // 只在有附件时才构建附件列表 |
| | | ...(uploadedFiles.value.length > 0 && { |
| | | attachmentList: uploadedFiles.value.map(file => ({ |
| | | attachId: file.attachId, |
| | | attachName: file.originalName, |
| | | })), |
| | | }), |
| | | objectionStatus: objectionStatus |
| | | } |
| | | await gdDataObjectionSubmitApi(submitData) |
| | | ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功') |
| | | visible.value = false |
| | | emit('success') |
| | | } finally { |
| | | submitting.value = false |
| | | } |
| | | try { |
| | | // 构建符合接口要求的提交数据 |
| | | const submitData = { |
| | | // 编辑模式下传递id |
| | | ...(formData.value.id && { id: formData.value.id }), |
| | | title: formData.value.title, |
| | | objectionType: formData.value.objectionType, |
| | | submitter: formData.value.submitter, |
| | | submitterContact: formData.value.submitterContact, |
| | | catalogResourceName: formData.value.catalogResourceName, |
| | | objectionDesc: formData.value.objectionDesc, |
| | | objectionBasis: formData.value.objectionBasis, |
| | | areaCode: formData.value.areaCode || '', |
| | | handleUnit: formData.value.handleUnit || '', |
| | | // 构建附件列表 - 使用当前已上传的文件(包括回显的) |
| | | ...(uploadedFiles.value.length > 0 && { |
| | | attachmentList: uploadedFiles.value.map(file => ({ |
| | | attachId: file.attachId, |
| | | attachName: file.originalName, |
| | | })), |
| | | }), |
| | | objectionStatus: objectionStatus |
| | | } |
| | | |
| | | // 如果是编辑且没有修改附件,可以保留原有附件ID |
| | | if (dialogMode.value === 'edit' && formData.value.attachIds) { |
| | | // 这里可以根据业务需求决定是否保留原附件ID |
| | | // 如果接口支持更新时重新上传附件ID列表,可以这样做 |
| | | } |
| | | |
| | | await gdDataObjectionSubmitApi(submitData) |
| | | ElMessage.success(dialogMode.value === 'add' ? '新增成功' : '更新成功') |
| | | visible.value = false |
| | | emit('success') |
| | | } finally { |
| | | submitting.value = false |
| | | } |
| | | } |
| | | |
| | | // 提交新增/编辑(保存) |
| | |
| | | } |
| | | // 加载详情 |
| | | async function loadDetail() { |
| | | if (!formData.value.id) return |
| | | const res = await gdDataObjectionDetailApi({ id: formData.value.id }) |
| | | formData.value = res?.data?.data ?? {} |
| | | if (formData.value.attachIds) { |
| | | getAttachDetail(formData.value.attachIds) |
| | | } |
| | | if (!formData.value.id) return |
| | | const res = await gdDataObjectionDetailApi({ id: formData.value.id }) |
| | | formData.value = res?.data?.data ?? {} |
| | | |
| | | // 处理附件回显 |
| | | if (formData.value.attachIds) { |
| | | await getAttachDetail(formData.value.attachIds) |
| | | // 回显到上传组件 |
| | | updateFileListForDisplay() |
| | | } |
| | | } |
| | | |
| | | // 更新文件列表用于显示 |
| | | function updateFileListForDisplay() { |
| | | fileList.value = [] |
| | | uploadedFiles.value = [] |
| | | |
| | | if (attachmentDetailsList.value && attachmentDetailsList.value.length > 0) { |
| | | attachmentDetailsList.value.forEach(attach => { |
| | | const fileItem = { |
| | | name: attach.originalName || attach.name, |
| | | url: attach.link, // 用于预览 |
| | | attachId: attach.id, // 文件ID |
| | | originalName: attach.originalName, |
| | | link: attach.link |
| | | } |
| | | |
| | | fileList.value.push({ |
| | | name: fileItem.name, |
| | | url: fileItem.url, |
| | | status: 'success' // 已上传状态 |
| | | }) |
| | | |
| | | uploadedFiles.value.push(fileItem) |
| | | }) |
| | | } |
| | | } |
| | | // 获取附件详情 |
| | | async function getAttachDetail(attachIds) { |
| | |
| | | |
| | | // 打开弹框 |
| | | async function open({ mode = 'add', row } = {}) { |
| | | dialogMode.value = mode |
| | | // 重置文件列表 |
| | | fileList.value = [] |
| | | uploadedFiles.value = [] |
| | | // 重置表单数据 |
| | | formData.value = dialogMode.value === 'add' ? initForm() : row |
| | | // 重置反馈表单数据 |
| | | feedbackFormData.value = initFeedbackForm() |
| | | if (dialogMode.value !== 'add') { |
| | | await loadDetail() |
| | | } |
| | | dialogMode.value = mode |
| | | // 重置文件列表 |
| | | fileList.value = [] |
| | | uploadedFiles.value = [] |
| | | // 重置表单数据 |
| | | formData.value = dialogMode.value === 'add' ? initForm() : row |
| | | // 重置反馈表单数据 |
| | | feedbackFormData.value = initFeedbackForm() |
| | | |
| | | if (dialogMode.value !== 'add') { |
| | | // 如果是编辑,设置ID并加载详情 |
| | | if (row && row.id) { |
| | | formData.value.id = row.id |
| | | } |
| | | await loadDetail() |
| | | } |
| | | } |
| | | |
| | | defineExpose({ open }) |