yujialong 2 months ago
parent b015e22c1a
commit 756c2ff214
  1. 2
      src/api/index.js
  2. 2
      src/layouts/navbar/index.vue
  3. 86
      src/pages/allocationReview/list/index.vue
  4. 489
      src/pages/allocationReview/list/setup.vue
  5. 35
      src/pages/allocationReview/records/index.vue
  6. 8
      src/pages/allocationReview/records/people.vue
  7. 45
      src/styles/common.scss

@ -13,4 +13,6 @@ export default {
getDetailedExamScores: `/exam/exam/paper/getDetailedExamScores`,
reviewSettingsList: `/competition/competition/readAndAppraise/reviewSettingsList`,
evaluationSave: `/nakadai/evaluation/saveOrUpdate`,
evaluationFind: `/nakadai/evaluation/findById`,
}

@ -77,7 +77,7 @@ export default {
//
menuSelect (index) {
this.collapse = false
this.$router.push(index)
this.$router.push(index).catch(_ => { })
},
//
initMenu () {

@ -40,23 +40,27 @@
</ul>
</div>
<el-table :data="list" class="table" ref="table" stripe header-align="center" row-key="id">
<el-table :data="list" class="table" ref="table" stripe header-align="center" row-key="stageId">
<el-table-column type="index" width="50" label="序号" align="center"></el-table-column>
<el-table-column prop="competitionName" label="大赛名称" align="center" min-width="120"
show-overflow-tooltip></el-table-column>
<el-table-column prop="stageName" label="阶段赛名称" align="center" min-width="100"></el-table-column>
<el-table-column prop="competitionContent" label="比赛内容" align="center" min-width="100"></el-table-column>
<el-table-column prop="lastEditor" label="分配答卷数" align="center" width="90"></el-table-column>
<el-table-column prop="lastEditor" label="待评答卷数" align="center" width="90"></el-table-column>
<el-table-column prop="lastEditor" label="已评答卷数" align="center" width="90"></el-table-column>
<el-table-column prop="lastEditor" label="评阅时间" align="center" width="90"></el-table-column>
<el-table-column prop="lastEditor" label="评阅阶段" align="center" width="90"></el-table-column>
<el-table-column prop="lastEditor" label="评阅情况" align="center" width="90"></el-table-column>
<el-table-column label="操作" align="center" width="200" fixed="right">
<el-table-column prop="totalAnswer" label="总答卷数" align="center" width="90"></el-table-column>
<el-table-column prop="unReviewedAnswer" label="待评答卷数" align="center" width="90"></el-table-column>
<el-table-column prop="reviewedAnswer" label="已评答卷数" align="center" width="90"></el-table-column>
<el-table-column prop="time" label="评阅时间" align="center" width="160" />
<el-table-column prop="stage" label="评阅阶段" align="center" width="90"></el-table-column>
<el-table-column prop="reviewStatusName" label="评阅情况" align="center" width="90"></el-table-column>
<el-table-column prop="reviewStatusName" label="任务分配情况" align="center" width="100"></el-table-column>
<el-table-column label="操作" align="center" width="220" fixed="right">
<template slot-scope="scope">
<el-button type="text" @click="toProgress(scope.row)">评阅进度</el-button>
<el-button type="text" @click="toSetup(scope.row)">评阅设置</el-button>
<el-button type="text" @click="toTask(scope.row)">任务分配</el-button>
<template v-if="scope.row.evaluationId">
<el-button type="text" @click="toProgress(scope.row)">评阅进度</el-button>
<el-button type="text" @click="toSetup(scope.row)">修改评阅设置</el-button>
<el-button type="text" @click="toTask(scope.row)">任务分配</el-button>
</template>
<el-button v-else type="text" @click="toSetup(scope.row)">评阅设置</el-button>
</template>
</el-table-column>
</el-table>
@ -65,7 +69,7 @@
:current-page="page" layout="total, prev, pager, next, sizes" :total="total"></el-pagination>
</div>
<Setup :visible.sync="setupVisible" />
<Setup :row.sync="curRow" :visible.sync="setupVisible" />
<Progress :visible.sync="progressVisible" />
</div>
</template>
@ -151,12 +155,16 @@ export default {
taskAllocationStatus: '',
keyWord: '',
},
now: '',
timer: null,
list: [],
page: +this.$route.query.page || 1,
pageSize: 10,
total: 0,
setupVisible: false,
curRow: {},
progressVisible: false,
};
},
@ -185,6 +193,10 @@ export default {
},
},
mounted () {
this.$once('hook:beforeDestroy', function () {
clearInterval(this.timer)
})
const { query } = this.$route
if (query.page) {
const { questionTypes, correctRateEnd, correctRateStart, difficultys, specialtyIds, status, keyWord, questionTypeSort, givenYearSort, difficultySort, correctRateSort, updateTimeSort, referenceCountSort, givenYears, knowledgePointIds, questionBankId, questionBankName, questionBankCategory } = query
@ -219,7 +231,22 @@ export default {
pageSize: this.pageSize,
platformSource: 0,
})
this.list = pageList.records
const list = pageList.records
list.forEach(e => {
// e.reviewStageName = this.reviewStage.find(n => n.id === e.reviewStage).name
// if (e.reviewStatus !== null) e.reviewStatusName = this.reviewStatus.find(n => n.id === e.reviewStatus).name
// e.reviewStageName = this.reviewStage.find(n => n.id === e.reviewStage).name
e.stage = '-'
e.time = e.evaluationId ?
e.isTimed ?
e.startTime + ' ~ ' + e.endTime :
'不限时' :
'-'
})
this.list = list
this.getNow()
this.handleStage()
this.total = pageList.total
},
//
@ -232,6 +259,38 @@ export default {
this.page = 1
this.getList()
},
//
async handleStage () {
this.list.forEach(e => {
let stage = '-'
if (e.evaluationId) {
if (e.isTimed) {
if (e.startTime && e.endTime) {
const startTime = new Date(e.startTime)
const endTime = new Date(e.endTime)
stage = this.now < startTime ?
'未开始' :
this.now > endTime ?
'已结束' :
'进行中'
}
} else {
stage = '进行中'
}
}
e.stage = stage
})
console.log("🚀 ~ this.timer=setInterval ~ this.list:", this.list)
},
//
async getNow () {
this.now = await Util.getNow()
clearInterval(this.timer)
this.timer = setInterval(() => {
this.now = new Date(this.now.setSeconds(this.now.getSeconds() + 1))
this.handleStage()
}, 1000)
},
//
toProgress (row) {
@ -239,6 +298,7 @@ export default {
},
//
toSetup (row) {
this.curRow = row
this.setupVisible = true
},
//

@ -3,81 +3,81 @@
<el-drawer title="评阅设置" :visible.sync="setupVisible" size="1200px" :close-on-click-modal="false"
custom-class="setup-dia" @closed="closeDia">
<div class="flex h-full">
<el-form :model="form" ref="form" label-width="220px" label-suffix="">
<el-form class="p-r-10" :model="form" ref="form" label-width="220px" label-suffix="">
<el-form-item prop="name" label="是否隐藏学生信息">
<el-radio-group v-model="form.hide">
<el-radio :label="3"></el-radio>
<el-radio :label="6"></el-radio>
<el-radio-group v-model="form.anonymizeStudents">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="name" label="自动判分题是否允许人工评阅">
<el-radio-group v-model="form.hide">
<el-radio :label="3"></el-radio>
<el-form-item v-if="row.hasAutoScoreType" prop="name" label="自动判分题是否允许人工评阅">
<el-radio-group v-model="form.allowManualGrading">
<el-radio :label="1"></el-radio>
<el-tooltip placement="top">
<div slot="content">自动判分题最终得分取最新一次评分</div>
<i class="el-icon-question explain"></i>
</el-tooltip>
<el-radio :label="6"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="name" label="评阅的时间限制">
<el-radio-group v-model="form.hide">
<el-radio :label="3">不限时</el-radio>
<el-tooltip placement="top">
<div slot="content">成绩不公布时可设置评阅时间不限时</div>
<i class="el-icon-question explain"></i>
</el-tooltip>
<el-radio :label="6">限时</el-radio>
</el-radio-group>
<el-date-picker class="m-l-10" v-model="date" align="right" unlink-panels type="datetimerange"
start-placeholder="开始日期" end-placeholder="结束日期" clearable></el-date-picker>
</el-form-item>
<el-form-item prop="name" label="每题的评阅人数">
<el-input style="width: 200px;" placeholder="请输入" v-model.number="form.suggestTime" />
</el-form-item>
<el-form-item prop="name" label="最终得分取值规则(人工判分题多人评阅时)">
<el-radio-group v-model="form.hide">
<el-radio :label="1">取平均分</el-radio>
<el-radio :label="1">取修剪平均分</el-radio>
<el-tooltip placement="top">
<div slot="content">
<p>去掉最高分最低分取平均分</p>
<p class="m-t-5 m-b-5">1.建议评阅人员3</p>
<p class="m-b-5">2.若评阅人员为2人则最终得分为2人评分的平均值</p>
<p>3.若评阅人员为1人则最终得分为评阅人的评分</p>
</div>
<i class="el-icon-question explain"></i>
</el-tooltip>
<el-radio :label="1">取加权平均分</el-radio>
<el-tooltip placement="top">
<div slot="content">每位评阅人员的最新评分乘以其对应的权重后求和</div>
<i class="el-icon-question explain"></i>
</el-tooltip>
<el-radio :label="1">取中位分</el-radio>
<el-radio :label="1">取最高分</el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
<template v-if="row.hasManualScoreType">
<el-form-item prop="name" label="评阅的时间限制">
<el-radio-group v-model="form.isTimed">
<el-radio :label="0" :disabled="!row.resultsDetails">不限时</el-radio>
<el-tooltip placement="top">
<div slot="content">成绩不公布时可设置评阅时间不限时</div>
<i class="el-icon-question explain"></i>
</el-tooltip>
<el-radio :label="1" :disabled="!row.resultsDetails">限时</el-radio>
</el-radio-group>
<el-date-picker v-show="form.isTimed" class="m-l-10" v-model="timed" align="right" unlink-panels
type="datetimerange" start-placeholder="开始日期" end-placeholder="结束日期" clearable
:picker-options="pickerOptions"></el-date-picker>
</el-form-item>
<el-form-item prop="name" label="每题的评阅人数">
<el-input class="hide-spin" style="width: 200px;" placeholder="请输入" type="number"
v-model.number="form.reviewersPerQuestion" />
</el-form-item>
<el-form-item prop="name" label="人工判分题最终得分">
<el-radio-group v-model="form.scoreAggregationRule">
<el-radio :label="0">取平均分</el-radio>
<el-radio :label="1">取修剪平均分</el-radio>
<el-tooltip placement="top">
<div slot="content">
<p>去掉最高分最低分取平均分</p>
<p class="m-t-5 m-b-5">1.建议评阅人员3</p>
<p class="m-b-5">2.若评阅人员为2人则最终得分为2人评分的平均值</p>
<p>3.若评阅人员为1人则最终得分为评阅人的评分</p>
</div>
<i class="el-icon-question explain"></i>
</el-tooltip>
<el-radio :label="2">取加权平均分</el-radio>
<el-tooltip placement="top">
<div slot="content">每位评阅人员的最新评分乘以其对应的权重后求和</div>
<i class="el-icon-question explain"></i>
</el-tooltip>
<el-radio :label="3">取中位分</el-radio>
<el-radio :label="4">取最高分</el-radio>
</el-radio-group>
</el-form-item>
</template>
</el-form>
<el-form class="info" label-width="120px" label-suffix="" disabled>
<el-form class="info" label-width="110px" disabled>
<h6>答卷信息</h6>
<el-form-item prop="name" label="答卷信息">
<el-radio-group v-model="form.hide">
<el-radio v-for="(item, i) in types" :key="i" label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
<el-radio v-for="(item, i) in types" v-model="row.method" :key="i" :label="item.id">{{ item.name
}}</el-radio>
</el-form-item>
<el-form-item prop="name" label="题目判分类型">
<el-checkbox-group v-model="form.type">
<el-checkbox label="自动判分题"></el-checkbox>
<el-checkbox label="人工判分题"></el-checkbox>
</el-checkbox-group>
<el-checkbox v-model="row.hasAutoScoreType" :true-label="1">自动判分题</el-checkbox>
<el-checkbox v-model="row.hasManualScoreType" :true-label="1">人工判分题</el-checkbox>
</el-form-item>
<el-form-item prop="name" label="成绩是否公布">
<el-radio-group v-model="form.hide">
<el-radio :label="3"></el-radio>
<span style="margin: 0 10px 0 -20px;font-size: 12px;color: #333;">公布时间2024-12-12 12:12:12</span>
<el-radio style="margin-top: 10px" :label="6"></el-radio>
</el-radio-group>
<el-radio v-model="row.resultsDetails" :label="0"></el-radio>
<span style="margin: 0 10px 0 -20px;font-size: 12px;color: #333;">公布时间{{ row.resultAnnouncementTime
}}</span>
<el-radio v-model="row.resultsDetails" style="margin-top: 10px" :label="1"></el-radio>
</el-form-item>
</el-form>
</div>
@ -96,8 +96,9 @@ import QuesConst from '@/const/ques'
import TestPaperConst from '@/const/testPaper'
import _ from 'lodash'
import Decimal from 'decimal.js'
import dayjs from 'dayjs'
export default {
props: ['visible'],
props: ['visible', 'row'],
data () {
return {
arabicToChinese: Util.arabicToChinese,
@ -105,16 +106,27 @@ export default {
questionTypes: QuesConst.questionTypes,
setupVisible: false,
form: {
allowManualGrading: 0,
anonymizeStudents: 0,
evaluationId: '',
isTimed: '',
reviewersPerQuestion: '',
scoreAggregationRule: 0,
},
originForm: {},
timed: [],
pickerOptions: {
disabledDate: time => {
return this.row.resultsDetails ? false : time.getTime() > new Date(this.row.resultAnnouncementTime) //
}
},
date: [],
types: [
{
id: 1,
id: 0,
name: '实训'
},
{
id: 2,
id: 1,
name: '理论'
},
{
@ -122,7 +134,7 @@ export default {
name: '论文报告'
},
{
id: 4,
id: 2,
name: '其他'
},
],
@ -132,335 +144,72 @@ export default {
watch: {
visible () {
this.setupVisible = this.visible
// this.visible && this.init()
this.visible && this.init()
}
},
mounted () {
this.originForm = _.cloneDeep(this.form)
},
methods: {
//
init () {
this.handleQuesList()
if (!this.loaded) {
this.loaded = 1
this.yearCheck = this.years
this.getQuesBankType()
this.initQuesBank()
this.difficult = this.$parent.form.difficult
this.difficult && this.difficultChange(this.difficult)
async init () {
this.form = _.cloneDeep(this.originForm)
this.timed = []
//
if (!this.row.resultsDetails && this.row.hasManualScoreType) {
const now = await Util.getNow()
this.timed = [dayjs(now).format('YYYY-MM-DD HH:mm:ss'), '']
this.form.isTimed = 1 //
}
this.getDetail()
},
//
async getQuesBankType () {
try {
const { data } = await this.$post(this.api.getAllQuestionBankCategories, {
createSource: 1,
status: 1,
})
this.handleList(data)
this.quesBankTypes = data
} catch (e) { }
},
//
async getQuesBank () {
try {
const type = this.quesBankTypeVal
const res = await this.$post(this.api.questionBankList, {
status: 1,
pageNum: 1,
pageSize: 1000,
questionCategoryId: type.length ? type[type.length - 1] : '',
name: this.quesBankKeyword
})
this.quesBanks = res.message.records
this.totalQuesBank = res.message.total
} catch (e) { }
},
initQuesBank () {
this.curQuesBank = {}
this.pageQuesBank = 1
this.getQuesBank()
},
//
currentChangeQuesBank (val) {
this.pageQuesBank = val
this.getQuesBank()
},
//
questionBankClick (item) {
this.curQuesBank = item
this.knowledgeCheck = false
this.getKnowledgeType()
this.getKnowledge()
},
//
handleList (list) {
list.map(e => {
if (e.children && e.children.length) {
this.handleList(e.children)
} else {
delete e.children
}
})
},
//
async getKnowledgeType () {
try {
const { data } = await this.$post(this.api.classificationTreeStructure, {
createSource: 1,
questionBankId: this.curQuesBank.id,
})
this.handleList(data)
this.knowledgeTypes = data
} catch (e) { }
},
//
async getKnowledge () {
//
async getDetail () {
try {
const { id } = this.curQuesBank
const id = this.row.evaluationId
if (id) {
const type = this.knowledgeTypeVal
const res = await this.$post(this.api.knowledgeHierarchyList, {
pageNum: 1,
pageSize: 1000,
questionBankId: id,
knowledgePointCategoryId: type.length ? type[type.length - 1] : '',
name: this.knowledgeKeyword,
})
const list = res.message.records
const { allKnowledges } = this
list.map(e => {
e.check = !!allKnowledges.find(n => n.id === e.id)
})
this.knowledges = list
}
} catch (e) { }
},
//
currentChangeKn (val) {
this.pageKn = val
this.getKnowledge()
},
//
knowledgeAllCheckChange (val) {
this.knowledges.map(e => {
e.check = val
this.knowledgeChange(val, e)
})
},
//
knowledgeChange (checked, data) {
const checkQues = this.curQuesBank
const index = this.checked.findIndex(e => e.quesBank.id === checkQues.id)
//
if (index !== -1) {
const ques = this.checked[index]
const i = ques.knowledges.findIndex(e => e.id === data.id)
if (checked && i === -1) {
ques.knowledges.push(data)
} else if (!checked && i >= 0) {
ques.knowledges.splice(i, 1)
const { data } = await this.$post(`${this.api.evaluationFind}?id=${id}`)
this.form = {
allowManualGrading: data.allowManualGrading,
anonymizeStudents: data.anonymizeStudents,
evaluationId: data.evaluationId,
isTimed: data.isTimed,
reviewersPerQuestion: data.reviewersPerQuestion,
scoreAggregationRule: data.scoreAggregationRule,
}
if (data.startTime) this.timed = [data.startTime, data.endTime]
}
ques.knowledges.length || this.checked.splice(index, 1)
} else {
this.checked.push({
quesBank: checkQues,
knowledges: [data]
})
}
},
//
handleQuesList () {
this.list = _.cloneDeep(this.$parent.form.paperOutline)
},
//
async clearChecked () {
try {
await this.$confirm(`确认要清空吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
closeOnClickModal: false,
})
this.knowledges.map(e => e.check = false)
this.checked = []
this.knowledgeCheck = false
} catch (e) { }
},
//
async delQuesBank (i) {
try {
await this.$confirm(`确认要移除吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
closeOnClickModal: false,
})
const k = this.knowledges
this.checked[i].knowledges.map(e => {
const cur = k.findIndex(n => n.id === e.id)
if (cur !== -1) k[cur].check = false
})
this.checked.splice(i, 1)
this.knowledgeCheck = false
} catch (e) { }
},
//
delKnowledge (i, j, item, k) {
const cur = this.knowledges.findIndex(e => e.id === k.id)
if (cur !== -1) this.knowledges[cur].check = false
item.knowledges.splice(j, 1)
item.knowledges.length || this.checked.splice(i, 1) //
this.knowledgeCheck = false
},
//
difficultChange (val) {
const difficultyWeights = [0.2, 0.4, 0.6, 0.8]
const names = ['basicDifficulty', 'normalDifficulty', 'hardDifficulty', 'veryHardDifficulty']
//
this.list.forEach(e => {
const total = e.questionNum
let already = 0 //
if (val === 1) {
this.$set(e, 'basicDifficulty', Math.floor(total * 0.7))
this.$set(e, 'normalDifficulty', Math.floor(total * 0.3))
this.$set(e, 'hardDifficulty', 0)
this.$set(e, 'veryHardDifficulty', 0)
} else if (val === 2) {
this.$set(e, 'basicDifficulty', Math.floor(total * 0.45))
this.$set(e, 'normalDifficulty', Math.floor(total * 0.55))
this.$set(e, 'hardDifficulty', 0)
this.$set(e, 'veryHardDifficulty', 0)
} else if (val === 3) {
this.$set(e, 'basicDifficulty', Math.floor(total * 0.3))
this.$set(e, 'normalDifficulty', Math.floor(total * 0.3))
this.$set(e, 'hardDifficulty', Math.floor(total * 0.4))
this.$set(e, 'veryHardDifficulty', 0)
} else if (val === 4) {
this.$set(e, 'basicDifficulty', Math.floor(total * 0.1))
this.$set(e, 'normalDifficulty', Math.floor(total * 0.1))
this.$set(e, 'hardDifficulty', Math.floor(total * 0.3))
this.$set(e, 'veryHardDifficulty', Math.floor(total * 0.5))
}
already = Decimal(already).add(e.basicDifficulty).add(e.normalDifficulty).add(e.hardDifficulty).add(e.veryHardDifficulty).toNumber()
//
while (total > already) {
e[names[val - 1]]++
already++
}
this.$set(e, 'randomDifficulty', 0)
})
},
//
yearAllChange (val) {
this.yearCheck = val ? this.years : []
},
//
yearChange (val) {
this.yearAll = val.length === 11
},
//
async submit () {
if (this.submiting) return false
const { list } = this
let invalid = 0
let totalCount = 0
for (const i in list) {
const e = list[i]
const name = `${Util.arabicToChinese(+i + 1)}大题`
if (!e.questionType) {
Util.warningMsg(`${name}请先选择题型`)
invalid = 1
break
}
if (!e.questionNum || isNaN(e.questionNum) || e.questionNum <= 0) {
Util.warningMsg(`${name}的目标题数请输入正整数`)
invalid = 1
break
}
let total = Decimal(e.basicDifficulty || 0).add(e.normalDifficulty || 0).add(e.hardDifficulty || 0).add(e.veryHardDifficulty || 0).toNumber() // 4
if (total) { // 41
this.$set(e, 'randomDifficulty', 0)
} else {
total = +e.randomDifficulty || 0
}
if (total > e.questionNum) {
Util.warningMsg(`${name}的小题总数大于目标题数,请重新输入`)
invalid = 1
break
}
e.count = total
totalCount = Decimal(totalCount).add(total).toNumber()
const form = _.cloneDeep(this.form)
const { row } = this
if (form.isTimed && !this.timed.length) return Util.warningMsg(`请选择时间限制`)
if (this.timed.length) {
form.startTime = dayjs(this.timed[0]).format('YYYY-MM-DD HH:mm:ss')
form.endTime = dayjs(this.timed[1]).format('YYYY-MM-DD HH:mm:ss')
}
if (invalid) return false
if (!totalCount) return Util.warningMsg(`请填写难度题数`)
form.competitionId = row.id
form.stageId = row.stageId
this.submiting = true
const k = this.allKnowledges.map(e => e.id)
const years = []
this.yearCheck.map(e => {
if (e === '暂无年份') {
years.push('')
} else if (e === '更早') {
// 1990~2005
for (let i = 1990; i < 2006; i++) {
years.push(i)
}
} else {
years.push(+e)
}
})
list.map(e => {
e.givenYears = years
e.knowledgePointsIds = k
})
try {
const res = await this.$post(this.api.selectQuestionsByTypeAndDifficulty, list)
let invalid = 0
let hasQues = 0
list.map((e, i) => {
if (+e.count !== res.list[i].questions.length) invalid = 1
if (e.examQuestions.length) hasQues = 1
e.score = 0
})
// 3
const tips = invalid && hasQues ?
'此操作会清空当前试卷已添加的试题,并且满足自动选题设置的试题数量不足,确定要继续自动选题吗?' :
invalid && !hasQues ?
'满足自动选题设置的试题数量不足,确认要继续自动选题吗?' :
!invalid && hasQues ? '此操作会清空当前试卷已添加的试题,是否确定要继续自动选题吗?' :
''
await this.$post(this.api.evaluationSave, form)
this.submiting = false
if (tips) {
await this.$confirm(tips, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
try {
await this.$confirm('保存成功!', '提示', {
confirmButtonText: '前往任务分配',
cancelButtonText: '关闭',
type: 'warning',
closeOnClickModal: false,
})
this.$router.push(`records`)
} catch (e) {
this.$parent.initData()
this.setupVisible = false
}
list.map((e, i) => {
res.list[i].questions.map((e, i) => {
e.questionId = e.id
e.serialNumber = i + 1
e.originSort = i + 1
this.$parent.handleQuesInfo(e)
})
this.$parent.form.paperOutline[i].examQuestions = res.list[i].questions
})
this.setupVisible = false
this.$parent.calcDifficult()
this.submiting = false
} catch (e) {
this.submiting = false
}
@ -476,7 +225,7 @@ export default {
<style lang="scss" scoped>
/deep/.setup-dia {
.el-drawer__header {
margin-bottom: 0;
margin-bottom: 10px;
}
.explain {

@ -46,7 +46,8 @@
</li>
</ul>
<div>
<el-button type="primary" @click="batchReview">修改评阅设置</el-button>
<el-button type="primary" @click="batchAlloc">修改分配评阅人员</el-button>
<el-button type="primary" @click="toSetup">修改评阅设置</el-button>
<!-- <el-button type="primary">批量导出评分表</el-button> -->
<el-button type="primary">批量导出列表</el-button>
</div>
@ -87,10 +88,12 @@
</div>
<Allocation :visible.sync="allocationVisible" />
<Setup :row.sync="curRow" :visible.sync="setupVisible" />
</div>
</template>
<script>
import Setup from '../list/setup'
import Allocation from './allocation'
import Breadcrumb from '@/components/breadcrumb'
import Util from '@/libs/util'
@ -99,7 +102,7 @@ import Const from '@/const/ques'
import Qs from 'qs'
import dayjs from 'dayjs'
export default {
components: { Allocation, Breadcrumb },
components: { Allocation, Setup, Breadcrumb },
data () {
return {
crumbs: [],
@ -136,6 +139,9 @@ export default {
multipleSelection: [],
allocationVisible: false,
setupVisible: false,
curRow: {},
};
},
watch: {
@ -281,30 +287,23 @@ export default {
this.schools = list
},
//
async batchReview () {
//
async batchAlloc () {
const list = this.multipleSelection
if (list.length) {
try {
await this.$confirm(`确定要删除已选定的${list.length}份试卷吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
closeOnClickModal: false,
})
await this.$post(this.api.paperDel, {
delete: false,
ids: list.map(e => e.paperId)
})
Util.successMsg('删除成功')
this.multipleSelection = []
this.$refs.table.clearSelection()
this.getList()
this.allocationVisible = true
} catch (e) { }
} else {
Util.warningMsg('请选择数据')
}
},
//
async toSetup () {
// this.curRow = row
this.setupVisible = true
},
//
allocation (row) {
this.allocationVisible = true

@ -4,8 +4,8 @@
<div class="wrap">
<div class="item">
<el-radio-group class="m-b-10" v-model="userType" size="small">
<el-radio-button label="平台用户"></el-radio-button>
<el-radio-button label="专家"></el-radio-button>
<el-radio-button :label="0">平台用户</el-radio-button>
<el-radio-button :label="1">专家</el-radio-button>
</el-radio-group>
<el-tree :data="nakadais" default-expand-all ref="nakadais" node-key="id" highlight-current
@ -84,7 +84,7 @@ export default {
nakadais: [],
searchTimer: null,
userType: '',
userType: 0,
userCheck: false,
users: [],
userKeyword: '',
@ -322,7 +322,7 @@ export default {
}
.lines {
height: calc(100vh - 392px);
height: calc(100vh - 270px);
overflow: auto;
}

@ -298,21 +298,6 @@
color: #ffa900;
}
}
&:not(.normal) {
.el-button--primary {
color: #606266;
background: #fff;
border-color: #DCDFE6;
&:hover {
color: $--color-primary;
border-color: #efbdbb;
background-color: #fae9e8;
}
}
}
}
.el-dialog__wrapper {
.el-dialog {
@ -442,31 +427,6 @@
-webkit-appearance: none !important;
}
}
.fill-scores {
.fill-title {
margin-bottom: 10px;
font-size: 13px;
}
.input-wrap {
display: flex;
align-items: center;
font-size: 12px;
white-space: nowrap;
&:not(:last-child) {
margin-bottom: 10px;
}
}
.l-input {
width: 100px;
margin-right: 10px;
.el-input__inner {
height: 28px;
line-height: 28px;
}
}
}
.html-parse {
table {
display: table;
@ -496,3 +456,8 @@
}
}
}
.el-drawer__header > :first-child {
font-size: 16px;
font-weight: 600;
color: #333;
}
Loading…
Cancel
Save