feat(course): 新增课程评估组件并完善相关功能

- 创建 AccessComp.vue 组件用于课程评估配置
- 在 createCourse.vue 中引入并注册评估组件
- 添加评估数据结构及默认内容
- 实现评估表单的展示与交互逻辑
- 增加 copyChooseItemData 用于取消操作时的数据恢复
- 修改取消按钮逻辑以支持数据回滚
- 调整组件间通信逻辑以适配新评估功能
This commit is contained in:
陈昱达
2025-11-25 18:14:56 +08:00
parent 13bfa1a58b
commit c6321027e1
2 changed files with 186 additions and 2 deletions

View File

@@ -16,6 +16,7 @@ import LinkComp from "@/components/CreatedCourse/preview/LinkComp.vue";
import ScormComp from "@/components/CreatedCourse/preview/ScormComp.vue";
import PaperComp from "@/components/CreatedCourse/preview/PaperComp.vue";
import HomeWorkComp from "@/components/CreatedCourse/preview/HomeWorkComp.vue";
import AccessComp from "@/components/CreatedCourse/preview/AccessComp.vue";
import { getType } from "@/hooks/useCreateCourseMaps";
const mapComponents = [
VideoComp,
@@ -26,6 +27,7 @@ const mapComponents = [
ScormComp,
PaperComp,
HomeWorkComp,
AccessComp,
];
// 使用课程数据hook
@@ -41,6 +43,8 @@ const showTablePreview = ref(false);
const showDialog = ref(false);
const classId = ref("");
const copyChooseItemData = ref({});
watch(
() => courseMetadata.chooseIndex,
(newVal) => {
@@ -93,13 +97,16 @@ const courseOperations = {
showSettingDialog.value = true;
},
addAssessment: () => {
console.log("添加评估功能调用");
courseMetadata.resType = 62;
chooseItemData.value.resType = 62;
showSettingDialog.value = true;
},
};
// 执行课程操作
const executeCourseOperation = (operationName, data) => {
courseMetadata.chooseIndex = data;
courseMetadata.selectionIndex = null;
copyChooseItemData.value = {};
isPreview.value = false;
isNext.value = true;
chooseItemData.value = {};
@@ -123,6 +130,16 @@ const choosePreviewItem = (data) => {
showSettingDialog.value = true;
isPreview.value = true;
};
const cancelSave = () => {
showSettingDialog.value = false;
chooseItemData.value = copyChooseItemData.value;
courseList.value[courseMetadata.chooseIndex].data[
courseMetadata.selectionIndex
] = chooseItemData.value;
console.log(chooseItemData);
};
// 保存
const saveContent = () => {
console.log(chooseItemData.value);
@@ -160,6 +177,7 @@ const settingRow = (data) => {
courseMetadata.chooseIndex = data.index;
courseMetadata.selectionIndex = data.selectionIndex;
chooseItemData.value = data.record;
copyChooseItemData.value = JSON.parse(JSON.stringify(data.record));
isPreview.value = false;
showSettingDialog.value = true;
};
@@ -167,6 +185,7 @@ const previewRow = (data) => {
courseMetadata.chooseIndex = data.index;
courseMetadata.selectionIndex = data.selectionIndex;
chooseItemData.value = data.record;
copyChooseItemData.value = JSON.parse(JSON.stringify(data.record));
isPreview.value = true;
showSettingDialog.value = true;
};
@@ -258,7 +277,7 @@ const chooseCusExam = (data) => {
<template #footer>
<div class="dialog-footer">
<el-button @click="showSettingDialog = false">取消</el-button>
<el-button @click="cancelSave()">取消</el-button>
<el-button type="primary" @click="saveContent()" v-if="!isPreview">
保存
</el-button>