yujialong 2 months ago
parent 8d71f7c055
commit 1a8e6742a6
  1. 6
      src/api/index.js
  2. 4
      src/pages/allocationReview/list/index.vue
  3. 4
      src/pages/allocationReview/list/setup.vue
  4. 4
      src/pages/allocationReview/records/allocation.vue
  5. 56
      src/pages/allocationReview/records/index.vue
  6. 16
      src/pages/allocationReview/records/outline.vue
  7. 28
      src/pages/allocationReview/records/people.vue
  8. 162
      src/pages/myReview/list/index.vue
  9. 212
      src/pages/myReview/records/index.vue
  10. 292
      src/pages/myReview/theoryReview/index.vue
  11. 1
      src/store/modules/user.js

@ -19,4 +19,10 @@ export default {
examPaperDetails: `/exam/exam/paper/examPaperDetails`, examPaperDetails: `/exam/exam/paper/examPaperDetails`,
getPaperQuestionInfoByReviewSetting: `/nakadai/evaluation/getPaperQuestionInfoByReviewSetting`, getPaperQuestionInfoByReviewSetting: `/nakadai/evaluation/getPaperQuestionInfoByReviewSetting`,
assignReviewers: `/nakadai/evaluationAssignments/assignReviewers`, assignReviewers: `/nakadai/evaluationAssignments/assignReviewers`,
myReviewTask: `/nakadai/evaluation/myReviewTask`,
myReviewTaskByReviewList: `/nakadai/evaluation/myReviewTaskByReviewList`,
reviewTheDetailsReport: `/exam/exam/paper/reviewTheDetailsReport`,
reviewPaper: `/nakadai/evaluation/reviewPaper`,
setComments: `/nakadai/evaluation/setComments`,
getTheLabReportIdUpAndDown: `/nakadai/evaluation/getTheLabReportIdUpAndDown`,
} }

