吉安感知网项目-前端
张含笑
2026-01-28 8b92f02211881d925e7fa8cd757448f22a9aad6b
feat:文件回显
1 files modified
168 ■■■■■ changed files
applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/FormDiaLog.vue 168 ●●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/orderDataManage/dataObjection/FormDiaLog.vue
@@ -323,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']
@@ -364,45 +375,53 @@
// 提交数据的通用函数
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
  }
}
// 提交新增/编辑(保存)
@@ -439,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) {
@@ -478,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 })