【新增】试卷参数,【修改】监控管理

This commit is contained in:
YOHO\20373
2025-05-05 21:21:03 +08:00
parent 2cd1010b79
commit 357857169c
11 changed files with 662 additions and 112 deletions

View File

@@ -45,4 +45,15 @@ export const MonitorApi = {
exportMonitor: async (params) => { exportMonitor: async (params) => {
return await request.download({ url: `/exam/monitor/export-excel`, params }) return await request.download({ url: `/exam/monitor/export-excel`, params })
}, },
getPaperTaskList: async (id: string) => {
return await request.get({ url: `/exam/monitor/getPaperTaskList?id=` + id })
},
updateMonitorStatus:async( data)=>{
return await request.post({ url: `/exam/monitor/updateMonitorStatus` , data })
}
} }

View File

@@ -1,4 +1,24 @@
<template> <template>
<!-- 状态选择弹窗 -->
<el-dialog v-model="dialogVisible" title="请选择考试状态" width="400px">
<el-form label-width="80px" class="px-4 pt-2">
<el-form-item label="考试状态">
<el-radio-group v-model="selectedStatus">
<el-radio :label="'0'">代考</el-radio>
<el-radio :label="'1'">考试中</el-radio>
<el-radio :label="'2'">考试完成</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="confirmChange">确认</el-button>
</template>
</el-dialog>
<ContentWrap> <ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
@@ -26,28 +46,6 @@
class="!w-240px" class="!w-240px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="班级" prop="className">
<el-input
v-model="queryParams.className"
placeholder="请输入班级"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="考试状态" prop="examStatus">
<el-select
v-model="queryParams.examStatus"
placeholder="请选择考试状态"
clearable
class="!w-240px"
>
<el-option label="代考" :value="0" />
<el-option label="考试中" :value="1" />
<el-option label="考试结束" :value="2" />
</el-select>
</el-form-item>
<el-form-item label="试卷编号" prop="paperNum"> <el-form-item label="试卷编号" prop="paperNum">
<el-input <el-input
v-model="queryParams.paperNum" v-model="queryParams.paperNum"
@@ -57,15 +55,7 @@
class="!w-240px" class="!w-240px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="试卷任务" prop="taskName">
<el-input
v-model="queryParams.taskName"
placeholder="请输入试卷任务"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="机器ip" prop="ip"> <el-form-item label="机器ip" prop="ip">
<el-input <el-input
v-model="queryParams.ip" v-model="queryParams.ip"
@@ -75,11 +65,70 @@
class="!w-240px" class="!w-240px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="考试状态" prop="examStatus">
<el-select
v-model="queryParams.examStatus"
placeholder="请选择考试状态"
clearable
class="!w-240px"
>
<el-option label="待考" :value="0" />
<el-option label="考试中" :value="1" />
<el-option label="考试结束" :value="2" />
</el-select>
</el-form-item>
<el-form-item label="任务类别" prop="taskType">
<el-select v-model="queryParams.taskType" placeholder="任务类别" class="!w-240px" @change="fetchTaskList">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.TASK_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="试卷任务" prop="taskName">
<el-select v-model="queryParams.taskName" placeholder="请选择试卷任务" class="!w-240px">
<el-option
v-for="item in taskList"
:key="item.taskName"
:label="item.taskName"
:value="item.taskName"
/>
</el-select>
</el-form-item>
<el-form-item label="班级" prop="className">
<el-select
v-model="queryParams.className"
filterable
allow-create
default-first-option
placeholder="请选择或输入"
class="!w-240px"
>
<el-option
v-for="item in classNameList"
:key="item.className"
:label="item.className"
:value="item.className"
/>
</el-select>
</el-form-item>
<el-form-item> <el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button type="primary" @click="openDialog"><Icon icon="ep:edit" class="mr-5px" />考试状态改变</el-button>
<!-- <el-button <!-- <el-button
type="primary" type="primary"
plain plain
@@ -98,12 +147,15 @@
<Icon icon="ep:download" class="mr-5px" /> 导出 <Icon icon="ep:download" class="mr-5px" /> 导出
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</ContentWrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<ContentWrap> <ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<el-table-column label="用户账号" align="center" prop="username" /> <el-table-column label="用户账号" align="center" prop="username" />
<el-table-column label="用户姓名" align="center" prop="nickname" /> <el-table-column label="用户姓名" align="center" prop="nickname" />
<el-table-column label="班级" align="center" prop="className" /> <el-table-column label="班级" align="center" prop="className" />
@@ -115,6 +167,11 @@
<el-table-column label="成绩" align="center" prop="score" /> <el-table-column label="成绩" align="center" prop="score" />
<el-table-column label="试卷编号" align="center" prop="paperNum" /> <el-table-column label="试卷编号" align="center" prop="paperNum" />
<el-table-column label="任务模式" align="center" prop="taskType">
<template #default="scope">
<dict-tag :type="DICT_TYPE.TASK_TYPE" :value="scope.row.taskType" />
</template>
</el-table-column>
<el-table-column label="试卷任务" align="center" prop="taskName" /> <el-table-column label="试卷任务" align="center" prop="taskName" />
<el-table-column label="机器ip" align="center" prop="ip" /> <el-table-column label="机器ip" align="center" prop="ip" />
<el-table-column <el-table-column
@@ -169,20 +226,26 @@ import download from '@/utils/download'
import { MonitorApi, MonitorVO } from '@/api/monitor' import { MonitorApi, MonitorVO } from '@/api/monitor'
import MonitorForm from './MonitorForm.vue' import MonitorForm from './MonitorForm.vue'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import * as ClassApi from '@/api/exam/class'
/** 监控管理 列表 */ /** 监控管理 列表 */
defineOptions({ name: 'Monitor' }) defineOptions({ name: 'Monitor' })
// 弹窗开关
const dialogVisible = ref(false)
const message = useMessage() // 消息弹窗 const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化 const { t } = useI18n() // 国际化
const selectedStatus = ref<string | null>(null);
const loading = ref(true) // 列表的加载中 const loading = ref(true) // 列表的加载中
const list = ref<MonitorVO[]>([]) // 列表的数据 const list = ref<MonitorVO[]>([]) // 列表的数据
const total = ref(0) // 列表的总页数 const total = ref(0) // 列表的总页数
const classNameList = ref();
const queryParams = reactive({ const queryParams = reactive({
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
monitorId:'',
username: undefined, username: undefined,
nickname: undefined, nickname: undefined,
taskType:undefined,
className: undefined, className: undefined,
examStatus: undefined, examStatus: undefined,
score: undefined, score: undefined,
@@ -194,10 +257,11 @@ const queryParams = reactive({
}) })
const queryFormRef = ref() // 搜索的表单 const queryFormRef = ref() // 搜索的表单
const exportLoading = ref(false) // 导出的加载中 const exportLoading = ref(false) // 导出的加载中
const taskTypeyOptions = ref<string[]>([])
/** 查询列表 */ /** 查询列表 */
const getList = async () => { const getList = async () => {
loading.value = true loading.value = true
classNameList.value = await ClassApi.ClassApi.getClassName()
try { try {
const data = await MonitorApi.getMonitorPage(queryParams) const data = await MonitorApi.getMonitorPage(queryParams)
list.value = data.list list.value = data.list
@@ -206,6 +270,27 @@ const getList = async () => {
loading.value = false loading.value = false
} }
} }
// 打开弹窗
const openDialog = async () => {
const rows = selections.value;
if (!rows.length) {
message.error('请至少选择一条数据');
return;
}
dialogVisible.value = true
selections.value = rows;
}
/** 表格选中数据 */
const selections = ref([]);
const taskList = ref([]);
const handleSelectionChange = (rows) => {
selections.value = rows;
}
const dateFormatterMin = (row, column, cellValue) => { const dateFormatterMin = (row, column, cellValue) => {
if (cellValue == null || isNaN(cellValue)) return '-'; if (cellValue == null || isNaN(cellValue)) return '-';
@@ -236,7 +321,28 @@ const formRef = ref()
const openForm = (type: string, id?: number) => { const openForm = (type: string, id?: number) => {
formRef.value.open(type, id) formRef.value.open(type, id)
} }
// 提交状态变更
const confirmChange = async () => {
if (selectedStatus.value === null) {
ElMessage.error('请选择考试状态');
return;
}
const rows = selections.value;
const monitorIds = rows.map((row: any) => row.monitorId);
await MonitorApi.updateMonitorStatus({
monitorIds, // 这是数组
status: selectedStatus.value // 这是 0,1,2
});
ElMessage.success('考试状态更新成功')
dialogVisible.value = false
}
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (id: number) => { const handleDelete = async (id: number) => {
try { try {
@@ -250,18 +356,43 @@ const handleDelete = async (id: number) => {
} catch {} } catch {}
} }
const selectedRows = ref<string[]>([]);
/** 导出按钮操作 */ /** 导出按钮操作 */
const handleExport = async () => { const handleExport = async () => {
const rows = selections.value;
if (!rows.length) {
message.error('请至少选择一条数据');
return;
}
console.log(rows.length)
try { try {
// 导出的二次确认 // 导出的二次确认
await message.exportConfirm() await message.exportConfirm();
// 发起导出
exportLoading.value = true // 将选中的 monitorId 填入 queryParams
const data = await MonitorApi.exportMonitor(queryParams) queryParams.monitorId = rows.map((row: any) => row.monitorId).join(',');
download.excel(data, '监控管理.xls')
exportLoading.value = true;
const data = await MonitorApi.exportMonitor(queryParams);
download.excel(data, '监控管理.xls');
} catch { } catch {
// 可选:错误处理
} finally { } finally {
exportLoading.value = false exportLoading.value = false;
// 导出后重置 monitorId避免影响后续查询
queryParams.monitorId = '';
}
}
const fetchTaskList = async (taskType: string) => {
try {
const res = await MonitorApi.getPaperTaskList( taskType )
taskList.value = res
} catch (error) {
taskList.value = []
console.error('获取试卷任务失败', error)
} }
} }

View File

@@ -5,6 +5,10 @@
<!-- 第一个 tab - 通用参数 --> <!-- 第一个 tab - 通用参数 -->
<el-tab-pane label="通用参数" name="tab1"> <el-tab-pane label="通用参数" name="tab1">
<el-form :model="form" label-width="200px" style="margin-top: 20px;"> <el-form :model="form" label-width="200px" style="margin-top: 20px;">
<el-row :gutter="20">
<el-col :span="12">
<!-- 是否使用监考密码验证 --> <!-- 是否使用监考密码验证 -->
<el-form-item label="是否使用监考密码验证"> <el-form-item label="是否使用监考密码验证">
<el-switch <el-switch
@@ -16,8 +20,52 @@
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
<!-- 是否启用考场设置 --> <!-- 监考密码 -->
<el-form-item label="是否启用考场设置"> <el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
<el-input v-model="form.examPassword" placeholder="请输入监考密码" @input="handleFormChange" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否显示试卷编号">
<el-switch
v-model="form.isNumber"
active-value="0"
inactive-value="1"
active-text=""
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.isContent"
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-switch
v-model="form.isAnswerId"
active-value="0"
inactive-value="1"
active-text=""
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 <el-switch
v-model="form.isSession" v-model="form.isSession"
active-value="0" active-value="0"
@@ -26,11 +74,11 @@
inactive-text="" inactive-text=""
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
<!-- 监考密码 --> </el-col>
<el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
<el-input v-model="form.examPassword" placeholder="请输入监考密码" @input="handleFormChange" />
</el-form-item>
<el-col :span="12">
<!-- 禁止学生使用U盘 --> <!-- 禁止学生使用U盘 -->
<el-form-item label="禁止学生使用U盘"> <el-form-item label="禁止学生使用U盘">
<el-switch <el-switch
@@ -41,6 +89,10 @@
inactive-text="" inactive-text=""
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<!-- 练习成绩保存 --> <!-- 练习成绩保存 -->
<el-form-item label="练习成绩保存"> <el-form-item label="练习成绩保存">
@@ -49,8 +101,9 @@
<el-radio label="1">最新成绩</el-radio> <el-radio label="1">最新成绩</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否显示重答按钮"> <el-form-item label="是否显示重答按钮">
<el-switch <el-switch
v-model="form.isRepeat" v-model="form.isRepeat"
@@ -61,7 +114,8 @@
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-form-item label="是否显示答案按钮"> <el-form-item label="是否显示答案按钮">
<el-switch <el-switch
v-model="form.isAnswer" v-model="form.isAnswer"
@@ -141,6 +195,9 @@ const props = defineProps({
// 字段初始值设置为空或空字符串 // 字段初始值设置为空或空字符串
const form = ref({ const form = ref({
isAnswerId:'',
isContent:'',
isNumber:'',
isExamPassword: '', // 是否使用监考密码验证 isExamPassword: '', // 是否使用监考密码验证
examPassword: '', // 监考密码 examPassword: '', // 监考密码
usb: '', // 是否禁止U盘 usb: '', // 是否禁止U盘

View File

@@ -5,6 +5,10 @@
<!-- 第一个 tab - 通用参数 --> <!-- 第一个 tab - 通用参数 -->
<el-tab-pane label="通用参数" name="tab1"> <el-tab-pane label="通用参数" name="tab1">
<el-form :model="form" label-width="200px" style="margin-top: 20px;"> <el-form :model="form" label-width="200px" style="margin-top: 20px;">
<el-row :gutter="20">
<el-col :span="12">
<!-- 是否使用监考密码验证 --> <!-- 是否使用监考密码验证 -->
<el-form-item label="是否使用监考密码验证"> <el-form-item label="是否使用监考密码验证">
<el-switch <el-switch
@@ -16,8 +20,52 @@
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
<!-- 是否使用监考密码验证 --> <!-- 监考密码 -->
<el-form-item label="是否启用考场设置"> <el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
<el-input v-model="form.examPassword" placeholder="请输入监考密码" @input="handleFormChange" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否显示试卷编号">
<el-switch
v-model="form.isNumber"
active-value="0"
inactive-value="1"
active-text=""
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.isContent"
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-switch
v-model="form.isAnswerId"
active-value="0"
inactive-value="1"
active-text=""
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 <el-switch
v-model="form.isSession" v-model="form.isSession"
active-value="0" active-value="0"
@@ -26,11 +74,11 @@
inactive-text="" inactive-text=""
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
<!-- 监考密码 --> </el-col>
<el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
<el-input v-model="form.examPassword" placeholder="请输入监考密码" @input="handleFormChange" />
</el-form-item>
<el-col :span="12">
<!-- 禁止学生使用U盘 --> <!-- 禁止学生使用U盘 -->
<el-form-item label="禁止学生使用U盘"> <el-form-item label="禁止学生使用U盘">
<el-switch <el-switch
@@ -41,6 +89,10 @@
inactive-text="" inactive-text=""
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<!-- 练习成绩保存 --> <!-- 练习成绩保存 -->
<el-form-item label="练习成绩保存"> <el-form-item label="练习成绩保存">
@@ -49,8 +101,9 @@
<el-radio label="1">最新成绩</el-radio> <el-radio label="1">最新成绩</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否显示重答按钮"> <el-form-item label="是否显示重答按钮">
<el-switch <el-switch
v-model="form.isRepeat" v-model="form.isRepeat"
@@ -61,7 +114,8 @@
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-form-item label="是否显示答案按钮"> <el-form-item label="是否显示答案按钮">
<el-switch <el-switch
v-model="form.isAnswer" v-model="form.isAnswer"
@@ -141,6 +195,9 @@ const props = defineProps({
// 字段初始值设置为空或空字符串 // 字段初始值设置为空或空字符串
const form = ref({ const form = ref({
isAnswerId:'',
isContent:'',
isNumber:'',
isExamPassword: '', // 是否使用监考密码验证 isExamPassword: '', // 是否使用监考密码验证
examPassword: '', // 监考密码 examPassword: '', // 监考密码
usb: '', // 是否禁止U盘 usb: '', // 是否禁止U盘

View File

@@ -5,6 +5,10 @@
<!-- 第一个 tab - 通用参数 --> <!-- 第一个 tab - 通用参数 -->
<el-tab-pane label="通用参数" name="tab1"> <el-tab-pane label="通用参数" name="tab1">
<el-form :model="form" label-width="200px" style="margin-top: 20px;"> <el-form :model="form" label-width="200px" style="margin-top: 20px;">
<el-row :gutter="20">
<el-col :span="12">
<!-- 是否使用监考密码验证 --> <!-- 是否使用监考密码验证 -->
<el-form-item label="是否使用监考密码验证"> <el-form-item label="是否使用监考密码验证">
<el-switch <el-switch
@@ -16,8 +20,52 @@
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
<!-- 是否使用监考密码验证 --> <!-- 监考密码 -->
<el-form-item label="是否启用考场设置"> <el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
<el-input v-model="form.examPassword" placeholder="请输入监考密码" @input="handleFormChange" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否显示试卷编号">
<el-switch
v-model="form.isNumber"
active-value="0"
inactive-value="1"
active-text=""
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.isContent"
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-switch
v-model="form.isAnswerId"
active-value="0"
inactive-value="1"
active-text=""
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 <el-switch
v-model="form.isSession" v-model="form.isSession"
active-value="0" active-value="0"
@@ -26,11 +74,11 @@
inactive-text="" inactive-text=""
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
<!-- 监考密码 --> </el-col>
<el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
<el-input v-model="form.examPassword" placeholder="请输入监考密码" @input="handleFormChange" />
</el-form-item>
<el-col :span="12">
<!-- 禁止学生使用U盘 --> <!-- 禁止学生使用U盘 -->
<el-form-item label="禁止学生使用U盘"> <el-form-item label="禁止学生使用U盘">
<el-switch <el-switch
@@ -41,6 +89,10 @@
inactive-text="" inactive-text=""
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<!-- 练习成绩保存 --> <!-- 练习成绩保存 -->
<el-form-item label="练习成绩保存"> <el-form-item label="练习成绩保存">
@@ -49,8 +101,9 @@
<el-radio label="1">最新成绩</el-radio> <el-radio label="1">最新成绩</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否显示重答按钮"> <el-form-item label="是否显示重答按钮">
<el-switch <el-switch
v-model="form.isRepeat" v-model="form.isRepeat"
@@ -61,7 +114,8 @@
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-form-item label="是否显示答案按钮"> <el-form-item label="是否显示答案按钮">
<el-switch <el-switch
v-model="form.isAnswer" v-model="form.isAnswer"
@@ -141,6 +195,9 @@ const props = defineProps({
// 字段初始值设置为空或空字符串 // 字段初始值设置为空或空字符串
const form = ref({ const form = ref({
isAnswerId:'',
isContent:'',
isNumber:'',
isExamPassword: '', // 是否使用监考密码验证 isExamPassword: '', // 是否使用监考密码验证
examPassword: '', // 监考密码 examPassword: '', // 监考密码
usb: '', // 是否禁止U盘 usb: '', // 是否禁止U盘

View File

@@ -5,6 +5,10 @@
<!-- 第一个 tab - 通用参数 --> <!-- 第一个 tab - 通用参数 -->
<el-tab-pane label="通用参数" name="tab1"> <el-tab-pane label="通用参数" name="tab1">
<el-form :model="form" label-width="200px" style="margin-top: 20px;"> <el-form :model="form" label-width="200px" style="margin-top: 20px;">
<el-row :gutter="20">
<el-col :span="12">
<!-- 是否使用监考密码验证 --> <!-- 是否使用监考密码验证 -->
<el-form-item label="是否使用监考密码验证"> <el-form-item label="是否使用监考密码验证">
<el-switch <el-switch
@@ -16,8 +20,52 @@
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
<!-- 是否使用监考密码验证 --> <!-- 监考密码 -->
<el-form-item label="是否启用考场设置"> <el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
<el-input v-model="form.examPassword" placeholder="请输入监考密码" @input="handleFormChange" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否显示试卷编号">
<el-switch
v-model="form.isNumber"
active-value="0"
inactive-value="1"
active-text=""
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.isContent"
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-switch
v-model="form.isAnswerId"
active-value="0"
inactive-value="1"
active-text=""
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 <el-switch
v-model="form.isSession" v-model="form.isSession"
active-value="0" active-value="0"
@@ -26,11 +74,11 @@
inactive-text="" inactive-text=""
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
<!-- 监考密码 --> </el-col>
<el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
<el-input v-model="form.examPassword" placeholder="请输入监考密码" @input="handleFormChange" />
</el-form-item>
<el-col :span="12">
<!-- 禁止学生使用U盘 --> <!-- 禁止学生使用U盘 -->
<el-form-item label="禁止学生使用U盘"> <el-form-item label="禁止学生使用U盘">
<el-switch <el-switch
@@ -41,6 +89,10 @@
inactive-text="" inactive-text=""
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<!-- 练习成绩保存 --> <!-- 练习成绩保存 -->
<el-form-item label="练习成绩保存"> <el-form-item label="练习成绩保存">
@@ -49,8 +101,9 @@
<el-radio label="1">最新成绩</el-radio> <el-radio label="1">最新成绩</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否显示重答按钮"> <el-form-item label="是否显示重答按钮">
<el-switch <el-switch
v-model="form.isRepeat" v-model="form.isRepeat"
@@ -61,7 +114,8 @@
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-form-item label="是否显示答案按钮"> <el-form-item label="是否显示答案按钮">
<el-switch <el-switch
v-model="form.isAnswer" v-model="form.isAnswer"
@@ -141,6 +195,9 @@ const props = defineProps({
// 字段初始值设置为空或空字符串 // 字段初始值设置为空或空字符串
const form = ref({ const form = ref({
isAnswerId:'',
isContent:'',
isNumber:'',
isExamPassword: '', // 是否使用监考密码验证 isExamPassword: '', // 是否使用监考密码验证
examPassword: '', // 监考密码 examPassword: '', // 监考密码
usb: '', // 是否禁止U盘 usb: '', // 是否禁止U盘

View File

@@ -5,6 +5,10 @@
<!-- 第一个 tab - 通用参数 --> <!-- 第一个 tab - 通用参数 -->
<el-tab-pane label="通用参数" name="tab1"> <el-tab-pane label="通用参数" name="tab1">
<el-form :model="form" label-width="200px" style="margin-top: 20px;"> <el-form :model="form" label-width="200px" style="margin-top: 20px;">
<el-row :gutter="20">
<el-col :span="12">
<!-- 是否使用监考密码验证 --> <!-- 是否使用监考密码验证 -->
<el-form-item label="是否使用监考密码验证"> <el-form-item label="是否使用监考密码验证">
<el-switch <el-switch
@@ -16,8 +20,52 @@
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
<!-- 是否使用监考密码验证 --> <!-- 监考密码 -->
<el-form-item label="是否启用考场设置"> <el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
<el-input v-model="form.examPassword" placeholder="请输入监考密码" @input="handleFormChange" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否显示试卷编号">
<el-switch
v-model="form.isNumber"
active-value="0"
inactive-value="1"
active-text=""
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.isContent"
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-switch
v-model="form.isAnswerId"
active-value="0"
inactive-value="1"
active-text=""
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 <el-switch
v-model="form.isSession" v-model="form.isSession"
active-value="0" active-value="0"
@@ -26,11 +74,11 @@
inactive-text="" inactive-text=""
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
<!-- 监考密码 --> </el-col>
<el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
<el-input v-model="form.examPassword" placeholder="请输入监考密码" @input="handleFormChange" />
</el-form-item>
<el-col :span="12">
<!-- 禁止学生使用U盘 --> <!-- 禁止学生使用U盘 -->
<el-form-item label="禁止学生使用U盘"> <el-form-item label="禁止学生使用U盘">
<el-switch <el-switch
@@ -41,6 +89,10 @@
inactive-text="" inactive-text=""
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<!-- 练习成绩保存 --> <!-- 练习成绩保存 -->
<el-form-item label="练习成绩保存"> <el-form-item label="练习成绩保存">
@@ -49,8 +101,9 @@
<el-radio label="1">最新成绩</el-radio> <el-radio label="1">最新成绩</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否显示重答按钮"> <el-form-item label="是否显示重答按钮">
<el-switch <el-switch
v-model="form.isRepeat" v-model="form.isRepeat"
@@ -61,7 +114,8 @@
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-form-item label="是否显示答案按钮"> <el-form-item label="是否显示答案按钮">
<el-switch <el-switch
v-model="form.isAnswer" v-model="form.isAnswer"
@@ -141,6 +195,9 @@ const props = defineProps({
// 字段初始值设置为空或空字符串 // 字段初始值设置为空或空字符串
const form = ref({ const form = ref({
isAnswerId:'',
isContent:'',
isNumber:'',
isExamPassword: '', // 是否使用监考密码验证 isExamPassword: '', // 是否使用监考密码验证
examPassword: '', // 监考密码 examPassword: '', // 监考密码
usb: '', // 是否禁止U盘 usb: '', // 是否禁止U盘

View File

@@ -5,6 +5,10 @@
<!-- 第一个 tab - 通用参数 --> <!-- 第一个 tab - 通用参数 -->
<el-tab-pane label="通用参数" name="tab1"> <el-tab-pane label="通用参数" name="tab1">
<el-form :model="form" label-width="200px" style="margin-top: 20px;"> <el-form :model="form" label-width="200px" style="margin-top: 20px;">
<el-row :gutter="20">
<el-col :span="12">
<!-- 是否使用监考密码验证 --> <!-- 是否使用监考密码验证 -->
<el-form-item label="是否使用监考密码验证"> <el-form-item label="是否使用监考密码验证">
<el-switch <el-switch
@@ -16,8 +20,52 @@
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
<!-- 是否启用考场设置 --> <!-- 监考密码 -->
<el-form-item label="是否启用考场设置"> <el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
<el-input v-model="form.examPassword" placeholder="请输入监考密码" @input="handleFormChange" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否显示试卷编号">
<el-switch
v-model="form.isNumber"
active-value="0"
inactive-value="1"
active-text=""
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.isContent"
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-switch
v-model="form.isAnswerId"
active-value="0"
inactive-value="1"
active-text=""
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 <el-switch
v-model="form.isSession" v-model="form.isSession"
active-value="0" active-value="0"
@@ -26,11 +74,11 @@
inactive-text="" inactive-text=""
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
<!-- 监考密码 --> </el-col>
<el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
<el-input v-model="form.examPassword" placeholder="请输入监考密码" @input="handleFormChange" />
</el-form-item>
<el-col :span="12">
<!-- 禁止学生使用U盘 --> <!-- 禁止学生使用U盘 -->
<el-form-item label="禁止学生使用U盘"> <el-form-item label="禁止学生使用U盘">
<el-switch <el-switch
@@ -41,6 +89,10 @@
inactive-text="" inactive-text=""
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<!-- 练习成绩保存 --> <!-- 练习成绩保存 -->
<el-form-item label="练习成绩保存"> <el-form-item label="练习成绩保存">
@@ -49,8 +101,9 @@
<el-radio label="1">最新成绩</el-radio> <el-radio label="1">最新成绩</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否显示重答按钮"> <el-form-item label="是否显示重答按钮">
<el-switch <el-switch
v-model="form.isRepeat" v-model="form.isRepeat"
@@ -61,7 +114,8 @@
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-form-item label="是否显示答案按钮"> <el-form-item label="是否显示答案按钮">
<el-switch <el-switch
v-model="form.isAnswer" v-model="form.isAnswer"
@@ -141,6 +195,9 @@ const props = defineProps({
// 字段初始值设置为空或空字符串 // 字段初始值设置为空或空字符串
const form = ref({ const form = ref({
isAnswerId:'',
isContent:'',
isNumber:'',
isExamPassword: '', // 是否使用监考密码验证 isExamPassword: '', // 是否使用监考密码验证
examPassword: '', // 监考密码 examPassword: '', // 监考密码
usb: '', // 是否禁止U盘 usb: '', // 是否禁止U盘

View File

@@ -5,6 +5,9 @@
<!-- 第一个 tab - 通用参数 --> <!-- 第一个 tab - 通用参数 -->
<el-tab-pane label="通用参数" name="tab1"> <el-tab-pane label="通用参数" name="tab1">
<el-form :model="form" label-width="200px" style="margin-top: 20px;"> <el-form :model="form" label-width="200px" style="margin-top: 20px;">
<el-row :gutter="20">
<el-col :span="12">
<!-- 是否使用监考密码验证 --> <!-- 是否使用监考密码验证 -->
<el-form-item label="是否使用监考密码验证"> <el-form-item label="是否使用监考密码验证">
@@ -17,6 +20,51 @@
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
<!-- 监考密码 -->
<el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
<el-input v-model="form.examPassword" placeholder="请输入监考密码" @input="handleFormChange" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否显示试卷编号">
<el-switch
v-model="form.isNumber"
active-value="0"
inactive-value="1"
active-text=""
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.isContent"
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-switch
v-model="form.isAnswerId"
active-value="0"
inactive-value="1"
active-text=""
inactive-text=""
@change="handleFormChange" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="是否启用考场设置"> <el-form-item label="是否启用考场设置">
<el-switch <el-switch
v-model="form.isSession" v-model="form.isSession"
@@ -26,11 +74,11 @@
inactive-text="" inactive-text=""
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
<!-- 监考密码 --> </el-col>
<el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
<el-input v-model="form.examPassword" placeholder="请输入监考密码" @input="handleFormChange" />
</el-form-item>
<el-col :span="12">
<!-- 禁止学生使用U盘 --> <!-- 禁止学生使用U盘 -->
<el-form-item label="禁止学生使用U盘"> <el-form-item label="禁止学生使用U盘">
<el-switch <el-switch
@@ -41,6 +89,10 @@
inactive-text="" inactive-text=""
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<!-- 练习成绩保存 --> <!-- 练习成绩保存 -->
<el-form-item label="练习成绩保存"> <el-form-item label="练习成绩保存">
@@ -49,8 +101,9 @@
<el-radio label="1">最新成绩</el-radio> <el-radio label="1">最新成绩</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="是否显示重答按钮"> <el-form-item label="是否显示重答按钮">
<el-switch <el-switch
v-model="form.isRepeat" v-model="form.isRepeat"
@@ -61,7 +114,8 @@
@change="handleFormChange" /> @change="handleFormChange" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
<el-form-item label="是否显示答案按钮"> <el-form-item label="是否显示答案按钮">
<el-switch <el-switch
v-model="form.isAnswer" v-model="form.isAnswer"
@@ -141,6 +195,9 @@ const props = defineProps({
// 字段初始值设置为空或空字符串 // 字段初始值设置为空或空字符串
const form = ref({ const form = ref({
isAnswerId:'',
isContent:'',
isNumber:'',
isExamPassword: '', // 是否使用监考密码验证 isExamPassword: '', // 是否使用监考密码验证
examPassword: '', // 监考密码 examPassword: '', // 监考密码
usb: '', // 是否禁止U盘 usb: '', // 是否禁止U盘

View File

@@ -129,9 +129,18 @@ const rules = reactive({
batch: [{ required: true, message: '请输入批次', trigger: 'blur' }], batch: [{ required: true, message: '请输入批次', trigger: 'blur' }],
startTime: [{ required: true, message: '请选择开始时间', trigger: 'change' }], startTime: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
endTime: [{ required: true, message: '请选择结束时间', trigger: 'change' }], endTime: [{ required: true, message: '请选择结束时间', trigger: 'change' }],
allowEntry: [{ required: true, message: '请输入允许入场时间', trigger: 'blur' }], allowEntry: [
endAllowEntry: [{ required: true, message: '请输入禁止入场时间', trigger: 'blur' }], { required: true, message: '请输入允许提前入场的分钟数', trigger: 'blur' },
allowSubmission: [{ 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' }], status: [{ required: true, message: '请选择状态', trigger: 'change' }],
}) })

View File

@@ -80,7 +80,7 @@
<dict-tag :type="DICT_TYPE.TASK_TYPE" :value="scope.row.taskType" /> <dict-tag :type="DICT_TYPE.TASK_TYPE" :value="scope.row.taskType" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="次数" align="center" prop="count" />
<el-table-column label="是否为模板" align="center" prop="isTemplate" > <el-table-column label="是否为模板" align="center" prop="isTemplate" >
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.SYS_YES_NO" :value="scope.row.isTemplate" /> <dict-tag :type="DICT_TYPE.SYS_YES_NO" :value="scope.row.isTemplate" />