From d075c4da5d3af8c3db45779d880dc4e9c2027244 Mon Sep 17 00:00:00 2001 From: lijing Date: Tue, 22 Sep 2026 12:30:00 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BD=9C=E4=B8=9A=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=A5=91=E7=BA=A6=E7=BC=BA=E9=99=B7=E4=BF=AE=E5=A4=8D=EF=BC=88?= =?UTF-8?q?B-01~B-09=EF=BC=89+=20=E5=88=97=E8=A1=A8=E9=A1=B5=E7=8A=B6?= =?UTF-8?q?=E6=80=81/=E6=93=8D=E4=BD=9C=E5=88=97=E5=9B=BE=E6=A0=87?= =?UTF-8?q?=E5=8C=96=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 契约与健壮性(明细见 bug检测与修复.md): - B-01 学生端补 allowLate,恢复「截止后补交」能力 - B-02 ReviewWorkbench 附件 URL 补 serviceHost,修线上图片/下载 404 - B-03/B-04 统计页、全部作业页幻影字段:前端降级 + 后端补字段 - B-05 详情页「接收班级」兜底;B-08 NewHomework 编辑回显与班级树加载竞态 - B-09 移除 api/index.ts 未定义的 GlobalFetch 与硬编码 baseURL 列表页界面统一(我布置的 / 全部作业): - 状态列统一走 Utils.HW_STATUS_META + hwStatusPill(图标 + 文字 + 同色浅底胶囊) - 操作列改图标按钮:提交情况 icon-chakan、批阅 icon-shenpi,低频操作收进「更多」下拉(功能全保留) - 两页操作列同宽,切页不跳列;草稿箱状态列加宽以容纳「定时 …」胶囊 - Submissions 批阅图标与列表行操作对齐 构建:npm run build 通过(exit 0) --- .env.dev | 8 +- .gitignore | 3 + bug检测与修复.md | 175 ++++++++-- src/App.vue | 20 ++ src/api/module/homework.ts | 25 +- src/api/module/notification.ts | 15 +- src/api/module/studentHomework.ts | 35 +- src/api/module/teacherHomework.ts | 70 ++-- src/assets/mock/homeworkapi.ts | 72 +++- src/assets/styles/layout.css | 2 +- src/components/AttachmentUpload.vue | 61 +++- src/components/ReviewModal.vue | 2 +- src/components/ReviewWorkbench.vue | 12 +- src/types/homeworkV2.ts | 19 +- src/utils/index.ts | 65 ++++ src/views/homework/Grade.vue | 267 +++++++++++++-- src/views/homework/HomeworkAccept.vue | 4 +- src/views/homework/HomeworkDetails.vue | 3 +- src/views/homework/HomeworkList.vue | 165 +++++----- src/views/homework/HomeworkStats.vue | 40 ++- src/views/homework/NewHomework.vue | 145 +++++++-- src/views/homework/StudentHomeworks.vue | 355 +++++++++++--------- src/views/homework/Submissions.vue | 150 ++++++--- src/views/homework/TeacherHomeworks.vue | 415 ++++++++++++++++++------ 24 files changed, 1525 insertions(+), 603 deletions(-) diff --git a/.env.dev b/.env.dev index 32ce03b..f2bc432 100644 --- a/.env.dev +++ b/.env.dev @@ -1,11 +1,13 @@ # 开发环境 (dev):仅 vite dev --mode dev 加载;build 产物不读任何 .env.* # (.env.base/.env.ld/.env.prod 已删,线上由 /api/env-config?target=front 运行时下发)。 # ⚠️ VITE_* 仅本地开发生效。 -# API 走 /api 同源相对路径(vite proxy 转发到本地后端 8101), -# 规避后端 CAS 过滤器不回 CORS 头导致的跨域拦截;SSO/基础平台用真实环境 +# API 走 /api 同源相对路径(vite proxy 转发到本地后端 8102,见 vite.config.ts), +# 规避后端 CAS 过滤器不回 CORS 头导致的跨域拦截;SSO/基础平台用真实环境。 +# VITE_SERVICE_HOST 必须留空:host.config 的 applyConf 跳过空值 → 回落同源兜底(本地路径无上下文段 → ""); +# 填远程地址会绕过本地后端直连测试环境(临时联调远程时才改回) VITE_BASE_HOST=http://base.yunhaixingtong.com VITE_SSO_HOST=http://sso.yunhaixingtong.com -VITE_SERVICE_HOST=http://base.yunhaixingtong.com/campushomework/ +VITE_SERVICE_HOST=http://base.yunhaixingtong.com/coursehomework/ VITE_ZIYUANKU_HOST=https://base.bestsch.com/BschZyk VITE_ZHUANXIANG_HOST=https://base.bestsch.com/BschZncpd VITE_IS_MOCK=false diff --git a/.gitignore b/.gitignore index 2fd35ed..6eef18f 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,6 @@ yarn.lock # 备份 / 临时文件(旧版图标集 icons.css.bak 等不入库) *.bak *.orig + +# AI 工作目录(记忆/技能,不是缓存,勿删,但不入库) +.workbuddy/ diff --git a/bug检测与修复.md b/bug检测与修复.md index 69360d8..a66b683 100644 --- a/bug检测与修复.md +++ b/bug检测与修复.md @@ -73,17 +73,19 @@ | B-03 | `HomeworkStatisticsVo` 前端声明 5 个幻影字段,后端从未返回 → 统计页 4 张卡片恒为 0/0%/空表 | **P0** | `/stats` 作业统计 | 已修复(前端降级)+ 后端补字段 | | B-04 | `HomeworkVo` 前端声明 `progress` 字段,后端从未返回 → 「全部作业」页 3 列进度恒为「—」 | **P0** | `/homeworklist` 全部作业 | 已修复(前端降级)+ 后端补字段 | | B-05 | `HomeworkDetailVo` 前端声明 `receiveText`,后端从未返回 → 详情页「接收班级」恒显示「全部班级」 | **P1** | `/homeworklist/detail` | 已修复(后端补字段 + 前端兜底) | -| B-06 | `TeacherHomeworks.vue` 4 个行操作函数重复声明 | **P1** | `/list` 我布置的 | 已修复 | -| B-07 | `TeacherHomeworks.vue` `moreActions` Map 每次重渲染累积、永不回收 | **P1** | `/list` 我布置的 | 已修复 | +| ~~B-06~~ | ~~`TeacherHomeworks.vue` 4 个行操作函数重复声明~~ | — | `/list` 我布置的 | **误报已撤回**(见 §6) | +| ~~B-07~~ | ~~`TeacherHomeworks.vue` `moreActions` Map 每次重渲染累积~~ | — | `/list` 我布置的 | **误报已撤回**(见 §6) | | B-08 | `NewHomework.vue` 编辑回显与班级树加载存在竞态,导致「全部班级」勾选态误判 | **P1** | `/list/new` 发作业 | 已修复 | | B-09 | `src/api/index.ts` 引用未定义的 `GlobalFetch()`,且 baseURL 硬编码远程域名 | **P2** | 潜在全局 auto-import 污染 | 已修复 | -| B-10 | 7 个死组件 + 1 个 `index copy.vue` 残留,`auto-import` 扫描目录存在误引入风险 | **P2** | 构建体积/可维护性 | 已记录(不删除) | +| B-10 | 死组件/死文件残留(`index copy.vue`、`alova-vant.ts` 等),`auto-import` 扫描目录存在误引入风险 | **P2** | 构建体积/可维护性 | 已记录(不删除) | | B-11 | `.backup/` 未纳入 `.gitignore`,污染 `git status` | **P2** | 版本管理 | 已修复 | | B-12 | `routes.ts` 出现仅换行符差异的伪改动 | **P2** | 版本管理噪音 | 已记录 | | B-13 | `baseApi.setRole` 指向后端不存在的 `/api/base/SetRole`,真实环境每次跨角色路由切换都会 404 | **P2** | 控制台噪音 | 已记录(设计如此) | -| B-14 | `vue-tsc` 在 Node 24 下崩溃(`Search string not found: "/supportedTSExtensions = .*(?=;)/"`),类型门禁实际失效 | **P1** | 全部 TS 代码 | 已记录(需换 Node 18/20 或升级 vue-tsc) | -| C-01 | 生产构建通过(39.66s,exit 0) | — | — | 通过 | -| C-02 | TS 类型检查**无法执行**(见 B-14) | — | — | 阻塞 | +| B-14 | `vue-tsc` 崩溃(`Search string not found: "/supportedTSExtensions = .*(?=;)/"`),类型门禁实际失效 | **P1** | 全部 TS 代码 | 已定位真因:TS 5.9.3 ↔ vue-tsc 1.8.27 版本不兼容(**与 Node 无关**) | +| **B-15** | **API 层全链路无类型**:`new Method()` 泛型误用(`Method` 的泛型实为 AlovaGenerics)→ `send()` 退化 `unknown` | **P0(根因)** | 全部接口调用 | 已修复(4 个 api 模块) | +| C-01 | 生产构建通过(~40s,exit 0) | — | — | 通过 | +| C-02 | TS 类型检查(临时降级 TS 5.2.2 后执行) | — | — | 通过(课程作业模块 0 错误) | +| C-06 | 后端编译 `mvn -o -q compile` | — | — | 通过 | | C-05~C-07 | V2 端点 28 个 + 通知 3 个 + V1 冻结端点路径/动词与后端一致 | — | — | 通过 | | C-08/C-09 | `BasePageResult` 六字段、`pageIndex` 从 1 起前后端一致 | — | — | 通过 | | C-10~C-14 | V2 作业/学生/矩阵/版本/通知 VO 字段与后端逐一对应 | — | — | 通过 | @@ -92,6 +94,8 @@ **最严重的三条(P0)本质是同一个病根**:前端契约(`types/*.ts`)比后端实际返回**多声明的字段**,被 TypeScript 视为可选(`?:`),又被 `vue-tsc` 崩溃掩盖,于是「编译通过、构建成功、mock 模式下一切正常」——**只有连真实后端才会表现为静默的空值/功能失效**。mock(`homeworkapi.ts`)为了让页面「跑得起来」,主动补齐了这些后端并不存在的字段,进一步掩盖了问题。 +而**这一切之所以能长期逃逸,根因是 B-15**:API 层用 `new Method()` 传错了泛型(`Method` 的泛型实为 `AlovaGenerics`),使 `send()` 退化为 `unknown`,所有 `res.xxx` 字段访问都失去类型检查。修复 B-15 后(`vue-tsc` 错误 162 → 78、课程作业模块清零),同类问题即可在编译期被拦截。 + --- ## 2. 缺陷详情与修复方案 @@ -197,16 +201,22 @@ --- -### B-06 / B-07 【P1】`TeacherHomeworks.vue` 重复声明与无界缓存 +### ~~B-06 / B-07~~ 【误报,已撤回】`TeacherHomeworks.vue` 重复声明与无界缓存 -**证据链** +> ⚠️ **本项为初稿误报,实际不存在,无需修复。** 保留原文仅作记录,复核结论见 §6。 -- `viewDetail / viewSubmissions / toGrade / edit` 四个函数在 ` @@ -106,9 +228,13 @@ onMounted(async () => {