|
@@ -310,6 +310,18 @@
|
|
|
@ChangeCurrentPage="ChangeCurrentPage"
|
|
@ChangeCurrentPage="ChangeCurrentPage"
|
|
|
@ExportExcel="ExportExcel"
|
|
@ExportExcel="ExportExcel"
|
|
|
>
|
|
>
|
|
|
|
|
+ <template #title_right>
|
|
|
|
|
+ <SetTableHeader
|
|
|
|
|
+ :data="{
|
|
|
|
|
+ static: state.majorTableData.headerData,
|
|
|
|
|
+ dynamisc: state.majorTableData.changeHeaderData,
|
|
|
|
|
+ child: state.majorTableData.childHeaderData,
|
|
|
|
|
+ }"
|
|
|
|
|
+ :isShowDynamisc="false"
|
|
|
|
|
+ :notEditable="['questionName']"
|
|
|
|
|
+ @SetEnterHeaderData="SetEnterHeaderData"
|
|
|
|
|
+ ></SetTableHeader>
|
|
|
|
|
+ </template>
|
|
|
<template #module_table_chart>
|
|
<template #module_table_chart>
|
|
|
<el-table
|
|
<el-table
|
|
|
:data="state.majorTableData.tableData"
|
|
:data="state.majorTableData.tableData"
|
|
@@ -405,6 +417,28 @@
|
|
|
:pageTitle="state.paperTitle"
|
|
:pageTitle="state.paperTitle"
|
|
|
@updateModelValue="UpdateModelValue"
|
|
@updateModelValue="UpdateModelValue"
|
|
|
></StudentPaper>
|
|
></StudentPaper>
|
|
|
|
|
+ <StudentList
|
|
|
|
|
+ :showDialog.sync="state.dialogData.showDialog"
|
|
|
|
|
+ :title="state.dialogData.title"
|
|
|
|
|
+ :tableTitle="state.dialogData.tableTitle"
|
|
|
|
|
+ :apiName="state.dialogData.apiName"
|
|
|
|
|
+ :studentParam="{
|
|
|
|
|
+ fiveRateName: state.dialogData.fiveRateName, //当前选择的五率的名称
|
|
|
|
|
+ selectSubjectName: state.dialogData.selectSubjectName, //当前选择的科目名称
|
|
|
|
|
+ selectSchoolLevel: state.dialogData.selectSchoolLevel, //当前选择的学校级别:0-联考 1-学校分组 2-具体学校
|
|
|
|
|
+ selectSchoolName: state.dialogData.selectSchoolName, //当前选择的学校名称:联校 组合学校 单校名称
|
|
|
|
|
+ selectClassLevel: state.dialogData.selectClassLevel, //当前选择的班级级别:0-年级 1-组合班级 2-具体班级
|
|
|
|
|
+ selectClassName: state.dialogData.selectClassName, //当前选择的班级名称:年级 组合班级 单班
|
|
|
|
|
+ questionId: state.dialogData.questionId, //试题ID
|
|
|
|
|
+ isPaper: state.dialogData.isPaper, //是否为全卷0-非1-是全卷
|
|
|
|
|
+ quesScoreType: state.dialogData.quesScoreType, //选择的类型0-满分人数 1-0分人数 3-优秀率、良好率等
|
|
|
|
|
+ knowledgeId: state.dialogData.knowledgeId, //如果选择的是知识点,则需要返回知识点ID
|
|
|
|
|
+ questionGroupName: state.dialogData.questionGroupName, //试题分组的名称
|
|
|
|
|
+ groupTitle: state.dialogData.groupTitle,
|
|
|
|
|
+ }"
|
|
|
|
|
+ @CloseDialog="CloseDialog"
|
|
|
|
|
+ >
|
|
|
|
|
+ </StudentList>
|
|
|
</template>
|
|
</template>
|
|
|
<script lang="ts" setup>
|
|
<script lang="ts" setup>
|
|
|
import ReportModule from "@/components/ReportModule.vue";
|
|
import ReportModule from "@/components/ReportModule.vue";
|
|
@@ -415,7 +449,7 @@ import { useAnalysisStore } from "@/store/analysis";
|
|
|
import {
|
|
import {
|
|
|
questionAnalysis,
|
|
questionAnalysis,
|
|
|
queryAnswerListByAnswerAndScore,
|
|
queryAnswerListByAnswerAndScore,
|
|
|
- publicExport
|
|
|
|
|
|
|
+ publicExport,
|
|
|
} from "@/api/analysis";
|
|
} from "@/api/analysis";
|
|
|
import BarLineCharts from "@/components/echarts/barLineCharts.vue"; //柱状图折线图组合图组件
|
|
import BarLineCharts from "@/components/echarts/barLineCharts.vue"; //柱状图折线图组合图组件
|
|
|
import RadarCharts from "@/components/echarts/radarCharts.vue"; //雷达图
|
|
import RadarCharts from "@/components/echarts/radarCharts.vue"; //雷达图
|
|
@@ -424,9 +458,11 @@ import BarScoringRateVertical from "@/components/echarts/barScoringRate_vertical
|
|
|
import DifferenceChart from "@/components/echarts/differenceChart.vue"; //率差图
|
|
import DifferenceChart from "@/components/echarts/differenceChart.vue"; //率差图
|
|
|
import BarChart from "@/components/echarts/barChart_answer.vue"; //单柱状图
|
|
import BarChart from "@/components/echarts/barChart_answer.vue"; //单柱状图
|
|
|
import StudentQuestionImg from "@/components/StudentQuestionImg.vue"; // 学生小题答题卡组件
|
|
import StudentQuestionImg from "@/components/StudentQuestionImg.vue"; // 学生小题答题卡组件
|
|
|
|
|
+import SetTableHeader from "@/components/setTableHeader.vue"; //设置表头
|
|
|
|
|
+import StudentList from "@/components/StudentList.vue";
|
|
|
import { downloadExcel, GetExcelFileName } from "@/utils/exportExcel";
|
|
import { downloadExcel, GetExcelFileName } from "@/utils/exportExcel";
|
|
|
import { onMounted, reactive, watch, ref, computed, nextTick } from "vue";
|
|
import { onMounted, reactive, watch, ref, computed, nextTick } from "vue";
|
|
|
-import {loadingSvgIcon} from "@/utils/common";
|
|
|
|
|
|
|
+import { loadingSvgIcon } from "@/utils/common";
|
|
|
import { cloneDeep } from "lodash-es";
|
|
import { cloneDeep } from "lodash-es";
|
|
|
const analysisStore = useAnalysisStore();
|
|
const analysisStore = useAnalysisStore();
|
|
|
const reportModuleRef = ref<any>(null);
|
|
const reportModuleRef = ref<any>(null);
|
|
@@ -641,7 +677,6 @@ const state = reactive({
|
|
|
tableList: [],
|
|
tableList: [],
|
|
|
}, //题目分组历次分析学生数据表(分页)
|
|
}, //题目分组历次分析学生数据表(分页)
|
|
|
classNameList: [],
|
|
classNameList: [],
|
|
|
- showHeaderSet: false, //是否显示设置表头
|
|
|
|
|
showBenchTaskSelect: false, //历次考试弹框
|
|
showBenchTaskSelect: false, //历次考试弹框
|
|
|
exportLoading: false, // 题型导出loading
|
|
exportLoading: false, // 题型导出loading
|
|
|
exportErrorLoading: false, // 错题导出loading
|
|
exportErrorLoading: false, // 错题导出loading
|
|
@@ -665,7 +700,7 @@ const state = reactive({
|
|
|
},
|
|
},
|
|
|
knowledgeInputDialog: false,
|
|
knowledgeInputDialog: false,
|
|
|
dialogData: {
|
|
dialogData: {
|
|
|
- apiName: "",
|
|
|
|
|
|
|
+ apiName: "questionStudentInfo",
|
|
|
showDialog: false,
|
|
showDialog: false,
|
|
|
title: "",
|
|
title: "",
|
|
|
tableTitle: "",
|
|
tableTitle: "",
|
|
@@ -1208,15 +1243,6 @@ const GetMajorTableData = () => {
|
|
|
//重置表格滚动条位置
|
|
//重置表格滚动条位置
|
|
|
ResetTableScroll(); //重置表格滚动条位置
|
|
ResetTableScroll(); //重置表格滚动条位置
|
|
|
};
|
|
};
|
|
|
-const GetPageMajorTableData = () => {
|
|
|
|
|
- const start =
|
|
|
|
|
- (state.majorTableData.currentPage - 1) * state.majorTableData.pageSize;
|
|
|
|
|
- const end = start + state.majorTableData.pageSize;
|
|
|
|
|
- state.majorTableData.tableData = state.majorTableData.allTableData.slice(
|
|
|
|
|
- start,
|
|
|
|
|
- end,
|
|
|
|
|
- );
|
|
|
|
|
-};
|
|
|
|
|
//重置表格滚动条位置
|
|
//重置表格滚动条位置
|
|
|
const ResetTableScroll = () => {
|
|
const ResetTableScroll = () => {
|
|
|
nextTick(() => {
|
|
nextTick(() => {
|
|
@@ -1231,6 +1257,98 @@ const ResetTableScroll = () => {
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
|
|
+// 分页获取分析表
|
|
|
|
|
+const GetPageMajorTableData = () => {
|
|
|
|
|
+ const start =
|
|
|
|
|
+ (state.majorTableData.currentPage - 1) * state.majorTableData.pageSize;
|
|
|
|
|
+ const end = start + state.majorTableData.pageSize;
|
|
|
|
|
+ state.majorTableData.tableData = state.majorTableData.allTableData.slice(
|
|
|
|
|
+ start,
|
|
|
|
|
+ end,
|
|
|
|
|
+ );
|
|
|
|
|
+};
|
|
|
|
|
+//设置表头字段显示隐藏
|
|
|
|
|
+const SetEnterHeaderData = (data) => {
|
|
|
|
|
+ if (data.static && data.static.length > 0) {
|
|
|
|
|
+ state.problemAnalysisData.headerList = [...data.static];
|
|
|
|
|
+ }
|
|
|
|
|
+ if (data.dynamisc && data.dynamisc.length > 0) {
|
|
|
|
|
+ state.problemAnalysisData.changeHeaderList = [...data.dynamisc];
|
|
|
|
|
+ }
|
|
|
|
|
+ if (data.child && data.child.length > 0) {
|
|
|
|
|
+ state.problemAnalysisData.childHeaderList = [...data.child];
|
|
|
|
|
+ }
|
|
|
|
|
+ GetMajorTableData();
|
|
|
|
|
+};
|
|
|
|
|
+// 人员弹框
|
|
|
|
|
+const OpenStudentDialog = (childHeader, parent, row) => {
|
|
|
|
|
+ if (
|
|
|
|
|
+ (childHeader.prop.indexOf("Count") > -1 ||
|
|
|
|
|
+ childHeader.prop.indexOf("Number") > -1) &&
|
|
|
|
|
+ row?.[`${parent.prop}_${childHeader.prop}`] > 0
|
|
|
|
|
+ ) {
|
|
|
|
|
+ state.dialogData.showDialog = true;
|
|
|
|
|
+ state.dialogData.title = childHeader.label;
|
|
|
|
|
+ state.dialogData.tableTitle = parent.label;
|
|
|
|
|
+ state.dialogData.fiveRateName = "";
|
|
|
|
|
+ if (
|
|
|
|
|
+ childHeader.prop == "topStudentNumber" ||
|
|
|
|
|
+ childHeader.prop == "excellentStudentNumber" ||
|
|
|
|
|
+ childHeader.prop == "goodStudentNumber" ||
|
|
|
|
|
+ childHeader.prop == "passStudentNumber" ||
|
|
|
|
|
+ childHeader.prop == "lowStudentNumber"
|
|
|
|
|
+ ) {
|
|
|
|
|
+ state.dialogData.fiveRateName = childHeader.label.replace(/人数/g, ""); //当前选择的五率的名称
|
|
|
|
|
+ }
|
|
|
|
|
+ state.dialogData.selectSubjectName = analysisStore.filterObject.subjectName; //当前选择的科目名称
|
|
|
|
|
+ if (parent.prop == "0") {
|
|
|
|
|
+ state.dialogData.selectSchoolLevel = 0; //当前选择的学校级别:0-联考 1-学校分组 2-具体学校
|
|
|
|
|
+ state.dialogData.selectSchoolName = parent.label; //当前选择的学校名称:联校 组合学校 单校名称
|
|
|
|
|
+ state.dialogData.selectClassLevel = 0; //当前选择的班级级别:0-年级 1-组合班级 2-具体班级
|
|
|
|
|
+ state.dialogData.selectClassName = "年级"; //当前选择的班级名称:年级 组合班级 单班
|
|
|
|
|
+ } else if (parent.prop.indexOf("school_group") > -1) {
|
|
|
|
|
+ state.dialogData.selectSchoolLevel = 1; //当前选择的学校级别:0-联考 1-学校分组 2-具体学校
|
|
|
|
|
+ state.dialogData.selectSchoolName = parent.label; //当前选择的学校名称:联校 组合学校 单校名称
|
|
|
|
|
+ state.dialogData.selectClassLevel = 0; //当前选择的班级级别:0-年级 1-组合班级 2-具体班级
|
|
|
|
|
+ state.dialogData.selectClassName = "年级"; //当前选择的班级名称:年级 组合班级 单班
|
|
|
|
|
+ } else if (
|
|
|
|
|
+ parent.prop.indexOf("school") > -1 &&
|
|
|
|
|
+ parent.prop.indexOf("school_group") == -1
|
|
|
|
|
+ ) {
|
|
|
|
|
+ state.dialogData.selectSchoolLevel = 2; //当前选择的学校级别:0-联考 1-学校分组 2-具体学校
|
|
|
|
|
+ state.dialogData.selectSchoolName = parent.label; //当前选择的学校名称:联校 组合学校 单校名称
|
|
|
|
|
+ state.dialogData.selectClassLevel = 0; //当前选择的班级级别:0-年级 1-组合班级 2-具体班级
|
|
|
|
|
+ state.dialogData.selectClassName = "年级"; //当前选择的班级名称:年级 组合班级 单班
|
|
|
|
|
+ } else if (parent.prop.indexOf("class_group") > -1) {
|
|
|
|
|
+ state.dialogData.selectSchoolLevel = 2; //当前选择的学校级别:0-联考 1-学校分组 2-具体学校
|
|
|
|
|
+ state.dialogData.selectSchoolName = analysisStore.filterObject.schoolName; //当前选择的学校名称:联校 组合学校 单校名称
|
|
|
|
|
+ state.dialogData.selectClassLevel = 1; //当前选择的班级级别:0-年级 1-组合班级 2-具体班级
|
|
|
|
|
+ state.dialogData.selectClassName = parent.label; //当前选择的班级名称:年级 组合班级 单班
|
|
|
|
|
+ } else {
|
|
|
|
|
+ state.dialogData.selectSchoolLevel = 2; //当前选择的学校级别:0-联考 1-学校分组 2-具体学校
|
|
|
|
|
+ state.dialogData.selectSchoolName = analysisStore.filterObject.schoolName; //当前选择的学校名称:联校 组合学校 单校名称
|
|
|
|
|
+ state.dialogData.selectClassLevel = 2; //当前选择的班级级别:0-年级 1-组合班级 2-具体班级
|
|
|
|
|
+ state.dialogData.selectClassName = parent.label; //当前选择的班级名称:年级 组合班级 单班
|
|
|
|
|
+ }
|
|
|
|
|
+ state.dialogData.questionId = row.questionId; //试题ID
|
|
|
|
|
+ state.dialogData.isPaper = row.questionName == "全卷" ? 1 : 0; //是否为全卷0-非1-是全卷
|
|
|
|
|
+ if (childHeader.prop == "fullMarkCount") {
|
|
|
|
|
+ state.dialogData.quesScoreType = 0; //选择的类型0-满分人数 1-0分人数 3-优秀率、良好率等
|
|
|
|
|
+ } else if (childHeader.prop == "zeroMarkCount") {
|
|
|
|
|
+ state.dialogData.quesScoreType = 1; //选择的类型0-满分人数 1-0分人数 3-优秀率、良好率等
|
|
|
|
|
+ } else {
|
|
|
|
|
+ state.dialogData.quesScoreType = 3; //选择的类型0-满分人数 1-0分人数 3-优秀率、良好率等
|
|
|
|
|
+ }
|
|
|
|
|
+ state.dialogData.knowledgeId = row.knowledgeId; //如果选择的是知识点,则需要返回知识点ID
|
|
|
|
|
+ state.dialogData.questionGroupName = row?.groupName || ""; //试题分组的名称
|
|
|
|
|
+ state.dialogData.groupTitle = state.groupTitle.replace(/分析/g, "");
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+// 关闭人员弹框
|
|
|
|
|
+const CloseDialog = (val) => {
|
|
|
|
|
+ state.dialogData.showDialog = val;
|
|
|
|
|
+};
|
|
|
|
|
+// 分页获取分析表
|
|
|
const ChangeCurrentPage = (val) => {
|
|
const ChangeCurrentPage = (val) => {
|
|
|
state.majorTableData.currentPage = val;
|
|
state.majorTableData.currentPage = val;
|
|
|
GetMajorTableData(); //加载分析表格数据
|
|
GetMajorTableData(); //加载分析表格数据
|
|
@@ -1303,7 +1421,7 @@ const TableRowClassName = ({ row, rowIndex }) => {
|
|
|
return "";
|
|
return "";
|
|
|
};
|
|
};
|
|
|
//查看答题卡
|
|
//查看答题卡
|
|
|
-const handleClick = (row) => {
|
|
|
|
|
|
|
+const handleClick = (row) => {
|
|
|
state.paperInfo = {
|
|
state.paperInfo = {
|
|
|
examPaperId: analysisStore.filterObject.subjectId, //考试科目id
|
|
examPaperId: analysisStore.filterObject.subjectId, //考试科目id
|
|
|
platformNumber: row.studentRegistrationCode, //学籍号平台号
|
|
platformNumber: row.studentRegistrationCode, //学籍号平台号
|