# 异步文件上传功能实施计划 - Part 4: 前端开发 ## 文档信息 - **创建日期**: 2026-03-05 - **版本**: v1.1 - **作者**: Claude - **关联设计**: [前端设计文档](../design/2026-03-05-async-file-upload-frontend-design.md) - **变更说明**: 移除WebSocket,改为页面轮询机制 ## 任务概述 根据前端设计文档,扩展UploadData.vue组件实现异步批量上传功能。 **预计工时**: 4.5个工作日 ## 任务清单 ### 任务 1: API接口封装(0.5天) **文件**: `ruoyi-ui/src/api/ccdiProjectUpload.js` **工作内容**: ```javascript // 批量上传文件 export function batchUploadFiles(projectId, files) { const formData = new FormData() files.forEach(file => formData.append('files', file)) formData.append('projectId', projectId) return request({ url: '/ccdi/file-upload/batch', method: 'post', data: formData, timeout: 300000 }) } // 查询文件上传记录列表 export function getFileUploadList(params) { return request({ url: '/ccdi/file-upload/list', method: 'get', params }) } // 查询文件上传统计 export function getFileUploadStatistics(projectId) { return request({ url: `/ccdi/file-upload/statistics/${projectId}`, method: 'get' }) } ``` ### 任务 2: 批量上传弹窗(1天) **文件**: `ruoyi-ui/src/views/ccdiProject/components/detail/UploadData.vue` **主要修改**: 1. 添加批量上传弹窗状态 2. 修改`handleUploadClick`方法 3. 实现文件选择和校验逻辑 4. 实现批量上传功能 **关键代码**: ```javascript // 批量上传 async handleBatchUpload() { if (this.selectedFiles.length === 0) { this.$message.warning('请选择要上传的文件') return } this.uploadLoading = true try { await batchUploadFiles( this.projectId, this.selectedFiles.map(f => f.raw) ) this.uploadLoading = false this.batchUploadDialogVisible = false this.$message.success('上传任务已提交,请查看处理进度') // 刷新数据并启动轮询 await Promise.all([ this.loadStatistics(), this.loadFileList() ]) this.startPolling() } catch (error) { this.uploadLoading = false this.$message.error('上传失败:' + (error.msg || '未知错误')) } } ``` ### 任务 3: 统计卡片(0.5天) **工作内容**: 1. 添加统计数据状态 2. 实现统计卡片组件 3. 实现点击筛选功能 **模板代码**: ```vue