吉安感知网项目-前端
张含笑
2026-01-29 3e39466d98aa1c39befe4e68f1dbbaca16b3611c
applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/FormDiaLog.vue
@@ -153,7 +153,6 @@
                  <div class="upload-container">
                     <el-upload
                        :http-request="handleHttpRequest"
                        :limit="3"
                        :on-success="handleUploadSuccess"
                        :on-error="handleUploadError"
                        :on-remove="handleFileRemove"
@@ -166,7 +165,7 @@
                           <el-button type="primary">选择文件</el-button>
                        </template>
                        <template #tip>
                           <div class="el-upload__tip">支持上传 (.zip/.rar/.7z/.tar/.gz)格式文件</div>
                           <div class="el-upload__tip">支持上传 (.zip/.rar/.7z/.tar/.gz)格式</div>
                        </template>
                     </el-upload>
                  </div>
@@ -293,6 +292,8 @@
   catalogResourceName: fieldRules(true),
   objectionDesc: fieldRules(true),
   objectionBasis: fieldRules(true),
   // attachId: dialogMode.value === 'add' ? fieldRules(true) : fieldRules(false)
}
// 异议反馈表单校验规则
@@ -322,10 +323,21 @@
}
// 文件移除
// 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']
@@ -363,41 +375,53 @@
// 提交数据的通用函数
async function submitForm(objectionStatus) {
   const isValid = await formRef.value?.validate().catch(() => false)
   if (!isValid) return
   if (uploadedFiles.value.length === 0) {
      return ElMessage.warning('请上传附件')
   }
   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 || '',
         // 构建附件列表
         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
  }
}
// 提交新增/编辑(保存)
@@ -434,12 +458,42 @@
}
// 加载详情
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) {
@@ -473,17 +527,22 @@
// 打开弹框
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 })
@@ -496,6 +555,9 @@
}
.upload-container {
   width: 100%;
   .el-upload__tip {
      display: inline;
   }
}
.label {
   width: 120px !important;