|
@@ -270,7 +270,7 @@
|
|
|
<div class="page_table analysis_table_wrap">
|
|
<div class="page_table analysis_table_wrap">
|
|
|
<el-table
|
|
<el-table
|
|
|
:data="questionPage"
|
|
:data="questionPage"
|
|
|
- height="575"
|
|
|
|
|
|
|
+ max-height="575"
|
|
|
stripe
|
|
stripe
|
|
|
class="el-table--border analysis_table">
|
|
class="el-table--border analysis_table">
|
|
|
<el-table-column prop="name" label="小题名称" min-width="120" show-overflow-tooltip />
|
|
<el-table-column prop="name" label="小题名称" min-width="120" show-overflow-tooltip />
|
|
@@ -344,7 +344,7 @@
|
|
|
<div class="page_table analysis_table_wrap">
|
|
<div class="page_table analysis_table_wrap">
|
|
|
<el-table
|
|
<el-table
|
|
|
:data="knowledgePage"
|
|
:data="knowledgePage"
|
|
|
- height="575"
|
|
|
|
|
|
|
+ max-height="575"
|
|
|
stripe
|
|
stripe
|
|
|
class="el-table--border analysis_table">
|
|
class="el-table--border analysis_table">
|
|
|
<el-table-column prop="name" label="知识点" min-width="200" show-overflow-tooltip />
|
|
<el-table-column prop="name" label="知识点" min-width="200" show-overflow-tooltip />
|
|
@@ -369,20 +369,23 @@
|
|
|
</section>
|
|
</section>
|
|
|
|
|
|
|
|
<!-- 学情总结(接口暂无该数据时隐藏) -->
|
|
<!-- 学情总结(接口暂无该数据时隐藏) -->
|
|
|
- <section class="card" ref="summary" v-if="hasSummary">
|
|
|
|
|
|
|
+ <section class="card summary_card" ref="summary" v-if="hasSummary">
|
|
|
<div class="card_title">学情总结</div>
|
|
<div class="card_title">学情总结</div>
|
|
|
<div class="summary_block">
|
|
<div class="summary_block">
|
|
|
- <span class="summary_label strength">优势</span>
|
|
|
|
|
- <span class="summary_text">{{ summary.strength }}</span>
|
|
|
|
|
|
|
+ <span class="summary_label strength">优势:</span>
|
|
|
|
|
+ <span class="summary_text">本次作业整体得分率 <strong class="rate_num" :class="summary.rateLevel">{{ summary.rateText }}%</strong>,{{ summary.strength }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="summary_block">
|
|
<div class="summary_block">
|
|
|
- <span class="summary_label weak">薄弱点</span>
|
|
|
|
|
|
|
+ <span class="summary_label weak">薄弱点:</span>
|
|
|
<span class="summary_text">{{ summary.weakness }}</span>
|
|
<span class="summary_text">{{ summary.weakness }}</span>
|
|
|
</div>
|
|
</div>
|
|
|
- <div class="summary_block advice_block">
|
|
|
|
|
- <span class="summary_label advice">学习建议</span>
|
|
|
|
|
- <div class="summary_text">
|
|
|
|
|
- <div v-for="(item, idx) in summary.advice" :key="idx">{{ idx + 1 }}. {{ item }}</div>
|
|
|
|
|
|
|
+ <div class="summary_block">
|
|
|
|
|
+ <span class="summary_label advice">学习建议:</span>
|
|
|
|
|
+ <div class="summary_advice">
|
|
|
|
|
+ <div class="advice_item" v-for="(item, idx) in summary.advice" :key="idx">
|
|
|
|
|
+ <span class="advice_no">{{ idx + 1 }}.</span>
|
|
|
|
|
+ <span>{{ item }}</span>
|
|
|
|
|
+ </div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</section>
|
|
</section>
|
|
@@ -403,6 +406,64 @@ function toNumber(val, fallback = 0) {
|
|
|
return Number.isFinite(n) ? n : fallback;
|
|
return Number.isFinite(n) ? n : fallback;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+// 学情总结按得分率分档,文案中的百分比使用接口实际值
|
|
|
|
|
+function formatRateText(rate) {
|
|
|
|
|
+ const text = String(Math.round(rate * 100) / 100);
|
|
|
|
|
+ return text.replace(/\.0+$/, '');
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function buildLearningSummary(rate) {
|
|
|
|
|
+ const value = formatRateText(rate);
|
|
|
|
|
+ let strength = '';
|
|
|
|
|
+ let weakness = '';
|
|
|
|
|
+ let advice = [];
|
|
|
|
|
+ if (rate >= 100) {
|
|
|
|
|
+ strength = '获得满分!全部题目作答准确,知识点掌握扎实,审题和计算都没有失误,学习效果非常出色。';
|
|
|
|
|
+ weakness = '本次作业无失分,知识掌握全面。可以尝试挑战综合性更强的拓展题目。';
|
|
|
|
|
+ advice = [
|
|
|
|
|
+ '保持认真细致的答题习惯;',
|
|
|
|
|
+ '自主练习综合性拓展题型,进一步提升知识迁移能力。',
|
|
|
|
|
+ ];
|
|
|
|
|
+ } else if (rate >= 85) {
|
|
|
|
|
+ strength = '完成质量优秀。基础题目掌握扎实,大部分题型都能准确作答,展现出不错的学习效果。';
|
|
|
|
|
+ weakness = '少量题目存在失误,多为审题或计算粗心导致,不存在大面积知识漏洞。';
|
|
|
|
|
+ advice = [
|
|
|
|
|
+ '复盘本次错题,养成答题后检查的习惯;',
|
|
|
|
|
+ '可适当练习拓展题型,进一步提升综合解题能力。',
|
|
|
|
|
+ ];
|
|
|
|
|
+ } else if (rate >= 70) {
|
|
|
|
|
+ strength = '整体掌握情况良好。基础题型基本可以独立完成,核心知识有一定理解。';
|
|
|
|
|
+ weakness = '部分中档题目把握不足,答题过程偶尔会出现疏漏,个别知识点掌握不够稳固。';
|
|
|
|
|
+ advice = [
|
|
|
|
|
+ '对错题进行整理,弄清错误原因;',
|
|
|
|
|
+ '针对失分题型加强练习,巩固知识细节。',
|
|
|
|
|
+ ];
|
|
|
|
|
+ } else if (rate >= 60) {
|
|
|
|
|
+ strength = '达到基本要求,简单基础题能够完成。';
|
|
|
|
|
+ weakness = '知识掌握不够稳定,中档题容易出错,部分概念理解模糊,答题时思路不够清晰。';
|
|
|
|
|
+ advice = [
|
|
|
|
|
+ '回归课本巩固基础概念;',
|
|
|
|
|
+ '优先练习基础题型,弄懂每一道错题。',
|
|
|
|
|
+ ];
|
|
|
|
|
+ } else if (rate > 0) {
|
|
|
|
|
+ strength = '仅少数最简单题目能够答对。';
|
|
|
|
|
+ weakness = '基础知识点掌握不足,很多题目无法找到解题思路,知识漏洞较多。';
|
|
|
|
|
+ advice = [
|
|
|
|
|
+ '重新复习本节课基础知识;',
|
|
|
|
|
+ '从最简单习题开始练习,不懂及时请教老师。',
|
|
|
|
|
+ ];
|
|
|
|
|
+ } else {
|
|
|
|
|
+ strength = '暂时没有拿到分数。';
|
|
|
|
|
+ weakness = '本节课基础内容基本没有掌握,全部题目作答错误,存在较大知识漏洞。';
|
|
|
|
|
+ advice = [
|
|
|
|
|
+ '重新观看课堂学习内容,通读课本基础知识点;',
|
|
|
|
|
+ '从最简单例题入手,逐个理解,遇到不懂及时请教老师;',
|
|
|
|
|
+ '完成基础预习与巩固后,重新练习本次作业。',
|
|
|
|
|
+ ];
|
|
|
|
|
+ }
|
|
|
|
|
+ return { rateText: value, rateLevel: rate >= 100 ? 'high' : (rate >= 60 ? 'mid' : 'low'), strength, weakness, advice };
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
const OPTION_KEYS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
const OPTION_KEYS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
|
|
|
|
|
|
// 题型:1-单选题 2-多选题 3-对错题(判断题)
|
|
// 题型:1-单选题 2-多选题 3-对错题(判断题)
|
|
@@ -586,7 +647,7 @@ export default {
|
|
|
// 两个表格前端分页,固定每页 10 条
|
|
// 两个表格前端分页,固定每页 10 条
|
|
|
questionPageSize: 10,
|
|
questionPageSize: 10,
|
|
|
knowledgePageSize: 10,
|
|
knowledgePageSize: 10,
|
|
|
- // 接口未返回学情总结,无数据时隐藏该区块
|
|
|
|
|
|
|
+ // 按得分率 rateScore 生成学情总结;字段缺失时不展示
|
|
|
summary: null,
|
|
summary: null,
|
|
|
};
|
|
};
|
|
|
},
|
|
},
|
|
@@ -744,6 +805,7 @@ export default {
|
|
|
this.selectedIndex = 0;
|
|
this.selectedIndex = 0;
|
|
|
this.questionPageNum = 1;
|
|
this.questionPageNum = 1;
|
|
|
this.knowledgePageNum = 1;
|
|
this.knowledgePageNum = 1;
|
|
|
|
|
+ this.summary = null;
|
|
|
},
|
|
},
|
|
|
applyAnalysis(res) {
|
|
applyAnalysis(res) {
|
|
|
const data = (res && res.data) || {};
|
|
const data = (res && res.data) || {};
|
|
@@ -762,6 +824,10 @@ export default {
|
|
|
this.selectedIndex = 0;
|
|
this.selectedIndex = 0;
|
|
|
this.questionPageNum = 1;
|
|
this.questionPageNum = 1;
|
|
|
this.knowledgePageNum = 1;
|
|
this.knowledgePageNum = 1;
|
|
|
|
|
+ const rateScore = data.rateScore;
|
|
|
|
|
+ this.summary = rateScore === null || rateScore === undefined || rateScore === ''
|
|
|
|
|
+ ? null
|
|
|
|
|
+ : buildLearningSummary(toNumber(rateScore));
|
|
|
},
|
|
},
|
|
|
scrollTo(key) {
|
|
scrollTo(key) {
|
|
|
const el = this.$refs[key];
|
|
const el = this.$refs[key];
|
|
@@ -1056,7 +1122,7 @@ export default {
|
|
|
|
|
|
|
|
.task_title {
|
|
.task_title {
|
|
|
font-size: 16px;
|
|
font-size: 16px;
|
|
|
- font-weight: 550;
|
|
|
|
|
|
|
+ font-weight: 600;
|
|
|
color: #333;
|
|
color: #333;
|
|
|
overflow: hidden;
|
|
overflow: hidden;
|
|
|
text-overflow: ellipsis;
|
|
text-overflow: ellipsis;
|
|
@@ -1116,7 +1182,7 @@ export default {
|
|
|
|
|
|
|
|
.card_title {
|
|
.card_title {
|
|
|
font-size: 16px;
|
|
font-size: 16px;
|
|
|
- font-weight: 550;
|
|
|
|
|
|
|
+ font-weight: 600;
|
|
|
color: #333;
|
|
color: #333;
|
|
|
line-height: 24px;
|
|
line-height: 24px;
|
|
|
}
|
|
}
|
|
@@ -1173,7 +1239,7 @@ export default {
|
|
|
.metric_value {
|
|
.metric_value {
|
|
|
flex-shrink: 0;
|
|
flex-shrink: 0;
|
|
|
font-size: 24px;
|
|
font-size: 24px;
|
|
|
- font-weight: 550;
|
|
|
|
|
|
|
+ font-weight: 600;
|
|
|
color: #333;
|
|
color: #333;
|
|
|
line-height: 28px;
|
|
line-height: 28px;
|
|
|
}
|
|
}
|
|
@@ -1267,7 +1333,7 @@ export default {
|
|
|
|
|
|
|
|
.detail_title {
|
|
.detail_title {
|
|
|
font-size: 16px;
|
|
font-size: 16px;
|
|
|
- font-weight: 550;
|
|
|
|
|
|
|
+ font-weight: 600;
|
|
|
color: #333;
|
|
color: #333;
|
|
|
line-height: 24px;
|
|
line-height: 24px;
|
|
|
}
|
|
}
|
|
@@ -1299,7 +1365,7 @@ export default {
|
|
|
|
|
|
|
|
.knowledge_label {
|
|
.knowledge_label {
|
|
|
font-size: 14px;
|
|
font-size: 14px;
|
|
|
- font-weight: 550;
|
|
|
|
|
|
|
+ font-weight: 600;
|
|
|
color: #333;
|
|
color: #333;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1332,7 +1398,7 @@ export default {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.stem_text {
|
|
.stem_text {
|
|
|
- font-weight: 550;
|
|
|
|
|
|
|
+ font-weight: 600;
|
|
|
font-size: 16px;
|
|
font-size: 16px;
|
|
|
line-height: 1.8;
|
|
line-height: 1.8;
|
|
|
color: #333333;
|
|
color: #333333;
|
|
@@ -1374,7 +1440,7 @@ export default {
|
|
|
font-size: 14px;
|
|
font-size: 14px;
|
|
|
line-height: 1.8;
|
|
line-height: 1.8;
|
|
|
color: #333;
|
|
color: #333;
|
|
|
- font-weight: 550;
|
|
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
|
|
|
:deep(img) {
|
|
:deep(img) {
|
|
|
max-width: 100%;
|
|
max-width: 100%;
|
|
@@ -1692,14 +1758,14 @@ export default {
|
|
|
.line_label {
|
|
.line_label {
|
|
|
flex-shrink: 0;
|
|
flex-shrink: 0;
|
|
|
color: #333;
|
|
color: #333;
|
|
|
- font-weight: 550;
|
|
|
|
|
|
|
+ font-weight: 600;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.answer_value {
|
|
.answer_value {
|
|
|
flex: 1;
|
|
flex: 1;
|
|
|
min-width: 0;
|
|
min-width: 0;
|
|
|
color: #2E64FA;
|
|
color: #2E64FA;
|
|
|
- font-weight: 550;
|
|
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
|
|
|
:deep(p) {
|
|
:deep(p) {
|
|
|
margin: 0;
|
|
margin: 0;
|
|
@@ -1735,7 +1801,7 @@ export default {
|
|
|
|
|
|
|
|
.sub_analysis_title {
|
|
.sub_analysis_title {
|
|
|
font-size: 14px;
|
|
font-size: 14px;
|
|
|
- font-weight: 550;
|
|
|
|
|
|
|
+ font-weight: 600;
|
|
|
color: #333;
|
|
color: #333;
|
|
|
line-height: 1.8;
|
|
line-height: 1.8;
|
|
|
margin-bottom: 6px;
|
|
margin-bottom: 6px;
|
|
@@ -1769,22 +1835,50 @@ export default {
|
|
|
|
|
|
|
|
/* 分页器使用全局 .page_pagination 公共样式 */
|
|
/* 分页器使用全局 .page_pagination 公共样式 */
|
|
|
|
|
|
|
|
|
|
+ .summary_card {
|
|
|
|
|
+ .card_title {
|
|
|
|
|
+ margin-bottom: 4px;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
.summary_block {
|
|
.summary_block {
|
|
|
display: flex;
|
|
display: flex;
|
|
|
align-items: flex-start;
|
|
align-items: flex-start;
|
|
|
- gap: 8px;
|
|
|
|
|
- margin-top: 14px;
|
|
|
|
|
|
|
+ margin-top: 10px;
|
|
|
font-size: 14px;
|
|
font-size: 14px;
|
|
|
- line-height: 1.7;
|
|
|
|
|
- color: #333;
|
|
|
|
|
|
|
+ line-height: 22px;
|
|
|
|
|
|
|
|
.summary_label {
|
|
.summary_label {
|
|
|
flex-shrink: 0;
|
|
flex-shrink: 0;
|
|
|
- font-weight: 550;
|
|
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
|
|
|
- &.strength { color: #67C23A; }
|
|
|
|
|
|
|
+ &.strength { color: #3BA272; }
|
|
|
&.weak { color: #F56C6C; }
|
|
&.weak { color: #F56C6C; }
|
|
|
- &.advice { color: #409EFF; }
|
|
|
|
|
|
|
+ &.advice { color: #2E64FA; }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .summary_text,
|
|
|
|
|
+ .summary_advice {
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ min-width: 0;
|
|
|
|
|
+ color: #999;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .rate_num {
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+
|
|
|
|
|
+ &.high { color: #3BA272; }
|
|
|
|
|
+ &.mid { color: #2E64FA; }
|
|
|
|
|
+ &.low { color: #F56C6C; }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .advice_item {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: flex-start;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ .advice_no {
|
|
|
|
|
+ flex-shrink: 0;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|