【修改】试卷任务参数,【新增】试题数据交互

This commit is contained in:
YOHO\20373
2025-05-16 15:11:47 +08:00
committed by 陆光LG
parent 47cfdee979
commit 9e969aadc1
35 changed files with 5304 additions and 117 deletions

View File

@@ -116,6 +116,8 @@
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="是否显示答案按钮">
<el-switch
v-model="form.isAnswer"
@@ -125,6 +127,8 @@
inactive-text=""
@change="handleFormChange" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="学生是否可以查看试卷">
<el-switch
v-model="form.isLook"
@@ -134,7 +138,35 @@
inactive-text=""
@change="handleFormChange" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="是否有测评时长限制">
<el-switch
v-model="form.isTime"
active-value="0"
inactive-value="1"
active-text=""
inactive-text=""
@change="handleFormChange" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="测评时长" >
<el-time-picker
v-model="form.examTime"
value-format="HH:mm:ss"
placeholder="请设置测评时长"
class="ele-fluid"
@change="handleFormChange"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="定时检查与学生端联通性,每">
<el-input-number v-model="form.isConnect" label="分钟" @change="handleFormChange" />
<span>分钟传一次,断联直接交卷</span>

View File

@@ -19,7 +19,14 @@
<el-form-item label="批次" prop="batch">
<el-input clearable v-model="form.batch" placeholder="请输入批次" disabled/>
</el-form-item>
<el-form-item label="考试时长" prop="answerTime">
<el-time-picker
v-model="form.answerTime"
value-format="HH:mm:ss"
placeholder="请选择考试时长"
class="ele-fluid"
/>
</el-form-item>
<el-form-item label="考试开始时间" prop="startTime">
<el-date-picker
v-model="form.startTime"
@@ -37,6 +44,7 @@
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择考试结束时间"
class="ele-fluid"
disabled
/>
</el-form-item>
@@ -97,7 +105,7 @@
<script setup lang="ts">
import { ref, reactive, nextTick } from 'vue'
import { addSession, updateSession } from '@/api/system/session'
import { addSession, updateSession,getTime} from '@/api/system/session'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
const emit = defineEmits(['done'])
const props = defineProps({
@@ -109,7 +117,7 @@ const visible = defineModel({ type: Boolean })
const isUpdate = ref(false)
const loading = ref(false)
const formRef = ref()
import dayjs from 'dayjs'
// 表单模型
const form = ref({
sessionId: undefined,
@@ -117,10 +125,11 @@ const form = ref({
batch: '',
startTime: '',
endTime: '',
answerTime:'',
allowEntry: '',
endAllowEntry: '',
allowSubmission: '',
status: '', // 状态01用)
status: '0', // 状态01用)
})
// 表单校验规则
@@ -129,9 +138,18 @@ const rules = reactive({
batch: [{ required: true, message: '请输入批次', trigger: 'blur' }],
startTime: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
endTime: [{ required: true, message: '请选择结束时间', trigger: 'change' }],
allowEntry: [{ required: true, message: '请输入允许入场时间', trigger: 'blur' }],
endAllowEntry: [{ required: true, message: '请输入禁止入场时间', trigger: 'blur' }],
allowSubmission: [{ required: true, message: '请输入允许交卷时间', trigger: 'blur' }],
allowEntry: [
{ required: true, message: '请输入允许提前入场的分钟数', trigger: 'blur' },
{ pattern: /^\d+$/, message: '只能输入非负整数', trigger: 'blur' }
],
endAllowEntry: [
{ required: true, message: '请输入禁止入场的分钟数', trigger: 'blur' },
{ pattern: /^\d+$/, message: '只能输入非负整数', trigger: 'blur' }
],
allowSubmission: [
{ required: true, message: '请输入允许交卷的分钟数', trigger: 'blur' },
{ pattern: /^\d+$/, message: '只能输入非负整数', trigger: 'blur' }
],
status: [{ required: true, message: '请选择状态', trigger: 'change' }],
})
@@ -150,12 +168,16 @@ const open = async (type: 'create' | 'update', data?: any) => {
batch: '',
startTime: '',
endTime: '',
answerTime:'',
allowEntry: '',
endAllowEntry: '',
allowSubmission: '',
status: '',
}
const res = await getTime(props.taskId);
form.value.answerTime=res;
// 设置批次为 当前时间 + 5位随机数
const now = new Date();
const pad = (n) => n.toString().padStart(2, '0');
@@ -178,7 +200,20 @@ const open = async (type: 'create' | 'update', data?: any) => {
await nextTick()
formRef.value?.clearValidate?.()
}
// 监听考试开始时间和考试时长,自动计算考试结束时间
watch(() => [form.value.startTime, form.value.answerTime], ([startTime, answerTime]) => {
if (startTime && answerTime) {
const [hours, minutes, seconds] = answerTime.split(':').map(Number)
const end = dayjs(startTime)
.add(hours, 'hour')
.add(minutes, 'minute')
.add(seconds, 'second')
.format('YYYY-MM-DD HH:mm:ss')
form.value.endTime = end
} else {
form.value.endTime = ''
}
})
// 保存按钮
const save = async () => {
await formRef.value.validate()