<template>
|
<div class="app-container">
|
<el-form :model="form" ref="form" label-width="200px" v-loading="formLoading" :rules="rules">
|
<el-form-item label="考生:" prop="menuIds" required>
|
<el-cascader v-model="form.menuIds" :options="options" :props="props" clearable collapse-tags>
|
</el-cascader>
|
</el-form-item>
|
<el-form-item label="课目:" prop="subjectId" required >
|
<el-select ref="subjectIdRef" v-model="form.subjectId" placeholder="课目" multiple
|
collapse-tags @visible-change="subjectIdEvent">
|
<el-option v-for="item in subjectFilter" :key="item.id" :value="item.id"
|
:label="item.name+' '"></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="试卷类型:" prop="paperType" required >
|
<el-select v-model="form.paperType" placeholder="试卷类型" @visible-change="subjectIdEvent" disabled>
|
<el-option v-for="item in paperTypeEnum" :key="item.key" :value="item.key" :label="item.value" ></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="时间限制:" required v-show="form.paperType===4">
|
<el-date-picker v-model="form.limitDateTime" value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange"
|
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
|
</el-date-picker>
|
</el-form-item>
|
<el-form-item label="试卷名称:" prop="name" required >
|
<el-row :gutter="20">
|
<el-col :span="9">
|
<el-input v-model="form.name"/>
|
</el-col>
|
<el-col :span="2" v-if="form.paperType==7">
|
<span>总数分:</span>
|
</el-col>
|
<el-col :span="9" v-if="form.paperType==7">
|
<el-input disabled v-model="form.aggregateSource"/>
|
</el-col>
|
</el-row>
|
</el-form-item>
|
<el-form-item :key="item.subjectId" :label="item.label" required v-for="(item,key) in form.questionTypeVMS" v-if="form.paperType ==7">
|
<el-row >
|
<el-col :span="3" >
|
<span>多选题: </span>
|
|
</el-col>
|
<el-col :span="3">
|
<el-input v-model="form.questionTypeVMS[key].multipleChoice" style="width: 80%"/>
|
</el-col>
|
<el-col :span="3" >
|
<span>单选题:</span>
|
</el-col>
|
<el-col :span="3">
|
<el-input v-model="form.questionTypeVMS[key].singleChoice" style="width: 80%"/>
|
</el-col>
|
<el-col :span="3" >
|
<span>判断题:</span>
|
</el-col>
|
<el-col :span="3">
|
<el-input v-model="form.questionTypeVMS[key].trueFalse" style="width: 80%"/>
|
</el-col>
|
</el-row>
|
</el-form-item>
|
<!-- <el-form-item label="总数分:" v-if="form.paperType==7" prop="name" required>-->
|
<!-- <el-input v-model="form.name"/>-->
|
<!-- </el-form-item>-->
|
<el-form-item :key="index" :label="'标题'+(index+1)+':'" required v-for="(titleItem,index) in form.titleItems">
|
<el-input v-model="titleItem.name" style="width: 80%"/>
|
<el-button v-if="form.paperType!=7" type="text" class="link-left" style="margin-left: 20px" size="mini" @click="addQuestion(titleItem)">
|
添加题目
|
</el-button>
|
<el-button type="text" class="link-left" size="mini" @click="form.titleItems.splice(index,1)">删除</el-button>
|
<el-card class="exampaper-item-box" v-if="titleItem.questionItems&&titleItem.questionItems.length!==0&&subjectIdList.length<2">
|
<el-form-item :key="questionIndex" :label="'题目'+(questionIndex+1)+':'"
|
v-for="(questionItem,questionIndex) in titleItem.questionItems" style="margin-bottom: 15px">
|
<el-row>
|
<el-col :span="23">
|
<QuestionShow :qType="questionItem.questionType" :question="questionItem"/>
|
</el-col>
|
<el-col :span="1">
|
<el-button type="text" size="mini" @click="titleItem.questionItems.splice(questionIndex,1)">删除
|
</el-button>
|
</el-col>
|
</el-row>
|
</el-form-item>
|
</el-card>
|
</el-form-item>
|
<el-form-item label="建议时长:" prop="suggestTime" required>
|
<el-input v-model="form.suggestTime" placeholder="分钟"/>
|
</el-form-item>
|
<el-form-item>
|
<el-button type="primary" @click="submitForm">提交</el-button>
|
<el-button @click="resetForm">重置</el-button>
|
<el-button type="success" @click="addTitle">添加标题</el-button>
|
</el-form-item>
|
</el-form>
|
<el-dialog :visible.sync="questionPage.showDialog" width="70%">
|
<el-form :model="questionPage.queryParam" ref="queryForm" :inline="true">
|
<el-form-item label="ID:">
|
<el-input v-model="questionPage.queryParam.id" clearable></el-input>
|
</el-form-item>
|
<el-form-item label="题型:">
|
<el-select v-model="questionPage.queryParam.questionType" clearable>
|
<el-option v-for="item in questionTypeEnum" :key="item.key" :value="item.key" :label="item.value"></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item>
|
<el-button type="primary" @click="queryForm">查询</el-button>
|
</el-form-item>
|
</el-form>
|
<el-table v-loading="questionPage.listLoading" :data="questionPage.tableData"
|
@selection-change="handleSelectionChange" border fit highlight-current-row style="width: 100%">
|
<el-table-column type="selection" width="35"></el-table-column>
|
<el-table-column prop="questionType" label="题型" :formatter="questionTypeFormatter" width="70px"/>
|
<el-table-column prop="shortTitle" label="题干" show-overflow-tooltip/>
|
</el-table>
|
<pagination v-show="questionPage.total>0" :total="questionPage.total"
|
:page.sync="questionPage.queryParam.pageIndex" :limit.sync="questionPage.queryParam.pageSize"
|
@pagination="search"/>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="questionPage.showDialog = false">取 消</el-button>
|
<el-button type="primary" @click="confirmQuestionSelect">确定</el-button>
|
</span>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
|
import { mapGetters, mapState, mapActions } from 'vuex'
|
import Pagination from '@/components/Pagination'
|
import QuestionShow from '../question/components/Show'
|
import examPaperApi from '@/api/examPaper'
|
import questionApi from '@/api/question'
|
import departmentApi from '@/api/department'
|
|
export default {
|
components: { Pagination, QuestionShow },
|
|
data () {
|
return {
|
props: {
|
multiple: true
|
// lazy: true,
|
// lazyLoad (node, resolve) {
|
// console.log(node,"node");
|
// var that = this;
|
// departmentApi.selectUser(node.value).then(re=>{
|
// console.log(re,"re");
|
// const nodes = re.response.map(xxx=>{
|
// return {value: xxx.id,label: xxx.realName,leaf: node.level >= 1}
|
// });
|
// resolve(nodes);
|
// })
|
// }
|
},
|
options: [],
|
departCascaderProps:{
|
multiple: true
|
},
|
subjectIdList:[],
|
form: {
|
aggregateSource:'100',
|
id: null,
|
departmentIds: [],
|
|
subjectId: [],
|
paperType: 7,
|
limitDateTime: [],
|
name: '',
|
suggestTime: null,
|
titleItems: [],
|
subjectSource:{},
|
questionTypeVMS:[]
|
},
|
subjectFilter: null,
|
formLoading: false,
|
rules: {
|
|
subjectId: [
|
{ required: true, message: '请选择课目', trigger: 'change' }
|
],
|
paperType: [
|
{ required: true, message: '请选择试卷类型', trigger: 'change' }
|
],
|
name: [
|
{ required: true, message: '请输入试卷名称', trigger: 'blur' }
|
],
|
suggestTime: [
|
{ required: true, message: '请输入建议时长', trigger: 'blur' }
|
]
|
},
|
questionPage: {
|
multipleSelection: [],
|
showDialog: false,
|
queryParam: {
|
id: null,
|
questionType: null,
|
subjectId: 1,
|
pageIndex: 1,
|
pageSize: 5
|
},
|
listLoading: true,
|
tableData: [],
|
total: 0
|
},
|
currentTitleItem: null
|
}
|
},
|
created () {
|
examPaperApi.selflist().then(res => {
|
console.log(res)
|
this.subjectFilter = res.response
|
})
|
},
|
async mounted () {
|
|
let id = this.$route.query.id
|
let _this = this
|
|
this.initSubject(function () {
|
_this.subjectFilter = _this.subjects
|
})
|
if (id && parseInt(id) !== 0) {
|
_this.formLoading = true
|
await examPaperApi.selfselect(id).then(re => {
|
_this.form = re.response
|
_this.form.menuIds = JSON.parse(re.response.menuIds)
|
console.log(_this.form)
|
_this.formLoading = false
|
})
|
}
|
departmentApi.selectDepartmentUser().then(res => {
|
console.log("res", res);
|
|
_this.options = res.response.map(x => {
|
return {
|
value: x.department.id, label: x.department.name, children: x.userList.map(xx => {
|
return { value: xx.id, label: xx.realName }
|
})
|
}
|
})
|
})
|
|
// this.subjectIdEvent(false)
|
},
|
methods: {
|
titlejs(val){
|
console.log(val)
|
let str = ''
|
this.subjectFilter.forEach(item=>{
|
if (item.id == val){
|
str = item.name
|
}
|
})
|
return str
|
},
|
subjectIdEvent(e){
|
console.log(e,this.$refs.subjectIdRef.selected)
|
let arr=[]
|
if (e){
|
|
}else {
|
this.$refs.subjectIdRef.selected.forEach(item=>{
|
arr.push({
|
label:item.label,
|
subjectId:item.value,
|
singleChoice:'',
|
multipleChoice:'',
|
trueFalse:''
|
})
|
})
|
console.log(arr)
|
this.form.questionTypeVMS = arr
|
}
|
|
if (this.form.paperType ==7){
|
//說明是隨機
|
this.subjectIdList = arr
|
let obj1={}
|
let arr1 = []
|
arr.forEach((item,index)=>{
|
// obj1[item.id]=''
|
arr1.push({
|
subjectId:item.id,
|
singleChoice:'',
|
multipleChoice:'',
|
trueFalse:''
|
})
|
// let obj={
|
// item
|
// }
|
|
// for (let i in obj) {
|
// i=item.id
|
// obj[i]= ''
|
// obj1[i] = ''
|
// console.log('键名:', i);
|
// console.log('键值:', obj[i]);
|
// }
|
})
|
this.form.subjectSource = obj1
|
|
console.log(this.form.subjectSource)
|
console.log(this.form.questionTypeVMS)
|
// this.form.paperType = 7
|
this.form.titleItems = []
|
}else {
|
this.form.subjectSource={}
|
this.subjectIdList = []
|
// this.form.paperType = 1
|
}
|
},
|
submitForm () {
|
let _this = this
|
console.log(this.subjectIdList)
|
console.log(this.form.subjectSource)
|
this.$refs.form.validate((valid) => {
|
if (valid) {
|
this.formLoading = true;
|
if (this.subjectIdList.length == 1){
|
this.form.subjectId= this.form.subjectId
|
};
|
let op = [];
|
for(var ele of this.form.menuIds){
|
op.push(ele[1])
|
};
|
this.form.menuIds = JSON.stringify(this.form.menuIds);
|
this.form.userIds = op;
|
console.log("laks",this.form)
|
if(this.form.questionTypeVMS == null){
|
this.form.questionTypeVMS = [];
|
}
|
this.form.status = 0
|
examPaperApi.selfedit(this.form).then(re => {
|
if (re.code === 1) {
|
_this.$message.success(re.message)
|
_this.delCurrentView(_this).then(() => {
|
_this.$router.push('/exam/personalRandomTemplate/list')
|
})
|
} else {
|
_this.$message.error(re.message)
|
this.formLoading = false
|
}
|
}).catch(e => {
|
this.formLoading = false
|
})
|
} else {
|
return false
|
}
|
})
|
},
|
addTitle () {
|
this.form.titleItems.push({
|
name: '',
|
questionItems: []
|
})
|
},
|
addQuestion (titleItem) {
|
this.currentTitleItem = titleItem
|
this.questionPage.showDialog = true
|
this.search()
|
},
|
removeTitleItem (titleItem) {
|
this.form.titleItems.remove(titleItem)
|
},
|
removeQuestion (titleItem, questionItem) {
|
titleItem.questionItems.remove(questionItem)
|
},
|
queryForm () {
|
this.questionPage.queryParam.pageIndex = 1
|
this.search()
|
},
|
confirmQuestionSelect () {
|
let _this = this
|
this.questionPage.multipleSelection.forEach(q => {
|
questionApi.select(q.id).then(re => {
|
_this.currentTitleItem.questionItems.push(re.response)
|
})
|
})
|
this.questionPage.showDialog = false
|
},
|
levelChange () {
|
// this.form.subjectId = null
|
// this.subjectFilter = this.subjects.filter(data =>{
|
// return this.form.departmentIds.forEach(item=>{data.level == item})
|
// })
|
//
|
// this.subjectFilter = []
|
// this.form.departmentIds.forEach(item=>{
|
// this.subjects.forEach(jectitem=>{
|
// if (item==jectitem.level){
|
// this.subjectFilter.push(jectitem)
|
// }
|
// })
|
// })
|
console.log(this.subjects,this.form.departmentIds)
|
// this.subjectFilter = this.subjects
|
},
|
search () {
|
if (this.subjectIdList.length=1){
|
this.questionPage.queryParam.subjectId = this.form.subjectId
|
}
|
|
this.questionPage.listLoading = true
|
questionApi.pageList(this.questionPage.queryParam).then(data => {
|
const re = data.response
|
this.questionPage.tableData = re.list
|
this.questionPage.total = re.total
|
this.questionPage.queryParam.pageIndex = re.pageNum
|
this.questionPage.listLoading = false
|
})
|
},
|
handleSelectionChange (val) {
|
this.questionPage.multipleSelection = val
|
},
|
questionTypeFormatter (row, column, cellValue, index) {
|
return this.enumFormat(this.questionTypeEnum, cellValue)
|
},
|
subjectFormatter (row, column, cellValue, index) {
|
return this.subjectEnumFormat(cellValue)
|
},
|
resetForm () {
|
let lastId = this.form.id
|
this.$refs['form'].resetFields()
|
this.form= {
|
aggregateSource:100,
|
id: null,
|
departmentIds: [],
|
subjectId: [],
|
paperType: 1,
|
limitDateTime: [],
|
name: '',
|
suggestTime: null,
|
titleItems: [],
|
subjectSource:null,
|
questionTypeVMS:[]
|
}
|
this.form.id = lastId
|
},
|
...mapActions('exam', { initSubject: 'initSubject' }),
|
...mapActions('tagsView', { delCurrentView: 'delCurrentView' }),
|
},
|
computed: {
|
|
...mapGetters('enumItem', ['enumFormat']),
|
...mapState('enumItem', {
|
questionTypeEnum: state => state.exam.question.typeEnum,
|
paperTypeEnum: state => state.exam.examPaper.paperTypeEnum,
|
levelEnum: state => state.user.levelEnum
|
}),
|
...mapState('exam', { subjects: state => state.subjects })
|
}
|
}
|
</script>
|
|
<style lang="scss">
|
.exampaper-item-box {
|
.q-title {
|
margin: 0px 5px 0px 5px;
|
}
|
.q-item-content {
|
}
|
}
|
</style>
|