【修改】出题知识点可选择,数据时效性,MYSQL判分语句增加默认权值
【增加】试卷任务参数,在已有的试卷抽卷
This commit is contained in:
@@ -43,9 +43,9 @@
|
||||
<el-form-item label="难度" prop="quLevel">
|
||||
<el-select v-model="form.quLevel" placeholder="请选择难度" :disabled="isUpdate">
|
||||
<el-option label="全部" :value="3" />
|
||||
<el-option label="简单" :value="0" />
|
||||
<el-option label="一般" :value="1" />
|
||||
<el-option label="困难" :value="2" />
|
||||
<el-option label="易" :value="0" />
|
||||
<el-option label="中" :value="1" />
|
||||
<el-option label="难" :value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
@@ -346,7 +346,7 @@ const save = async () => {
|
||||
const fn = isUpdate.value ? updateScheme : addScheme
|
||||
await fn(payload)
|
||||
emit('done')
|
||||
visible.value = false
|
||||
// visible.value = false
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
|
@@ -1,106 +1,388 @@
|
||||
<!-- 编辑弹窗 -->
|
||||
<template>
|
||||
<Dialog v-model="isVisible" :title="'添加试卷'" width="460" @open="handleOpen" center>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
label-width="80px"
|
||||
@submit.prevent=""
|
||||
>
|
||||
<el-form-item label="试卷数目" prop="num">
|
||||
<el-input
|
||||
clearable
|
||||
v-model="form.num"
|
||||
placeholder="请输入试卷数目"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="handleCancel">取消</el-button>
|
||||
<el-button type="primary" :loading="loading" @click="save">
|
||||
保存
|
||||
</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref, reactive, nextTick } from 'vue';
|
||||
|
||||
import { useFormData } from '@/utils/use-form-data';
|
||||
import { addPaper } from '@/api/system/paper';
|
||||
const message = useMessage() // 消息弹窗
|
||||
const props = defineProps({
|
||||
/** 修改回显的数据 */
|
||||
data: Object,
|
||||
taskId: String ,
|
||||
taskSpecialty: String,
|
||||
});
|
||||
|
||||
const emit = defineEmits(['done']);
|
||||
|
||||
/** 弹窗是否打开 */
|
||||
const isVisible = defineModel({ type: Boolean });
|
||||
|
||||
/** 提交状态 */
|
||||
const loading = ref(false);
|
||||
|
||||
/** 表单实例 */
|
||||
const formRef = ref(null);
|
||||
|
||||
/** 表单数据 */
|
||||
const [form, resetFields, assignFields] = useFormData({
|
||||
num: '',
|
||||
taskId: ''
|
||||
});
|
||||
|
||||
/** 表单验证规则 */
|
||||
const rules = reactive({
|
||||
num: [
|
||||
{ required: true, message: '请输入试卷数目', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d*$/, message: '请输入正整数', trigger: 'blur' }
|
||||
]
|
||||
});
|
||||
<Dialog v-model="isVisible" :title="'添加试卷'" width="460" @open="handleOpen" center>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
label-width="80px"
|
||||
@submit.prevent=""
|
||||
>
|
||||
<el-form-item label="试卷数目" prop="num">
|
||||
<el-input
|
||||
clearable
|
||||
v-model="form.num"
|
||||
placeholder="请输入试卷数目"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
/** 关闭弹窗 */
|
||||
const handleCancel = () => {
|
||||
isVisible.value = false;
|
||||
<!-- 是否启用组卷范围 -->
|
||||
<el-form-item label=" " label-width="0">
|
||||
<div style="display: flex; align-items: center; gap: 10px;">
|
||||
<el-checkbox v-model="form.useCustomScope">
|
||||
自定义组卷范围
|
||||
</el-checkbox>
|
||||
<el-button v-if="form.useCustomScope" @click="handleScopeSetting">
|
||||
组卷范围
|
||||
</el-button>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
|
||||
<template #footer>
|
||||
<el-button @click="handleCancel">取消</el-button>
|
||||
<el-button type="primary" :loading="loading" @click="save">
|
||||
保存
|
||||
</el-button>
|
||||
</template>
|
||||
</Dialog>
|
||||
|
||||
|
||||
|
||||
<el-dialog v-model="scopeDialogVisible" title="设置组卷范围" width="80%">
|
||||
<div style="display: flex;">
|
||||
<!-- 左侧 -->
|
||||
<div style="width: 40%; padding-right: 16px;">
|
||||
<el-form-item label="分组类型">
|
||||
<el-select v-model="selectedGroupType" placeholder="请选择" @change="loadLeftList">
|
||||
<el-option label="练习" value="0" />
|
||||
<el-option label="考试" value="1" />
|
||||
<el-option label="冲刺练习" value="3" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-tree
|
||||
:data="leftTreeData"
|
||||
node-key="id"
|
||||
:props="{ label: 'label', children: 'children' }"
|
||||
@node-click="handleNodeClick"
|
||||
/>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 右侧 -->
|
||||
<div style="width: 60%; padding-left: 16px;">
|
||||
<div style="font-weight: bold; margin-bottom: 8px;">已选试卷</div>
|
||||
|
||||
|
||||
<el-table
|
||||
:data="rightList"
|
||||
border
|
||||
height="340"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column prop="taskName" label="任务名称" align="center"/>
|
||||
<el-table-column label="任务分组" align="center">
|
||||
<template #default="{ row }">
|
||||
{{ getTaskTypeLabel(row.taskType) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="num" label="试卷编号" align="center" />
|
||||
<el-table-column prop="que" label="题型" align="center"/>
|
||||
<el-table-column width="160" label="操作" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-button type="text" size="small" @click="removeFromRightList(row)">移除</el-button>
|
||||
<el-button type="text" size="small" @click="openQueDialog(row)">设置题型</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 弹窗底部按钮 -->
|
||||
<template #footer>
|
||||
<el-button @click="scopeDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="handleScopeConfirm">确认</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="queDialogVisible" title="选择题型" width="400px" center>
|
||||
<el-checkbox
|
||||
v-model="checkAll"
|
||||
@change="handleCheckAllChange"
|
||||
style="margin-bottom: 10px;"
|
||||
>
|
||||
题型名称
|
||||
</el-checkbox>
|
||||
|
||||
<el-checkbox-group v-model="selectedQue" style="display: flex; flex-direction: column; gap: 8px;">
|
||||
<el-checkbox
|
||||
v-for="item in currentSpNames"
|
||||
:key="item"
|
||||
:label="item"
|
||||
>{{ item }}</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
|
||||
<template #footer>
|
||||
<el-button @click="queDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="confirmQue">确定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, nextTick } from 'vue';
|
||||
import * as SmsChannelApi from '@/api/system/task/index';
|
||||
import { useFormData } from '@/utils/use-form-data';
|
||||
import { addPaper ,addPaperBypaper} from '@/api/system/paper';
|
||||
const message = useMessage() // 消息弹窗
|
||||
const props = defineProps({
|
||||
/** 修改回显的数据 */
|
||||
data: Object,
|
||||
taskId: String ,
|
||||
taskSpecialty: String,
|
||||
});
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 100,
|
||||
signature: undefined,
|
||||
status: undefined,
|
||||
taskName:undefined,
|
||||
createTime: [],
|
||||
taskType:'3'
|
||||
})
|
||||
const emit = defineEmits(['done']);
|
||||
|
||||
/** 弹窗是否打开 */
|
||||
const isVisible = defineModel({ type: Boolean });
|
||||
|
||||
/** 提交状态 */
|
||||
const loading = ref(false);
|
||||
|
||||
/** 表单实例 */
|
||||
const formRef = ref(null);
|
||||
|
||||
/** 表单数据 */
|
||||
const [form, resetFields, assignFields] = useFormData({
|
||||
num: '',
|
||||
taskId: ''
|
||||
});
|
||||
|
||||
/** 表单验证规则 */
|
||||
const rules = reactive({
|
||||
num: [
|
||||
{ required: true, message: '请输入试卷数目', trigger: 'blur' },
|
||||
{ pattern: /^[1-9]\d*$/, message: '请输入正整数', trigger: 'blur' }
|
||||
]
|
||||
});
|
||||
|
||||
//组卷范围
|
||||
const scopeDialogVisible = ref(false);
|
||||
const queDialogVisible = ref(false);
|
||||
|
||||
const selectedGroupType = ref('');
|
||||
const leftList = ref([]);
|
||||
const rightList = ref([]);
|
||||
const leftTreeData = ref([]);
|
||||
|
||||
|
||||
// 选中某个分组类型时,加载左侧列表
|
||||
const loadLeftList = async () => {
|
||||
// 示例:根据 selectedGroupType 获取数据
|
||||
queryParams.taskType=selectedGroupType.value
|
||||
const res = await SmsChannelApi.pageTaskPapers(queryParams)
|
||||
leftTreeData.value = convertToTreeData(res.list);
|
||||
};
|
||||
|
||||
// 双击左侧行,加入右侧列表
|
||||
const handleRowDblClick = (row) => {
|
||||
if (!rightList.value.find((r) => r.id === row.id)) {
|
||||
rightList.value.push({ ...row });
|
||||
}
|
||||
};
|
||||
|
||||
// 从右侧列表中移除
|
||||
const removeFromRightList = (row) => {
|
||||
rightList.value = rightList.value.filter((item) => item.id !== row.id);
|
||||
};
|
||||
|
||||
// 点击确认
|
||||
const handleScopeConfirm = () => {
|
||||
scopeDialogVisible.value = false;
|
||||
// 提交 rightList.value 到后台或保存状态
|
||||
console.log('选中的试卷:', rightList.value);
|
||||
};
|
||||
|
||||
const handleScopeSetting = () => {
|
||||
scopeDialogVisible.value = true;
|
||||
};
|
||||
|
||||
|
||||
|
||||
const convertToTreeData = (taskList) => {
|
||||
return taskList.map(task => {
|
||||
return {
|
||||
label: task.taskName,
|
||||
children: (task.educationPaperList || []).map(paper => ({
|
||||
label: paper.num || '未命名试卷',
|
||||
id: paper.paperId,
|
||||
num:paper.num,
|
||||
taskName: task.taskName,
|
||||
taskType: task.taskType,
|
||||
que: '全部' ,
|
||||
educationPaperSchemeList:task.educationPaperSchemeList
|
||||
}))
|
||||
};
|
||||
|
||||
/** 保存编辑 */
|
||||
const save = () => {
|
||||
formRef.value?.validate?.((valid) => {
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
loading.value = true;
|
||||
addPaper({ num: form.num,taskid: props.taskId ,taskSpecialty:form.taskSpecialty})
|
||||
.then((msg) => {
|
||||
loading.value = false;
|
||||
message.success(msg);
|
||||
handleCancel();
|
||||
emit('done');
|
||||
})
|
||||
.catch((e) => {
|
||||
loading.value = false;
|
||||
message.error(e.message);
|
||||
});
|
||||
});
|
||||
};
|
||||
const handleNodeClick = (data) => {
|
||||
if (!data.children) {
|
||||
// 是试卷节点
|
||||
if (!rightList.value.find(p => p.id === data.id)) {
|
||||
rightList.value.push(data);
|
||||
}
|
||||
}
|
||||
};
|
||||
const getTaskTypeLabel = (type) => {
|
||||
const map = {
|
||||
'0': '练习',
|
||||
'1': '考试',
|
||||
'3': '冲刺练习'
|
||||
};
|
||||
return map[type] || '未知';
|
||||
};
|
||||
|
||||
const selectedRows = ref([]);
|
||||
const handleSelectionChange = (rows) => {
|
||||
selectedRows.value = rows;
|
||||
};
|
||||
const checkAll = ref(false);
|
||||
const selectedQue = ref<string[]>([]);
|
||||
const currentSpNames = ref<Array<string>>([]); // 当前题型名列表
|
||||
const selectedRow = ref<any>(null); // 当前选中的试卷数据(可选)
|
||||
|
||||
const openQueDialog = (row) => {
|
||||
|
||||
// 设置当前选中的题型列表
|
||||
currentSpNames.value = row.educationPaperSchemeList?.map(item => item.spName) || [];
|
||||
|
||||
// 设置当前行(选中的试卷)用于后续保存
|
||||
selectedRow.value = row;
|
||||
queDialogVisible.value = true;
|
||||
};
|
||||
///
|
||||
|
||||
watch(selectedQue, (val) => {
|
||||
if (val.length === currentSpNames.value.length) {
|
||||
checkAll.value = true;
|
||||
} else {
|
||||
checkAll.value = false;
|
||||
}
|
||||
});
|
||||
|
||||
const handleCheckAllChange = (val: boolean) => {
|
||||
if (val) {
|
||||
selectedQue.value = [...currentSpNames.value];
|
||||
} else {
|
||||
selectedQue.value = [];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
// 确认选择题型,把逗号分隔字符串赋给该行que字段
|
||||
const confirmQue = async () => {
|
||||
if (selectedRow.value) {
|
||||
try {
|
||||
const payload = {
|
||||
taskId: props.taskId,
|
||||
que: selectedQue.value // 数组形式传递
|
||||
};
|
||||
|
||||
const res= await SmsChannelApi.checkType(payload);
|
||||
|
||||
// 可选:赋值用于前端展示(逗号拼接)
|
||||
selectedRow.value.que = selectedQue.value.join(',');
|
||||
|
||||
ElMessage.success('题型设置成功');
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
ElMessage.error('题型设置失败');
|
||||
}
|
||||
}
|
||||
|
||||
// 关闭弹窗 & 清空数据
|
||||
queDialogVisible.value = false;
|
||||
selectedRow.value = null;
|
||||
selectedQue.value = [];
|
||||
checkAll.value = false;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** 关闭弹窗 */
|
||||
const handleCancel = () => {
|
||||
isVisible.value = false;
|
||||
};
|
||||
|
||||
/** 保存编辑 */
|
||||
const save = () => {
|
||||
formRef.value?.validate?.((valid) => {
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
loading.value = true;
|
||||
if (form.useCustomScope) {
|
||||
console.log( form.num+"num")
|
||||
console.log(rightList.value+"rightList.value")
|
||||
|
||||
if (!rightList.value || rightList.value.length === 0) {
|
||||
ElMessage.warning('请先设置组卷范围!');
|
||||
return; // 阻止后续逻辑
|
||||
}
|
||||
console.log( props.taskId)
|
||||
const payload = {
|
||||
num: form.num,
|
||||
taskId: props.taskId,
|
||||
paperList: rightList.value, // 如果是数组,字段名建议有“List”或“Array”
|
||||
};
|
||||
addPaperBypaper(payload)
|
||||
.then((msg) => {
|
||||
loading.value = false;
|
||||
message.success('新增成功!');
|
||||
handleCancel();
|
||||
emit('done');
|
||||
})
|
||||
.catch((e) => {
|
||||
loading.value = false;
|
||||
message.error(e.message);
|
||||
});
|
||||
console.log("自定义范围!");
|
||||
}else{
|
||||
addPaper({ num: form.num,taskid: props.taskId ,taskSpecialty:form.taskSpecialty})
|
||||
.then((msg) => {
|
||||
loading.value = false;
|
||||
message.success('新增成功!');
|
||||
handleCancel();
|
||||
emit('done');
|
||||
})
|
||||
.catch((e) => {
|
||||
loading.value = false;
|
||||
message.error(e.message);
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/** 弹窗打开事件 */
|
||||
const handleOpen = () => {
|
||||
resetFields();
|
||||
form.taskId = props.taskId; // 新增时赋值 taskId
|
||||
form.taskSpecialty = props.taskSpecialty; // 新增时赋值 taskSpecialty
|
||||
nextTick(() => {
|
||||
nextTick(() => {
|
||||
formRef.value?.clearValidate?.();
|
||||
});
|
||||
});
|
||||
};
|
||||
defineExpose({ open })
|
||||
</script>
|
||||
|
||||
/** 弹窗打开事件 */
|
||||
const handleOpen = () => {
|
||||
resetFields();
|
||||
form.taskId = props.taskId; // 新增时赋值 taskId
|
||||
form.taskSpecialty = props.taskSpecialty; // 新增时赋值 taskSpecialty
|
||||
nextTick(() => {
|
||||
nextTick(() => {
|
||||
formRef.value?.clearValidate?.();
|
||||
});
|
||||
});
|
||||
};
|
||||
defineExpose({ open })
|
||||
</script>
|
||||
|
@@ -1,211 +0,0 @@
|
||||
<template>
|
||||
|
||||
<ContentWrap>
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="68px"
|
||||
>
|
||||
|
||||
<el-form-item>
|
||||
<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
|
||||
type="primary"
|
||||
plain
|
||||
@click="openForm('create')"
|
||||
v-hasPermi="['system:sms-channel:create']"
|
||||
>
|
||||
<Icon icon="ep:plus" class="mr-5px" /> 新增</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list">
|
||||
<el-table-column label="试卷编号" align="center" prop="paperId" />
|
||||
<el-table-column label="使用次数" align="center" prop="counts" />
|
||||
<el-table-column label="抽卷方式" align="center" prop="rollUp">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.quLevel === '0'">固定</span>
|
||||
<span v-else-if="scope.row.quLevel === '1'">AB卷</span>
|
||||
<span v-else-if="scope.row.quLevel === '2'">随机</span>
|
||||
<span v-else-if="scope.row.quLevel === '3'">自选</span>
|
||||
<span v-else>未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="AB卷" align="center" prop="isAb">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.quLevel === '0'">A卷</span>
|
||||
<span v-else-if="scope.row.quLevel === '1'">B卷</span>
|
||||
<span v-else>未知</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="是否启用" align="center" prop="status" >
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.SYS_YES_NO" :value="scope.row.status" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openEdit('update', scope.row)"
|
||||
v-hasPermi="['system:sms-channel:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['system:sms-channel:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
|
||||
|
||||
|
||||
<paper-add v-model="showAdd" :task-Id="taskId" :task-specialty="taskSpecialty" />
|
||||
<paper-edit v-model="showEdit" :data="current" />
|
||||
<!-- <paper-look v-model="showLook" :paper-id="paperId" /> -->
|
||||
<paper-set v-model="showSet" :task-Id="taskId" />
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||
|
||||
import * as SmsChannelApi from '@/api/system/paper';
|
||||
import PaperEdit from './components/step-edit.vue';
|
||||
import PaperAdd from './components/step-add.vue';
|
||||
import PaperLook from './components/step-look.vue';
|
||||
import PaperSet from './components/step-set.vue';
|
||||
import PaperSearch from './components/step-search.vue';
|
||||
import { pagePapers, removePapers, exportPapers } from '@/api/system/paper';
|
||||
|
||||
|
||||
|
||||
defineOptions({ name: 'SystemPaper' });
|
||||
const props = defineProps({
|
||||
taskSpecialty: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
taskId: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
})
|
||||
|
||||
const { t } = useI18n() // 国际化
|
||||
const message = useMessage() // 消息弹窗
|
||||
|
||||
|
||||
/** 当前编辑数据 */
|
||||
const current = ref<object>();
|
||||
|
||||
/** 是否显示编辑弹窗 */
|
||||
const showEdit = ref(false);
|
||||
|
||||
const showLook = ref(false);
|
||||
|
||||
const showAdd = ref(false);
|
||||
|
||||
const showSet = ref(false);
|
||||
|
||||
|
||||
const smsChannelFormRef = ref()
|
||||
const taskEditRef = ref()
|
||||
const taskAddRef = ref()
|
||||
const taskTempRef = ref()
|
||||
|
||||
|
||||
|
||||
const loading = ref(false) // 列表的加载中
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref([]) // 列表的数据
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
signature: undefined,
|
||||
status: undefined,
|
||||
createTime: []
|
||||
})
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const res = await SmsChannelApi.pagePapers(queryParams)
|
||||
console.log(res)
|
||||
list.value = res
|
||||
total.value = res.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref();
|
||||
const openForm = (type: string, id?: number) => {
|
||||
showAdd.value = true
|
||||
taskAddRef.value?.open(type, id)
|
||||
}
|
||||
|
||||
const openEdit = (type: string, row?: object) => {
|
||||
showEdit.value = true
|
||||
current.value = row
|
||||
console.log( current.value )
|
||||
taskEditRef.value?.open(type, row)
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await SmsChannelApi.removePaper(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
@@ -54,7 +54,7 @@
|
||||
plain
|
||||
@click="openSet"
|
||||
>
|
||||
<Icon icon="ep:set-up" class="mr-5px" /> 抽卷调整
|
||||
<Icon icon="ep:set-up" class="mr-5px" /> 抽卷方式
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
|
@@ -5,15 +5,11 @@
|
||||
<!-- 第一个 tab - 通用参数 -->
|
||||
<el-tab-pane label="通用参数" name="tab1">
|
||||
<el-form :model="form" label-width="200px" style="margin-top: 20px;">
|
||||
|
||||
<el-row :gutter="20">
|
||||
<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-form-item label="是否使用监考密码验证">
|
||||
<el-form-item label="是否使用监考密码验证">
|
||||
<el-switch
|
||||
v-model="form.isExamPassword"
|
||||
active-value="0"
|
||||
@@ -21,67 +17,14 @@
|
||||
active-text="是"
|
||||
inactive-text="否"
|
||||
@change="handleFormChange" />
|
||||
</el-form-item> -->
|
||||
</el-form-item>
|
||||
|
||||
<!-- 监考密码 -->
|
||||
<!-- <el-form-item label="监考密码" v-if="form.isExamPassword === '0'">
|
||||
<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.isRepeat" 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 v-model="form.isSession" 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.isAnswer" 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-col>
|
||||
<el-col :span="12">
|
||||
<!-- 练习成绩保存 -->
|
||||
<el-form-item label="练习成绩保存">
|
||||
<el-radio-group v-model="form.saveGrades" @change="handleFormChange">
|
||||
@@ -105,26 +48,69 @@
|
||||
</el-col> -->
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row :gutter="20">
|
||||
<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-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.isRepeat" 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.isSession" 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.isAnswer" 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.isTime" 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.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"
|
||||
@@ -145,17 +131,31 @@
|
||||
</el-form-item>
|
||||
</el-col> -->
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row :gutter="20">
|
||||
|
||||
|
||||
|
||||
<el-col :span="12">
|
||||
<!-- 禁止学生使用U盘 -->
|
||||
<el-form-item label="是否显示成绩">
|
||||
<el-switch v-model="form.isScore" 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.isScoreDetail" active-value="0" inactive-value="1" active-text="是" inactive-text="否"
|
||||
@change="handleFormChange" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<!-- <el-form-item label="定时检查与学生端联通性,每">
|
||||
<el-input-number v-model="form.isConnect" label="分钟" @change="handleFormChange" />
|
||||
<span>分钟传一次,断联直接交卷</span>
|
||||
</el-form-item> -->
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
@@ -236,6 +236,14 @@
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="是否允许复制题干">
|
||||
<el-switch v-model="form.isCpoy" active-value="0" inactive-value="1" active-text="是" inactive-text="否"
|
||||
@change="handleFormChange" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="考试注意事项提醒" name="tab4">
|
||||
@@ -271,7 +279,7 @@ const form = ref({
|
||||
driver: '', // 存放系统盘
|
||||
directory: '', // 考试目录名称
|
||||
uploadTime: '', // 上传间隔时间
|
||||
isDel: '',
|
||||
isCpoy: '',
|
||||
isRepeat: '', // 是否删除目录
|
||||
isAnswer: '',
|
||||
isLook: '',
|
||||
@@ -279,7 +287,9 @@ const form = ref({
|
||||
isFile: '',
|
||||
isNet: '',
|
||||
isScreen: '',
|
||||
warn: ''
|
||||
warn: '',
|
||||
isScore:'',
|
||||
isScoreDetail:'',
|
||||
})
|
||||
|
||||
const activeTab = ref('tab1')
|
||||
|
@@ -187,7 +187,7 @@ const removeBatch = async () => {
|
||||
}
|
||||
|
||||
await ElMessageBox.confirm(
|
||||
'确定要删除选中的人员吗?',
|
||||
'只能删除待考状态的学生,是否确认删除?',
|
||||
'警告',
|
||||
{
|
||||
confirmButtonText: '确定',
|
||||
|
@@ -196,7 +196,15 @@ const handleDeletes = async () => {
|
||||
message.error('请至少选择一条数据');
|
||||
return;
|
||||
}
|
||||
|
||||
await ElMessageBox.confirm(
|
||||
'只能删除待考状态的学生,是否确认删除?',
|
||||
'警告',
|
||||
{
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}
|
||||
);
|
||||
selectedRows.value = rows.map((d: any) => d.id); // 保存选中的行数据
|
||||
|
||||
const deleteData = {
|
||||
|
Reference in New Issue
Block a user