From 9256e8f4f463d9c572b4ec0ef05cd1a3336bbc0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=B2=85?= <907037276@qq.com> Date: Thu, 3 Sep 2026 17:51:06 +0800 Subject: [PATCH] feat: add teacher task review menu --- src/api/teacher.js | 14 + src/layout/components/Sidebar/index.vue | 2 + src/router/index.js | 19 +- .../teacherEnd/score/TaskReviewPanel.vue | 295 ++++++++++++++++++ tests/task-review-navigation.test.mjs | 18 ++ 5 files changed, 346 insertions(+), 2 deletions(-) create mode 100644 src/views/teacherEnd/score/TaskReviewPanel.vue create mode 100644 tests/task-review-navigation.test.mjs diff --git a/src/api/teacher.js b/src/api/teacher.js index 5e910cc..185a836 100644 --- a/src/api/teacher.js +++ b/src/api/teacher.js @@ -714,6 +714,20 @@ export function saveTaskTeacherScore(params) { params, }); } +export function getTaskReview(params) { + return request({ + url: "/api/weight/taskReview", + method: "GET", + params, + }); +} +export function batchSaveTaskTeacherScore(data) { + return request({ + url: "/api/weight/batchSaveTaskTeacherScore", + method: "POST", + data, + }); +} // 更新成绩 export function doRankOne(params) { return request({ diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue index 7b4b409..73f70c6 100644 --- a/src/layout/components/Sidebar/index.vue +++ b/src/layout/components/Sidebar/index.vue @@ -347,6 +347,7 @@ const teacherManageNav = [ { title: "学生管理", path: "/student/index" }, { title: "实训任务管理", path: "/training-task/index" }, { title: "任务分配", path: "/task/index" }, + { title: "任务评阅", path: "/task-review/index" }, { title: "成绩中心", path: "/score/index" }, ], }, @@ -418,6 +419,7 @@ const studentIconByPath = { "/student/index": "Avatar", "/training-task/index": "DocumentChecked", "/task/index": "Tickets", + "/task-review/index": "DocumentChecked", "/score/index": "DataBoard", }; const studentIconBySectionStart = [ diff --git a/src/router/index.js b/src/router/index.js index 151169e..f718612 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -632,8 +632,23 @@ export const teacherRoutes = [ ], }, // 成绩中心 - { - path: "/score", + { + path: "/task-review", + component: Layout, + redirect: "/task-review/index", + roles: ["teacher"], + meta: { title: "任务评阅", icon: "任务评阅", affix: true }, + children: [ + { + path: "index", + component: () => import("@/views/teacherEnd/score/TaskReviewPanel.vue"), + name: "taskReview", + meta: { title: "任务评阅", icon: "任务评阅", affix: true }, + }, + ], + }, + { + path: "/score", component: Layout, redirect: "/score/index", roles: ["teacher"], diff --git a/src/views/teacherEnd/score/TaskReviewPanel.vue b/src/views/teacherEnd/score/TaskReviewPanel.vue new file mode 100644 index 0000000..02e352a --- /dev/null +++ b/src/views/teacherEnd/score/TaskReviewPanel.vue @@ -0,0 +1,295 @@ + + + + + diff --git a/tests/task-review-navigation.test.mjs b/tests/task-review-navigation.test.mjs new file mode 100644 index 0000000..833b6fd --- /dev/null +++ b/tests/task-review-navigation.test.mjs @@ -0,0 +1,18 @@ +import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; +import { resolve } from "node:path"; + +const root = resolve(import.meta.dirname, ".."); +const router = readFileSync(resolve(root, "src/router/index.js"), "utf8"); +const sidebar = readFileSync(resolve(root, "src/layout/components/Sidebar/index.vue"), "utf8"); +const scorePage = readFileSync(resolve(root, "src/views/teacherEnd/score/index.vue"), "utf8"); +const reviewPage = readFileSync(resolve(root, "src/views/teacherEnd/score/TaskReviewPanel.vue"), "utf8"); + +assert.match(router, /path:\s*"\/task-review"[\s\S]*?title:\s*"任务评阅"/); +assert.match(sidebar, /\{ title: "任务评阅", path: "\/task-review\/index" \},\s*\{ title: "成绩中心", path: "\/score\/index" \}/); +assert.doesNotMatch(scorePage, /label="任务评阅"/); +assert.match(reviewPage, /v-for="item in teachingClasses"/); +assert.match(reviewPage, /\.task-review \{[\s\S]*?background: linear-gradient\(135deg, rgba\(6, 23, 36, 0\.84\), rgba\(4, 12, 23, 0\.78\)\)/); +assert.match(reviewPage, /\.task-review__steps :deep\(\.el-step__title\) \{[\s\S]*?white-space: normal/); + +console.log("task review navigation is a standalone teacher menu item");