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 @@
-
-

- - {{ - `${paperModifyLog.modifiedTime} ${paperModifyLog.realName}` - }}修改了答案,是否重新记分? -

-
- 重新计分 - 暂时不计 -
-
-
-
-
- {{ item }} -
- 设置低分值 -
- -
-
- 导出报表 - 打印 -
-
- 导入主观题分数 - -
-
- - - - - - - - - - - - - - - - - {{ lowRange.type != 0 ? "%" : "分" }}(含) - {{ 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 @@ - - - - - \ 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 @@ - \ No newline at end of file diff --git a/src/views/basic/test/list.vue b/src/views/basic/test/list.vue new file mode 100644 index 0000000..0e9654a --- /dev/null +++ b/src/views/basic/test/list.vue @@ -0,0 +1,348 @@ + + + + + + \ No newline at end of file