Files
hzdyjs/✅出国境登记表盖章文件设置为必填项.md
T
2025-10-14 16:41:19 +08:00

9.7 KiB
Raw Blame History

✅ 出国境登记表盖章文件设置为必填项

📋 需求说明

功能位置: 人事管理 → 出国管理 → 出国申请 → 新增申请
需求内容: 在新增申请弹窗中,"出国境登记表盖章上传"必须设置为必填项,用户必须上传附件才能提交申请
修复时间: 2025-10-13 15:00
修复文件: web/src/views/rs/overseas/index.vue


🔧 修复内容

修复位置

文件: web/src/views/rs/overseas/index.vue
方法: submitApplicationForm (第1975-2140行)
修复行: 第1978-1982行

修复前

// 盖章文件上传检查已移除(不再作为必填项)
// if (!state.applicationForm.stampedFileUploadStatus || state.applicationForm.stampedFileUploadStatus === '0') {
//   ElMessage.warning('请先下载登记备案附件填写盖章后上传,才能提交申请!');
//   return;
// }

问题: 盖章文件检查代码被注释,用户可以不上传盖章文件直接提交申请。

修复后

// ✅ 盖章文件上传检查(必填项)
if (!state.applicationForm.stampedFileUploadStatus || state.applicationForm.stampedFileUploadStatus === '0') {
  ElMessage.warning('请先上传出国境登记表盖章文件才能提交申请!');
  return;
}

改进:

  1. ✅ 取消注释,启用盖章文件必填检查
  2. ✅ 优化提示信息,更加明确和简洁
  3. ✅ 确保用户必须上传盖章文件才能提交

📊 验证逻辑

字段说明

字段名 类型 说明 值
stampedFileUploadStatus String 盖章文件上传状态 '0'=未上传, '1'=已上传
stampedRegistrationFileName String 盖章文件名称 文件名
stampedRegistrationFilePath String 盖章文件路径 OSS路径
stampedFileOssId String 盖章文件OSS ID OSS ID
stampedFileUploadTime String 盖章文件上传时间 时间戳

验证条件

// 检查1: stampedFileUploadStatus 字段不存在
!state.applicationForm.stampedFileUploadStatus

// 检查2: stampedFileUploadStatus 值为 '0'(未上传)
state.applicationForm.stampedFileUploadStatus === '0'

// 满足任一条件,提示用户并阻止提交

🧪 测试步骤

1. 测试未上传盖章文件时的提交

操作步骤:

  1. 进入:人事管理 → 出国管理 → 出国申请
  2. 点击"新增申请"按钮
  3. 阅读文件通知后点击"我已阅读并理解"
  4. 填写所有必填字段(姓名、部门、出国时间等)
  5. 不上传出国境登记表盖章文件
  6. 点击"提交"按钮

预期结果:

  • ❌ 提交失败
  • 🔔 弹出提示:请先上传出国境登记表盖章文件才能提交申请!
  • 📝 表单仍然停留在新增申请页面

2. 测试上传盖章文件后的提交

操作步骤:

  1. 进入:人事管理 → 出国管理 → 出国申请
  2. 点击"新增申请"按钮
  3. 阅读文件通知后点击"我已阅读并理解"
  4. 填写所有必填字段(姓名、部门、出国时间等)
  5. 上传出国境登记表盖章文件(PDF格式)
  6. 点击"提交"按钮

预期结果:

  • ✅ 提交成功
  • 🔔 弹出提示:提交成功(或根据后端返回的消息)
  • 📝 表单关闭,返回列表页面
  • 📋 列表中显示新增的申请记录

3. 测试上传后删除盖章文件

操作步骤:

  1. 进入:人事管理 → 出国管理 → 出国申请
  2. 点击"新增申请"按钮
  3. 阅读文件通知后点击"我已阅读并理解"
  4. 填写所有必填字段
  5. 上传出国境登记表盖章文件
  6. 点击删除按钮移除已上传的盖章文件
  7. 点击"提交"按钮

预期结果:

  • ❌ 提交失败
  • 🔔 弹出提示:请先上传出国境登记表盖章文件才能提交申请!
  • 📝 表单仍然停留在新增申请页面

📝 相关代码说明

盖章文件上传处理流程

1. 上传成功回调

// 第2695-2712行
const handleStampedFileUploadSuccess = (response: any) => {
  if (response.code === 200) {
    // 更新表单字段
    state.applicationForm.stampedFileOssId = response.data.ossId;
    state.applicationForm.stampedRegistrationFilePath = response.data.filePath;
    state.applicationForm.stampedRegistrationFileName = response.data.fileName;
    state.applicationForm.stampedFileUploadTime = response.data.uploadTime;
    state.applicationForm.stampedFileUploadStatus = '1';  // ✅ 设置为已上传
    
    ElMessage.success('盖章文件上传成功!');
  } else {
    ElMessage.error(response.msg || '上传失败');
  }
};

2. 删除文件回调

