From 7ec72d865a839f89bdc1da03ec424f2395e53dd5 Mon Sep 17 00:00:00 2001
From: zhangxiaohua <827885272@qq.com>
Date: Mon, 19 Jan 2026 16:09:22 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=B7=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/src/layouts/BasicLayout.vue | 34 ++++++++++++-------
.../src/views/activities/ReviewDetail.vue | 19 ++++++++++-
frontend/src/views/model/ModelViewer.vue | 9 ++---
3 files changed, 42 insertions(+), 20 deletions(-)
diff --git a/frontend/src/layouts/BasicLayout.vue b/frontend/src/layouts/BasicLayout.vue
index 9ffe0c5..125c1a9 100644
--- a/frontend/src/layouts/BasicLayout.vue
+++ b/frontend/src/layouts/BasicLayout.vue
@@ -12,8 +12,9 @@
{
return route.meta?.hideSidebar === true
})
+// 判断是否可以访问3D建模实验室(仅学生和教师角色可见)
+const canAccess3DLab = computed(() => {
+ return authStore.hasAnyRole(["student", "teacher"])
+})
+
// 使用动态菜单
const menuItems = computed
(() => {
if (authStore.menus && authStore.menus.length > 0) {
@@ -119,18 +125,22 @@ const menuItems = computed(() => {
return []
})
-// 过滤掉3D建模实验室的菜单项(因为已经作为固定入口展示)
+// 过滤掉3D建模实验室的菜单项(仅当用户能看到快捷入口时才过滤,避免重复显示)
const filteredMenuItems = computed(() => {
const items = menuItems.value || []
- return items.filter((item: any) => {
- // 检查是否是3D建模实验室菜单
- const is3DLab =
- item?.key?.toLowerCase().includes("3dlab") ||
- item?.key?.toLowerCase().includes("3d-lab") ||
- item?.label?.includes("3D建模") ||
- item?.title?.includes("3D建模")
- return !is3DLab
- })
+ // 如果用户能看到快捷入口,则过滤掉菜单中的3D实验室
+ if (canAccess3DLab.value) {
+ return items.filter((item: any) => {
+ // 检查是否是3D建模实验室菜单
+ const is3DLab =
+ item?.key?.toLowerCase().includes("3dlab") ||
+ item?.key?.toLowerCase().includes("3d-lab") ||
+ item?.label?.includes("3D建模") ||
+ item?.title?.includes("3D建模")
+ return !is3DLab
+ })
+ }
+ return items
})
// 打开3D建模实验室(当前窗口跳转,更快)
@@ -292,7 +302,7 @@ $primary-light: #40a9ff;
display: flex;
align-items: center;
justify-content: center;
- padding: 16px 12px;
+ padding: 25px 16px 12px;
margin-bottom: 8px;
img {
diff --git a/frontend/src/views/activities/ReviewDetail.vue b/frontend/src/views/activities/ReviewDetail.vue
index 63e9f2d..0da7feb 100644
--- a/frontend/src/views/activities/ReviewDetail.vue
+++ b/frontend/src/views/activities/ReviewDetail.vue
@@ -72,7 +72,7 @@
{{ (pagination.current - 1) * pagination.pageSize + index + 1 }}
- {{ record.workNo || "-" }}
+ {{ record.workNo || "-" }}
@@ -99,6 +99,12 @@
:work-id="currentWorkId"
@success="handleReviewSuccess"
/>
+
+
+
@@ -110,6 +116,7 @@ import type { TableProps } from "ant-design-vue"
import { SearchOutlined, ReloadOutlined } from "@ant-design/icons-vue"
import { reviewsApi, contestsApi } from "@/api/contests"
import ReviewWorkModal from "./components/ReviewWorkModal.vue"
+import WorkDetailModal from "../contests/components/WorkDetailModal.vue"
const route = useRoute()
const tenantCode = route.params.tenantCode as string
@@ -184,6 +191,10 @@ const reviewModalVisible = ref(false)
const currentAssignmentId = ref