|
|
|
@ -21,8 +21,9 @@ |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div style="overflow: auto"> |
|
|
|
|
<el-tree v-loading="loading" :data="types" default-expand-all ref="typeTree" node-key="id" highlight-current |
|
|
|
|
:expand-on-click-node="false" @node-click="handleNodeClick" :props="{ label: 'name', isLeaf: 'leaf' }"> |
|
|
|
|
<el-tree v-loading="loading" :data="types" default-expand-all ref="typeTree" node-key="classificationId" |
|
|
|
|
highlight-current :expand-on-click-node="false" @node-click="handleNodeClick" |
|
|
|
|
:props="{ value: 'classificationId', label: 'classificationName' }"> |
|
|
|
|
<span class="custom-tree-node" slot-scope="{ node, data }"> |
|
|
|
|
<span class="org-name">{{ data.classificationName }}</span> |
|
|
|
|
<span> |
|
|
|
@ -63,37 +64,38 @@ |
|
|
|
|
<ul class="filter"> |
|
|
|
|
<li> |
|
|
|
|
<label>题目类型</label> |
|
|
|
|
<el-select v-model="filter.status" clearable placeholder="请选择题目类型" @change="getList"> |
|
|
|
|
<el-option v-for="(item, i) in status" :key="i" :label="item.name" :value="item.id"></el-option> |
|
|
|
|
<el-select v-model="questionType" clearable multiple placeholder="请选择题目类型" @change="initData"> |
|
|
|
|
<el-option v-for="(item, i) in questionTypes" :key="i" :label="item.name" :value="item.id"></el-option> |
|
|
|
|
</el-select> |
|
|
|
|
</li> |
|
|
|
|
<li> |
|
|
|
|
<label>试卷难度</label> |
|
|
|
|
<el-select v-model="filter.status" clearable placeholder="请选择试卷难度" @change="getList"> |
|
|
|
|
<el-option v-for="(item, i) in status" :key="i" :label="item.name" :value="item.id"></el-option> |
|
|
|
|
<el-select v-model="filter.difficult" clearable multiple placeholder="请选择试卷难度" @change="initData"> |
|
|
|
|
<el-option v-for="(item, i) in difficults" :key="i" :label="item.name" :value="item.id"></el-option> |
|
|
|
|
</el-select> |
|
|
|
|
</li> |
|
|
|
|
<li> |
|
|
|
|
<label>所属专业</label> |
|
|
|
|
<el-select v-model="filter.status" clearable placeholder="请选择所属专业" @change="getList"> |
|
|
|
|
<el-option v-for="(item, i) in status" :key="i" :label="item.name" :value="item.id"></el-option> |
|
|
|
|
<el-select v-model="filter.professionalId" clearable placeholder="请选择所属专业" multiple @change="initData"> |
|
|
|
|
<el-option v-for="(item, i) in professionals" :key="i" :label="item.professionalName" |
|
|
|
|
:value="item.professionalId"></el-option> |
|
|
|
|
</el-select> |
|
|
|
|
</li> |
|
|
|
|
<li> |
|
|
|
|
<label>年份</label> |
|
|
|
|
<el-select v-model="filter.status" clearable placeholder="请选择年份" @change="getList"> |
|
|
|
|
<el-option v-for="(item, i) in status" :key="i" :label="item.name" :value="item.id"></el-option> |
|
|
|
|
</el-select> |
|
|
|
|
<el-date-picker v-model="particularYear" type="year" placeholder="请选择年份" format="yyyy" value-format="yyyy" |
|
|
|
|
multiple @change="initData"> |
|
|
|
|
</el-date-picker> |
|
|
|
|
</li> |
|
|
|
|
<li> |
|
|
|
|
<label>建议用途</label> |
|
|
|
|
<el-select v-model="filter.status" clearable placeholder="请选择状态" @change="getList"> |
|
|
|
|
<el-option v-for="(item, i) in status" :key="i" :label="item.name" :value="item.id"></el-option> |
|
|
|
|
<el-select v-model="filter.paperType" clearable placeholder="请选择状态" @change="initData"> |
|
|
|
|
<el-option v-for="(item, i) in paperTypes" :key="i" :label="item.name" :value="item.id"></el-option> |
|
|
|
|
</el-select> |
|
|
|
|
</li> |
|
|
|
|
<li> |
|
|
|
|
<label>状态</label> |
|
|
|
|
<el-select v-model="filter.status" clearable placeholder="请选择状态" @change="getList"> |
|
|
|
|
<el-select v-model="filter.status" clearable placeholder="请选择状态" @change="initData"> |
|
|
|
|
<el-option v-for="(item, i) in status" :key="i" :label="item.name" :value="item.id"></el-option> |
|
|
|
|
</el-select> |
|
|
|
|
</li> |
|
|
|
@ -105,7 +107,7 @@ |
|
|
|
|
<div style="margin-bottom: 15px;"> |
|
|
|
|
<el-button type="primary" @click="add">创建试卷</el-button> |
|
|
|
|
<el-button type="primary" @click="add">批量移除 </el-button> |
|
|
|
|
<el-button type="primary" @click="add">批量删除</el-button> |
|
|
|
|
<el-button type="primary" @click="delAllSelection">批量删除</el-button> |
|
|
|
|
</div> |
|
|
|
|
</ul> |
|
|
|
|
</div> |
|
|
|
@ -114,30 +116,46 @@ |
|
|
|
|
@selection-change="handleSelectionChange" row-key="id" @sort-change="sortChange"> |
|
|
|
|
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column> |
|
|
|
|
<el-table-column type="index" width="60" label="序号" align="center"></el-table-column> |
|
|
|
|
<el-table-column prop="name" label="试卷名称" align="center" min-width="120"></el-table-column> |
|
|
|
|
<el-table-column prop="name" label="试题总数" align="center" min-width="120"></el-table-column> |
|
|
|
|
<el-table-column prop="name" label="总分" align="center" width="90"></el-table-column> |
|
|
|
|
<el-table-column prop="name" label="中分位数" align="center" min-width="120"></el-table-column> |
|
|
|
|
<el-table-column prop="name" label="题型" align="center" min-width="120"></el-table-column> |
|
|
|
|
<el-table-column prop="name" label="试卷难度" align="center" min-width="120"></el-table-column> |
|
|
|
|
<el-table-column prop="name" label="建议用时" align="center" min-width="120"></el-table-column> |
|
|
|
|
<el-table-column prop="knowledgePointsClassification" label="试卷分类" align="center" min-width="120" |
|
|
|
|
<el-table-column prop="name" label="试卷名称" align="center" min-width="100"></el-table-column> |
|
|
|
|
<el-table-column prop="questionCount" label="试题总数" align="center" width="70"></el-table-column> |
|
|
|
|
<el-table-column prop="score" label="总分" align="center" width="60"></el-table-column> |
|
|
|
|
<el-table-column prop="name" label="中分位数" align="center" width="70"></el-table-column> |
|
|
|
|
<el-table-column prop="name" label="题型" align="center" min-width="90"> |
|
|
|
|
</el-table-column> |
|
|
|
|
<el-table-column prop="difficult" label="试卷难度" align="center" width="100" sortable="custom"> |
|
|
|
|
<template slot-scope="scope">{{ difficults.find(e => e.id === scope.row.difficult) ? difficults.find(e => |
|
|
|
|
e.id === scope.row.difficult).name : '' }}</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
<el-table-column prop="suggestTime" label="建议用时" align="center" width="70"> |
|
|
|
|
<template slot-scope="scope">{{ scope.row.suggestTime }}min</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
<el-table-column prop="classificationPath" label="试卷分类" align="center" width="90" |
|
|
|
|
show-overflow-tooltip></el-table-column> |
|
|
|
|
<el-table-column prop="relatedQuestionsNum" label="所属专业" align="center" width="90"></el-table-column> |
|
|
|
|
<el-table-column prop="relatedQuestionsNum" label="年份" align="center" width="90"></el-table-column> |
|
|
|
|
<el-table-column prop="relatedQuestionsNum" label="建议用途" align="center" width="90"></el-table-column> |
|
|
|
|
<el-table-column prop="relatedQuestionsNum" label="状态" align="center" width="90"></el-table-column> |
|
|
|
|
<el-table-column prop="professionalName" label="所属专业" align="center" width="100"></el-table-column> |
|
|
|
|
<el-table-column prop="particularYear" label="年份" align="center" width="70" sortable="custom"> |
|
|
|
|
<template slot-scope="scope">{{ scope.row.particularYear }}年</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
<el-table-column label="建议用途" align="center" width="70"> |
|
|
|
|
<template slot-scope="scope">{{ paperTypes.find(e => e.id === scope.row.paperType) ? paperTypes.find(e => |
|
|
|
|
e.id === scope.row.paperType).name : '' }}</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
<el-table-column label="状态" align="center" width="60"> |
|
|
|
|
<template slot-scope="scope">{{ scope.row.status ? '发布' : '草稿' }}</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
<el-table-column prop="createTime" label="创建时间" align="center" width="160" |
|
|
|
|
sortable="custom"></el-table-column> |
|
|
|
|
<el-table-column prop="createTime" label="最近编辑时间" align="center" width="160" |
|
|
|
|
<el-table-column prop="updateTime" label="最近编辑时间" align="center" width="160" |
|
|
|
|
sortable="custom"></el-table-column> |
|
|
|
|
<el-table-column prop="createUserName" label="最近编辑人" align="center" width="100"></el-table-column> |
|
|
|
|
<el-table-column prop="createUser" label="最近编辑人" align="center" width="90"></el-table-column> |
|
|
|
|
<el-table-column label="操作" align="center" width="240"> |
|
|
|
|
<template slot-scope="scope"> |
|
|
|
|
<el-button type="text" @click="edit(scope.row)">复制</el-button> |
|
|
|
|
<el-button type="text" @click="edit(scope.row)">预览</el-button> |
|
|
|
|
<el-button type="text" @click="edit(scope.row)">编辑</el-button> |
|
|
|
|
<el-button type="text" @click="del(scope.row)">删除</el-button> |
|
|
|
|
<el-switch v-if="!scope.row.status" v-model="scope.row.isDisable" :active-value="false" |
|
|
|
|
:inactive-value="true" style="margin: 0 10px 0 5px" :active-text="scope.row.isDisable ? '关' : '开'" |
|
|
|
|
@change="switchOff($event, scope.row, scope.$index)"></el-switch> |
|
|
|
|
</template> |
|
|
|
|
</el-table-column> |
|
|
|
|
</el-table> |
|
|
|
@ -169,21 +187,21 @@ |
|
|
|
|
import Util from '@/libs/util' |
|
|
|
|
import _ from 'lodash' |
|
|
|
|
import Breadcrumb from '@/components/breadcrumb' |
|
|
|
|
import QuesConst from '@/const/ques' |
|
|
|
|
import TestPaperConst from '@/const/testPaper' |
|
|
|
|
export default { |
|
|
|
|
components: { Breadcrumb }, |
|
|
|
|
data () { |
|
|
|
|
return { |
|
|
|
|
questionTypes: QuesConst.questionTypes, |
|
|
|
|
difficults: TestPaperConst.difficults, |
|
|
|
|
paperTypes: TestPaperConst.paperTypes, |
|
|
|
|
typeId: this.$route.query.id, |
|
|
|
|
createSource: 1, |
|
|
|
|
loading: false, |
|
|
|
|
keyword: '', |
|
|
|
|
types: [], |
|
|
|
|
isNotJoin: 1, |
|
|
|
|
typeVisible: false, // 员工组织架对话框 |
|
|
|
|
typeForm: { |
|
|
|
|
classificationId: '', |
|
|
|
|
classificationName: '' |
|
|
|
|
}, |
|
|
|
|
cascaderValue: [], |
|
|
|
|
cascaderProps: { |
|
|
|
|
checkStrictly: true, |
|
|
|
@ -191,30 +209,42 @@ export default { |
|
|
|
|
value: "classificationId" |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
status: [], |
|
|
|
|
form: { |
|
|
|
|
name: '', |
|
|
|
|
parentId: [] |
|
|
|
|
typeForm: { |
|
|
|
|
classificationId: '', |
|
|
|
|
classificationName: '' |
|
|
|
|
}, |
|
|
|
|
typeRules: { |
|
|
|
|
classificationName: [ |
|
|
|
|
{ required: true, message: '请输入试卷分类名称', trigger: 'blur' } |
|
|
|
|
] |
|
|
|
|
}, |
|
|
|
|
rules: { |
|
|
|
|
name: [ |
|
|
|
|
{ required: true, message: '请输入试卷名称', trigger: 'blur' } |
|
|
|
|
], |
|
|
|
|
}, |
|
|
|
|
professionals: [], |
|
|
|
|
status: [ |
|
|
|
|
{ |
|
|
|
|
id: 0, |
|
|
|
|
name: '启用' |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
id: 1, |
|
|
|
|
name: '禁用' |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
id: 2, |
|
|
|
|
name: '草稿' |
|
|
|
|
}, |
|
|
|
|
], |
|
|
|
|
particularYear: '', |
|
|
|
|
questionType: [], |
|
|
|
|
filter: { |
|
|
|
|
difficultOrder: '', |
|
|
|
|
yearOrder: '', |
|
|
|
|
difficult: [], |
|
|
|
|
professionalId: [], |
|
|
|
|
paperType: '', |
|
|
|
|
status: '', |
|
|
|
|
updateTimeOrder: '', |
|
|
|
|
crateTimeOrder: '', |
|
|
|
|
yearOrder: '', |
|
|
|
|
keyWord: '', |
|
|
|
|
difficult: '', |
|
|
|
|
particularYear: '', |
|
|
|
|
keyWord: '', |
|
|
|
|
difficultOrder: '', |
|
|
|
|
}, |
|
|
|
|
listLoading: false, |
|
|
|
|
list: [], |
|
|
|
@ -233,10 +263,6 @@ export default { |
|
|
|
|
}; |
|
|
|
|
}, |
|
|
|
|
watch: { |
|
|
|
|
keyword: function () { |
|
|
|
|
clearTimeout(this.searchTimer) |
|
|
|
|
this.searchTimer = setTimeout(this.getType, 500) |
|
|
|
|
}, |
|
|
|
|
'filter.keyWord': function () { |
|
|
|
|
clearTimeout(this.searchTimer) |
|
|
|
|
this.searchTimer = setTimeout(this.getList, 500) |
|
|
|
@ -253,6 +279,7 @@ export default { |
|
|
|
|
}, |
|
|
|
|
], |
|
|
|
|
this.getType() |
|
|
|
|
this.getProfessional() |
|
|
|
|
}, |
|
|
|
|
methods: { |
|
|
|
|
// 获取分类 |
|
|
|
@ -367,12 +394,24 @@ export default { |
|
|
|
|
this.cascaderValue = [] |
|
|
|
|
this.getType() |
|
|
|
|
}, |
|
|
|
|
// 获取所属专业 |
|
|
|
|
async getProfessional () { |
|
|
|
|
try { |
|
|
|
|
const res = await this.$post(this.api.queryProfessional, { |
|
|
|
|
pageNum: 1, |
|
|
|
|
pageSize: 1000, |
|
|
|
|
}) |
|
|
|
|
this.professionals = res.pageList.records |
|
|
|
|
} catch (e) { } |
|
|
|
|
}, |
|
|
|
|
// 列表 |
|
|
|
|
async getList () { |
|
|
|
|
try { |
|
|
|
|
this.listLoading = true |
|
|
|
|
const res = await this.$post(this.api.examPaperList, { |
|
|
|
|
...this.filter, |
|
|
|
|
particularYear: this.particularYear ? [this.particularYear] : [], |
|
|
|
|
questionType: this.questionType.length ? this.questionType.join() : '', |
|
|
|
|
type: this.isNotJoin, |
|
|
|
|
pageNum: this.page, |
|
|
|
|
pageSize: this.pageSize, |
|
|
|
@ -399,27 +438,39 @@ export default { |
|
|
|
|
}, |
|
|
|
|
// 排序回调 |
|
|
|
|
sortChange (column) { |
|
|
|
|
if (column.prop === 'createTime') this.filter.timeOrderBy = column.order ? column.order === 'ascending' ? 'asc' : 'desc' : '' |
|
|
|
|
if (column.prop === 'difficult') this.filter.difficultOrder = column.order ? column.order === 'ascending' ? 1 : 2 : '' |
|
|
|
|
if (column.prop === 'particularYear') this.filter.yearOrder = column.order ? column.order === 'ascending' ? 1 : 2 : '' |
|
|
|
|
if (column.prop === 'createTime') this.filter.crateTimeOrder = column.order ? column.order === 'ascending' ? 1 : 2 : '' |
|
|
|
|
if (column.prop === 'updateTime') this.filter.updateTimeOrder = column.order ? column.order === 'ascending' ? 1 : 2 : '' |
|
|
|
|
this.getList() |
|
|
|
|
}, |
|
|
|
|
// 删除 |
|
|
|
|
async del (row) { |
|
|
|
|
try { |
|
|
|
|
await this.$confirm(`<p>确认要删除【${row.name}】吗?</p><p style="color: #f56c6c;">删除后,关联此试卷的试题将自动移除此试卷!</p>`, '提示', { |
|
|
|
|
await this.$confirm(`确认要删除【${row.name}】吗?`, '提示', { |
|
|
|
|
confirmButtonText: '确定', |
|
|
|
|
cancelButtonText: '取消', |
|
|
|
|
type: 'warning', |
|
|
|
|
closeOnClickModal: false, |
|
|
|
|
dangerouslyUseHTMLString: true, |
|
|
|
|
}) |
|
|
|
|
await this.$post(this.api.knowledgeHierarchyDel, [row.id]) |
|
|
|
|
await this.$post(this.api.paperDel, { |
|
|
|
|
delete: false, |
|
|
|
|
ids: [row.paperId] |
|
|
|
|
}) |
|
|
|
|
Util.successMsg('删除成功') |
|
|
|
|
this.getList() |
|
|
|
|
} catch (e) { } |
|
|
|
|
}, |
|
|
|
|
async switchOff (val, row) { |
|
|
|
|
await this.$post(this.api.paperDisable, { |
|
|
|
|
id: row.paperId, |
|
|
|
|
isDisable: val, |
|
|
|
|
}) |
|
|
|
|
this.getList() |
|
|
|
|
}, |
|
|
|
|
// 添加试卷 |
|
|
|
|
add () { |
|
|
|
|
this.$router.push(`detail?libraryId=${this.typeId}`) |
|
|
|
|
this.$router.push(`detail?libraryId=${this.typeId}&classificationId=${this.$refs.typeTree.getCurrentKey() || ''}`) |
|
|
|
|
}, |
|
|
|
|
// 编辑试卷 |
|
|
|
|
async edit (row) { |
|
|
|
@ -437,14 +488,16 @@ export default { |
|
|
|
|
const list = this.multipleSelection |
|
|
|
|
if (list.length) { |
|
|
|
|
try { |
|
|
|
|
await this.$confirm(`<p style="margin-bottom: 10px;">确认要删除已选定的${list.length}个试卷吗?</p><p style="color: #f56c6c;">删除后,关联这些试卷的试题将自动移除这些试卷!</p>`, '提示', { |
|
|
|
|
await this.$confirm(`确定要删除已选定的${list.length}份试卷吗?`, '提示', { |
|
|
|
|
confirmButtonText: '确定', |
|
|
|
|
cancelButtonText: '取消', |
|
|
|
|
type: 'warning', |
|
|
|
|
closeOnClickModal: false, |
|
|
|
|
dangerouslyUseHTMLString: true, |
|
|
|
|
}) |
|
|
|
|
await this.$post(this.api.knowledgeHierarchyDel, list.map(e => e.id)) |
|
|
|
|
await this.$post(this.api.paperDel, { |
|
|
|
|
delete: false, |
|
|
|
|
ids: list.map(e => e.paperId) |
|
|
|
|
}) |
|
|
|
|
Util.successMsg('删除成功') |
|
|
|
|
this.multipleSelection = [] |
|
|
|
|
this.$refs.table.clearSelection() |
|
|
|
|