From a30ecee6a527f7ee28521bdf8069ab7b64c05de1 Mon Sep 17 00:00:00 2001 From: musteven <1009173794@qq.com> Date: Fri, 18 Apr 2025 20:16:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BD=9C=E4=B8=9A=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E7=95=8C=E9=9D=A2=E5=89=A9=E4=BD=99=E6=89=80=E6=9C=89?= =?UTF-8?q?=E5=86=85=E5=AE=B9=EF=BC=8C=E4=B8=89=E4=B8=AA=E6=8E=A7=E4=BB=B6?= =?UTF-8?q?=E7=AD=89=EF=BC=8C=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=BD=93=E6=88=90?= =?UTF-8?q?=E7=BB=A9=E4=B8=BA=E7=A9=BA=E6=97=B6=E6=9F=A5=E8=AF=A2=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E5=88=97=E8=A1=A8=E6=96=B9=E6=B3=95=E7=A9=BA=E6=8C=87?= =?UTF-8?q?=E9=92=88=E9=97=AE=E9=A2=98=E3=80=82=20=E5=89=A9=E4=BD=99?= =?UTF-8?q?=E6=8E=A5=E5=85=A5=E7=AE=97=E6=B3=95=E5=92=8C=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E7=BB=86=E8=8A=82=E8=B0=83=E6=95=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AES-front/src/api/user.js | 9 + .../report-submit/components/leftparts.vue | 83 ++++-- .../components/report-actions.vue | 127 ++++++++-- .../report-submit/components/rightparts.vue | 10 +- .../problem/controller/ProblemController.java | 82 +++++- .../aes/problem/dao/SubmitReportDaoI.java | 6 + .../problem/dao/impl/SubmitReportDaoImpl.java | 237 +++++++++++++----- .../service/Impl/ProblemServiceImpl.java | 36 ++- .../aes/problem/service/ProblemServiceI.java | 6 + 9 files changed, 496 insertions(+), 100 deletions(-) diff --git a/AES-front/src/api/user.js b/AES-front/src/api/user.js index ccb2a3d..3ba73cf 100644 --- a/AES-front/src/api/user.js +++ b/AES-front/src/api/user.js @@ -51,4 +51,13 @@ export default { url: `/downloadFile/downloadFile/${fileName}`, method: 'get', }), // ÎļþÏÂÔØ + + //±£´æÎļþÃûµ½Êý¾ݿâ + saveInfoToProps: (data) => request.post('/problem/saveInfoToProps', data), + + submitInfoToProps: (data) => request.post('/problem/submitInfoToProps', data), + + withdrawInfoToProps: (data) => request.post('/problem/withdrawInfoToProps', data), + + } diff --git a/AES-front/src/views/user/report-submit/components/leftparts.vue b/AES-front/src/views/user/report-submit/components/leftparts.vue index 18fae11..66621ed 100644 --- a/AES-front/src/views/user/report-submit/components/leftparts.vue +++ b/AES-front/src/views/user/report-submit/components/leftparts.vue @@ -12,10 +12,18 @@
实验提交
+
+ 已保存的文件: + +

上传附件
- 已上传文件: + 已上传文件(保存过的文件将被覆盖保存):
@@ -59,11 +77,15 @@ import ReportActions from "@/views/user/report-submit/components/report-actions. const route = useRoute(); const ProblemId = route.params.examId; +const examId = route.params.examId; const description = ref(""); // 实验描述 +const adminuserId = ref(""); //布置实验的教师id const reportText = ref(""); // 实验报告文本 const uploadDialogVisible = ref(false); // 控制上传弹窗的显示 const fileList = ref([]); // 上传的文件列表 const fileUrls = ref([]); // 文件的URL列表 +const attachment = ref(null);//已保存的文件信息 +const isReportActionsDisabled = ref(false); // 控制ReportActions组件的禁用状态 const uploadComponent = ref(null); // 用于引用el-upload组件 const getProblemInfo = async () => { @@ -71,6 +93,7 @@ const getProblemInfo = async () => { try { const res = await api.findProblemById1({ params: { ProblemId } }); description.value = res.data.description; // 更新作业名称 + adminuserId.value = res.data.adminuserId.toString(); // 更新教师id } catch (error) { console.error("Failed to fetch problem info:", error); } @@ -78,6 +101,10 @@ const getProblemInfo = async () => { // 显示上传弹窗 const showUploadDialog = () => { + if (fileUrls.value.length > 0) { + ElMessage.warning('您已经上传了文件,不能再次上传。'); + return; + } uploadDialogVisible.value = true; }; @@ -89,11 +116,11 @@ const handleFileChange = (file, fileList) => { // 处理文件上传成功 const handleUploadSuccess = (response, file, fileList) => { if (response.success) { - ElMessage.success('文件上传成功'); // 更新文件URL列表 fileUrls.value.push({ url: response.urls, name: response.data }); uploadDialogVisible.value = false; fileList.value = []; + ElMessage.success('文件上传成功'); } else { ElMessage.error('文件上传失败'); } @@ -105,6 +132,11 @@ const handleUploadError = (err, file, fileList) => { ElMessage.error('文件上传失败'); }; +// 处理文件数量超出限制 +const handleExceed = (files, fileList) => { + ElMessage.error('只能上传一个附件'); +}; + // 上传文件 const uploadFile = async () => { if (fileList.value.length === 0) { @@ -119,38 +151,53 @@ const uploadFile = async () => { try { const response = await api.uploadFiles(formData); // 调用上传文件的方法 console.log('Response from server:', response); // 打印响应内容 - if (response.code === 0) { ElMessage.success('文件上传成功'); // 更新文件URL列表 fileUrls.value.push({ url: response.urls, name: response.data }); uploadDialogVisible.value = false; fileList.value = []; - } else { - ElMessage.error('文件上传失败1'); - } - } catch (error) { + + }catch (error) { console.error("Failed to upload files:", error); ElMessage.error('文件上传失败2'); } }; -// 下载文件 -const downloadFile = (url) => { - const link = document.createElement('a'); - link.href = url; - link.target = '_blank'; - link.download = url.split('/').pop(); // 提取文件名 - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); + +const getSubmitReportInfo = async () => { + // 查询已保存的文件信息 + try { + const res = await api.getSubmitReport({ params: { examId } }); + if (res.data.attachment) { + attachment.value = res.data.attachment; // 更新附件信息 + } else { + attachment.value = null; + } + if (res.data.score !== null && res.data.score !== undefined) { + isReportActionsDisabled.value = true; // 禁用ReportActions组件 + } else { + isReportActionsDisabled.value = false; // 启用ReportActions组件 + } + } catch (error) { + + } +}; + +const refreshAttachmentInfo = async () => { + //更新已上传的文件信息 + await getSubmitReportInfo(); }; // 生命周期钩子 onMounted(() => { getProblemInfo(); // 挂载时查询作业信息 + getSubmitReportInfo();//查询已保存的文件信息 + }); + +