9.7 KiB
9.7 KiB
✅ 出国境登记表盖章文件设置为必填项
📋 需求说明
功能位置: 人事管理 → 出国管理 → 出国申请 → 新增申请
需求内容: 在新增申请弹窗中,"出国境登记表盖章上传"必须设置为必填项,用户必须上传附件才能提交申请
修复时间: 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;
}
改进:
- ✅ 取消注释,启用盖章文件必填检查
- ✅ 优化提示信息,更加明确和简洁
- ✅ 确保用户必须上传盖章文件才能提交
📊 验证逻辑
字段说明
| 字段名 | 类型 | 说明 | 值 |
|---|---|---|---|
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. 测试未上传盖章文件时的提交
操作步骤:
- 进入:人事管理 → 出国管理 → 出国申请
- 点击"新增申请"按钮
- 阅读文件通知后点击"我已阅读并理解"
- 填写所有必填字段(姓名、部门、出国时间等)
- 不上传出国境登记表盖章文件
- 点击"提交"按钮
预期结果:
- ❌ 提交失败
- 🔔 弹出提示:
请先上传出国境登记表盖章文件才能提交申请! - 📝 表单仍然停留在新增申请页面
2. 测试上传盖章文件后的提交
操作步骤:
- 进入:人事管理 → 出国管理 → 出国申请
- 点击"新增申请"按钮
- 阅读文件通知后点击"我已阅读并理解"
- 填写所有必填字段(姓名、部门、出国时间等)
- 上传出国境登记表盖章文件(PDF格式)
- 点击"提交"按钮
预期结果:
- ✅ 提交成功
- 🔔 弹出提示:
提交成功(或根据后端返回的消息) - 📝 表单关闭,返回列表页面
- 📋 列表中显示新增的申请记录
3. 测试上传后删除盖章文件
操作步骤:
- 进入:人事管理 → 出国管理 → 出国申请
- 点击"新增申请"按钮
- 阅读文件通知后点击"我已阅读并理解"
- 填写所有必填字段
- 上传出国境登记表盖章文件
- 点击删除按钮移除已上传的盖章文件
- 点击"提交"按钮
预期结果:
- ❌ 提交失败
- 🔔 弹出提示:
请先上传出国境登记表盖章文件才能提交申请! - 📝 表单仍然停留在新增申请页面
📝 相关代码说明
盖章文件上传处理流程
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: 上传了文件但提示未上传
可能原因:
- 文件上传成功但
stampedFileUploadStatus未更新 - 网络问题导致上传失败但未提示
解决方案:
- 检查浏览器控制台是否有错误
- 检查上传接口返回的
response.code是否为200 - 确认
handleStampedFileUploadSuccess方法正确执行
问题2: 删除文件后状态未更新
可能原因:
handleRemoveStampedFile方法未正确执行
解决方案:
- 检查删除按钮的事件绑定
- 确认
stampedFileUploadStatus被设置为 '0' - 查看控制台是否有"已移除盖章文件"提示
问题3: 表单重置后文件仍然显示
可能原因:
state.stampedFileList未正确清空
解决方案:
- 确认
resetApplicationForm方法中清空了state.stampedFileList - 检查文件列表的绑定是否正确
📊 验收标准
✅ 必须通过
- 未上传盖章文件时,点击提交会弹出提示并阻止提交
- 上传盖章文件后,可以正常提交申请
- 上传后删除盖章文件,点击提交会弹出提示并阻止提交
- 提示信息准确、清晰、友好
- 盖章文件上传、删除功能正常
⭐ 建议验证
- 测试不同文件格式(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 | 初始化状态 |
📚 相关文档
- 出国申请业务流程:
docs/业务模块/出国管理/出国申请流程.md - 附件上传规范:
docs/开发文档/附件上传开发规范.md - 表单验证规范:
.cursor/cursorrules-frontend.md
🎉 修复成果
修复前
- ❌ 盖章文件可选,用户可以不上传直接提交
- ❌ 可能导致后续审批流程缺少必要材料
- ❌ 不符合业务规范要求
修复后
- ✅ 盖章文件必填,用户必须上传才能提交
- ✅ 确保申请材料完整性
- ✅ 符合业务规范要求
- ✅ 提示信息清晰明确
用户体验
- 🔔 友好提示: 未上传时明确告知用户需要上传盖章文件
- 🎯 操作引导: 引导用户完成必要的材料上传
- ✅ 流程规范: 确保申请流程的完整性和合规性
修复时间: 2025-10-13 15:00
修复文件: web/src/views/rs/overseas/index.vue
修复行数: 第1978-1982行(5行代码)
修复状态: ✅ 已完成
测试状态: ⏳ 待用户验证
请在新增申请时测试盖章文件必填验证功能! 😊