From 34c8908cee11c3cfe1a718e1a6acca9f617a7a27 Mon Sep 17 00:00:00 2001 From: lijing Date: Tue, 22 Sep 2026 16:05:00 +0800 Subject: [PATCH] =?UTF-8?q?fix(homework):=20=E9=99=84=E4=BB=B6=E5=88=97?= =?UTF-8?q?=E6=8C=89=E7=B1=BB=E5=9E=8B=E5=88=86=E6=B5=81=EF=BC=8C=E9=9D=9E?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E9=99=84=E4=BB=B6=EF=BC=88xlsx/docx/pdf?= =?UTF-8?q?=EF=BC=89=E4=B8=8D=E5=86=8D=E8=A3=82=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Submissions 提交情况表格「附件」列:四源判定(fileName 扩展名 → URL 扩展名 → 行级 contentTypes → img onerror 兜底),非图片渲染为与图片缩略图同尺寸(32×32) 的文件图标格,图标按扩展名取 icon-excel / icon-word / icon-pdf1 等 - 点文件格可在线预览(有 fileId 走 FilePreviewModal),title 显示学生上传的真实文件名 - Utils 新增 isImageName / fileIcon / attIsImage 三个工具方法 - HomeworkAccept、HomeworkDetails 两处完全重复的「扩展名→图标」映射收敛到 Utils.fileIcon, 兜底图标由语义不符的 icon-weizhi 改为 icon-attachment - ReviewWorkbench 批阅工作台:图片/文件分流改走 Utils.attIsImage(原判定只认 fileType==='image',后端不填该字段时图片会被整体误判为文件),并给文件附件补上「查看」 - StudentMatrixVo 兼容 attachments: AttachmentItem[] 新契约,缺失时退回 thumbnails; 后端上线即自动获得精确文件类型图标与在线预览,前端无需再发版 - mock 的 thumbnails 改为返回全部附件 URL(原先只挑 fileType==='image', 比契约更宽容,导致该缺陷本地无法复现) --- src/assets/mock/homeworkapi.ts | 21 ++- src/components/ReviewWorkbench.vue | 32 +++- src/types/homeworkV2.ts | 17 ++- src/utils/index.ts | 68 +++++++++ src/views/homework/HomeworkAccept.vue | 16 +- src/views/homework/HomeworkDetails.vue | 12 +- src/views/homework/Submissions.vue | 197 ++++++++++++++++++++++--- 7 files changed, 317 insertions(+), 46 deletions(-) diff --git a/src/assets/mock/homeworkapi.ts b/src/assets/mock/homeworkapi.ts index 813cecd..3a10605 100644 --- a/src/assets/mock/homeworkapi.ts +++ b/src/assets/mock/homeworkapi.ts @@ -275,7 +275,26 @@ function genMatrix(n: any): any[] { isLate: cur ? cur.isLate : 0, reviewStatus: cur ? cur.reviewStatus : "PENDING", score: cur ? cur.score : null, - thumbnails: cur ? (cur.attachments || []).filter((a: any) => (a.fileType || "").toLowerCase() === "image").map((a: any) => a.fileUrl) : [], + // 契约:thumbnails 是「最新提交附件 URL 列表」——**不按类型过滤**, + // 线上就是这么返回的(学生交 excel 也会进来,前端必须自己分流)。 + // 早先这里 filter(fileType==='image') 把非图片附件滤掉了, + // 于是「附件列把 excel 当图片渲染成裂图」这个缺陷在本地永远复现不出来。 + thumbnails: cur ? (cur.attachments || []).map((a: any) => a.fileUrl) : [], + // 契约增强:附件明细(含 fileType/fileName/fileId),列表页据此精确出图标并在线预览 + attachments: cur ? cur.attachments || [] : [], + // 提交内容类型摘要 + contentTypes: cur + ? [ + ...(cur.text ? ["text"] : []), + ...Array.from( + new Set( + (cur.attachments || []).map((a: any) => + (a.fileType || "").toLowerCase() === "image" ? "image" : "attach" + ) + ) + ), + ] + : [], }); }) ); diff --git a/src/components/ReviewWorkbench.vue b/src/components/ReviewWorkbench.vue index 76c7cb8..b115b67 100644 --- a/src/components/ReviewWorkbench.vue +++ b/src/components/ReviewWorkbench.vue @@ -34,7 +34,9 @@
+ {{ a.fileName || "附件" + (i + 1) }} + 查看 下载
@@ -84,6 +86,9 @@
+ + + @@ -454,3 +548,64 @@ function zoom(url: string) { } } + + +