diff --git a/src/components/charts/lineChart.vue b/src/components/charts/lineChart.vue
index fa23aef..551b985 100644
--- a/src/components/charts/lineChart.vue
+++ b/src/components/charts/lineChart.vue
@@ -9,6 +9,7 @@ export default {
id: String,
params: Array,
xAxis: Array,
+ colors: Array
},
watch: {
params: {
@@ -25,7 +26,7 @@ export default {
chart: null,
};
},
- created() {},
+ created() { },
mounted() {
this.initData();
},
@@ -33,7 +34,7 @@ export default {
setOption() {
const that = this;
const options = {
- color: this.colors || ["#4472c4", "#ed7d32", "#a5a5a5"],
+ color: this.colors || ["#9772ff", "#79cd91", "#72b8ff"],
backgroundColor: "#fff",
tooltip: {
trigger: "item",
@@ -41,8 +42,10 @@ export default {
},
legend: {
show: true,
- bottom: 0,
- itemHeight: 2,
+ top: 0,
+ right: 20,
+ itemHeight: 15,
+ icon: "circle"
},
xAxis: {
type: "category",
@@ -52,7 +55,7 @@ export default {
show: false,
},
axisLabel: {
- color: "#666",
+ color: "#333",
},
},
yAxis: {
@@ -63,13 +66,16 @@ export default {
},
axisLabel: {
color: "#666",
+ formatter: function (name) {
+ return name + "%"
+ },
},
},
grid: {
- top:28,
- left: "10%",
- right: "10%",
- bottom: 30,
+ top: 36,
+ left: 20,
+ right: 20,
+ bottom: 20,
containLabel: true,
},
series: that.params.map((item) => {
@@ -77,9 +83,9 @@ export default {
name: item.name,
type: "line",
symbol: "circle",
- symbolSize: "8",
+ symbolSize: "6",
lineStyle: {
- width: 3,
+ width: 1,
},
data: item.value,
};
diff --git a/src/components/charts/radarChart.vue b/src/components/charts/radarChart.vue
index 188169d..334e07c 100644
--- a/src/components/charts/radarChart.vue
+++ b/src/components/charts/radarChart.vue
@@ -24,45 +24,62 @@ export default {
chart: null,
};
},
- created() {},
+ created() { },
mounted() {
this.initData();
},
methods: {
setOption() {
+ let that = this
const option = {
- color: this.colors || ["#4472c4", "#ed7d32", "#a5a5a5"],
+ color: that.colors || ["#4472c4", "#ed7d32", "#a5a5a5"],
backgroundColor: "#fff",
tooltip: {
trigger: "item",
confine: true,
+ formatter: function (param) {
+ let marker = param.marker
+ let oHtml = `
${marker}${param.name}
`
+ param.value.map((item, index) => {
+ oHtml += `${that.params.indicator[index].name}:${item}
`
+ })
+ return oHtml
+ }
},
legend: {
- show:true,
- bottom:0,
- itemHeight:2
+ show: true,
+ top: 0,
+ right: 20,
+ itemHeight: 15,
+ icon: "circle"
},
+
radar: {
- indicator: [...this.params.indicator],
+ indicator: [...that.params.indicator],
splitNumber: 5,
- center:['50%', '48%'],
- radius:"70%",
+ center: ['50%', '48%'],
+ radius: "80%",
shape: "polygon",
- nameGap:10,
- axisLine:{
- show:false
+ nameGap: 6,
+ axisLine: {
+ show: false
},
- splitLine:{
+ splitLine: {
lineStyle: {
width: 0.5,
- color:'#e2e2e2'
+ color: '#e2e2e2'
},
},
- splitArea:{
- areaStyle:{
- color:['rgba(250,250,250,0)','rgba(200,200,200,0)']
+ splitArea: {
+ areaStyle: {
+ color: ['rgba(250,250,250,0)', 'rgba(200,200,200,0)']
}
- }
+ },
+ // axisLabel: {
+ // show: false,
+ // hideOverlap: true,
+ // formatter: '{value}%'
+ // },
},
series: [
{
@@ -74,7 +91,7 @@ export default {
areaStyle: {
color: "transparent",
},
- data: this.params.num,
+ data: that.params.seriesData,
},
],
};
diff --git a/src/mock/index.js b/src/mock/index.js
index e57ade8..0dd0bf0 100644
--- a/src/mock/index.js
+++ b/src/mock/index.js
@@ -35,7 +35,7 @@ Mock.mock(
"answerOptions": "A,B,C,D",
"correctAnswer|1": ["A", "B", "C", "D"],
"screenshot": "./1.html",
- "knowledge":"数与式#有理数#正数和负数,数与式#有理数#有理数"
+ "knowledge": "数与式#有理数#正数和负数,数与式#有理数#有理数"
},
{
"questionType": 2,
@@ -45,7 +45,7 @@ Mock.mock(
"answerOptions": "A,B,C,D",
"correctAnswer|1": ["A", "B", "C", "D"],
"screenshot": "./1.html",
- "knowledge":"数与式#有理数#正数和负数"
+ "knowledge": "数与式#有理数#正数和负数"
},
{
"questionType": 2,
@@ -208,4 +208,503 @@ Mock.mock(
]
}
}
+)
+
+Mock.mock(
+ "/api_html/teaching/examReportList", {
+ info: "success",
+ status: 0,
+ data: {
+ "list|2": [
+ {
+ "id": "@id",
+ subjectName: '语文',
+ className: '2班',
+ classId: "3215",
+ "title": "@cTitle",
+ "score|80-100": 85,
+ "answeredNum|45-50": 48,
+ classPersonNum: 50,
+ "examStartTime": '@date',
+ answerNum: 0,
+ recordStatus: 2,
+ classList: [{
+ classId: "@id",
+ className: "@cname",
+ }, {
+ classId: "@id",
+ className: "@cname",
+ }]
+ },
+ {
+ "id": "@id",
+ subjectName: '数学',
+ className: '2班',
+ classId: "3215",
+ "title": "@cTitle",
+ "score|80-100": 85,
+ "answeredNum|45-50": 48,
+ classPersonNum: 50,
+ "examStartTime": '@date',
+ answerNum: 0,
+ recordStatus: 2,
+ classList: [{
+ classId: "@id",
+ className: "@cname",
+ }, {
+ classId: "@id",
+ className: "@cname",
+ }]
+ },
+ {
+ "id": "@id",
+ subjectName: '英语',
+ className: '2班',
+ classId: "3215",
+ "title": "@cTitle",
+ "score|80-100": 85,
+ "answeredNum|45-50": 48,
+ classPersonNum: 50,
+ "examStartTime": '@date',
+ answerNum: 0,
+ recordStatus: 2,
+ classList: [{
+ classId: "@id",
+ className: "@cname",
+ }, {
+ classId: "@id",
+ className: "@cname",
+ }]
+ }
+ ]
+ }
+}
+)
+Mock.mock(
+ "/api_html/teaching/phaseExamReport", {
+ info: "success",
+ status: 0,
+ data: {
+ "list|5": [
+ {
+ "studentId": "@id",
+ "studentName": '@cname',
+ "studentCode": '@id',
+ "shortNumber": "@id",
+ "title": "@cTitle",
+ "examList": [
+ {
+ "title": "结石分气在织织",
+ "score": 80,
+ "classRank|+1": 1,
+ "participationRate|+1": 80,
+ "correctRate|+1": 82,
+ "answerCorrectRate|+1": 85,
+ },
+ {
+ "title": "第业适声",
+ "score": 81,
+ "classRank|+1": 1,
+ "participationRate|+1": 81,
+ "correctRate|+1": 88,
+ "answerCorrectRate|+1": 90,
+ },
+ {
+ "title": "把住六",
+ "score": 82,
+ "classRank|+1": 1,
+ "participationRate|+1": 82,
+ "correctRate|+1": 91,
+ "answerCorrectRate|+1": 95,
+ },
+ {
+ "title": "取严酸百列县",
+ "score": 83,
+ "classRank|+1": 1,
+ "participationRate|+1": 85,
+ "correctRate|+1": 90,
+ "answerCorrectRate|+1": 93,
+ },
+ {
+ "title": "三原上光",
+ "score": 84,
+ "classRank|+1": 1,
+ "participationRate|+1": 83,
+ "correctRate|+1": 93,
+ "answerCorrectRate|+1": 96,
+ }
+ ]
+ }
+ ]
+ }
+}
+)
+Mock.mock(
+ "/api_html/teaching/examMultiClassReport", {
+ info: "success",
+ status: 0,
+ data: {
+ "classes": [],
+ "students": [],
+ }
+}
+)
+Mock.mock(
+ "/api_html/teaching/listStudentsAndQuestions", {
+ info: "success",
+ status: 0,
+ data: {
+ "students": [{
+ "studentId": "@id",
+ "studentName": "@cname",
+ "questionList": [
+ {
+ "examQuestionId|+1": 0,
+ "questionId|+1": 1,
+ "questionTitle": "@cname",
+ "questionType|1-4": 1,
+ "score|1-2": 1,
+ "subQuestions": [
+ {
+ id: 1,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 2,
+ "questionType": 2,
+ "score": 2,
+ },
+ {
+ id: 3,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 4,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 5,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 6,
+ "questionType": 3,
+ "score": 1,
+ },
+ ]
+ },
+ {
+ "examQuestionId|+1": 0,
+ "questionId|+1": 1,
+ "questionTitle": "@cname",
+ "questionType|1-4": 1,
+ "score|1-2": 1,
+ "subQuestions": [
+ {
+ id: 7,
+ "questionType": 2,
+ "score": 2,
+ },
+ {
+ id: 8,
+ "questionType": 2,
+ "score": 3,
+ },
+ {
+ id: 9,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 10,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 11,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 12,
+ "questionType": 3,
+ "score": 1,
+ },
+ {
+ id: 13,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 14,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 15,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 16,
+ "questionType": 2,
+ "score": 1,
+ }
+ ]
+ },
+ ]
+ }, {
+ "studentId": "@id",
+ "studentName": "@cname",
+ "questionList": [
+ {
+ "examQuestionId|+1": 0,
+ "questionId|+1": 1,
+ "questionTitle": "@cname",
+ "questionType|1-4": 1,
+ "score|1-2": 1,
+ "subQuestions": [
+ {
+ id: 1,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 2,
+ "questionType": 2,
+ "score": 2,
+ },
+ {
+ id: 3,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 4,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 5,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 6,
+ "questionType": 3,
+ "score": 1,
+ },
+ ]
+ },
+ {
+ "examQuestionId|+1": 0,
+ "questionId|+1": 1,
+ "questionTitle": "@cname",
+ "questionType|1-4": 1,
+ "score|1-2": 1,
+ "subQuestions": [
+ {
+ id: 7,
+ "questionType": 2,
+ "score": 2,
+ },
+ {
+ id: 8,
+ "questionType": 2,
+ "score": 3,
+ },
+ {
+ id: 9,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 10,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 11,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 12,
+ "questionType": 3,
+ "score": 1,
+ },
+ {
+ id: 13,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 14,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 15,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 16,
+ "questionType": 2,
+ "score": 1,
+ }
+ ]
+ },
+ ]
+ }, {
+ "studentId": "@id",
+ "studentName": "@cname",
+ "questionList": [
+ {
+ "examQuestionId|+1": 0,
+ "questionId|+1": 1,
+ "questionTitle": "@cname",
+ "questionType|1-4": 1,
+ "score|1-2": 1,
+ "subQuestions": [
+ {
+ id: 1,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 2,
+ "questionType": 2,
+ "score": 2,
+ },
+ {
+ id: 3,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 4,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 5,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 6,
+ "questionType": 3,
+ "score": 1,
+ },
+ ]
+ },
+ {
+ "examQuestionId|+1": 0,
+ "questionId|+1": 1,
+ "questionTitle": "@cname",
+ "questionType|1-4": 1,
+ "score|1-2": 1,
+ "subQuestions": [
+ {
+ id: 7,
+ "questionType": 2,
+ "score": 2,
+ },
+ {
+ id: 8,
+ "questionType": 2,
+ "score": 3,
+ },
+ {
+ id: 9,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 10,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 11,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 12,
+ "questionType": 3,
+ "score": 1,
+ },
+ {
+ id: 13,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 14,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 15,
+ "questionType": 2,
+ "score": 1,
+ },
+ {
+ id: 16,
+ "questionType": 2,
+ "score": 1,
+ }
+ ]
+ },
+ ]
+ }],
+ }
+}
+)
+Mock.mock(
+ "/api_html/class/manager/phaseExamReport", {
+ info: "success",
+ status: 0,
+ data: {
+ "list": [{
+ "studentId": "@id",
+ "studentName": "@cname",
+ "dataList": [
+ {
+ "subjectName": "数学",
+ "examCount": '5',
+ "participationCount": '5',
+ "classRank": '1',
+ "score": '100',
+ "participationRate":'88',
+ "correctRate":'90',
+ },
+ {
+ "subjectName": "英语",
+ "examCount": '5',
+ "participationCount": '5',
+ "classRank": '2',
+ "score": '100',
+ "participationRate":'70',
+ "correctRate":'76',
+ },
+ {
+ "subjectName": "语文",
+ "examCount": '5',
+ "participationCount": '5',
+ "classRank": '2',
+ "score": '100',
+ "participationRate":'99',
+ "correctRate":'100',
+ },
+ ]
+ }],
+ }
+}
)
\ No newline at end of file
diff --git a/src/router/index.js b/src/router/index.js
index 0d7ff47..51ed0fb 100755
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -22,6 +22,7 @@ const AskList = () => import("@/views/basic/ask/list")
const AskAnalysis = () => import("@/views/basic/ask/analysis")
const AskArchiving = () => import("@/views/basic/ask/archiving")
const Test = () => import("@/views/basic/test/index")
+const TestList = () => import("@/views/basic/test/list")
const TestAnalysis = () => import("@/views/basic/test/analysis")
const TestArchiving = () => import("@/views/basic/test/archiving")
const DataSync = () => import("@/views/basic/dataSync/index")
@@ -214,9 +215,6 @@ let addrouters = [
iconCls: "fa fa-bar-chart", // 图标样式class
name: "随堂问报表",
component: Ask,
- meta: {
- keepAlive: true,
- },
children: []
},
@@ -260,18 +258,23 @@ let addrouters = [
iconCls: "fa fa-pie-chart", // 图标样式class
name: "",
component: Test,
- meta: {
- keepAlive: true,
- },
children: []
},
{
- path: "/testAnalysis",
- iconCls: "", // 图标样式class
- name: "即时测报表分析",
- component: TestAnalysis,
- parent: "test",
- children: []
+ path: "/testList",
+ name: "",
+ component: TestList,
+
+ children: [
+ {
+ path: "/testAnalysis",
+ iconCls: "", // 图标样式class
+ name: "即时测报表分析",
+ component: TestAnalysis,
+ parent: "test",
+ children: []
+ },
+ ]
},
{
path: "/testArchiving",
diff --git a/src/views/basic/ask/index.vue b/src/views/basic/ask/index.vue
index 4824c0b..78c54dd 100644
--- a/src/views/basic/ask/index.vue
+++ b/src/views/basic/ask/index.vue
@@ -97,8 +97,8 @@ export default {
methods: {
handleCheckAllChange(val) {
+ this.isIndeterminate = false;
this.query.subjectNames = val ? this.subjectList : [];
- this.allSubject = false;
},
handleChecked(value) {
console.log(value)
diff --git a/src/views/basic/test/analysis.vue b/src/views/basic/test/analysis.vue
index 2a2021c..809db77 100644
--- a/src/views/basic/test/analysis.vue
+++ b/src/views/basic/test/analysis.vue
@@ -2,1013 +2,85 @@
- 单卷分析
+ {{ type == 1 ? '单卷测练报表' : type == 2 ? subject + "汇总报表" : type == 3 ? "多科汇总报表" :
+ `多班_${subjectName}_${title}_测练成绩对比分析` }}
-
-
-
- {{
- `${paperModifyLog.modifiedTime} ${paperModifyLog.realName}`
- }}修改了答案,是否重新记分?
-
-
- 重新计分
- 暂时不计
-
-
-
-
-
-
-
- {{
- setSubPro(scope.row.questionType)
- }}
-
-
-
-
- {{ scoped.row.classScoringRate }}%
- {{
- scoped.row.correctAnswer == 1
- ? "✓"
- : scoped.row.correctAnswer == 2
- ? "✗"
- : scoped.row.correctAnswer
- }}
-
-
- {{
- scope.row.questionType == "5"
- ? ""
- : scope.row["option" + index]
- ? `${scope.row["option" + index]}(${
- scope.row["persent" + index]
- })`
- : ""
- }}
-
-
-
-
-
-
-
- 题号 |
- 题型 |
- 满分值 |
- 班最高分 |
- 班最低分 |
- 班平均分 |
- 班级得分率 |
- 答案 |
- 选项1 |
- 选项2 |
- 选项3 |
- 选项4 |
- 未答 |
-
-
-
-
- {{ index + 1 }} |
- {{ setSubPro(tr.questionType) }} |
- {{ tr.sortable }} |
- {{ tr.highestScore }} |
- {{ tr.lowestScore }} |
- {{ tr.avgScore }} |
- {{ tr.classScoringRate }}% |
-
- {{
- tr.correctAnswer == 1
- ? "✓"
- : tr.correctAnswer == 2
- ? "✗"
- : tr.correctAnswer
- }}
- |
-
-
- {{
- tr.questionType == "5"
- ? ""
- : tr["option" + index]
- ? `${tr["option" + index]}(${tr["persent" + index]})`
- : ""
- }}
-
- |
-
-
-
-
-
汇总
-
- -
- 主观题
- {{ examReport.subjectiveScore }}
- {{
- examReport.subjectiveHighestScore
- }}
- {{
- examReport.subjectiveLowestScore
- }}
- {{
- examReport.subjectiveAvgScore
- }}
- {{ examReport.subjectiveClassScoringRate }}%
-
- -
- 客观题
- {{ examReport.objectiveScore }}
- {{
- examReport.objectiveHighestScore
- }}
- {{
- examReport.objectiveLowestScore
- }}
- {{ examReport.objectiveAvgScore }}
- {{ examReport.objectiveClassScoringRate }}%
-
- -
- 整卷
- {{ examReport.examPaperScore }}
- {{ examReport.highestScore }}
- {{ examReport.lowestScore }}
- {{ examReport.avgScore }}
- {{ examReport.classScoringRate }}%
-
-
-
-
-
-
-
-
- {{ scope.row.scoringRate }}%
-
-
-
- {{ scope.row.objectiveScoringRate }}%
-
-
-
- {{ scope.row.subjectiveScoringRate }}%
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- *
-
- {{ scope.row["answer" + item.id] }}
-
- -
-
-
-
-
-
-
- 导出报表
- 打印
-
-
- 导入主观题分数
-
- 查看题目
-
-
-
-
-
-
- 第一步:下载模板并编辑完成学生分数
- 模板下载 。
-
- 第二步:上传完成编辑的模板文件并导入。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 100 ? (lowRange.range[1] = 100) : ''"
- @keydown.native="keydownRange($event)"
- >{{ lowRange.type != 0 ? "%" : "分" }}(含)
- 100 ? (lowRange.range[1] = 100) : ''"
- @keydown.native="keydownRange($event)"
- >{{ lowRange.type != 0 ? "%" : "分" }}(含)
-
-
-
-
-
-
+
+
+
+
-
\ No newline at end of file
diff --git a/src/views/basic/test/components/test.vue b/src/views/basic/test/components/test.vue
index 756a349..8291d54 100644
--- a/src/views/basic/test/components/test.vue
+++ b/src/views/basic/test/components/test.vue
@@ -308,7 +308,11 @@ export default {
range: [],
},
//答题录分
- diaScoreSet: false
+ diaScoreSet: false,
+
+ exportType: 1,
+ exportStudent: [],
+ multipleSelection: [],
};
},
created() {
@@ -563,8 +567,29 @@ export default {
async exportData() {
if (this.exportLoading == true) return;
this.exportLoading = true;
- const data = await this.$request.exportExamReport({
+ let studentIds = []
+ if (length) {
+ studentIds = this.exportStudent.slice(0, 10).map(item => {
+ return item.studentId
+ })
+ } else {
+ studentIds = this.multipleSelection.map(item => {
+ return item.studentId
+ })
+ }
+ let query = {};
+ if (studentIds.length == this.exportStudent.length) {
+ query.studentIds = []
+ } else if (studentIds.length > 0) {
+ query.studentIds = studentIds
+ }
+ const exportExamReport = this.role == "ROLE_PERSONAL" ?
+ this.$request.pExportExamReport
+ : this.$request.exportExamReport;
+
+ const data = await exportExamReport({
examId: this.id,
+ ...query
});
this.exportLoading = false;
if (data) {
diff --git a/src/views/basic/test/contrast.vue b/src/views/basic/test/contrast.vue
deleted file mode 100644
index cfe1429..0000000
--- a/src/views/basic/test/contrast.vue
+++ /dev/null
@@ -1,596 +0,0 @@
-
-
-
-
- 多班_{{ subjectNames }}_{{ title }}_测练成绩对比分析
-
-
-
-
-
-
-
-
-
-
-
- {{ item }}{{ index == 0 ? "/" : "" }}
-
-
-
-
-
-
-
-
-
- {{ scoped.row.levels[index].people }}
- ({{ scoped.row.levels[index].percent }})
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 编号
- *等级名称
- *等级最高
- *等级最低
-
-
-
-
{{ index + 1 }}
-
-
-
-
-
- %
-
- ({{ index != 0 ? "不含" : ""
- }}{{
- Number(((item[1] / 100) * examPaperScore).toFixed(1))
- }}分)
-
- {{ index != 0 ? "不含" : "" }}
-
-
~
-
-
- %
-
- ({{
- Number(((item[2] / 100) * examPaperScore).toFixed(1))
- }}分)
-
-
-
- 删除
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/views/basic/test/index.vue b/src/views/basic/test/index.vue
index 658a85c..588b00a 100644
--- a/src/views/basic/test/index.vue
+++ b/src/views/basic/test/index.vue
@@ -1,547 +1,89 @@
-
-
-
- 即时测-数据报表
-
-
-
-
-
-
-
-