@ -178,8 +178,8 @@ export default {
}, },
date: function (val) { date: function (val) {
if (val) { if (val) {
this.filter.startTime = val[0]; this.filter.startTime = val[0]
this.filter.endTime = val[1]; this.filter.endTime = val[1]
} else { } else {
this.filter.startTime = '' this.filter.startTime = ''
this.filter.endTime = '' this.filter.endTime = ''

@ -198,7 +198,7 @@ export default {
form.stageId = row.stageId form.stageId = row.stageId
this.submiting = true this.submiting = true
try { try {
await this.$post(this.api.evaluationSave, form) const res = await this.$post(this.api.evaluationSave, form)
this.submiting = false this.submiting = false
if (this.$route.path === '/allocationReview/list' && (hasManualScoreType || form.allowManualGrading)) { // if (this.$route.path === '/allocationReview/list' && (hasManualScoreType || form.allowManualGrading)) { //
@ -209,6 +209,8 @@ export default {
type: 'warning', type: 'warning',
closeOnClickModal: false, closeOnClickModal: false,
}) })
row.evaluationId = res.evaluationId
localStorage.setItem('reviewRow', JSON.stringify(row))
this.$router.push(`records?competitionId=${row.id}&stageId=${row.stageId}`) this.$router.push(`records?competitionId=${row.id}&stageId=${row.stageId}`)
} catch (e) { } catch (e) {
this.close() this.close()

@ -144,7 +144,7 @@ export default {
const res = await this.$post(this.api.getPaperQuestionInfoByReviewSetting, { const res = await this.$post(this.api.getPaperQuestionInfoByReviewSetting, {
paperId, paperId,
evaluationId: this.row.evaluationId, evaluationId: this.row.evaluationId,
keyword: this.outlineKeyword // keyword: this.outlineKeyword
}) })
this.manualJudgeCount = res.manualJudgeCount this.manualJudgeCount = res.manualJudgeCount
const paper = res.examPaperOutlineList const paper = res.examPaperOutlineList
@ -260,7 +260,7 @@ export default {
taskType: this.taskType, taskType: this.taskType,
}) })
this.allocationVisible = false this.allocationVisible = false
this.$parent.calcDifficult() this.$parent.initData()
this.submiting = false this.submiting = false
} catch (e) { } catch (e) {
this.submiting = false this.submiting = false

@ -53,7 +53,7 @@
</div> </div>
</div> </div>
<el-table :data="list" class="table" ref="table" stripe header-align="center" row-key="id" <el-table :data="list" :loading="loading" class="table" ref="table" stripe header-align="center" row-key="id"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column> <el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
<el-table-column type="index" width="50" label="序号" align="center"></el-table-column> <el-table-column type="index" width="50" label="序号" align="center"></el-table-column>
@ -69,12 +69,13 @@
<template slot-scope="scope">{{ scope.row.timeSum }}min</template> <template slot-scope="scope">{{ scope.row.timeSum }}min</template>
</el-table-column> </el-table-column>
<el-table-column prop="submitTime" label="提交时间" align="center" width="150"></el-table-column> <el-table-column prop="submitTime" label="提交时间" align="center" width="150"></el-table-column>
<el-table-column prop="submitName" label="提交名称" align="center" width="120" <el-table-column prop="submitName" label="提交名称" align="center" min-width="120"
show-overflow-tooltip></el-table-column> show-overflow-tooltip></el-table-column>
<el-table-column prop="lastEditor" label="是否完成分配" align="center" width="100"> <el-table-column prop="lastEditor" label="是否完成分配" align="center" width="100">
<template slot-scope="scope">{{ scope.row.isDistribution ? '是' : '否' }}</template> <template slot-scope="scope">{{ scope.row.isDistribution ? '是' : '否' }}</template>
</el-table-column> </el-table-column>
<el-table-column prop="evaluator" label="评阅人员" align="center" width="90" show-overflow-tooltip></el-table-column> <el-table-column prop="evaluator" label="评阅人员" align="center" min-width="90"
show-overflow-tooltip></el-table-column>
<el-table-column prop="evaluatorCount" label="评阅人数" align="center" width="80"></el-table-column> <el-table-column prop="evaluatorCount" label="评阅人数" align="center" width="80"></el-table-column>
<el-table-column prop="evaluationStatus" label="评阅状态" align="center" width="90"> <el-table-column prop="evaluationStatus" label="评阅状态" align="center" width="90">
<template slot-scope="scope"> <template slot-scope="scope">
@ -177,43 +178,38 @@ export default {
const { query } = this.$route const { query } = this.$route
if (query.page) { if (query.page) {
const { questionTypes, correctRateEnd, correctRateStart, difficultys, specialtyIds, status, keyword, questionTypeSort, givenYearSort, difficultySort, correctRateSort, updateTimeSort, referenceCountSort, givenYears, knowledgePointIds, questionBankId, questionBankName, questionBankCategory } = query const { cityId, provinceId, realSchoolId, status, keyword } = query
this.filter = { this.filter = {
questionTypes: questionTypes ? questionTypes.split(',') : [], cityId: cityId ? +cityId : '',
correctRateEnd: correctRateEnd || '', provinceId: provinceId ? +provinceId : '',
correctRateStart: correctRateStart || '', realSchoolId: realSchoolId ? +realSchoolId : '',
difficultys: difficultys ? difficultys.split(',') : [],
specialtyIds: specialtyIds ? specialtyIds.split(',').map(e => +e) : [],
status: status ? +status : '', status: status ? +status : '',
keyword: keyword || '', keyWord: keyword || '',
questionTypeSort: questionTypeSort || '',
givenYearSort: givenYearSort || '',
difficultySort: difficultySort || '',
correctRateSort: correctRateSort || '',
updateTimeSort: updateTimeSort || '',
referenceCountSort: referenceCountSort || '',
} }
this.givenYears = givenYears || '' provinceId && this.getCity()
this.knowledgePointIds = knowledgePointIds ? JSON.parse(knowledgePointIds) : [] cityId && this.getSchool()
this.$router.push(`records?competitionId=${query.competitionId}&stageId=${query.stageId}`).catch(() => { })
this.$router.push(`/myReview?questionBankId=${questionBankId}&questionBankName=${questionBankName}&questionBankCategory=${questionBankCategory}`).catch(() => { })
} }
this.getProvince() this.getProvince()
this.getList() this.getList()
// this.getKnowledge()
}, },
methods: { methods: {
async getList () { async getList () {
const { page } = await this.$post(this.api.competitionUserReport, { try {
...this.filter, this.loading = true
pageNum: this.page, const { page } = await this.$post(this.api.competitionUserReport, {
pageSize: this.pageSize, ...this.filter,
competitionId: this.competitionId, pageNum: this.page,
stageId: this.stageId, pageSize: this.pageSize,
}) competitionId: this.competitionId,
this.list = page.records stageId: this.stageId,
this.total = page.total })
this.list = page.records
this.total = page.total
} finally {
this.loading = false
}
}, },
// //
currentChange (val) { currentChange (val) {

@ -1,10 +1,10 @@
<template> <template>
<div> <div>
<h6 class="page-name m-t-20" style="margin-bottom: 10px;">评阅范围</h6> <h6 class="page-name m-t-20" style="margin-bottom: 10px;">评阅范围</h6>
<div v-if="!dia" class="m-b-10"> <!-- <div v-if="!dia" class="m-b-10">
<el-input style="width: 300px;" placeholder="请输入题干" prefix-icon="el-icon-search" v-model="outlineKeyword" <el-input style="width: 300px;" placeholder="请输入题干" prefix-icon="el-icon-search" v-model="outlineKeyword"
clearable /> clearable />
</div> </div> -->
<!-- <el-checkbox class="m-b-5" style="margin-left: 24px;" v-model="checkAllQues" <!-- <el-checkbox class="m-b-5" style="margin-left: 24px;" v-model="checkAllQues"
@change="checkAllQuesChange">全选</el-checkbox> --> @change="checkAllQuesChange">全选</el-checkbox> -->
<div :class="['scopes', { dia }]"> <div :class="['scopes', { dia }]">
@ -27,12 +27,12 @@ export default {
submiting: false, submiting: false,
}; };
}, },
watch: { // watch: {
outlineKeyword: function (val) { // outlineKeyword: function (val) {
clearTimeout(this.searchTimer) // clearTimeout(this.searchTimer)
this.searchTimer = setTimeout(this.getOutline, 500) // this.searchTimer = setTimeout(this.getOutline, 500)
}, // },
}, // },
mounted () { mounted () {
}, },

@ -3,19 +3,24 @@
<h6 class="page-name m-t-20" style="margin-bottom: 10px;">选择评阅人员</h6> <h6 class="page-name m-t-20" style="margin-bottom: 10px;">选择评阅人员</h6>
<div :class="['wrap', { dia }]"> <div :class="['wrap', { dia }]">
<div class="item"> <div class="item">
<el-radio-group class="m-b-10" v-model="userType" size="small"> <el-radio-group class="m-b-10" v-model="userType" size="small" @change="userTypeChange">
<el-radio-button :label="0">平台用户</el-radio-button> <el-radio-button :label="0">平台用户</el-radio-button>
<el-radio-button :label="1">专家</el-radio-button> <el-radio-button :label="1">专家</el-radio-button>
</el-radio-group> </el-radio-group>
<div class="dep-wrap">
<el-tree :data="nakadais" default-expand-all ref="nakadais" node-key="id" highlight-current <div v-if="userType" class="empty m-t-20">
<img class="icon" src="@/assets/images/empty.svg" alt="">
<p>请在右侧选择专家</p>
</div>
<div v-else class="dep-wrap">
<el-tree :data="nakadaiDeps" default-expand-all ref="nakadais" node-key="id" highlight-current
:expand-on-click-node="false" @node-click="depClick" :expand-on-click-node="false" @node-click="depClick"
:props="{ children: 'children', label: 'organizationName', isLeaf: 'leaf' }"></el-tree> :props="{ children: 'children', label: 'organizationName', isLeaf: 'leaf' }"></el-tree>
</div> </div>
</div> </div>
<div class="item"> <div class="item">
<p class="total m-b-10">用户</p> <p class="total m-b-10">{{ userType ? '专家' : '用户' }}</p>
<el-input class="m-b-10" placeholder="请输入姓名、现所在单位" prefix-icon="el-icon-search" v-model="userKeyword" <el-input class="m-b-10" placeholder="请输入姓名、现所在单位" prefix-icon="el-icon-search" v-model="userKeyword"
clearable /> clearable />
@ -84,7 +89,7 @@ export default {
props: ['dia'], props: ['dia'],
data () { data () {
return { return {
nakadais: [], nakadaiDeps: [],
curDep: {}, curDep: {},
searchTimer: null, searchTimer: null,
@ -119,7 +124,13 @@ export default {
const res = await this.$post(this.api.treeListArch) const res = await this.$post(this.api.treeListArch)
const list = res.treeList const list = res.treeList
this.handleList(list) this.handleList(list)
this.nakadais = list this.nakadaiDeps = [
{
id: 0,
organizationName: '全部',
children: list
}
]
}, },
// //
handleList (list) { handleList (list) {
@ -131,6 +142,11 @@ export default {
} }
}) })
}, },
//
userTypeChange () {
const el = this.$refs.nakadais
el && el.setCurrentKey(null)
},
// //
depClick (data) { depClick (data) {
this.curDep = data this.curDep = data

@ -15,14 +15,14 @@
</li> </li>
<li> <li>
<label>评阅阶段</label> <label>评阅阶段</label>
<el-select v-model="filter.status" clearable placeholder="请选择评阅阶段" @change="initData"> <el-select v-model="filter.evaluationStatus" clearable placeholder="请选择评阅阶段" @change="initData">
<el-option v-for="(item, i) in status" :key="i" :label="item.name" :value="item.id"></el-option> <el-option v-for="(item, i) in reviewStage" :key="i" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
</li> </li>
<li> <li>
<label>评阅情况</label> <label>评阅情况</label>
<el-select v-model="filter.status" clearable placeholder="请选择评阅情况" @change="initData"> <el-select v-model="filter.evaluationResult" clearable placeholder="请选择评阅情况" @change="initData">
<el-option v-for="(item, i) in status" :key="i" :label="item.name" :value="item.id"></el-option> <el-option v-for="(item, i) in reviewStatus" :key="i" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
</li> </li>
<li> <li>
@ -33,20 +33,21 @@
</ul> </ul>
</div> </div>
<el-table :data="list" class="table" ref="table" stripe header-align="center" row-key="id"> <el-table :data="list" :loading="loading" class="table" ref="table" stripe header-align="center" row-key="id">
<el-table-column type="index" width="50" label="序号" align="center"></el-table-column> <el-table-column type="index" width="50" label="序号" align="center"></el-table-column>
<el-table-column prop="stem" label="大赛名称" align="center" min-width="120" show-overflow-tooltip></el-table-column> <el-table-column prop="competitionName" label="大赛名称" align="center" min-width="120"
<el-table-column prop="professionalName" label="阶段赛名称" align="center" min-width="100"></el-table-column> show-overflow-tooltip></el-table-column>
<el-table-column prop="knowledgePointName" label="比赛内容" align="center" min-width="100"></el-table-column> <el-table-column prop="stageName" 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="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="totalAnswer" 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="unReviewedAnswer" 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="reviewedAnswer" 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="time" label="评阅时间" align="center" width="300"></el-table-column>
<el-table-column prop="lastEditor" label="评阅情况" align="center" width="90"></el-table-column> <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 label="操作" align="center" width="90" fixed="right"> <el-table-column label="操作" align="center" width="90" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="review(scope.row)">评阅</el-button> <el-button type="text" @click="toReview(scope.row)">评阅</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -92,6 +93,30 @@ export default {
name: '近六个月' name: '近六个月'
} }
], ],
reviewStage: [
{
id: 0,
name: '未开始'
},
{
id: 1,
name: '进行中'
},
{
id: 2,
name: '已完成'
},
],
reviewStatus: [
{
id: 0,
name: '未完成'
},
{
id: 1,
name: '已完成'
},
],
status: [ status: [
{ {
id: 1, id: 1,
@ -105,12 +130,15 @@ export default {
date: [], date: [],
filter: { filter: {
month: '', month: '',
startTime: null, startTime: '',
endTime: null, endTime: '',
status: '', evaluationResult: '',
keyword: '', evaluationStatus: '',
keyWord: '',
}, },
list: [{}], now: '',
timer: null,
list: [],
page: +this.$route.query.page || 1, page: +this.$route.query.page || 1,
pageSize: 10, pageSize: 10,
total: 0, total: 0,
@ -127,20 +155,24 @@ export default {
}, },
date: function (val) { date: function (val) {
if (val) { if (val) {
this.filter.startTime = val[0]; this.filter.startTime = val[0]
this.filter.endTime = val[1]; this.filter.endTime = val[1]
} else { } else {
this.filter.startTime = '' this.filter.startTime = ''
this.filter.endTime = '' this.filter.endTime = ''
} }
// this.initData(); this.initData()
}, },
'filter.keyword': function () { 'filter.keyWord': function () {
clearTimeout(this.searchTimer) clearTimeout(this.searchTimer)
this.searchTimer = setTimeout(this.initData, 500) this.searchTimer = setTimeout(this.initData, 500)
}, },
}, },
mounted () { mounted () {
this.$once('hook:beforeDestroy', function () {
clearInterval(this.timer)
})
const { query } = this.$route const { query } = this.$route
if (query.page) { if (query.page) {
const { questionTypes, correctRateEnd, correctRateStart, difficultys, specialtyIds, status, keyword, questionTypeSort, givenYearSort, difficultySort, correctRateSort, updateTimeSort, referenceCountSort, givenYears, knowledgePointIds, questionBankId, questionBankName, questionBankCategory } = query const { questionTypes, correctRateEnd, correctRateStart, difficultys, specialtyIds, status, keyword, questionTypeSort, givenYearSort, difficultySort, correctRateSort, updateTimeSort, referenceCountSort, givenYears, knowledgePointIds, questionBankId, questionBankName, questionBankCategory } = query
@ -165,32 +197,34 @@ export default {
this.$router.push(`/myReview?questionBankId=${questionBankId}&questionBankName=${questionBankName}&questionBankCategory=${questionBankCategory}`).catch(() => { }) this.$router.push(`/myReview?questionBankId=${questionBankId}&questionBankName=${questionBankName}&questionBankCategory=${questionBankCategory}`).catch(() => { })
} }
// this.getType() this.getList()
// this.getProfessional()
// this.getKnowledge()
}, },
methods: { methods: {
async getList () { async getList () {
let type = this.$refs.typeTree.getCurrentKey() try {
const k = this.knowledgePointIds this.loading = true
if (k.length) { // const { page } = await this.$post(this.api.myReviewTask, {
type = k.map(e => { ...this.filter,
return e[e.length - 1] pageNum: this.page,
pageSize: this.pageSize,
})
const list = page.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.isTimed ?
e.startTime + ' ~ ' + e.endTime :
'不限时'
}) })
} else if (type) { this.list = list
type = [type] this.getNow()
this.handleStage()
this.total = page.total
} finally {
this.loading = false
} }
const { message } = await this.$post(this.api.listQuestion, {
...this.filter,
givenYears: this.givenYears ? [this.givenYears] : [],
isNotJoin: this.isNotJoin || '',
pageNum: this.page,
pageSize: this.pageSize,
questionBankId: this.questionBankId,
knowledgePointIds: type || [],
})
this.list = Util.removeTag(message.records)
this.total = message.total
}, },
// //
currentChange (val) { currentChange (val) {
@ -206,11 +240,43 @@ export default {
this.page = 1 this.page = 1
this.getList() this.getList()
}, },
//
async handleStage () {
this.list.forEach(e => {
let stage = '-'
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
})
},
//
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)
},
// //
review () { toReview (row) {
// this.setReferrer() this.$store.commit('user/setReferrer', {
this.$router.push('records') i: 1,
url: `${this.$route.path}?${Qs.stringify(this.filter)}&page=${this.page}&pageSize=${this.pageSize}`
})
this.$router.push(`records?competitionId=${row.competitionId}&stageId=${row.stageId}`)
}, },
} }
}; };

