9.4 KiB
9.4 KiB
✅ 出国境登记表盖章文件 - 查看功能实现
开发时间: 2025-10-13
功能状态: ✅ 已完成
🎯 功能说明
为"出国境登记表盖章文件"新增"查看"按钮,与"党籍保留附件"保持一致的功能体验。
📍 功能位置
人事管理 → 出国申请管理 → 出国申请 → 查看详情 → 出国境登记表盖章文件区域
🎨 界面效果
修改前
┌─────────────────────────────────────────────┐
│ 📄 出国境登记表盖章文件 │
├─────────────────────────────────────────────┤
│ 📄 出国登记表_王小二_1760232961518.pdf │
│ 上传时间: 2025-10-13 10:01:28 │
│ │
│ [⬇️ 下载] │
└─────────────────────────────────────────────┘
修改后
┌─────────────────────────────────────────────┐
│ 📄 出国境登记表盖章文件 │
├─────────────────────────────────────────────┤
│ 📄 出国登记表_王小二_1760232961518.pdf │
│ 上传时间: 2025-10-13 10:01:28 │
│ │
│ [👁️ 查看] [⬇️ 下载] │
└─────────────────────────────────────────────┘
💻 代码修改
修改文件
文件路径: web/src/views/rs/overseas/index.vue
修改内容
1. 界面修改(第1003-1031行)
修改前:
<el-button
link
type="primary"
size="small"
@click="handleDownloadStampedFile((state.viewData as OverseasApplicationVO))"
>
<el-icon><Download /></el-icon> 下载
</el-button>
修改后:
<div style="display: flex; gap: 8px;">
<el-button
link
type="primary"
size="small"
@click="handlePreviewStampedFile((state.viewData as OverseasApplicationVO))"
>
<el-icon><View /></el-icon> 查看
</el-button>
<el-button
link
type="primary"
size="small"
@click="handleDownloadStampedFile((state.viewData as OverseasApplicationVO))"
>
<el-icon><Download /></el-icon> 下载
</el-button>
</div>
2. 新增预览方法(第3527-3606行)
// 预览出国境登记表盖章文件
const handlePreviewStampedFile = async (data: OverseasApplicationVO) => {
console.log('👁️ 预览出国境登记表盖章文件:', data.stampedRegistrationFileName);
if (!data.stampedFileOssId) {
ElMessage.warning('文件OSS ID不存在,无法预览');
return;
}
try {
// 判断文件类型
const fileName = data.stampedRegistrationFileName || '';
const fileExt = fileName.split('.').pop()?.toLowerCase();
// 图片类型直接在新窗口预览
if (['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'].includes(fileExt || '')) {
// 使用OSS下载接口获取图片
const imageUrl = `/resource/oss/download/${data.stampedFileOssId}`;
// 获取blob URL用于预览
const response = await request({
url: imageUrl,
method: 'get',
responseType: 'blob'
});
const blob = response instanceof Blob ? response : new Blob([response.data]);
const blobUrl = window.URL.createObjectURL(blob);
// 在新窗口打开图片
const previewWindow = window.open('', '_blank');
if (previewWindow) {
previewWindow.document.write(`
<!DOCTYPE html>
<html>
<head>
<title>${fileName}</title>
<style>
body { margin: 0; display: flex; justify-content: center; align-items: center; min-height: 100vh; background: #f5f5f5; }
img { max-width: 100%; max-height: 100vh; object-fit: contain; }
</style>
</head>
<body>
<img src="${blobUrl}" alt="${fileName}" />
</body>
</html>
`);
previewWindow.document.close();
}
}
// PDF类型在新窗口预览
else if (fileExt === 'pdf') {
// 获取PDF文件
const response = await request({
url: `/resource/oss/download/${data.stampedFileOssId}`,
method: 'get',
responseType: 'blob'
});
const blob = response instanceof Blob ? response : new Blob([response.data], { type: 'application/pdf' });
const blobUrl = window.URL.createObjectURL(blob);
// 在新窗口打开PDF
window.open(blobUrl, '_blank');
// 延迟清理,确保新窗口已加载
setTimeout(() => {
window.URL.revokeObjectURL(blobUrl);
}, 60000); // 60秒后清理
}
// 其他文件类型提示下载
else {
ElMessage.info('该文件类型不支持在线预览,请下载后查看');
await handleDownloadStampedFile(data);
}
} catch (error) {
console.error('预览出国境登记表盖章文件失败:', error);
ElMessage.error('预览文件失败,请检查文件权限或稍后重试');
}
};
🎨 功能特性
✅ 支持的文件格式
| 类型 | 格式 | 预览方式 |
|---|---|---|
.pdf |
✅ 新标签页打开 | |
| 图片 | .jpg, .jpeg, .png |
✅ 新窗口显示 |
| 图片 | .gif, .bmp, .webp |
✅ 新窗口显示 |
| 其他 | .doc, .docx, 等 |
⚠️ 自动下载 |
✅ 功能亮点
- 智能识别: 自动识别文件类型,选择最佳预览方式
- 安全可靠: Token认证,权限验证,资源自动清理
- 用户友好: 新窗口打开,不影响当前页面操作
- 错误处理: 完善的异常捕获和友好的错误提示
- 统一体验: 与党籍保留附件保持一致的交互体验
📊 代码统计
| 指标 | 数值 |
|---|---|
| 新增代码行数 | ~80行 |
| 修改代码行数 | ~30行 |
| 新增方法数 | 1个 |
| TypeScript类型安全 | ✅ |
| ESLint检查 | ✅ 通过 |
🧪 测试建议
功能测试
-
PDF文件预览
- 上传PDF格式的出国境登记表
- 点击"查看"按钮
- 验证是否在新标签页中正确打开
-
图片文件预览
- 上传JPG/PNG格式的出国境登记表
- 点击"查看"按钮
- 验证是否在新窗口中正确显示
-
不支持格式处理
- 上传Word/Excel格式文件
- 点击"查看"按钮
- 验证是否提示并自动下载
-
错误处理
- 测试无权限访问的文件
- 测试不存在的文件
- 验证错误提示是否友好
兼容性测试
- Chrome浏览器
- Edge浏览器
- Firefox浏览器
- Safari浏览器
✅ 验收标准
- "查看"按钮正确显示
- 按钮位置在下载按钮左侧
- PDF文件可以预览
- 图片文件可以预览
- 不支持的文件自动下载
- 错误处理完善
- 无TypeScript编译错误
- 无ESLint错误
- 代码注释完善
🔄 与党籍保留附件的对比
| 特性 | 出国境登记表盖章文件 | 党籍保留附件 | 状态 |
|---|---|---|---|
| 查看按钮 | ✅ | ✅ | 一致 |
| PDF预览 | ✅ | ✅ | 一致 |
| 图片预览 | ✅ | ✅ | 一致 |
| 错误处理 | ✅ | ✅ | 一致 |
| 界面布局 | ✅ | ✅ | 一致 |
| 代码结构 | ✅ | ✅ | 一致 |
📚 相关文档
党籍保留附件查看功能文档
💡 使用说明
用户操作步骤
-
打开详情页
- 进入"出国申请管理"
- 点击某条记录的"查看详情"按钮
-
查看附件
- 滚动到"出国境登记表盖章文件"区域
- 点击"查看"按钮
-
预览文件
- PDF文件:在新标签页中打开
- 图片文件:在新窗口中显示
- 其他文件:自动触发下载
注意事项
-
浏览器弹窗拦截
- 如果点击查看没反应,请检查浏览器是否拦截了弹窗
- 允许网站弹出窗口后重试
-
文件加载时间
- 大文件可能需要等待几秒钟
- 请耐心等待加载完成
-
浏览器兼容性
- 推荐使用Chrome或Edge浏览器
- 获得最佳的预览体验
🎉 完成情况
- ✅ 界面修改完成
- ✅ 预览方法实现
- ✅ 代码质量检查通过
- ✅ 文档编写完成
- ⏳ 功能测试待进行
- ⏳ 用户验收待进行
📞 技术支持
如有问题或建议,请联系开发团队。
创建人: Cursor AI
创建时间: 2025-10-13
文档版本: v1.0