diff --git a/public/images/teacher/花瓣素材_校园运动会获奖证书奖状_48197664.png.png b/public/images/teacher/certificate.png
similarity index 100%
rename from public/images/teacher/花瓣素材_校园运动会获奖证书奖状_48197664.png.png
rename to public/images/teacher/certificate.png
diff --git a/public/images/teacher/路径 23.png b/public/images/teacher/delete.png
similarity index 100%
rename from public/images/teacher/路径 23.png
rename to public/images/teacher/delete.png
diff --git a/public/images/teacher/路径 25.png b/public/images/teacher/download.png
similarity index 100%
rename from public/images/teacher/路径 25.png
rename to public/images/teacher/download.png
diff --git a/public/images/teacher/路径 24.png b/public/images/teacher/edit.png
similarity index 100%
rename from public/images/teacher/路径 24.png
rename to public/images/teacher/edit.png
diff --git a/public/images/teacher/分组 7.png b/public/images/teacher/horizontal-version.png
similarity index 100%
rename from public/images/teacher/分组 7.png
rename to public/images/teacher/horizontal-version.png
diff --git a/public/images/teacher/more.png b/public/images/teacher/more.png
new file mode 100644
index 0000000..7056e1e
Binary files /dev/null and b/public/images/teacher/more.png differ
diff --git a/public/images/teacher/蒙版分组.png b/public/images/teacher/vertical-version.png
similarity index 100%
rename from public/images/teacher/蒙版分组.png
rename to public/images/teacher/vertical-version.png
diff --git a/public/images/teacher/日历.png.png b/public/images/teacher/日历-选中.png
similarity index 100%
rename from public/images/teacher/日历.png.png
rename to public/images/teacher/日历-选中.png
diff --git a/public/images/teacher/路径 30.png b/public/images/teacher/添加-灰.png
similarity index 100%
rename from public/images/teacher/路径 30.png
rename to public/images/teacher/添加-灰.png
diff --git a/src/components/CertificateIssuanceModal.vue b/src/components/CertificateIssuanceModal.vue
new file mode 100644
index 0000000..458608c
--- /dev/null
+++ b/src/components/CertificateIssuanceModal.vue
@@ -0,0 +1,979 @@
+
+
+
+
+
+
+
+
+
+
+
+ 使用类别:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ExamPaperLibraryModal.vue b/src/components/ExamPaperLibraryModal.vue
index 85d16b0..63a9d36 100644
--- a/src/components/ExamPaperLibraryModal.vue
+++ b/src/components/ExamPaperLibraryModal.vue
@@ -270,7 +270,7 @@ watch(() => props.show, (newVal) => {
}
.modal-title {
- font-size: 18px;
+ font-size: 8px;
padding-bottom: 10px;
font-weight: 500;
color: #000;
diff --git a/src/router/index.ts b/src/router/index.ts
index 2935407..1faa399 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -219,12 +219,25 @@ const routes: RouteRecordRaw[] = [
component: () => import('../views/teacher/course/AddQuestion.vue'),
meta: { title: '新增试题' }
},
- {
+ {
path: 'certificate',
name: 'CertificateManagement',
component: CertificateManagement,
meta: { title: '证书管理' }
},
+ {
+ path: 'certificate/detail/:id',
+ name: 'CertificateDetail',
+ component: () => import('@/views/teacher/certificate/CertificateDetail.vue'),
+ meta: { title: '证书详情' }
+ },
+ {
+ path: 'certificate/add',
+ name: 'CertificateCreate',
+ component: () => import('@/views/teacher/certificate/CertificateCreate.vue'),
+ meta: { title: '添加证书' }
+ },
+
{
path: 'discussion',
name: 'DiscussionManagement',
@@ -263,6 +276,12 @@ const routes: RouteRecordRaw[] = [
component: StudentManagement,
meta: { title: '学员管理' }
},
+ {
+ path: 'certificate/new',
+ name: 'CertificateNew',
+ component: () => import('@/views/teacher/certificate/CertificateNew.vue'),
+ meta: { title: '新建证书' }
+ },
{
path: 'chapter-editor-teacher/:courseId',
name: 'ChapterEditor',
@@ -335,39 +354,7 @@ const routes: RouteRecordRaw[] = [
}
]
},
- {
- path: 'certificate',
- name: 'CertificateModule',
- component: () => import('@/views/teacher/certificate/index.vue'),
- meta: { title: '证书管理' },
- redirect: '/teacher/certificate/management',
- children: [
- {
- path: 'management',
- name: 'CertificateManagementPage',
- component: CertificateManagement,
- meta: { title: '证书管理' }
- },
- {
- path: 'template',
- name: 'CertificateTemplate',
- component: () => import('@/views/teacher/certificate/CertificateTemplate.vue'),
- meta: { title: '证书模板' }
- },
- {
- path: 'issuance',
- name: 'CertificateIssuance',
- component: () => import('@/views/teacher/certificate/CertificateIssuance.vue'),
- meta: { title: '证书颁发' }
- },
- {
- path: 'query',
- name: 'CertificateQuery',
- component: () => import('@/views/teacher/certificate/CertificateQuery.vue'),
- meta: { title: '证书查询' }
- }
- ]
- },
+
]
},
diff --git a/src/views/teacher/AdminDashboard.vue b/src/views/teacher/AdminDashboard.vue
index e700f0a..a6734bf 100644
--- a/src/views/teacher/AdminDashboard.vue
+++ b/src/views/teacher/AdminDashboard.vue
@@ -75,7 +75,7 @@
-
+
@@ -117,6 +117,14 @@ const examMenuExpanded = ref(false); // 考试管理菜单展开状态
const showTopImage = ref(true); // 控制顶部图片显示/隐藏
const route = useRoute();
const router = useRouter();
+const breadcrumbDisplay = computed(() => {
+ const currentPath = route.path;
+ // 在新建证书页面不显示面包屑
+ if (currentPath.includes('certificate/new')) {
+ return false;
+ }
+ return true;
+});
const setActiveNavItem = (index: number) => {
activeNavItem.value = index;
@@ -161,20 +169,82 @@ const handleClose = () => {
const hideSidebar = computed(() => {
const currentPath = route.path
// 当进入课程管理相关页面或章节编辑页面时隐藏侧边栏
- return currentPath.includes('course-editor') || currentPath.includes('chapter-editor-teacher')
+ return currentPath.includes('course-editor') || currentPath.includes('chapter-editor-teacher') || currentPath.includes('certificate')
})
// 动态生成面包屑路径项(右侧部分)
const breadcrumbPathItems = computed(() => {
const currentPath = route.path;
+ // 证书管理模块的面包屑逻辑(优先处理)
+ if (currentPath.includes('certificate')) {
+ console.log('证书页面路径:', currentPath);
+ let breadcrumbs: Array<{ title: string, path: string }> = [];
+ // 从路径中提取课程ID,如果路径包含course-editor
+ const courseIdMatch = currentPath.match(/\/course-editor\/(\d+)/);
+ const courseId = courseIdMatch ? courseIdMatch[1] : '1';
+
+ if (currentPath.includes('/certificate/detail/')) {
+ console.log('匹配到证书详情页面');
+ // 证书详细页面:课程管理 > 证书 > 证书详情
+ breadcrumbs = [
+ {
+ title: '课程管理',
+ path: '/teacher/course-management'
+ },
+ {
+ title: '证书管理',
+ path: `/teacher/course-editor/${courseId}/certificate`
+ },
+ {
+ title: '证书详情',
+ path: currentPath
+ }
+ ];
+ } else if (currentPath.includes('/certificate/add')) {
+ console.log('匹配到添加证书页面');
+ // 添加证书页面:课程管理 > 证书 > 添加证书
+ breadcrumbs = [
+ {
+ title: '课程管理',
+ path: '/teacher/course-management'
+ },
+ {
+ title: '证书管理',
+ path: `/teacher/course-editor/${courseId}/certificate`
+ },
+ {
+ title: '添加证书',
+ path: currentPath
+ }
+ ];
+ } else if (currentPath.endsWith('/certificate')) {
+ console.log('匹配到证书管理页面');
+ // 证书管理页面:课程管理 > 证书
+ breadcrumbs = [
+ {
+ title: '课程管理',
+ path: '/teacher/course-management'
+ },
+ {
+ title: '证书',
+ path: `/teacher/course-editor/${courseId}/certificate`
+ }
+ ];
+ } else {
+ console.log('证书页面但未匹配到具体条件');
+ }
+ console.log('证书页面面包屑:', breadcrumbs);
+ return breadcrumbs;
+ }
+
// 如果在课程编辑器相关页面
if (currentPath.includes('course-editor')) {
// 从路径中提取课程ID
const courseIdMatch = currentPath.match(/\/course-editor\/(\d+)/);
const courseId = courseIdMatch ? courseIdMatch[1] : '未知';
- let breadcrumbs = [];
+ let breadcrumbs: Array<{ title: string, path: string }> = [];
// 根据当前路径添加子页面标题
if (currentPath.includes('courseware')) {
@@ -267,7 +337,7 @@ const breadcrumbPathItems = computed(() => {
}
);
} else {
- // 普通作业页面:作业管理
+ // 普通作业页面:作业管理
breadcrumbs.push(
{
title: '作业管理',
@@ -303,12 +373,16 @@ const breadcrumbPathItems = computed(() => {
} else if (currentPath.includes('certificate')) {
breadcrumbs.push(
{
- title: '证书管理',
- path: currentPath
+ title: '课程管理',
+ path: '/teacher/course-management'
},
{
- title: `课程${courseId}`,
- path: `/teacher/course-editor/${courseId}`
+ title: '证书管理',
+ path: '/teacher/course-editor/1/certificate'
+ },
+ {
+ title: '证书名称详情',
+ path: currentPath
}
);
} else if (currentPath.includes('discussion')) {
@@ -391,6 +465,8 @@ const breadcrumbPathItems = computed(() => {
return breadcrumbs;
}
+
+
// 其他页面的面包屑逻辑
const matchedRoutes = route.matched;
let breadcrumbs = matchedRoutes
@@ -429,7 +505,7 @@ const updateActiveNavItem = () => {
} else if (path.includes('exam-management')) {
activeNavItem.value = 4; // 考试管理
examMenuExpanded.value = true;
-
+
const arr = ['question-management', 'exam-library', 'marking-center'];
const found = arr.find(item => path.includes(item));
activeSubNavItem.value = found || '';
diff --git a/src/views/teacher/certificate/CertificateCreate.vue b/src/views/teacher/certificate/CertificateCreate.vue
new file mode 100644
index 0000000..69d0e4e
--- /dev/null
+++ b/src/views/teacher/certificate/CertificateCreate.vue
@@ -0,0 +1,520 @@
+
+
+
+
+
+
+
创建证书
+
+
+
+
点击上传证书
+
+
+
+
+
+
+ 证书模板
+
+
+
+
+
通用证书
+
+
+
+
证书模板
+
+
+
+
证书模板
+
+
+
+
证书模板
+
+
+
+
证书模板
+
+
+
+
+
+
+
+
+
+
+
+
+
+
方向
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/teacher/certificate/CertificateDetail.vue b/src/views/teacher/certificate/CertificateDetail.vue
new file mode 100644
index 0000000..c31d8d0
--- /dev/null
+++ b/src/views/teacher/certificate/CertificateDetail.vue
@@ -0,0 +1,611 @@
+
+
+
+
+
+
+
证书样式
+
+
+
+
+
+
+
证书信息
+
+ 证书名称:
+ {{ certificate.name }}
+
+
+ 证书分类:
+ {{ certificate.category }}
+
+
+
证书内容:
+
+
考试分数
+
考生姓名
+
认证时间
+
考试名称
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/teacher/course/CertificateManagement.vue b/src/views/teacher/certificate/CertificateIssuance.vue
similarity index 71%
rename from src/views/teacher/course/CertificateManagement.vue
rename to src/views/teacher/certificate/CertificateIssuance.vue
index f24e983..e47758b 100644
--- a/src/views/teacher/course/CertificateManagement.vue
+++ b/src/views/teacher/certificate/CertificateIssuance.vue
@@ -1,18 +1,18 @@
-
+
-
证书管理
-
证书管理功能正在开发中...
+
证书颁发
+
证书颁发功能正在开发中...
diff --git a/src/views/teacher/certificate/CertificateNew.vue b/src/views/teacher/certificate/CertificateNew.vue
new file mode 100644
index 0000000..08291f6
--- /dev/null
+++ b/src/views/teacher/certificate/CertificateNew.vue
@@ -0,0 +1,475 @@
+
+
+
+
新建证书11
+
+
+
+
+
+
+
+
+
+
证书背景
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
替换背景图
+
+
+
+
+
添加元素
+
+ 添加文字
+ 添加图片
+
+
+
+
+
+
证书信息
+
+
证书编号
+
发证日期
+
颁发机构
+
有效期至
+
核验二维码
+
+
+
+
+
+
学员信息
+
+
学员姓名
+
学员帐号
+
班级名称
+
自定义文字
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/teacher/certificate/CertificateQuery.vue b/src/views/teacher/certificate/CertificateQuery.vue
new file mode 100644
index 0000000..805aaf7
--- /dev/null
+++ b/src/views/teacher/certificate/CertificateQuery.vue
@@ -0,0 +1,36 @@
+
+
+
+
证书查询
+
证书查询功能正在开发中...
+
+
+
+
+
+
+
diff --git a/src/views/teacher/certificate/CertificateTemplate.vue b/src/views/teacher/certificate/CertificateTemplate.vue
new file mode 100644
index 0000000..2d43abc
--- /dev/null
+++ b/src/views/teacher/certificate/CertificateTemplate.vue
@@ -0,0 +1,36 @@
+
+
+
+
证书模板管理1
+
证书模板管理功能正在开发中...
+
+
+
+
+
+
+
diff --git a/src/views/teacher/certificate/index.vue b/src/views/teacher/certificate/index.vue
new file mode 100644
index 0000000..2bad536
--- /dev/null
+++ b/src/views/teacher/certificate/index.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
diff --git a/src/views/teacher/course/AddCoursewareModal.vue b/src/views/teacher/course/AddCoursewareModal.vue
index a404528..46b35ef 100644
--- a/src/views/teacher/course/AddCoursewareModal.vue
+++ b/src/views/teacher/course/AddCoursewareModal.vue
@@ -226,6 +226,7 @@ const handleConfirm = () => {
display: flex;
align-items: center;
justify-content: center;
+ color: white;
}
.button-text1{
color: #0288D1 ;
@@ -398,6 +399,7 @@ const handleConfirm = () => {
/* 字体居中 */
display: flex;
align-items: center;
+ justify-content: center;
/* 小手 */
cursor: pointer;
border-radius: 4px;
diff --git a/src/views/teacher/course/CourseEditor.vue b/src/views/teacher/course/CourseEditor.vue
index 54d99e5..a592907 100644
--- a/src/views/teacher/course/CourseEditor.vue
+++ b/src/views/teacher/course/CourseEditor.vue
@@ -146,7 +146,9 @@ const hideSidebar = computed(() => {
'add-question', // 新增试题页面
'add-homework', // 添加作业页面
'template-import',
- 'review/'
+ 'review/',
+ 'certificate/detail/',
+ 'certificate/add'
]
// 检查当前路径是否包含需要隐藏侧边栏的路径
diff --git a/src/views/teacher/course/UploadFileModal.vue b/src/views/teacher/course/UploadFileModal.vue
index a1c9b95..98cd0e2 100644
--- a/src/views/teacher/course/UploadFileModal.vue
+++ b/src/views/teacher/course/UploadFileModal.vue
@@ -145,6 +145,7 @@ const handleConfirm = () => {
background-size: 100% 100%;
margin: 0 auto;
border-radius: 8px;
+ padding-top: 20px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
}
@@ -169,7 +170,7 @@ const handleConfirm = () => {
background-size: 100% 100%;
margin: 46px 0 0 22px;
border: 1px solid rgba(204, 204, 204, 1);
-
+ display: flex;
}
.upload-label {
@@ -354,7 +355,9 @@ const handleConfirm = () => {
.action-buttons {
width: 147px;
height: 32px;
- margin: 103px 0 23px 905px;
+ margin: 103px 0 0 905px;
+ display: flex;
+ gap: 20px;
}
.cancel-btn-container {
@@ -370,6 +373,9 @@ const handleConfirm = () => {
cursor: pointer;
border-radius: 4px;
transition: background-color 0.3s ease;
+ display: flex;
+ align-items: center;
+ justify-content: center;
}
.cancel-btn:hover {
@@ -387,7 +393,6 @@ const handleConfirm = () => {
text-align: left;
white-space: nowrap;
line-height: 22px;
- margin: 5px 0 0 17px;
}
.confirm-btn {
@@ -398,6 +403,9 @@ const handleConfirm = () => {
cursor: pointer;
border-radius: 4px;
transition: background-color 0.3s ease;
+ display: flex;
+ align-items: center;
+ justify-content: center;
}
.confirm-btn:hover {
@@ -415,7 +423,6 @@ const handleConfirm = () => {
text-align: left;
white-space: nowrap;
line-height: 22px;
- margin: 5px 0 0 17px;
}
/* 添加按钮悬停效果 */