You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
366 lines
9.4 KiB
366 lines
9.4 KiB
<template>
|
|
<div class="container">
|
|
<div class="main">
|
|
<div class="content">
|
|
<div class="title">
|
|
{{ questionList[0].name }}
|
|
</div>
|
|
<template v-for="(question, questionIndex) in questionList" :key="questionIndex">
|
|
<!-- 单选 -->
|
|
<template v-if="question.type == 1">
|
|
<div class="question">
|
|
{{ questionIndex + 1 }}. {{ question.description }}(单选)
|
|
</div>
|
|
<div v-for="(answer, index) in question.content" :key="index" class="answer">
|
|
<div class="selected">
|
|
<input :id="`select-${questionIndex}-${index}`" :name="`radio-group-${questionIndex}`" type="radio"
|
|
v-model="selectedAnswers[questionIndex]"
|
|
:value="answer.text"
|
|
>
|
|
<label :for="`select-${questionIndex}-${index}`">{{ answer.text }}</label>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<!-- 多选 -->
|
|
<template v-if="question.type == 2">
|
|
<div class="question">
|
|
{{ questionIndex + 1 }}. {{ question.description }}(多选)
|
|
</div>
|
|
<div v-for="(answer, index) in question.content" :key="index" class="answer">
|
|
<div class="selected">
|
|
<input :id="`checkbox-${questionIndex}-${index}`" name="checkbox" type="checkbox"
|
|
v-model="selectedAnswers[questionIndex]"
|
|
:value="answer.text"
|
|
>
|
|
<label :for="`checkbox-${questionIndex}-${index}`">{{ answer.text }}</label>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<!-- 简答题 -->
|
|
<template v-if="question.type == 3">
|
|
<div class="Short-answers">
|
|
<div class="question">
|
|
{{ questionIndex + 1 }}. {{ question.description }}
|
|
</div>
|
|
<el-input
|
|
v-model="editorTitles[questionIndex]"
|
|
style="width: 100%; padding: 3.5%"
|
|
size="large"
|
|
placeholder="请输入标题(5-100字符)"
|
|
maxlength="100"
|
|
minlength="5"
|
|
show-word-limit
|
|
/>
|
|
<div class="editor">
|
|
<div style="border: 1px solid #ccc">
|
|
<Toolbar
|
|
style="border-bottom: 1px solid #ccc"
|
|
:editor="editorRefs[questionIndex]"
|
|
:defaultConfig="toolbarConfig"
|
|
:mode="mode"
|
|
/>
|
|
<Editor
|
|
style="height: 500px; overflow-y: hidden;"
|
|
v-model="editorContents[questionIndex]"
|
|
:defaultConfig="editorConfig"
|
|
:mode="mode"
|
|
@onCreated="editor => handleCreated(editor, questionIndex)"
|
|
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
<!-- 提交按钮 -->
|
|
<div class="submit">
|
|
<img src="https://d31zlh4on95l9h.cloudfront.net/images/5iujb101000d2foxm6thylaa50qz6lgl.png" @click="submit">
|
|
</div>
|
|
<!-- 提交次数 -->
|
|
<div class="submit-times">
|
|
<span>您已提交{{sub}}次,每个作业可以提交3次</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
<script setup>
|
|
import { onMounted, ref, shallowRef } from 'vue';
|
|
import homeworkApi from "@/api/HomeworkApi.js";
|
|
import { ElMessage } from "element-plus";
|
|
import '@wangeditor/editor/dist/css/style.css' // 引入 css
|
|
import { onBeforeUnmount } from 'vue'
|
|
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
|
|
import {useRoute, useRouter} from "vue-router";
|
|
|
|
const router = useRouter();
|
|
const route = useRoute();
|
|
let groupId = route.params.id;
|
|
let sub = route.params.sub;
|
|
// 编辑器实例,必须用 shallowRef
|
|
const editorRefs = ref([]);
|
|
|
|
// 内容 HTML
|
|
const editorContents = ref([]);
|
|
const editorTitles = ref([]);
|
|
|
|
// 模拟 ajax 异步获取内容
|
|
onMounted(() => {
|
|
setTimeout(() => {
|
|
editorContents.value = editorContents.value.map(() => '');
|
|
}, 1500)
|
|
})
|
|
|
|
const toolbarConfig = {
|
|
excludeKeys: [
|
|
'justify',
|
|
'table',
|
|
'codeBlock',
|
|
'divider',
|
|
'undo',
|
|
'redo',
|
|
'insertImage', // 去掉插入图片
|
|
'insertLink', // 去掉插入链接
|
|
'insertTable', // 去掉插入表格
|
|
'video',
|
|
'group-more-style',
|
|
'group-image',
|
|
'group-video',
|
|
'fullScreen',
|
|
'todo'
|
|
],
|
|
insertKeys: {
|
|
index: 0,
|
|
keys: ['bold', 'italic']
|
|
}
|
|
}
|
|
|
|
|
|
const editorConfig = {
|
|
placeholder: '请输入内容...',
|
|
toolbarKeys: toolbarConfig.toolbarKeys
|
|
}
|
|
|
|
// 组件销毁时,也及时销毁编辑器
|
|
onBeforeUnmount(() => {
|
|
editorRefs.value.forEach(editor => {
|
|
if (editor == null) return;
|
|
editor.destroy();
|
|
});
|
|
})
|
|
|
|
const handleCreated = (editor, questionIndex) => {
|
|
editorRefs.value[questionIndex] = editor; // 记录 editor 实例
|
|
editor.config.toolbarConfig = toolbarConfig; // 确保配置正确应用
|
|
}
|
|
|
|
const questionList = ref([]);
|
|
|
|
function getQuestionList() {
|
|
console.log("ljghasjkhdjksahjkhsajkhjkasd",groupId);
|
|
homeworkApi.getHomeworkQuestion(groupId).then(resp => {
|
|
if (resp.code == 200) {
|
|
questionList.value = resp.data;
|
|
for (let i = 0; i < questionList.value.length; i++) {
|
|
questionList.value[i].content = JSON.parse(questionList.value[i].content);
|
|
// 初始化 editorTitles 和 editorContents
|
|
editorTitles.value.push('');
|
|
editorContents.value.push('');
|
|
// 初始化 selectedAnswers 为数组
|
|
selectedAnswers.value.push([]);
|
|
}
|
|
} else {
|
|
ElMessage.error("未知错误,请联系管理员");
|
|
}
|
|
});
|
|
}
|
|
getQuestionList();
|
|
|
|
// 提交作业
|
|
const homework = ref([]);
|
|
|
|
const selectedAnswers = ref([]);
|
|
questionList.value.forEach(() => {
|
|
selectedAnswers.value.push([]);
|
|
});
|
|
|
|
// 上一个页面传递的参数 groupId
|
|
function submit() {
|
|
homework.value = [];
|
|
for (let i = 0; i < questionList.value.length; i++) {
|
|
if (questionList.value[i].type == 1 || questionList.value[i].type == 2) {
|
|
homework.value.push({
|
|
"id": questionList.value[i].id,
|
|
"answer": selectedAnswers.value[i],
|
|
"type": questionList.value[i].type
|
|
});
|
|
} else if (questionList.value[i].type == 3) {
|
|
const editor = editorRefs.value[i];
|
|
const plainText = editor ? editor.getText() : '';
|
|
homework.value.push({
|
|
"id": questionList.value[i].id,
|
|
"answer": [editorTitles.value[i], plainText],
|
|
"type": questionList.value[i].type
|
|
});
|
|
}
|
|
}
|
|
let groupId = route.params.id;
|
|
let sub = route.params.sub;
|
|
if (sub <=2){
|
|
homeworkApi.submitHomework(homework.value, groupId).then(resp => {
|
|
if (resp.code == 200) {
|
|
ElMessage.success("提交成功");
|
|
homework.value = [];
|
|
router.push("/show");
|
|
} else {
|
|
ElMessage.error("未知错误,请联系管理员");
|
|
}
|
|
});
|
|
}else {
|
|
ElMessage.error("提交失败您,已提交3次,每个作业可以提交3次");
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.container {
|
|
text-align: center;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
width: 34.375rem;
|
|
height: 114.399375rem;
|
|
}
|
|
|
|
.main {
|
|
background-image: url("https://lfjf.rzfwq.com/jtzy/Product/pcjingwang/images/20230823/qiangdianbanHomeWorkBg.png");
|
|
background-size: contain;
|
|
background-position: center 0;
|
|
background-repeat: no-repeat;
|
|
margin: 0;
|
|
width: 100%;
|
|
height: 1830px;
|
|
text-align: center;
|
|
position: relative;
|
|
}
|
|
|
|
.content {
|
|
position: absolute;
|
|
width: 93%;
|
|
height: 80%;
|
|
overflow-y: scroll;
|
|
/* 居中显示 */
|
|
left: 50%;
|
|
transform: translate(-50%, 0);
|
|
top: 12.5%;
|
|
text-align: left;
|
|
}
|
|
|
|
/* 滚动条样式 */
|
|
.content::-webkit-scrollbar {
|
|
width: 3px;
|
|
}
|
|
|
|
.content::-webkit-scrollbar-track {
|
|
background: #f1f1f1; /* 滚动条轨道的背景色 */
|
|
}
|
|
|
|
.content::-webkit-scrollbar-thumb {
|
|
background: #d9d9d9; /* 滚动条滑块的颜色 */
|
|
border-radius: 6px; /* 滑块的圆角 */
|
|
}
|
|
|
|
.title {
|
|
font-size: 1.65rem;
|
|
font-weight: 600;
|
|
/* 居中显示 */
|
|
text-align: center;
|
|
/*字体颜色*/
|
|
color: #3f27b1;
|
|
}
|
|
|
|
.question {
|
|
padding-top: 10%;
|
|
padding-left: 4%;
|
|
font-size: 1.35rem;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.answer {
|
|
padding-top: 2.5%;
|
|
padding-left: 7%;
|
|
font-size: 1.35rem;
|
|
}
|
|
|
|
.selected {
|
|
display: block;
|
|
padding: 1% 0 1.2% 0;
|
|
}
|
|
|
|
|
|
.selected input[name="checkbox"] {
|
|
margin-right: 1%;
|
|
width: 1.2rem;
|
|
height: 1rem;
|
|
/* 透明度 */
|
|
opacity: 0.8;
|
|
cursor: pointer; /* 鼠标悬停时变成手的形状 */
|
|
}
|
|
.selected input[type="radio"]{
|
|
margin-right: 1%;
|
|
width: 1.2rem;
|
|
height: 1rem;
|
|
/* 透明度 */
|
|
opacity: 0.8;
|
|
cursor: pointer; /* 鼠标悬停时变成手的形状 */
|
|
}
|
|
|
|
/* 单选按钮选中时的样式 */
|
|
.selected input[type="radio"]:checked {
|
|
accent-color: blue; /* 设置选中时的颜色为蓝色 */
|
|
}
|
|
|
|
/* 多选按钮选中时的样式 */
|
|
.selected input[type="checkbox"]:checked {
|
|
accent-color: blue; /* 设置选中时的颜色为蓝色 */
|
|
}
|
|
|
|
.selected label {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.editor {
|
|
padding-top: 2.5%;
|
|
padding-left: 3.5%;
|
|
padding-right: 3.5%;
|
|
height: 30rem;
|
|
}
|
|
|
|
.Short-answers {
|
|
height: 48rem;
|
|
}
|
|
|
|
.submit {
|
|
display: block;
|
|
text-align: center;
|
|
}
|
|
|
|
.submit img {
|
|
padding-top: 2.5%;
|
|
padding-left: 3.5%;
|
|
padding-right: 3.5%;
|
|
cursor: pointer;
|
|
width: 67%;
|
|
}
|
|
|
|
.submit-times {
|
|
font-size: 0.8rem;
|
|
color: #858585;
|
|
text-align: center;
|
|
}
|
|
</style>
|