@ -4,39 +4,41 @@
<h6 class="page-name">筛选</h6> <h6 class="page-name">筛选</h6>
<div class="tool"> <div class="tool">
<ul class="filter"> <ul class="filter">
<li> <template v-if="showUserInfo">
<label>省份</label> <li>
<el-select v-model="filter.provinceId" clearable placeholder="请选择省份" @change="provinceChange" <label>省份</label>
@clear="clearprovince"> <el-select v-model="filter.provinceId" clearable placeholder="请选择省份" @change="provinceChange"
<el-option v-for="(item, i) in provinces" :key="i" :label="item.provinceName" @clear="clearprovince">
:value="item.provinceId"></el-option> <el-option v-for="(item, i) in provinces" :key="i" :label="item.provinceName"
</el-select> :value="item.provinceId"></el-option>
</li> </el-select>
<li> </li>
<label>城市</label> <li>
<el-select v-model="filter.cityId" clearable placeholder="请选择城市" :disabled="!filter.provinceId" <label>城市</label>
@clear="clearcity" @change="getSchool"> <el-select v-model="filter.cityId" clearable placeholder="请选择城市" :disabled="!filter.provinceId"
<el-option v-for="(item, i) in cities" :key="i" :label="item.cityName" :value="item.cityId"></el-option> @clear="clearcity" @change="cityChange">
</el-select> <el-option v-for="(item, i) in cities" :key="i" :label="item.cityName" :value="item.cityId"></el-option>
</li> </el-select>
<li> </li>
<label>学校</label> <li>
<el-select v-model="filter.schoolId" clearable filterable placeholder="请选择学校" :disabled="!filter.cityId" <label>学校</label>
@change="initData"> <el-select v-model="filter.realSchoolId" clearable filterable placeholder="请选择学校" :disabled="!filter.cityId"
<el-option v-for="(item, i) in schools" :key="i" :label="item.schoolName" @change="initData">
:value="item.schoolId"></el-option> <el-option v-for="(item, i) in schools" :key="i" :label="item.schoolName"
</el-select> :value="item.schoolId"></el-option>
</li> </el-select>
</li>
</template>
<li> <li>
<label>评阅状态</label> <label>评阅状态</label>
<el-select v-model="filter.status" clearable placeholder="请选择评阅情况" @change="initData"> <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-option v-for="(item, i) in status" :key="i" :label="item.name" :value="item.id"></el-option>
</el-select> </el-select>
</li> </li>
<li> <li>
<label>搜索</label> <label>搜索</label>
<el-input style="width: 400px;" placeholder="请输入学生姓名、学生学号、团队名称、答卷ID、提交名称" prefix-icon="el-icon-search" <el-input style="width: 400px;" :placeholder="`请输入${showUserInfo ? '学生姓名、学生学号、团队名称、' : ''}答卷ID、提交名称`"
v-model="filter.keyword" clearable /> prefix-icon="el-icon-search" v-model="filter.keyword" clearable />
</li> </li>
</ul> </ul>
<!-- <div> <!-- <div>
@ -44,24 +46,37 @@
</div> --> </div> -->
</div> </div>
<el-table :data="list" class="table" ref="table" stripe header-align="center" row-key="id" <el-table :data="list" :loading="loading" class="table" ref="table" stripe header-align="center" row-key="id"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column> <el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
<el-table-column type="index" width="50" label="序号" align="center"></el-table-column> <el-table-column type="index" width="50" label="序号" align="center"></el-table-column>
<el-table-column prop="stem" label="省份" align="center" min-width="120"></el-table-column> <template v-if="showUserInfo">
<el-table-column prop="professionalName" label="城市" align="center" min-width="100"></el-table-column> <el-table-column prop="provinceName" label="省份" align="center" min-width="100"
<el-table-column prop="knowledgePointName" label="学生所在学校" align="center" min-width="100"></el-table-column> show-overflow-tooltip></el-table-column>
<el-table-column prop="lastEditor" label="团队名称" align="center" width="90"></el-table-column> <el-table-column prop="cityName" label="城市" align="center" min-width="100"
<el-table-column prop="lastEditor" label="学生姓名" align="center" width="90"></el-table-column> show-overflow-tooltip></el-table-column>
<el-table-column prop="lastEditor" label="学号" align="center" width="90"></el-table-column> <el-table-column prop="realSchool" label="学生所在院校" align="center" min-width="100"
<el-table-column prop="lastEditor" label="答卷ID" align="center" width="90"></el-table-column> show-overflow-tooltip></el-table-column>
<el-table-column prop="lastEditor" label="用时" align="center" width="90"></el-table-column> <el-table-column prop="teamName" label="团队名称" align="center" min-width="90"></el-table-column>
<el-table-column prop="lastEditor" label="提交时间" align="center" width="90"></el-table-column> <el-table-column prop="userName" label="学生姓名" align="center" min-width="80"></el-table-column>
<el-table-column prop="lastEditor" label="提交名称" align="center" width="90"></el-table-column> <el-table-column prop="workNumber" label="学号" align="center" min-width="70"></el-table-column>
<el-table-column prop="lastEditor" label="评阅状态" align="center" width="90"></el-table-column> </template>
<el-table-column prop="reportId" label="答卷ID" align="center" min-width="60"></el-table-column>
<el-table-column prop="lastEditor" label="用时" align="center" min-width="60">
<template slot-scope="scope">{{ scope.row.timeSum }}min</template>
</el-table-column>
<el-table-column prop="submitTime" label="提交时间" align="center" min-width="150"></el-table-column>
<el-table-column prop="submitName" label="提交名称" align="center" min-width="120"
show-overflow-tooltip></el-table-column>
<el-table-column prop="evaluationStatus" label="评阅状态" align="center" width="90">
<template slot-scope="scope">
<el-tag :type="scope.row.evaluationStatus === '待评阅' ? 'danger' : 'success'">{{ scope.row.evaluationStatus
}}</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="90" fixed="right"> <el-table-column label="操作" align="center" width="90" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" @click="review(scope.row)">评阅</el-button> <el-button type="text" @click="toReview(scope.row, scope.$index)">评阅</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -85,9 +100,8 @@ export default {
data () { data () {
return { return {
crumbs: [], crumbs: [],
paperName: this.$route.query.paperName, competitionId: this.$route.query.competitionId,
difficults: Const.difficults, stageId: this.$route.query.stageId,
questionTypes: Const.questionTypes,
loading: false, loading: false,
provinces: [], provinces: [],
@ -105,13 +119,16 @@ export default {
], ],
date: [], date: [],
filter: { filter: {
month: '', cityId: '',
startTime: null, provinceId: '',
endTime: null, realSchoolId: '',
status: '', status: '',
keyword: '', keyword: '',
}, },
list: [{}], showUserInfo: true,
rowData: null,
setup: null,
list: [],
page: +this.$route.query.page || 1, page: +this.$route.query.page || 1,
pageSize: 10, pageSize: 10,
total: 0, total: 0,
@ -119,34 +136,17 @@ export default {
}; };
}, },
watch: { watch: {
'filter.month': function (val) {
if (val) {
let unit = 24 * 60 * 60 * 1000
this.date = [dayjs(new Date(Date.now() - unit * 30 * val)).format('YYYY-MM-DD'), dayjs(new Date(Date.now() + unit)).format('YYYY-MM-DD')]
} else {
this.date = []
}
},
date: function (val) {
if (val) {
this.filter.startTime = val[0];
this.filter.endTime = val[1];
} else {
this.filter.startTime = ''
this.filter.endTime = ''
}
// this.initData();
},
'filter.keyword': function () { 'filter.keyword': function () {
clearTimeout(this.searchTimer) clearTimeout(this.searchTimer)
this.searchTimer = setTimeout(this.initData, 500) this.searchTimer = setTimeout(this.initData, 500)
}, },
}, },
mounted () { mounted () {
const { referrer1 } = this.$store.state.user
this.crumbs = [ this.crumbs = [
{ {
name: this.paperName || '我的评阅任务', name: '我的评阅任务',
route: '/myReview' route: referrer1 || '/myReview'
}, },
{ {
name: '评阅' name: '评阅'
@ -156,54 +156,44 @@ export default {
const { query } = this.$route const { query } = this.$route
if (query.page) { if (query.page) {
const { questionTypes, correctRateEnd, correctRateStart, difficultys, specialtyIds, status, keyword, questionTypeSort, givenYearSort, difficultySort, correctRateSort, updateTimeSort, referenceCountSort, givenYears, knowledgePointIds, questionBankId, questionBankName, questionBankCategory } = query const { cityId, provinceId, realSchoolId, status, keyword } = query
this.filter = { this.filter = {
questionTypes: questionTypes ? questionTypes.split(',') : [], cityId: cityId ? +cityId : '',
correctRateEnd: correctRateEnd || '', provinceId: provinceId ? +provinceId : '',
correctRateStart: correctRateStart || '', realSchoolId: realSchoolId ? +realSchoolId : '',
difficultys: difficultys ? difficultys.split(',') : [],
specialtyIds: specialtyIds ? specialtyIds.split(',').map(e => +e) : [],
status: status ? +status : '', status: status ? +status : '',
keyword: keyword || '', keyWord: keyword || '',
questionTypeSort: questionTypeSort || '',
givenYearSort: givenYearSort || '',
difficultySort: difficultySort || '',
correctRateSort: correctRateSort || '',
updateTimeSort: updateTimeSort || '',
referenceCountSort: referenceCountSort || '',
} }
this.givenYears = givenYears || '' provinceId && this.getCity()
this.knowledgePointIds = knowledgePointIds ? JSON.parse(knowledgePointIds) : [] cityId && this.getSchool()
this.$router.push(`records?competitionId=${query.competitionId}&stageId=${query.stageId}`).catch(() => { })
this.$router.push(`/myReview?questionBankId=${questionBankId}&questionBankName=${questionBankName}&questionBankCategory=${questionBankCategory}`).catch(() => { })
} }
this.getProvince() this.getProvince()
// this.getProfessional() this.getList()
// this.getKnowledge()
}, },
methods: { methods: {
async getList () { async getList () {
let type = this.$refs.typeTree.getCurrentKey() try {
const k = this.knowledgePointIds this.loading = true
if (k.length) { // const { page } = await this.$post(this.api.myReviewTaskByReviewList, {
type = k.map(e => { ...this.filter,
return e[e.length - 1] pageNum: this.page,
pageSize: this.pageSize,
competitionId: this.competitionId,
stageId: this.stageId,
}) })
} else if (type) { const list = page.records
type = [type] if (list.length) {
this.rowData = list[0]
this.getSetup()
}
this.list = list
this.total = page.total
} finally {
this.loading = false
} }
const { message } = await this.$post(this.api.listQuestion, {
...this.filter,
givenYears: this.givenYears ? [this.givenYears] : [],
isNotJoin: this.isNotJoin || '',
pageNum: this.page,
pageSize: this.pageSize,
questionBankId: this.questionBankId,
knowledgePointIds: type || [],
})
this.list = Util.removeTag(message.records)
this.total = message.total
}, },
// //
currentChange (val) { currentChange (val) {
@ -222,6 +212,17 @@ export default {
this.page = 1 this.page = 1
this.getList() this.getList()
}, },
//
async getSetup () {
try {
const row = this.rowData
if (row && !this.setup) {
const { data } = await this.$post(`${this.api.evaluationFind}?id=${row.evaluationId}&paperId=${row.paperId}`)
this.setup = data
this.showUserInfo = !data.anonymizeStudents //
}
} catch (e) { }
},
// //
async getProvince () { async getProvince () {
@ -290,9 +291,8 @@ export default {
} }
}, },
// //
review (row) { toReview (row, i) {
// this.setReferrer() window.open(this.$router.resolve(`/theoryReview?id=${row.reportId}&u=${+this.showUserInfo}&m=${this.setup.hasManualScoreType}&c=${this.competitionId}&s=${this.stageId}&i=${(this.page - 1) * this.pageSize + i + 1}`).href)
window.open(this.$router.resolve(`/theoryReview?id=${row.paperId}`).href)
}, },
} }
}; };

@ -4,8 +4,8 @@
<p class="paper-name">{{ paperName }}</p> <p class="paper-name">{{ paperName }}</p>
<div class="actions"> <div class="actions">
<el-button class="btn" @click="prev">上一个</el-button> <el-button v-if="curIndex > 0" class="btn" @click="prev">上一个</el-button>
<el-button class="btn" @click="prev">下一个</el-button> <el-button v-if="recordTotal - 1 > curIndex" class="btn" @click="next">下一个</el-button>
<el-button class="btn" @click="saveAll">一键保存分数</el-button> <el-button class="btn" @click="saveAll">一键保存分数</el-button>
<img class="exit" src="@/assets/images/exit.svg" alt="" @click="close"> <img class="exit" src="@/assets/images/exit.svg" alt="" @click="close">
</div> </div>
@ -14,7 +14,7 @@
<div class="report" v-loading="loading"> <div class="report" v-loading="loading">
<div class="left"> <div class="left">
<h6 class="title">答题卡</h6> <h6 class="title">答题卡</h6>
<ul class="review-type"> <ul v-if="hasManualScoreType" class="review-type">
<li v-for="(item, i) in reviews" :key="i" :class="{ active: curReview === item.id }" <li v-for="(item, i) in reviews" :key="i" :class="{ active: curReview === item.id }"
@click="reviewClick(item)"> @click="reviewClick(item)">
{{ item.name }}</li> {{ item.name }}</li>
@ -85,18 +85,18 @@
@click="download(ques.fileName || ques.stemAttachment, ques.stemAttachment)">下载</el-button> @click="download(ques.fileName || ques.stemAttachment, ques.stemAttachment)">下载</el-button>
</div> </div>
<div v-if="ques.uploadInstructions" class="line m-b-10"> <div v-if="ques.uploadInstructions" class="line m-b-10">
<span>考生上传附件说明</span> <span class="line-label">考生上传附件说明</span>
<div v-html="ques.uploadInstructions" class="html-parse"></div> <div v-html="ques.uploadInstructions" class="html-parse"></div>
</div> </div>
</template> </template>
<div v-if="ques.knowledgePointList && ques.knowledgePointList.length" class="m-b-10"> <div v-if="ques.knowledgePointList && ques.knowledgePointList.length" class="m-b-10">
<span>知识点</span> <span class="line-label">知识点</span>
<el-tag v-for="(kp, k) in ques.knowledgePointList" :key="k" class="m-r-5" type="info">{{ kp.name <el-tag v-for="(kp, k) in ques.knowledgePointList" :key="k" class="m-r-5" type="info">{{ kp.name
}}</el-tag> }}</el-tag>
</div> </div>
<div class="flex m-b-10"> <div class="flex m-b-10">
<span>解析</span> <span class="line-label">解析</span>
<div <div
v-if="ques.questionAnswerVersionsList.length && ques.questionAnswerVersionsList[0].answerAnalysis" v-if="ques.questionAnswerVersionsList.length && ques.questionAnswerVersionsList[0].answerAnalysis"
v-html="ques.questionAnswerVersionsList[0].answerAnalysis" class="html-parse"></div> v-html="ques.questionAnswerVersionsList[0].answerAnalysis" class="html-parse"></div>
@ -139,15 +139,17 @@
<div class="line">题目分值{{ ques.questionScore }}</div> <div class="line">题目分值{{ ques.questionScore }}</div>
<div class="line"> <div class="line">
考生得分<el-input class="score-input" size="small" :value="ques.userScore" />&emsp; 考生得分<el-input class="score-input hide-spin" type="number" placeholder="请输入分数" size="small"
v-model.number="ques.userScore" />&emsp;
<el-button type="primary" size="mini" @click="saveScore(ques)">保存分数</el-button> <el-button type="primary" size="mini" @click="saveScore(ques)">保存分数</el-button>
<el-popover class="m-l-10" placement="bottom" width="400" trigger="click"> <el-popover class="m-l-10" placement="bottom" width="400" trigger="click">
<el-input type="textarea" :rows="3" autosize placeholder="请输入" /> <el-input type="textarea" :rows="3" autosize resize="none" placeholder="请输入"
v-model="ques.comments" />
<div class="m-t-10 text-right"> <div class="m-t-10 text-right">
<el-button type="primary" size="mini" @click="saveComment(ques)">保存</el-button> <el-button type="primary" size="mini" @click="saveComment(ques)">保存</el-button>
</div> </div>
<div slot="reference"> <div slot="reference">
<el-button type="primary" size="mini" @click="showComment(ques)">评语</el-button> <el-button type="primary" size="mini">评语</el-button>
</div> </div>
</el-popover> </el-popover>
</div> </div>
@ -155,7 +157,7 @@
评语 评语
<div> <div>
<span>2024-12-12</span> <span>2024-12-12</span>
<i class="el-icon-delete-solid del-comment"></i> <i class="el-icon-delete-solid del-comment" @click="delComment(ques)"></i>
<div class="comment">xxx</div> <div class="comment">xxx</div>
</div> </div>
</div> </div>
@ -168,14 +170,16 @@
<div class="right"> <div class="right">
<h6>基本信息</h6> <h6>基本信息</h6>
<div class="lines"> <div class="lines">
<p>考生所在院校xx</p> <template v-if="showUserInfo">
<p>团队名称xx</p> <p>考生所在院校{{ info.realSchool }}</p>
<p>考生班级xx</p> <p>团队名称{{ info.teamName }}</p>
<p>考生姓名xx</p> <p>考生班级{{ info.className }}</p>
<p>考生学号xx</p> <p>考生姓名{{ info.userName }}</p>
<p>答卷IDxx</p> <p>考生学号{{ info.workNumber }}</p>
<p>提交时间xx</p> </template>
<p>用时xx</p> <p>答卷ID{{ info.reportId }}</p>
<p>提交时间{{ info.submitTime }}</p>
<p>用时{{ info.timeSum }}min</p>
</div> </div>
</div> </div>
</div> </div>
@ -203,24 +207,28 @@ export default {
return { return {
numToLetter: Util.numToLetter, numToLetter: Util.numToLetter,
arabicToChinese: Util.arabicToChinese, arabicToChinese: Util.arabicToChinese,
// reportId: this.$route.query.reportId, reportId: '',
competitionId: this.$route.query.c,
stageId: this.$route.query.s,
showUserInfo: +this.$route.query.u, //
hasManualScoreType: +this.$route.query.m, //
curIndex: 0,
paperName: '', paperName: '',
reportId: 3791,
outline: [], outline: [],
editing: false, editing: false,
loading: false, loading: false,
curReview: 1, curReview: +this.$route.query.m ? 0 : '',
reviews: [ reviews: [
{ {
id: '', id: '',
name: '全部' name: '全部'
}, },
{ {
id: 1, id: 0,
name: '待评阅' name: '待评阅'
}, },
{ {
id: 2, id: 1,
name: '已评阅' name: '已评阅'
}, },
], ],
@ -243,9 +251,11 @@ export default {
name: '待判分' name: '待判分'
}, },
], ],
outlines: [], info: {},
paper: [], paper: [],
essayExist: 0, records: [],
page: 1,
recordTotal: 0,
previewImgVisible: false, previewImgVisible: false,
previewImg: '', previewImg: '',
pdfVisible: false, pdfVisible: false,
@ -253,94 +263,123 @@ export default {
exporting: false, exporting: false,
}; };
}, },
watch: {
$route: {
handler () {
this.curIndex = +this.$route.query.i
this.reportId = this.$route.query.id
this.getData()
},
immediate: true
}
},
mounted () { mounted () {
this.getData() this.getRecords()
}, },
methods: { methods: {
async getData () { async getData () {
this.loading = true this.loading = true
try { try {
const { userAnswers: outline, report, paper } = await this.$get(`${this.api.getDetailedExamScores}?reportId=${this.reportId}`) const { userAnswers: outline, report } = await this.$get(`${this.api.reviewTheDetailsReport}?reportId=${this.reportId}&status=${this.curReview}`)
this.form = report this.info = report
// //
const { questionTypes: types, difficults } = QuesConst const { questionTypes: types, difficults } = QuesConst
const { numToLetter } = Util const { numToLetter } = Util
const paper = []
outline.map(e => { outline.map(e => {
e.shrink = false if (e.userAnswerList && e.userAnswerList.length) {
const type = e.questionType e.shrink = false
e.questionTypeName = types.find(n => n.id === type).name const type = e.questionType
e.userAnswerList && e.userAnswerList.map(n => { e.questionTypeName = types.find(n => n.id === type).name
if (n.difficulty) { e.userAnswerList.map(n => {
const curDiff = difficults.find(m => m.id === n.difficulty) if (n.difficulty) {
if (curDiff) { const curDiff = difficults.find(m => m.id === n.difficulty)
n.difficult = curDiff.name if (curDiff) {
n.difficultTheme = curDiff.theme n.difficult = curDiff.name
} n.difficultTheme = curDiff.theme
} }
const opts = n.questionAnswerVersionsList
if (type !== 'fill_blank' && type !== 'essay') { //
if (!n.userScore) n.userScore = 0
n.isCorrect = n.userScore && n.userScore === n.questionScore ? 1 : 2
//
let { userAnswer } = n
if (userAnswer) {
userAnswer = JSON.parse(userAnswer)
n.userAnswerStr = userAnswer.length ? (type === 'judgement' ? opts[+userAnswer[0] - 1].optionText : userAnswer.map(m => numToLetter(+m - 1)).join('')) : '未作答'
} else {
userAnswer = []
} }
if (!n.comments) n.comments = ''
const opts = n.questionAnswerVersionsList
if (type !== 'fill_blank' && type !== 'essay') { //
if (!n.userScore) n.userScore = 0
n.isCorrect = n.userScore && n.userScore === n.questionScore ? 1 : 2
//
let { userAnswer } = n
if (userAnswer) {
userAnswer = JSON.parse(userAnswer)
n.userAnswerStr = userAnswer.length ? (type === 'judgement' ? opts[+userAnswer[0] - 1].optionText : userAnswer.map(m => numToLetter(+m - 1)).join('')) : '未作答'
} else {
userAnswer = []
}
const quesAnswer = [] const quesAnswer = []
opts && opts.map((m, j) => { opts && opts.map((m, j) => {
const selected = userAnswer.includes(m.optionNumber) const selected = userAnswer.includes(m.optionNumber)
m.optCorrect = m.answerIsCorrect ? 1 : (selected ? 0 : -1) // (10-1) m.optCorrect = m.answerIsCorrect ? 1 : (selected ? 0 : -1) // (10-1)
m.answerIsCorrect && quesAnswer.push(type === 'judgement' ? m.optionText : numToLetter(j)) m.answerIsCorrect && quesAnswer.push(type === 'judgement' ? m.optionText : numToLetter(j))
}) })
n.quesAnswer = quesAnswer.join('') n.quesAnswer = quesAnswer.join('')
} else if (type === 'fill_blank') { // } else if (type === 'fill_blank') { //
// //
let { jsonText } = n let { jsonText } = n
if (jsonText) { if (jsonText) {
n.userAnswerFill = JSON.parse(jsonText) n.userAnswerFill = JSON.parse(jsonText)
} }
// //
if (opts && opts.length) { if (opts && opts.length) {
let { answerData } = opts[0] let { answerData } = opts[0]
if (answerData) { if (answerData) {
answerData = JSON.parse(answerData) answerData = JSON.parse(answerData)
let quesAnswer = '' let quesAnswer = ''
answerData.map((m, j) => { answerData.map((m, j) => {
if (m.fills) { if (m.fills) {
quesAnswer += `填空${j + 1}${m.fills.map(n => n.val).join(' ||| ')}` quesAnswer += `填空${j + 1}${m.fills.map(n => n.val).join(' ||| ')}`
} }
}) })
n.quesAnswer = quesAnswer n.quesAnswer = quesAnswer
}
} }
}
if (!n.userScore) n.userScore = 0 if (!n.userScore) n.userScore = 0
// //
let rightLen = 0 let rightLen = 0
if (n.userAnswerFill) rightLen = n.userAnswerFill.filter(m => m.correct).length // if (n.userAnswerFill) rightLen = n.userAnswerFill.filter(m => m.correct).length //
n.isCorrect = n.userScore && n.questionScore === n.userScore ? 1 : (rightLen ? 3 : 2) n.isCorrect = n.userScore && n.questionScore === n.userScore ? 1 : (rightLen ? 3 : 2)
} else if (type === 'essay') { // } else if (type === 'essay') { //
n.isCorrect = 4 // if (!n.userScore) n.userScore = ''
} n.isCorrect = 4 //
}) }
})
paper.push(e)
}
}) })
this.paper = outline this.paper = paper
this.loading = false this.loading = false
} catch (e) { } catch (e) {
this.loading = false this.loading = false
} }
}, },
//
async getRecords () {
this.page = Math.ceil(this.curIndex / 10) || 1
const { page } = await this.$post(this.api.myReviewTaskByReviewList, {
pageNum: this.page,
pageSize: 10,
competitionId: this.competitionId,
stageId: this.stageId,
})
const list = page.records
this.records = list
this.recordTotal = page.total
},
scrollToSmooth (position, duration) { scrollToSmooth (position, duration) {
let startTime = Date.now() let startTime = Date.now()
@ -367,6 +406,7 @@ export default {
// //
reviewClick (item) { reviewClick (item) {
this.curReview = item.id this.curReview = item.id
this.getData()
}, },
// //
filterStatus (e) { filterStatus (e) {
@ -390,16 +430,28 @@ export default {
Util.downloadFile(name, url) Util.downloadFile(name, url)
}, },
// //
saveScore (ques) { async saveScore (ques) {
await this.$post(this.api.reviewPaper, [{
}, assignmentDetailId: ques.assignmentDetailId,
// score: ques.userScore,
showComment (ques) { }])
Util.successMsg('保存成功')
}, },
// //
saveComment (ques) { async saveComment (ques) {
await this.$post(this.api.setComments, {
assignmentDetailId: ques.assignmentDetailId,
comments: ques.comments,
})
Util.successMsg('保存成功')
},
//
async delComment (ques) {
await this.$post(this.api.reviewPaper, {
assignmentDetailId: ques.assignmentDetailId,
score: ques.userScore,
})
Util.successMsg('删除成功')
}, },
// //
@ -417,29 +469,31 @@ export default {
}, },
// //
async next () { async next () {
this.exporting = true const i = this.curIndex + 1
const res = await axios.get(`${this.api.exportExamPaperReport}?reportId=${this.reportId}`, { const newPage = Math.ceil(i / 10) || 1
headers: { // debugger
token: this.token if (newPage > this.page) {
}, await this.getRecords()
responseType: 'blob' }
}) if (this.records[i % 10 - 1]) {
const name = res.headers['content-disposition'] let reportId = this.records[i % 10 - 1].reportId
Util.downloadFileDirect(name ? decodeURI(name) : '标准成绩报告.docx', new Blob([res.data])) this.$router.push(`/theoryReview?id=${reportId}&u=${this.showUserInfo}&c=${this.competitionId}&s=${this.stageId}&i=${i}`)
this.exporting = false }
}, },
// //
async saveAll () { async saveAll () {
this.exporting = true const { paper } = this
const res = await axios.get(`${this.api.exportExamPaperReport}?reportId=${this.reportId}`, { const params = []
headers: { paper.forEach(e => {
token: this.token e.userAnswerList.forEach(n => {
}, n.userScore !== '' && params.push({
responseType: 'blob' assignmentDetailId: n.assignmentDetailId,
score: n.userScore,
})
})
}) })
const name = res.headers['content-disposition'] await this.$post(this.api.reviewPaper, params)
Util.downloadFileDirect(name ? decodeURI(name) : '标准成绩报告.docx', new Blob([res.data])) Util.successMsg('保存成功')
this.exporting = false
}, },
close () { close () {
window.close() window.close()
@ -527,10 +581,14 @@ export default {
background-color: $main-color; background-color: $main-color;
} }
} }
&+.type-wrap {
height: calc(100vh - 185px);
}
} }
.type-wrap { .type-wrap {
height: calc(100vh - 185px); height: calc(100vh - 137px);
padding: 10px 0; padding: 10px 0;
overflow: auto; overflow: auto;

@ -1,6 +1,5 @@
import Setting from '@/setting' import Setting from '@/setting'
import util from '@/libs/util' import util from '@/libs/util'
import addRoutes from '@/libs/route/addRoutes'
/** /**
* 用户信息 * 用户信息

Loading…
Cancel
Save