<template>
|
<win :title="setting.title" width="1024px" @close="close">
|
<el-form ref="form" :model="form" :rules="rules" label-width="120px" class="demo-ruleForm" label-position="right">
|
<!-- <el-form-item label="题库大类" prop="rootCatalog">-->
|
<!-- <el-select v-model="form.rootCatalog" placeholder="题库大类">-->
|
<!-- <el-option :value="form.rootCatalog" :label="form.rootCatalogName" :key="form.rootCatalog"/>-->
|
<!-- </el-select>-->
|
<!-- </el-form-item>-->
|
<el-form-item label="题库大类" prop="rootCatalog">
|
<el-select v-model="form.rootCatalog" placeholder="题库大类">
|
<el-option
|
v-for="dict in dict.type.question_root_catalog"
|
:key="dict.value"
|
:label="dict.label"
|
:value="dict.value"
|
/>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="二级分类" prop="majorCatalog">
|
<el-select v-model="form.majorCatalog" placeholder="二级分类">
|
<el-option :value="form.majorCatalog" :label="form.majorCatalogName"/>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="试卷名称" prop="name">
|
<el-input v-model="form.name" placeholder="" />
|
</el-form-item>
|
<el-form-item label="组卷策略" prop="paperPolicy">
|
<el-radio-group v-model="form.paperPolicy" size="small" @input="onPaperPolicyChanged">
|
<el-radio-button label="random">完全随机</el-radio-button>
|
<el-radio-button label="assign_type">指定类型</el-radio-button>
|
<el-radio-button label="manual">手动选择</el-radio-button>
|
</el-radio-group>
|
</el-form-item>
|
<el-form-item label="指定类型" v-show="showPaperPolicyAssign">
|
<el-row :gutter="20">
|
<el-col :span="6">
|
<el-form-item label="单选数量">
|
<el-input-number v-model="paperPolicyContent.selectSingleCount" :min="0" :max="200" size="small"></el-input-number>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<el-form-item label="单选总分">
|
<el-input-number v-model="paperPolicyContent.selectSingleScore" :min="0" :max="200" size="small"></el-input-number>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="6">
|
<el-form-item label="多选数量">
|
<el-input-number v-model="paperPolicyContent.selectMultipleCount" :min="0" :max="200" size="small"></el-input-number>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<el-form-item label="多选总分">
|
<el-input-number v-model="paperPolicyContent.selectMultipleScore" :min="0" :max="200" size="small"></el-input-number>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="6">
|
<el-form-item label="判断数量">
|
<el-input-number v-model="paperPolicyContent.trueOrFalseCount" :min="0" :max="200" size="small"></el-input-number>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<el-form-item label="判断总分">
|
<el-input-number v-model="paperPolicyContent.trueOrFalseScore" :min="0" :max="200" size="small"></el-input-number>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="6">
|
<el-form-item label="填空数量">
|
<el-input-number v-model="paperPolicyContent.completionCount" :min="0" :max="200" size="small"></el-input-number>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<el-form-item label="填空总分">
|
<el-input-number v-model="paperPolicyContent.completionScore" :min="0" :max="200" size="small"></el-input-number>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="6">
|
<el-form-item label="简答数量">
|
<el-input-number v-model="paperPolicyContent.shortAnswerCount" :min="0" :max="200" size="small"></el-input-number>
|
</el-form-item>
|
</el-col>
|
<el-col :span="6">
|
<el-form-item label="简答总分">
|
<el-input-number v-model="paperPolicyContent.shortAnswerScore" :min="0" :max="200" size="small"></el-input-number>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form-item>
|
<el-form-item label="手动选择" v-show="showPaperPolicyManual">
|
|
</el-form-item>
|
<el-form-item label="试题数量" prop="questionCount">
|
<el-input-number v-model="form.questionCount" :min="2" :max="200" label="抽取试题总数"></el-input-number>
|
</el-form-item>
|
<el-form-item label="卷面总分" prop="scoreTotal">
|
<el-input-number v-model="form.scoreTotal" :min="1" :max="500" label="试题总分"></el-input-number>
|
</el-form-item>
|
<el-form-item label="试题难度" prop="difficultLevel">
|
<el-radio-group v-model="form.difficultLevel" size="small">
|
<el-radio-button label="1">最简单</el-radio-button>
|
<el-radio-button label="2">简单</el-radio-button>
|
<el-radio-button label="3">中等</el-radio-button>
|
<el-radio-button label="4">较难</el-radio-button>
|
<el-radio-button label="5">最难</el-radio-button>
|
</el-radio-group>
|
</el-form-item>
|
<el-form-item label="试卷状态" prop="dataStatus">
|
<el-radio-group v-model="form.dataStatus" size="small">
|
<el-radio-button label="0">正常</el-radio-button>
|
<el-radio-button label="1">禁用</el-radio-button>
|
<el-radio-button label="2" disabled>已删除</el-radio-button>
|
</el-radio-group>
|
</el-form-item>
|
<el-form-item label="备注" prop="summary">
|
<el-input type="textarea" :rows="3" v-model="form.summary" placeholder="" />
|
</el-form-item>
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<my-button-v2 name="关闭" site="form" @click="close" />
|
<my-button-v2 name="保存" site="form" @click="save" />
|
</div>
|
</win>
|
</template>
|
|
<script>
|
import win from '@/views/components/win'
|
import myButtonV2 from '@/views/components/myButtonV2'
|
import {add} from "@/api/etaa/paper";
|
|
export default {
|
name: "",
|
components: { win, myButtonV2 },
|
dicts: ['question_root_catalog'],
|
props: {
|
// setting 中须至少包含控制dialog显示或隐藏的属性,其余属性可拓展
|
// 将添加/修改的大量数据及逻辑从列表页面中分离出来,避免列表页面代码过多,审查困难
|
// 若此页面须回传数据至父页面,可在引用组件时添加事件,本页面使用this.$emit('事件名',参数1,参数2...)回传数据
|
setting: {
|
type: Object,
|
default: () => {
|
}
|
}
|
},
|
|
data(){
|
return {
|
// 显示抽取策略的区域
|
showPaperPolicyAssign: false,
|
showPaperPolicyManual: false,
|
|
// 指定类型策略时,每种试题题量和总分
|
paperPolicyContent: {
|
selectSingleCount: 0,
|
selectMultipleCount: 0,
|
trueOrFalseCount: 0,
|
completionCount: 0,
|
shortAnswerCount: 0,
|
selectSingleScore: 0,
|
selectMultipleScore: 0,
|
trueOrFalseScore: 0,
|
completionScore: 0,
|
shortAnswerScore: 0,
|
},
|
|
form: {
|
id: null,
|
name: null,
|
orgId: this.setting.orgId,
|
rootCatalog: this.setting.rootCatalog,
|
majorCatalog: 0, // 暂时没有实现选择二级分类树,要加上,2023-05-06
|
paperPolicy: 'random',
|
policyContent: null,
|
questionCount: 10,
|
difficultLevel: 3,
|
scoreTotal: 0,
|
scorePolicy: null,
|
dataStatus: 0,
|
summary: null
|
},
|
|
rules: {
|
name: [
|
{ required: true, message: "请输入试卷名称", trigger: "blur" }
|
],
|
rootCatalog: [
|
{ required: true, message: "选择题库大类", trigger: "blur" }
|
],
|
paperPolicy: [
|
{ required: true, message: "选择组卷策略", trigger: "blur" }
|
],
|
questionCount: [
|
{ required: true, message: "输入抽取试题总数", trigger: "blur" }
|
]
|
},
|
}
|
},
|
|
created() {
|
|
},
|
|
methods: {
|
close() {
|
this.$emit('close')
|
},
|
|
save(){
|
this.$refs.form.validate(validate => {
|
if(validate){
|
if(this.form.paperPolicy == 'assign_type'){
|
// 检查指定的试题类型抽取参数是否完整
|
if(this.paperPolicyContent.selectSingleCount == 0
|
&& this.paperPolicyContent.selectMultipleCount == 0
|
&& this.paperPolicyContent.trueOrFalseCount == 0
|
&& this.paperPolicyContent.completionCount == 0
|
&& this.paperPolicyContent.shortAnswerCount == 0){
|
this.$message.error('指定类型策略,需要录入每个题型数量、分值,不能全部为空!');
|
return;
|
}
|
let scoreTotal = this.paperPolicyContent.selectSingleScore
|
+ this.paperPolicyContent.selectMultipleScore
|
+ this.paperPolicyContent.trueOrFalseScore
|
+ this.paperPolicyContent.completionScore
|
+ this.paperPolicyContent.shortAnswerScore;
|
if(scoreTotal != this.form.scoreTotal){
|
this.$message.error('指定类型策略,分项分值总和与总分不一致!');
|
return;
|
}
|
|
// 把选择的各项题型信息数据组装起来
|
this.form.policyContent = JSON.stringify(this.paperPolicyContent);
|
}
|
|
if(this.form.questionCount == 0){
|
this.$message.error('试题总数必须大于0');
|
return;
|
}
|
|
add(this.form).then(response => {
|
// this.$modal.msgSuccess("修改成功");
|
// this.open = false;
|
// this.getList();
|
this.$message.success('保存成功!')
|
this.$emit('search')
|
this.close()
|
});
|
}
|
});
|
},
|
|
onPaperPolicyChanged(val){
|
console.log("选中了:" + val);
|
if(val == 'assign_type'){
|
this.showPaperPolicyAssign = true;
|
this.showPaperPolicyManual = false;
|
} else if(val == 'manual'){
|
this.showPaperPolicyAssign = false;
|
this.showPaperPolicyManual = true;
|
} else {
|
this.showPaperPolicyAssign = false;
|
this.showPaperPolicyManual = false;
|
}
|
}
|
}
|
}
|
</script>
|
|
<style scoped>
|
|
</style>
|