|
@@ -38,7 +38,6 @@
|
|
{{$t('task.markMode1')}}
|
|
{{$t('task.markMode1')}}
|
|
</span>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
- <!-- 按题批阅 -->
|
|
|
|
<vuescroll class="mark-info-content">
|
|
<vuescroll class="mark-info-content">
|
|
<!-- 数据概览 -->
|
|
<!-- 数据概览 -->
|
|
<!-- <div class="setting-block" v-show="curBarIndex == 0">
|
|
<!-- <div class="setting-block" v-show="curBarIndex == 0">
|
|
@@ -88,6 +87,7 @@
|
|
{{`${$t('task.mLabel2')} ( ${marked.length} )`}}
|
|
{{`${$t('task.mLabel2')} ( ${marked.length} )`}}
|
|
</span>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
|
|
+ <!-- 已阅、未阅、进行中学生 -->
|
|
<div class="setting-block stu-name-wrap" v-show="curBarIndex == 1">
|
|
<div class="setting-block stu-name-wrap" v-show="curBarIndex == 1">
|
|
<div class="setting-content stu-name-content">
|
|
<div class="setting-content stu-name-content">
|
|
<div class="stu-wrap">
|
|
<div class="stu-wrap">
|
|
@@ -96,13 +96,13 @@
|
|
还剩
|
|
还剩
|
|
<span class="no-mark-count">{{unmarked}}</span>
|
|
<span class="no-mark-count">{{unmarked}}</span>
|
|
人未阅,
|
|
人未阅,
|
|
- <span class="continue-mark" @click="toMarkView(1)">继续阅卷</span>
|
|
|
|
|
|
+ <span class="continue-mark" @click="toByStuView()">继续阅卷</span>
|
|
</p>
|
|
</p>
|
|
<p class="no-mark-text" v-else-if="unmarked > 0">
|
|
<p class="no-mark-text" v-else-if="unmarked > 0">
|
|
阅卷总量
|
|
阅卷总量
|
|
<span class="no-mark-count">{{unmarked}}</span>
|
|
<span class="no-mark-count">{{unmarked}}</span>
|
|
人,
|
|
人,
|
|
- <span class="continue-mark" @click="toMarkView(1)">开始阅卷</span>
|
|
|
|
|
|
+ <span class="continue-mark" @click="toByStuView()">开始阅卷</span>
|
|
</p>
|
|
</p>
|
|
<p class="no-mark-text" v-else>
|
|
<p class="no-mark-text" v-else>
|
|
暂无未阅学生
|
|
暂无未阅学生
|
|
@@ -110,10 +110,10 @@
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<div class="stu-list-wrap" v-show="tabIndex == 1">
|
|
<div class="stu-list-wrap" v-show="tabIndex == 1">
|
|
- <span class="stu-name" v-for="(item,index) in marking" :key="index" @click="toMarkView(1,item.stuId)">{{item.stuId}}</span>
|
|
|
|
|
|
+ <span class="stu-name" v-for="(item,index) in marking" :key="index" @click="toByStuView(item.stuId)">{{item.stuId}}</span>
|
|
</div>
|
|
</div>
|
|
<div class="stu-list-wrap" v-show="tabIndex == 2">
|
|
<div class="stu-list-wrap" v-show="tabIndex == 2">
|
|
- <span class="stu-name" v-for="(item,index) in marked" :key="index" @click="toMarkView(1,item.stuId)">{{item.stuId}}</span>
|
|
|
|
|
|
+ <span class="stu-name" v-for="(item,index) in marked" :key="index" @click="toByStuView(item.stuId)">{{item.stuId}}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -126,68 +126,56 @@
|
|
</p>
|
|
</p>
|
|
<div class="setting-content" :style="{height: fullQuProg ? 'fit-content' : '300px'}">
|
|
<div class="setting-content" :style="{height: fullQuProg ? 'fit-content' : '300px'}">
|
|
<vuescroll>
|
|
<vuescroll>
|
|
- <div class="qu-info-item" v-for="(item,index) in quCount" :key="index">
|
|
|
|
- <span class="qu-index" :style="{color:index < 3 ? '#606060' : '#fff'}">
|
|
|
|
- {{index + 1}}
|
|
|
|
- </span>
|
|
|
|
- <div class="data-wrap" style="display:none">
|
|
|
|
- <p>
|
|
|
|
- <!-- 标准差 -->
|
|
|
|
- <span class="data-item">
|
|
|
|
- <Icon custom="iconfont icon-formula" class="data-item-icon" size="16" title="标准差" />
|
|
|
|
- <span class="data-item-value" title="我的">
|
|
|
|
- 5
|
|
|
|
- </span>
|
|
|
|
- <span class="total-value" title="集体">
|
|
|
|
- (8)
|
|
|
|
- </span>
|
|
|
|
|
|
+ <div v-for="(item,index) in fullPaper.item" :key="index">
|
|
|
|
+ <!-- 综合题 -->
|
|
|
|
+ <div v-if="item.children.length">
|
|
|
|
+ <div class="qu-info-item" v-for="(childItem,childIndex) in item.children" :key="childIndex">
|
|
|
|
+ <span class="qu-index" :style="{color:index < 3 ? '#606060' : '#fff'}">
|
|
|
|
+ {{`${index + 1}-${childIndex + 1}`}}
|
|
</span>
|
|
</span>
|
|
- <!-- 平均分 -->
|
|
|
|
- <span class="data-item">
|
|
|
|
- <Icon custom="iconfont icon-avg" class="data-item-icon" size="16" title="平均分" />
|
|
|
|
- <span class="data-item-value" title="我的">
|
|
|
|
- 5
|
|
|
|
- </span>
|
|
|
|
- <span class="total-value" title="集体">
|
|
|
|
- (5.5)
|
|
|
|
- </span>
|
|
|
|
- </span>
|
|
|
|
- <!-- 最高分 -->
|
|
|
|
- <span class="data-item">
|
|
|
|
- <Icon custom="iconfont icon-highest" class="data-item-icon" size="16" title="最高分" />
|
|
|
|
- <span class="data-item-value" title="我的">
|
|
|
|
- 10
|
|
|
|
- </span>
|
|
|
|
- <span class="total-value" title="集体">
|
|
|
|
- (9)
|
|
|
|
- </span>
|
|
|
|
- </span>
|
|
|
|
- <!-- 最低分 -->
|
|
|
|
- <span class="data-item">
|
|
|
|
- <Icon custom="iconfont icon-lowest" class="data-item-icon" size="16" title="最低分" />
|
|
|
|
- <span class="data-item-value" title="我的">
|
|
|
|
- 0
|
|
|
|
- </span>
|
|
|
|
- <span class="total-value" title="集体">
|
|
|
|
- (1)
|
|
|
|
- </span>
|
|
|
|
- </span>
|
|
|
|
- </p>
|
|
|
|
- </div>
|
|
|
|
- <div class="progress-wrap">
|
|
|
|
- <Progress :percent="index < 3 ? 100 : 25" />
|
|
|
|
- <p v-if="index < 3" class="prog-tips" style="color: #19be6b">
|
|
|
|
- 客观题已由系统自动完成评分。
|
|
|
|
- </p>
|
|
|
|
- <p v-else class="prog-tips">
|
|
|
|
- <span>{{$t('task.mLabel2')}}:4</span>
|
|
|
|
- <span>{{$t('task.mLabel3')}}:8</span>
|
|
|
|
- </p>
|
|
|
|
|
|
+ <div class="progress-wrap">
|
|
|
|
+ <Progress :percent="['single','multiple','judge'].includes(childItem.type) ? 100 : byQuPct[getScoreIndex(index,childIndex)]" />
|
|
|
|
+ <!-- <Progress :percent="byQuPct[getScoreIndex(index,childIndex)]" /> -->
|
|
|
|
+ <p v-if="['single','multiple','judge'].includes(childItem.type)" class="prog-tips" style="color: #19be6b">
|
|
|
|
+ 客观题已由系统自动完成评分。
|
|
|
|
+ </p>
|
|
|
|
+ <p v-else class="prog-tips">
|
|
|
|
+ <span style="margin-right:10px">
|
|
|
|
+ {{$t('task.mLabel2')}}:{{byQuCount[getScoreIndex(index,childIndex)]}}
|
|
|
|
+ </span>
|
|
|
|
+ <span>
|
|
|
|
+ {{$t('task.mLabel3')}}:{{markList[curTaskIndex].count - byQuCount[getScoreIndex(index,childIndex)]}}
|
|
|
|
+ </span>
|
|
|
|
+ </p>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="to-mark">
|
|
|
|
+ <Button type="primary" shape="circle" :disabled="['single','multiple','judge'].includes(childItem.type)" size="small" style="width:120px" @click="toByQuView(index, childIndex)">
|
|
|
|
+ {{$t('task.mark')}}
|
|
|
|
+ </Button>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- <div class="to-mark">
|
|
|
|
- <Button type="primary" shape="circle" :disabled="index < 3" size="small" style="width:120px" @click="toMarkView(0)">
|
|
|
|
- {{$t('task.mark')}}
|
|
|
|
- </Button>
|
|
|
|
|
|
+ <!-- 其他题 -->
|
|
|
|
+ <div v-else class="qu-info-item">
|
|
|
|
+ <span class="qu-index" :style="{color:index < 3 ? '#606060' : '#fff'}">
|
|
|
|
+ {{index + 1}}
|
|
|
|
+ </span>
|
|
|
|
+ <div class="progress-wrap">
|
|
|
|
+ <Progress :percent="['single','multiple','judge'].includes(item.type) ? 100 : byQuPct[getScoreIndex(index)]" />
|
|
|
|
+ <!-- <Progress :percent="byQuPct[getScoreIndex(index)]" /> -->
|
|
|
|
+ <p v-if="['single','multiple','judge'].includes(item.type)" class="prog-tips" style="color: #19be6b">
|
|
|
|
+ 客观题已由系统自动完成评分。
|
|
|
|
+ </p>
|
|
|
|
+ <p v-else class="prog-tips">
|
|
|
|
+ <span>{{$t('task.mLabel2')}}:4</span>
|
|
|
|
+ <span>{{$t('task.mLabel3')}}:8</span>
|
|
|
|
+ </p>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="to-mark">
|
|
|
|
+ <Button type="primary" shape="circle" :disabled="['single','multiple','judge'].includes(item.type)" size="small" style="width:120px" @click="toByQuView(index, -1)">
|
|
|
|
+ {{$t('task.mark')}}
|
|
|
|
+ </Button>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</vuescroll>
|
|
</vuescroll>
|
|
@@ -263,11 +251,6 @@ export default {
|
|
quNo: 5,
|
|
quNo: 5,
|
|
desc: '模糊,看不清楚',
|
|
desc: '模糊,看不清楚',
|
|
status: '未处理'
|
|
status: '未处理'
|
|
- }, {
|
|
|
|
- id: '001',
|
|
|
|
- quNo: 5,
|
|
|
|
- desc: '模糊,看不清楚',
|
|
|
|
- status: '未处理'
|
|
|
|
}
|
|
}
|
|
],
|
|
],
|
|
columns2: [
|
|
columns2: [
|
|
@@ -303,13 +286,6 @@ export default {
|
|
}
|
|
}
|
|
],
|
|
],
|
|
data2: [
|
|
data2: [
|
|
- {
|
|
|
|
- id: '001',
|
|
|
|
- quNo: 5,
|
|
|
|
- myScore: 5,
|
|
|
|
- otScore: 10,
|
|
|
|
- status: '未处理'
|
|
|
|
- },
|
|
|
|
{
|
|
{
|
|
id: '001',
|
|
id: '001',
|
|
quNo: 5,
|
|
quNo: 5,
|
|
@@ -323,12 +299,29 @@ export default {
|
|
curBarIndex: 1,
|
|
curBarIndex: 1,
|
|
markList: [],
|
|
markList: [],
|
|
curTaskIndex: 0,
|
|
curTaskIndex: 0,
|
|
- quCount: [],
|
|
|
|
fullQuProg: false,
|
|
fullQuProg: false,
|
|
- markData: undefined
|
|
|
|
|
|
+ markData: undefined,
|
|
|
|
+ fullPaper: {
|
|
|
|
+ item: []
|
|
|
|
+ }
|
|
}
|
|
}
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
|
|
+ /**
|
|
|
|
+ * index 题目index 必传
|
|
|
|
+ * childIndex 小题index 非必传
|
|
|
|
+ */
|
|
|
|
+ getScoreIndex(index, childIndex) {
|
|
|
|
+ let realIndex = index
|
|
|
|
+ this.fullPaper.item.forEach((item, itemIndex) => {
|
|
|
|
+ if (itemIndex < index && item.children.length) {
|
|
|
|
+ realIndex += item.children.length
|
|
|
|
+ } else if (itemIndex == index && item.children.length) {
|
|
|
|
+ realIndex += childIndex
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ return realIndex
|
|
|
|
+ },
|
|
rowClassName(row, index) {
|
|
rowClassName(row, index) {
|
|
if (index % 2 == 0) {
|
|
if (index % 2 == 0) {
|
|
return 'stripe-row'
|
|
return 'stripe-row'
|
|
@@ -337,43 +330,61 @@ export default {
|
|
}
|
|
}
|
|
},
|
|
},
|
|
/**
|
|
/**
|
|
- * mode 0:按题 1:按人
|
|
|
|
- * stuId 学生id
|
|
|
|
|
|
+ * 按人阅卷
|
|
*/
|
|
*/
|
|
- async toMarkView(mode, stuId) {
|
|
|
|
|
|
+ async toByStuView(stuId) {
|
|
sessionStorage.setItem('markFrom', this.$route.name)
|
|
sessionStorage.setItem('markFrom', this.$route.name)
|
|
let sas = this.$store.state.user.schoolProfile.blob_sas //目前只有校本评测安排阅卷任务
|
|
let sas = this.$store.state.user.schoolProfile.blob_sas //目前只有校本评测安排阅卷任务
|
|
let blobUrl = JSON.parse(decodeURIComponent(localStorage.school_profile, "utf-8")).blob_uri //目前只有校本评测安排阅卷任务
|
|
let blobUrl = JSON.parse(decodeURIComponent(localStorage.school_profile, "utf-8")).blob_uri //目前只有校本评测安排阅卷任务
|
|
let stuInfo = this.markData.attr.find(item => {
|
|
let stuInfo = this.markData.attr.find(item => {
|
|
return item.stuId == stuId
|
|
return item.stuId == stuId
|
|
})
|
|
})
|
|
- let answer, fullPaper, score
|
|
|
|
|
|
+ let answer, score
|
|
if (stuInfo) {
|
|
if (stuInfo) {
|
|
answer = await this.$tools.getFile(`${blobUrl}/exam/${stuInfo.info.ans}?${sas}`)
|
|
answer = await this.$tools.getFile(`${blobUrl}/exam/${stuInfo.info.ans}?${sas}`)
|
|
- answer = answer ? JSON.parse(answer) : []
|
|
|
|
|
|
+ answer = answer ? JSON.parse(answer) : []
|
|
score = stuInfo.info.score
|
|
score = stuInfo.info.score
|
|
- fullPaper = await this.$evTools.getFullPaper({
|
|
|
|
- blob: this.markData.paper
|
|
|
|
- }, 'school')
|
|
|
|
-
|
|
|
|
- console.log(answer)
|
|
|
|
}
|
|
}
|
|
-
|
|
|
|
// this.getNextStu(stuId)
|
|
// this.getNextStu(stuId)
|
|
-
|
|
|
|
this.$router.push({
|
|
this.$router.push({
|
|
name: 'ByStu',
|
|
name: 'ByStu',
|
|
params: {
|
|
params: {
|
|
- type: mode,
|
|
|
|
from: this.$route.name,
|
|
from: this.$route.name,
|
|
- task:this.markList[this.curTaskIndex],
|
|
|
|
- stuId:stuInfo.stuId,
|
|
|
|
|
|
+ task: this.markList[this.curTaskIndex],
|
|
|
|
+ stuId: stuInfo.stuId,
|
|
|
|
+ fullPaper: this.fullPaper,
|
|
answer,
|
|
answer,
|
|
- fullPaper,
|
|
|
|
score
|
|
score
|
|
}
|
|
}
|
|
})
|
|
})
|
|
},
|
|
},
|
|
|
|
+ /**
|
|
|
|
+ * 按题阅卷
|
|
|
|
+ *
|
|
|
|
+ * quIndex 必传
|
|
|
|
+ * childIndex 非必传
|
|
|
|
+ */
|
|
|
|
+ async toByQuView(quIndex, childIndex) {
|
|
|
|
+ sessionStorage.setItem('markFrom', this.$route.name)
|
|
|
|
+ let sas = this.$store.state.user.schoolProfile.blob_sas //目前只有校本评测安排阅卷任务
|
|
|
|
+ let blobUrl = JSON.parse(decodeURIComponent(localStorage.school_profile, "utf-8")).blob_uri //目前只有校本评测安排阅卷任务
|
|
|
|
+ // 获取学生作答数据
|
|
|
|
+ this.markData.attr.forEach(async item => {
|
|
|
|
+ item.info.answer = item.info.ans ? await this.$tools.getFile(`${blobUrl}/exam/${item.info.ans}?${sas}`) : []
|
|
|
|
+ })
|
|
|
|
+ console.log(this.markData)
|
|
|
|
+ this.$router.push({
|
|
|
|
+ name: 'ByQu',
|
|
|
|
+ params: {
|
|
|
|
+ from: this.$route.name,
|
|
|
|
+ task: this.markList[this.curTaskIndex], //阅卷任务数据
|
|
|
|
+ stusInfo: this.markData.attr, //已阅和进行中的学生数据
|
|
|
|
+ paperData: this.fullPaper, //试卷数据
|
|
|
|
+ quIndex,
|
|
|
|
+ childIndex
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ },
|
|
/**
|
|
/**
|
|
* 批阅下个学生
|
|
* 批阅下个学生
|
|
* @param stuId 如果传了stuid则会获取对应学生的数据,否则随机获取一个学生
|
|
* @param stuId 如果传了stuid则会获取对应学生的数据,否则随机获取一个学生
|
|
@@ -383,6 +394,7 @@ export default {
|
|
code: this.markList[this.curTaskIndex].ecode.replace('Exam-', ''),
|
|
code: this.markList[this.curTaskIndex].ecode.replace('Exam-', ''),
|
|
id: this.markList[this.curTaskIndex].id,
|
|
id: this.markList[this.curTaskIndex].id,
|
|
subjectId: this.markList[this.curTaskIndex].subject,
|
|
subjectId: this.markList[this.curTaskIndex].subject,
|
|
|
|
+ count: this.markList[this.curTaskIndex].count,
|
|
tmdId: this.$store.state.userInfo.TEAMModelId,
|
|
tmdId: this.$store.state.userInfo.TEAMModelId,
|
|
stuId: 'hbcn070201'
|
|
stuId: 'hbcn070201'
|
|
}
|
|
}
|
|
@@ -394,7 +406,6 @@ export default {
|
|
console.log(err)
|
|
console.log(err)
|
|
}
|
|
}
|
|
)
|
|
)
|
|
-
|
|
|
|
},
|
|
},
|
|
/**获取type对应的label */
|
|
/**获取type对应的label */
|
|
getTypeLabel(code) {
|
|
getTypeLabel(code) {
|
|
@@ -444,17 +455,21 @@ export default {
|
|
tmdId: this.$store.state.userInfo.TEAMModelId
|
|
tmdId: this.$store.state.userInfo.TEAMModelId
|
|
}
|
|
}
|
|
this.$api.mark.FindTeaData(requestData).then(
|
|
this.$api.mark.FindTeaData(requestData).then(
|
|
- res => {
|
|
|
|
- console.log(res)
|
|
|
|
|
|
+ async res => {
|
|
if (!res.error) {
|
|
if (!res.error) {
|
|
this.markData = res
|
|
this.markData = res
|
|
|
|
+ //获取试卷详细数据
|
|
|
|
+ //获取试卷完整信息
|
|
|
|
+ this.fullPaper = await this.$evTools.getFullPaper({
|
|
|
|
+ blob: this.markData.paper
|
|
|
|
+ }, 'school')
|
|
|
|
+ console.log('试卷数据', this.fullPaper)
|
|
}
|
|
}
|
|
},
|
|
},
|
|
err => {
|
|
err => {
|
|
console.log(err)
|
|
console.log(err)
|
|
}
|
|
}
|
|
)
|
|
)
|
|
-
|
|
|
|
},
|
|
},
|
|
selectTask(index) {
|
|
selectTask(index) {
|
|
this.curTaskIndex = index
|
|
this.curTaskIndex = index
|
|
@@ -464,7 +479,6 @@ export default {
|
|
},
|
|
},
|
|
created() {
|
|
created() {
|
|
this.findTask()
|
|
this.findTask()
|
|
- this.quCount = Array.from(new Array(13).keys())
|
|
|
|
this.curBarIndex = sessionStorage.getItem('markMode') || 0
|
|
this.curBarIndex = sessionStorage.getItem('markMode') || 0
|
|
|
|
|
|
},
|
|
},
|
|
@@ -499,7 +513,43 @@ export default {
|
|
return []
|
|
return []
|
|
}
|
|
}
|
|
},
|
|
},
|
|
|
|
+ //试卷题目数量,包括小题
|
|
|
|
+ quLength() {
|
|
|
|
+ if (this.fullPaper && this.fullPaper.item) {
|
|
|
|
+ let count = 0
|
|
|
|
+ this.fullPaper.item.forEach(item => {
|
|
|
|
+ if (item.children.length) {
|
|
|
|
+ count += item.children.length
|
|
|
|
+ } else {
|
|
|
|
+ count++
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ return count
|
|
|
|
+ }
|
|
|
|
+ return 0
|
|
|
|
+ },
|
|
|
|
+ //题目进度百分比
|
|
|
|
+ byQuPct() {
|
|
|
|
+ let total = this.markList[this.curTaskIndex] ? this.markList[this.curTaskIndex].count : 1
|
|
|
|
+ return this.byQuCount.map(item => {
|
|
|
|
+ return item * 100 / total
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ //题目进度count
|
|
|
|
+ byQuCount() {
|
|
|
|
+ let res = new Array(this.quLength).fill(0)
|
|
|
|
+ if (this.markData && this.markData.attr) {
|
|
|
|
+ for (let i = 0; i < this.quLength; i++) {
|
|
|
|
+ this.markData.attr.forEach(item => {
|
|
|
|
+ if (item.info.score[i] > -1) {
|
|
|
|
+ res[i]++
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ }
|
|
|
|
+ return res
|
|
|
|
+ },
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
</script>
|