// 第2719-2732行
const handleRemoveStampedFile = () => {
  // 清空所有相关字段
  state.applicationForm.stampedFileOssId = '';
  state.applicationForm.stampedRegistrationFilePath = '';
  state.applicationForm.stampedRegistrationFileName = '';
  state.applicationForm.stampedFileUploadTime = '';
  state.applicationForm.stampedFileUploadStatus = '0';  // ❌ 设置为未上传
  
  // 清空文件列表
  state.stampedFileList = [];
  
  ElMessage.info('已移除盖章文件');
};

3. 重置表单时初始化

// 第1944-1973行
const resetApplicationForm = () => {
  state.applicationForm = {
    // ... 其他字段
    stampedFileOssId: '',
    stampedRegistrationFilePath: '',
    stampedRegistrationFileName: '',
    stampedFileUploadTime: '',
    stampedFileUploadStatus: '0',  // ⚠️ 默认为未上传
  };
  
  // 重置盖章文件上传列表
  state.stampedFileList = [];
};

🎯 业务规则

必填项要求

序号 字段 要求 说明
1 基本信息 必填 姓名、部门、身份证等
2 出国信息 必填 目的地、时间、事由等
3 盖章文件 必填 出国境登记表盖章PDF
4 党籍附件 条件必填 党员且超过30天
5 其他附件 非必填 可选附件

文件格式要求

出国境登记表盖章文件:

  • ✅ 格式:PDF(推荐)、JPG、PNG
  • ✅ 大小:不超过10MB
  • ✅ 内容:填写完整并加盖公章的出国境登记表

🔍 问题排查

问题1: 上传了文件但提示未上传

可能原因:

  1. 文件上传成功但 stampedFileUploadStatus 未更新
  2. 网络问题导致上传失败但未提示

解决方案:

  1. 检查浏览器控制台是否有错误
  2. 检查上传接口返回的 response.code 是否为200
  3. 确认 handleStampedFileUploadSuccess 方法正确执行

问题2: 删除文件后状态未更新

可能原因:

  • handleRemoveStampedFile 方法未正确执行

解决方案:

  1. 检查删除按钮的事件绑定
  2. 确认 stampedFileUploadStatus 被设置为 '0'
  3. 查看控制台是否有"已移除盖章文件"提示

问题3: 表单重置后文件仍然显示

可能原因:

  • state.stampedFileList 未正确清空

解决方案:

  1. 确认 resetApplicationForm 方法中清空了 state.stampedFileList
  2. 检查文件列表的绑定是否正确

📊 验收标准

✅ 必须通过

  • 未上传盖章文件时,点击提交会弹出提示并阻止提交
  • 上传盖章文件后,可以正常提交申请
  • 上传后删除盖章文件,点击提交会弹出提示并阻止提交
  • 提示信息准确、清晰、友好
  • 盖章文件上传、删除功能正常

⭐ 建议验证

  • 测试不同文件格式(PDF、JPG、PNG)
  • 测试不同文件大小(1MB、5MB、10MB)
  • 测试多次上传和删除操作
  • 测试编辑已有申请时的行为

💡 技术要点

状态管理

// 盖章文件上传状态
state.applicationForm.stampedFileUploadStatus = '0' | '1'
// '0' = 未上传(默认值)
// '1' = 已上传

提交验证顺序

1. Element Plus 表单验证(必填字段、格式验证)
   ↓
2. 盖章文件上传检查(stampedFileUploadStatus)
   ↓
3. 党籍保留附件检查(条件必填)
   ↓
4. 后端前置条件校验(出国登记、党籍保留)
   ↓
5. 字段映射和数据处理
   ↓
6. 提交到后端API

关键代码位置

功能 方法名 行号 说明
提交验证 submitApplicationForm 1975-2140 主提交方法
盖章检查 - 1978-1982 必填验证
上传成功 handleStampedFileUploadSuccess 2695-2712 更新状态
删除文件 handleRemoveStampedFile 2719-2732 清空状态
重置表单 resetApplicationForm 1944-1973 初始化状态

📚 相关文档

  1. 出国申请业务流程: docs/业务模块/出国管理/出国申请流程.md
  2. 附件上传规范: docs/开发文档/附件上传开发规范.md
  3. 表单验证规范: .cursor/cursorrules-frontend.md

🎉 修复成果

修复前

  • ❌ 盖章文件可选,用户可以不上传直接提交
  • ❌ 可能导致后续审批流程缺少必要材料
  • ❌ 不符合业务规范要求

修复后

  • ✅ 盖章文件必填,用户必须上传才能提交
  • ✅ 确保申请材料完整性
  • ✅ 符合业务规范要求
  • ✅ 提示信息清晰明确

用户体验

  • 🔔 友好提示: 未上传时明确告知用户需要上传盖章文件
  • 🎯 操作引导: 引导用户完成必要的材料上传
  • ✅ 流程规范: 确保申请流程的完整性和合规性

修复时间: 2025-10-13 15:00
修复文件: web/src/views/rs/overseas/index.vue
修复行数: 第1978-1982行(5行代码)
修复状态: ✅ 已完成
测试状态: ⏳ 待用户验证

请在新增申请时测试盖章文件必填验证功能! 😊