132 lines
4.0 KiB
Markdown
132 lines
4.0 KiB
Markdown
# 学生信息导入模板下载功能实现
|
|
|
|
## 变更时间
|
|
2025-01-27 15:30:00
|
|
|
|
## 变更内容
|
|
|
|
### 1. 后端API实现
|
|
- **文件**: `backend/ruoyi-modules/ruoyi-xg/src/main/java/org/dromara/xg/controller/XgStudentMsgController.java`
|
|
- **方法**: `importTemplate()`
|
|
- **功能**: 提供学生信息导入模板下载接口
|
|
- **接口路径**: POST `/studentMsg/studentMsg/importTemplate`
|
|
- **权限标识**: `studentMsg:studentMsg:import`
|
|
|
|
### 2. 前端API调用
|
|
- **文件**: `web/src/api/xg/xsjcxx/studentMsg/index.ts`
|
|
- **新增函数**: `downloadImportTemplate()`
|
|
- **功能**: 调用后端导入模板下载接口
|
|
|
|
### 3. 前端页面实现
|
|
- **文件**: `web/src/views/xg/xsjcxx/studentMsg/studentMsg/index.vue`
|
|
- **更新内容**:
|
|
- 导入 `downloadImportTemplate` 函数
|
|
- 实现 `importTemplate()` 方法,调用 `proxy?.download()` 下载模板
|
|
- 在导入对话框中添加"下载模板"链接
|
|
|
|
### 4. 模板文件
|
|
- **文件**: `backend/ruoyi-modules/ruoyi-xg/src/main/resources/student_template.xlsx`
|
|
- **状态**: 已存在,包含完整的学生信息导入模板
|
|
|
|
## 功能特点
|
|
|
|
### 1. 下载方式
|
|
- 使用 `proxy?.download()` 方法,支持大文件下载
|
|
- 自动生成带时间戳的文件名:`学生信息导入模板_${timestamp}.xlsx`
|
|
- 支持断点续传和错误处理
|
|
|
|
### 2. 用户体验
|
|
- 在导入对话框中提供"下载模板"链接
|
|
- 点击即可下载,无需额外确认
|
|
- 下载过程中显示加载提示
|
|
|
|
### 3. 安全性
|
|
- 需要 `studentMsg:studentMsg:import` 权限
|
|
- 使用POST方法,避免URL参数暴露
|
|
- 设置正确的Content-Type和Content-Disposition头
|
|
|
|
## 使用流程
|
|
|
|
1. 用户进入学生信息管理页面
|
|
2. 点击"导入"按钮,打开导入对话框
|
|
3. 在对话框中点击"下载模板"链接
|
|
4. 浏览器自动下载 `学生信息导入模板.xlsx` 文件
|
|
5. 用户填写模板后,可以重新上传进行导入
|
|
|
|
## 技术实现
|
|
|
|
### 后端实现要点
|
|
```java
|
|
@SaCheckPermission("studentMsg:studentMsg:import")
|
|
@PostMapping("/importTemplate")
|
|
public void importTemplate(HttpServletResponse response) {
|
|
// 从resources目录加载模板文件
|
|
ClassPathResource resource = new ClassPathResource("student_template.xlsx");
|
|
|
|
// 设置响应头
|
|
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
|
response.setHeader("Content-Disposition", "attachment; filename=学生信息导入模板.xlsx");
|
|
|
|
// 流式传输文件内容
|
|
// ... 文件传输逻辑
|
|
}
|
|
```
|
|
|
|
### 前端实现要点
|
|
```typescript
|
|
// API调用
|
|
export function downloadImportTemplate(): AxiosPromise<any> {
|
|
return request({
|
|
url: '/studentMsg/studentMsg/importTemplate',
|
|
method: 'post',
|
|
responseType: 'blob'
|
|
});
|
|
}
|
|
|
|
// 页面调用
|
|
const importTemplate = () => {
|
|
proxy?.download('studentMsg/studentMsg/importTemplate', {}, `学生信息导入模板_${new Date().getTime()}.xlsx`);
|
|
};
|
|
```
|
|
|
|
## 测试验证
|
|
|
|
### 1. 权限测试
|
|
- 有权限用户:可以正常下载模板
|
|
- 无权限用户:返回403错误
|
|
|
|
### 2. 功能测试
|
|
- 点击"下载模板"链接
|
|
- 验证文件是否正确下载
|
|
- 验证文件名格式是否正确
|
|
- 验证文件内容是否完整
|
|
|
|
### 3. 异常测试
|
|
- 模板文件不存在时的错误处理
|
|
- 网络异常时的错误处理
|
|
- 客户端断开连接时的处理
|
|
|
|
## 相关文档
|
|
|
|
- **API文档**: `docs/开发文档/API/学生信息管理API.md`
|
|
- **后端规范**: `.cursor/cursorrules-backend.md`
|
|
- **前端规范**: `.cursor/cursorrules-frontend.md`
|
|
|
|
## 变更影响
|
|
|
|
### 正面影响
|
|
- 提升用户体验,提供标准化的导入模板
|
|
- 减少数据导入错误,提高数据质量
|
|
- 统一导入格式,便于批量处理
|
|
|
|
### 风险评估
|
|
- 无破坏性变更
|
|
- 不影响现有功能
|
|
- 向后兼容
|
|
|
|
## 后续优化建议
|
|
|
|
1. **模板版本管理**: 考虑添加模板版本号,支持多版本模板
|
|
2. **模板预览**: 在下载前提供模板预览功能
|
|
3. **模板定制**: 支持根据用户权限定制不同的模板内容
|
|
4. **下载统计**: 添加模板下载次数统计功能 |