|
@@ -932,7 +932,9 @@ export default class extends Page {
|
|
|
|
|
|
renderExerciseDetail() {
|
|
|
const { report = {} } = this.state;
|
|
|
- const { detail = {} } = report;
|
|
|
+ let { detail = {} } = report;
|
|
|
+ detail = detail || {};
|
|
|
+ const { pace = [], info = {}, difficult = [], place = [], limit = {} } = detail;
|
|
|
return <div>
|
|
|
<div className="body">
|
|
|
<div className="content">
|
|
@@ -940,23 +942,23 @@ export default class extends Page {
|
|
|
<div className="detail">
|
|
|
<div className="block">
|
|
|
<div className="t1">总耗时</div>
|
|
|
- <div className="t2">{formatMinute(detail.info.userTime, true)}</div>
|
|
|
+ <div className="t2">{formatMinute(info.userTime, true)}</div>
|
|
|
<div className="t3">min</div>
|
|
|
</div>
|
|
|
- {detail.info.userTime > detail.info.time && <div className="block">
|
|
|
+ {info.userTime > info.time && <div className="block">
|
|
|
<div className="t1">超出建议用时</div>
|
|
|
- <div className="t2">{formatMinute(detail.info.userTime - detail.info.time, true)}</div>
|
|
|
+ <div className="t2">{formatMinute(info.userTime - info.time, true)}</div>
|
|
|
<div className="t3">min</div>
|
|
|
</div>}
|
|
|
<div className="line" />
|
|
|
<div className="block">
|
|
|
<div className="t1">完成题目</div>
|
|
|
- <div className="t2">{detail.info.userNumber}</div>
|
|
|
+ <div className="t2">{info.userNumber}</div>
|
|
|
<div className="t3">题</div>
|
|
|
</div>
|
|
|
- {detail.info.userNumber !== detail.info.questionNumber && <div className="block">
|
|
|
+ {info.userNumber !== info.questionNumber && <div className="block">
|
|
|
<div className="t1">剩余未做</div>
|
|
|
- <div className="t2">{detail.info.questionNumber - detail.info.userNumber}</div>
|
|
|
+ <div className="t2">{info.questionNumber - info.userNumber}</div>
|
|
|
<div className="t3">题</div>
|
|
|
</div>}
|
|
|
</div>
|
|
@@ -967,10 +969,10 @@ export default class extends Page {
|
|
|
<div className="title">基本情况</div>
|
|
|
<div className="block-wrapper">
|
|
|
<div className="block">
|
|
|
- <PieChart option={pieOption1('正确率', detail.info.userCorrect, detail.info.userNumber, detail.info.totalCorrect, detail.info.totalNumber)} />
|
|
|
+ <PieChart option={pieOption1('正确率', info.userCorrect, info.userNumber, info.totalCorrect, info.totalNumber)} />
|
|
|
</div>
|
|
|
<div className="block">
|
|
|
- <BarChart option={barOption1('用时', detail.info.userTime / detail.info.userNumber, detail.info.totalTime / detail.info.totalNumber, detail.info.correctTime, detail.info.incorrectTime)} />
|
|
|
+ <BarChart option={barOption1('用时', info.userTime / info.userNumber, info.totalTime / info.totalNumber, info.correctTime, info.incorrectTime)} />
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -981,18 +983,18 @@ export default class extends Page {
|
|
|
<div className="detail-1">
|
|
|
<div className="block">
|
|
|
<div className="t1">平均用时</div>
|
|
|
- <div dangerouslySetInnerHTML={{ __html: formatSeconds(detail.info.userTime / detail.info.userNumber).replace(/([0-9]+)(m|min|h|hour|s)/g, '<div class="s">$1</div><div class="t3">$2</div>') }} />
|
|
|
+ <div dangerouslySetInnerHTML={{ __html: formatSeconds(info.userTime / info.userNumber).replace(/([0-9]+)(m|min|h|hour|s)/g, '<div class="s">$1</div><div class="t3">$2</div>') }} />
|
|
|
</div>
|
|
|
<div className="block all">
|
|
|
<div className="t1">全站用户</div>
|
|
|
- <div dangerouslySetInnerHTML={{ __html: formatSeconds(detail.info.totalTime / detail.info.totalNumber).replace(/([0-9]+)(m|min|h|hour|s)/g, '<div class="s">$1</div><div class="t3">$2</div>') }} />
|
|
|
+ <div dangerouslySetInnerHTML={{ __html: formatSeconds(info.totalTime / info.totalNumber).replace(/([0-9]+)(m|min|h|hour|s)/g, '<div class="s">$1</div><div class="t3">$2</div>') }} />
|
|
|
</div>
|
|
|
</div>
|
|
|
<LineChart
|
|
|
height={400}
|
|
|
option={lineOption1(
|
|
|
'每题用时情况',
|
|
|
- detail.pace.map(row => {
|
|
|
+ pace.map(row => {
|
|
|
return [`${row.no}`, row.userTime, row.time];
|
|
|
}),
|
|
|
['我的', '全站'],
|
|
@@ -1007,19 +1009,19 @@ export default class extends Page {
|
|
|
<div className="detail-1">
|
|
|
<div className="block">
|
|
|
<div className="t1">正确率</div>
|
|
|
- <div className="t2">{formatPercent(detail.info.userCorrect, detail.info.userNumber, false)}</div>
|
|
|
+ <div className="t2">{formatPercent(info.userCorrect, info.userNumber, false)}</div>
|
|
|
</div>
|
|
|
<div className="block all">
|
|
|
<div className="t1">全站用户</div>
|
|
|
<div className="t2">90</div>
|
|
|
- <div className="t3">{formatPercent(detail.info.totalCorrect, detail.info.totalNumber, false)}</div>
|
|
|
+ <div className="t3">{formatPercent(info.totalCorrect, info.totalNumber, false)}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<BarChart
|
|
|
height={400}
|
|
|
option={BarOption2(
|
|
|
'正确率',
|
|
|
- detail.difficult.map(row => {
|
|
|
+ difficult.map(row => {
|
|
|
return [QuestionDifficultMap[row.key], formatPercent(row.userCorrect, row.userNumber), formatPercent(row.totalCorrect, row.totalNumber)];
|
|
|
}),
|
|
|
['我的', '全站'],
|
|
@@ -1034,24 +1036,24 @@ export default class extends Page {
|
|
|
<div className="detail-1">
|
|
|
<div className="block">
|
|
|
<div className="t1">平均用时</div>
|
|
|
- <div dangerouslySetInnerHTML={{ __html: formatSeconds(detail.info.userTime / detail.info.userNumber).replace(/([0-9]+)(m|min|h|hour|s)/g, '<div class="s">$1</div><div class="t3">$2</div>') }} />
|
|
|
+ <div dangerouslySetInnerHTML={{ __html: formatSeconds(info.userTime / info.userNumber).replace(/([0-9]+)(m|min|h|hour|s)/g, '<div class="s">$1</div><div class="t3">$2</div>') }} />
|
|
|
</div>
|
|
|
<div className="block all">
|
|
|
<div className="t1">正确率</div>
|
|
|
- <div className="t2">{formatPercent(detail.info.userCorrect, detail.info.userNumber, false)}</div>
|
|
|
+ <div className="t2">{formatPercent(info.userCorrect, info.userNumber, false)}</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<BarChart
|
|
|
height={400}
|
|
|
option={BarOption3(
|
|
|
['知识点', '正确率分析', '用时分析'],
|
|
|
- detail.place.map(row => {
|
|
|
+ place.map(row => {
|
|
|
return row.key;
|
|
|
}),
|
|
|
- detail.place.map(row => {
|
|
|
+ place.map(row => {
|
|
|
return formatPercent(row.userCorrect, row.userNumber);
|
|
|
}),
|
|
|
- detail.place.map(row => {
|
|
|
+ place.map(row => {
|
|
|
return row.userTime / row.userNumber;
|
|
|
}),
|
|
|
['#7AA7DC', '#BFD4EE'],
|
|
@@ -1063,12 +1065,12 @@ export default class extends Page {
|
|
|
<div className="body gray">
|
|
|
<div className="content">
|
|
|
<div className="title">实战提醒</div>
|
|
|
- {detail.info.userTime > detail.info.time && <div className="tip">
|
|
|
+ {info.userTime > info.time && <div className="tip">
|
|
|
<div className="t1">在实战限时情况下,本套题正确率为 </div>
|
|
|
- <div className="t2">{formatPercent(detail.limit.userCorrect, detail.limit.userNumber)}</div>
|
|
|
+ <div className="t2">{formatPercent(limit.userCorrect, limit.userNumber)}</div>
|
|
|
<Tooltip message="仅统计在建议时间内完成题目正确率情况,更接近实战表现"><Icon type="question-circle" theme="filled" /></Tooltip>
|
|
|
</div>}
|
|
|
- {detail.info.userTime <= detail.info.time && <div className="tip">
|
|
|
+ {info.userTime <= info.time && <div className="tip">
|
|
|
<div className="t1">目前的做题速度已达到实战标准!很棒!请继续保持!</div>
|
|
|
</div>}
|
|
|
</div>
|
|
@@ -1090,7 +1092,8 @@ export default class extends Page {
|
|
|
renderExaminationDetail() {
|
|
|
const { report = {}, tab } = this.state;
|
|
|
const { detail = {} } = report;
|
|
|
- const subjectDetail = tab === 'main' ? null : (detail.subject || {})[tab] || { info: {}, defficlt: [], place: [], pace: [] };
|
|
|
+ const { subject = {} } = detail;
|
|
|
+ const subjectDetail = tab === 'main' ? null : (subject || {})[tab] || { info: {}, defficlt: [], place: [], pace: [] };
|
|
|
return <div>
|
|
|
<div className="body">
|
|
|
<div className="content">
|
|
@@ -1121,30 +1124,30 @@ export default class extends Page {
|
|
|
<div className="block">
|
|
|
<div className="t1">总耗时</div>
|
|
|
<div className="t1">
|
|
|
- <div className="t2">{formatMinute((detail.subject.verbal || {}).userTime, true)}</div>
|
|
|
+ <div className="t2">{formatMinute((subject.verbal || {}).userTime, true)}</div>
|
|
|
<div className="t3">min</div>
|
|
|
</div>
|
|
|
<div className="t1">
|
|
|
- <div className="t2">{formatMinute((detail.subject.quant || {}).userTime, true)}</div>
|
|
|
+ <div className="t2">{formatMinute((subject.quant || {}).userTime, true)}</div>
|
|
|
<div className="t3">min</div>
|
|
|
</div>
|
|
|
<div className="t1">
|
|
|
- <div className="t2">{formatMinute((detail.subject.ir || {}).userTime, true)}</div>
|
|
|
+ <div className="t2">{formatMinute((subject.ir || {}).userTime, true)}</div>
|
|
|
<div className="t3">min</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div className="block">
|
|
|
<div className="t1">超出建议用时</div>
|
|
|
<div className="t1">
|
|
|
- <div className="t2">{formatMinute((detail.subject.verbal || {}).userTime - (detail.subject.verbal || {}).time, true)}</div>
|
|
|
+ <div className="t2">{formatMinute((subject.verbal || {}).userTime - (subject.verbal || {}).time, true)}</div>
|
|
|
<div className="t3">min</div>
|
|
|
</div>
|
|
|
<div className="t1">
|
|
|
- <div className="t2">{formatMinute((detail.subject.quant || {}).userTime - (detail.subject.quant || {}).time, true)}</div>
|
|
|
+ <div className="t2">{formatMinute((subject.quant || {}).userTime - (subject.quant || {}).time, true)}</div>
|
|
|
<div className="t3">min</div>
|
|
|
</div>
|
|
|
<div className="t1">
|
|
|
- <div className="t2">{formatMinute((detail.subject.ir || {}).userTime - (detail.subject.ir || {}).time, true)}</div>
|
|
|
+ <div className="t2">{formatMinute((subject.ir || {}).userTime - (subject.ir || {}).time, true)}</div>
|
|
|
<div className="t3">min</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -1163,30 +1166,30 @@ export default class extends Page {
|
|
|
<div className="block">
|
|
|
<div className="t1">完成题目</div>
|
|
|
<div className="t1">
|
|
|
- <div className="t2">{(detail.subject.verbal || {}).userNumber}</div>
|
|
|
+ <div className="t2">{(subject.verbal || {}).userNumber}</div>
|
|
|
<div className="t3">题</div>
|
|
|
</div>
|
|
|
<div className="t1">
|
|
|
- <div className="t2">{(detail.subject.quant || {}).userNumber}</div>
|
|
|
+ <div className="t2">{(subject.quant || {}).userNumber}</div>
|
|
|
<div className="t3">题</div>
|
|
|
</div>
|
|
|
<div className="t1">
|
|
|
- <div className="t2">{(detail.subject.ir || {}).userNumber}</div>
|
|
|
+ <div className="t2">{(subject.ir || {}).userNumber}</div>
|
|
|
<div className="t3">题</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div className="block">
|
|
|
<div className="t1">剩余未做</div>
|
|
|
<div className="t1">
|
|
|
- <div className="t2">{(detail.subject.verbal || {}).questionNumber - (detail.subject.verbal || {}).userNumber}</div>
|
|
|
+ <div className="t2">{(subject.verbal || {}).questionNumber - (subject.verbal || {}).userNumber}</div>
|
|
|
<div className="t3">题</div>
|
|
|
</div>
|
|
|
<div className="t1">
|
|
|
- <div className="t2">{(detail.subject.quant || {}).questionNumber - (detail.subject.quant || {}).userNumber}</div>
|
|
|
+ <div className="t2">{(subject.quant || {}).questionNumber - (subject.quant || {}).userNumber}</div>
|
|
|
<div className="t3">题</div>
|
|
|
</div>
|
|
|
<div className="t1">
|
|
|
- <div className="t2">{(detail.subject.ir || {}).questionNumber - (detail.subject.ir || {}).userNumber}</div>
|
|
|
+ <div className="t2">{(subject.ir || {}).questionNumber - (subject.ir || {}).userNumber}</div>
|
|
|
<div className="t3">题</div>
|
|
|
</div>
|
|
|
</div>
|