|
@@ -8,7 +8,7 @@
|
|
<i class="icon icon-sign"></i>开课学院:{{ orgName }}
|
|
<i class="icon icon-sign"></i>开课学院:{{ orgName }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <div class="part-box part-box-filter" v-if="setReady">
|
|
|
|
|
|
+ <div class="part-box part-box-filter part-box-flex" v-if="setReady">
|
|
<el-form ref="FilterForm" label-position="left" label-width="60px" inline>
|
|
<el-form ref="FilterForm" label-position="left" label-width="60px" inline>
|
|
<el-form-item label="学期:">
|
|
<el-form-item label="学期:">
|
|
<semester-select
|
|
<semester-select
|
|
@@ -42,250 +42,294 @@
|
|
<el-button type="primary" round @click="search">查询</el-button>
|
|
<el-button type="primary" round @click="search">查询</el-button>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
|
|
+ <div class="part-box-action">
|
|
|
|
+ <el-button round @click="toCustom">自定义分析报告</el-button>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <el-row :gutter="20" type="flex">
|
|
|
|
- <el-col :span="12">
|
|
|
|
- <div class="part-box part-box-pad">
|
|
|
|
- <div class="part-box-head">
|
|
|
|
- <h3>
|
|
|
|
- <span>考试概况</span>
|
|
|
|
- <el-popover
|
|
|
|
- popper-class="el-popper-dark"
|
|
|
|
- placement="right-start"
|
|
|
|
- width="300"
|
|
|
|
- trigger="hover"
|
|
|
|
- >
|
|
|
|
- <i class="el-icon-question" slot="reference"></i>
|
|
|
|
- <div>
|
|
|
|
- <p>1.统计成绩范围包含应届、非应届类型的考生数据;</p>
|
|
|
|
- <p>
|
|
|
|
- 2.有效人数:成绩有效的实考人数。
|
|
|
|
- </p>
|
|
|
|
- </div>
|
|
|
|
- </el-popover>
|
|
|
|
- </h3>
|
|
|
|
- </div>
|
|
|
|
- <div class="summary-info">
|
|
|
|
- <div class="summary-info-row">
|
|
|
|
- <div class="summary-info-item">
|
|
|
|
- <i class="summary-info-icon"><i class="icon icon-start"></i></i>
|
|
|
|
- <p>考试时间</p>
|
|
|
|
- <p>{{ summary.examTime | timestampFilter }}</p>
|
|
|
|
- </div>
|
|
|
|
- <div class="summary-info-item">
|
|
|
|
- <i class="summary-info-icon"
|
|
|
|
- ><i class="icon icon-course"></i
|
|
|
|
- ></i>
|
|
|
|
- <p>课程</p>
|
|
|
|
- <p>{{ summary.courseName }}</p>
|
|
|
|
|
|
+ <div class="waterfall-container" ref="waterfallRef" :key="reportKey">
|
|
|
|
+ <!-- 考试概况 -->
|
|
|
|
+ <div v-if="customReportSet.summary" class="part-box part-box-pad">
|
|
|
|
+ <div class="part-box-head">
|
|
|
|
+ <h3>
|
|
|
|
+ <span>考试概况</span>
|
|
|
|
+ <el-popover
|
|
|
|
+ popper-class="el-popper-dark"
|
|
|
|
+ placement="right-start"
|
|
|
|
+ width="300"
|
|
|
|
+ trigger="hover"
|
|
|
|
+ >
|
|
|
|
+ <i class="el-icon-question" slot="reference"></i>
|
|
|
|
+ <div>
|
|
|
|
+ <p>1.统计成绩范围包含应届、非应届类型的考生数据;</p>
|
|
|
|
+ <p>
|
|
|
|
+ 2.有效人数:成绩有效的实考人数。
|
|
|
|
+ </p>
|
|
</div>
|
|
</div>
|
|
|
|
+ </el-popover>
|
|
|
|
+ </h3>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="summary-info">
|
|
|
|
+ <div class="summary-info-row">
|
|
|
|
+ <div class="summary-info-item">
|
|
|
|
+ <i class="summary-info-icon"><i class="icon icon-start"></i></i>
|
|
|
|
+ <p>考试时间</p>
|
|
|
|
+ <p>{{ summary.examTime | timestampFilter }}</p>
|
|
</div>
|
|
</div>
|
|
- <div class="summary-info-row">
|
|
|
|
- <div class="summary-info-item">
|
|
|
|
- <i class="summary-info-icon"><i class="icon icon-full"></i></i>
|
|
|
|
- <p>满分</p>
|
|
|
|
- <p>{{ summary.fullScore }}</p>
|
|
|
|
- </div>
|
|
|
|
- <div class="summary-info-item">
|
|
|
|
- <i class="summary-info-icon"><i class="icon icon-users"></i></i>
|
|
|
|
- <p>有效(实考)人数</p>
|
|
|
|
- <p>{{ summary.realityCount }}</p>
|
|
|
|
- </div>
|
|
|
|
- <div class="summary-info-item">
|
|
|
|
- <i class="summary-info-icon"
|
|
|
|
- ><i class="icon icon-college"></i
|
|
|
|
- ></i>
|
|
|
|
- <p>考查学院</p>
|
|
|
|
- <p>{{ summary.inspectCollegeCount }}</p>
|
|
|
|
- </div>
|
|
|
|
- <div class="summary-info-item">
|
|
|
|
- <i class="summary-info-icon"
|
|
|
|
- ><i class="icon icon-absent"></i
|
|
|
|
- ></i>
|
|
|
|
- <p>缺考/违纪人数</p>
|
|
|
|
- <p>{{ summary.absentCount }}</p>
|
|
|
|
- </div>
|
|
|
|
|
|
+ <div class="summary-info-item">
|
|
|
|
+ <i class="summary-info-icon"><i class="icon icon-course"></i></i>
|
|
|
|
+ <p>课程</p>
|
|
|
|
+ <p>{{ summary.courseName }}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <div class="summary-school">
|
|
|
|
- <p>
|
|
|
|
- <span>赋分系数:</span><span>{{ summary.coefficient }}</span>
|
|
|
|
- </p>
|
|
|
|
- <p>
|
|
|
|
- <span>开课学院:</span><span>{{ summary.teachCollegeName }}</span>
|
|
|
|
- </p>
|
|
|
|
- <p>
|
|
|
|
- <span>考查学院:</span>
|
|
|
|
- <span>
|
|
|
|
- <MoreText
|
|
|
|
- v-if="summary.inspectCollegeNames"
|
|
|
|
- :content="summary.inspectCollegeNames"
|
|
|
|
- />
|
|
|
|
- </span>
|
|
|
|
- <!-- <span>{{ summary.inspectCollegeNames }}</span> -->
|
|
|
|
- </p>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- <QuestionDifficultScoreAnalysis ref="QuestionDifficultScoreAnalysis" />
|
|
|
|
- <div class="part-box part-box-pad">
|
|
|
|
- <div class="part-box-head">
|
|
|
|
- <h3>
|
|
|
|
- <span>区分度及容易度分析情况</span>
|
|
|
|
- <el-popover
|
|
|
|
- popper-class="el-popper-dark"
|
|
|
|
- placement="right-start"
|
|
|
|
- width="300"
|
|
|
|
- trigger="hover"
|
|
|
|
- >
|
|
|
|
- <i class="el-icon-question" slot="reference"></i>
|
|
|
|
- <div>
|
|
|
|
- <p>
|
|
|
|
- 1.区分度与参加本次考试的学生水平有关。因此,这里计算出来的区分度大小,只是对本次考试测评的学生相对而言的容易度评估;
|
|
|
|
- </p>
|
|
|
|
- <p>
|
|
|
|
- 2.一般情况下,区分度应为正值,值越大则区分度越好;若区分度为负值,则为消极区分,则说明这个题目可能存在问题,建议审查原因;区分度为0,为无区分作用。
|
|
|
|
- </p>
|
|
|
|
- </div>
|
|
|
|
- </el-popover>
|
|
|
|
- </h3>
|
|
|
|
- <!-- modules -->
|
|
|
|
- <div class="module-select">
|
|
|
|
- <div
|
|
|
|
- v-for="mod in distinctionList"
|
|
|
|
- :key="mod.id"
|
|
|
|
- :class="[
|
|
|
|
- 'module-select-item',
|
|
|
|
- {
|
|
|
|
- 'module-select-item-act': mod.id === curDistinction.id
|
|
|
|
- }
|
|
|
|
- ]"
|
|
|
|
- @click="distinctionChange(mod)"
|
|
|
|
- >
|
|
|
|
- {{ mod.paperType }}
|
|
|
|
- </div>
|
|
|
|
|
|
+ <div class="summary-info-row">
|
|
|
|
+ <div class="summary-info-item">
|
|
|
|
+ <i class="summary-info-icon"><i class="icon icon-full"></i></i>
|
|
|
|
+ <p>满分</p>
|
|
|
|
+ <p>{{ summary.fullScore }}</p>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="summary-info-item">
|
|
|
|
+ <i class="summary-info-icon"><i class="icon icon-users"></i></i>
|
|
|
|
+ <p>有效(实考)人数</p>
|
|
|
|
+ <p>{{ summary.realityCount }}</p>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="summary-info-item">
|
|
|
|
+ <i class="summary-info-icon"><i class="icon icon-college"></i></i>
|
|
|
|
+ <p>考查学院</p>
|
|
|
|
+ <p>{{ summary.inspectCollegeCount }}</p>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="summary-info-item">
|
|
|
|
+ <i class="summary-info-icon"><i class="icon icon-absent"></i></i>
|
|
|
|
+ <p>缺考/违纪人数</p>
|
|
|
|
+ <p>{{ summary.absentCount }}</p>
|
|
</div>
|
|
</div>
|
|
- </div>
|
|
|
|
- <div class="chart-box chart-qfdnd">
|
|
|
|
- <v-chart
|
|
|
|
- :option="curDistinction.chartOption"
|
|
|
|
- v-if="curDistinction.chartOption"
|
|
|
|
- ></v-chart>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- </el-col>
|
|
|
|
- <el-col :span="12">
|
|
|
|
- <div class="part-box part-box-pad school-course">
|
|
|
|
- <div class="part-box-head">
|
|
|
|
- <h3>
|
|
|
|
- <span>赋分分数段分布情况</span>
|
|
|
|
- <el-popover
|
|
|
|
- popper-class="el-popper-dark"
|
|
|
|
- placement="right-start"
|
|
|
|
- width="300"
|
|
|
|
- trigger="hover"
|
|
|
|
- >
|
|
|
|
- <i class="el-icon-question" slot="reference"></i>
|
|
|
|
- <div>
|
|
|
|
- <p>1.总体:包含应届、非应届类型;</p>
|
|
|
|
- <p>2.应届:只包含应届类型;</p>
|
|
|
|
- </div>
|
|
|
|
- </el-popover>
|
|
|
|
- </h3>
|
|
|
|
- </div>
|
|
|
|
- <div class="chart-box chart-fsdfb">
|
|
|
|
- <v-chart
|
|
|
|
- :option="scoreAnalyseOption"
|
|
|
|
- v-if="scoreAnalyseOption"
|
|
|
|
- ></v-chart>
|
|
|
|
- </div>
|
|
|
|
- <div class="chart-summary">
|
|
|
|
- <div class="chart-summary-body">
|
|
|
|
- <div class="chart-summary-item">
|
|
|
|
- <i class="chart-summary-icon"
|
|
|
|
- ><i class="icon icon-wave-cyan"></i
|
|
|
|
- ></i>
|
|
|
|
- <p>平均分<span>(总体)</span></p>
|
|
|
|
- <p>{{ scoreAnalyseSummary.avgScore }}<span>分</span></p>
|
|
|
|
- </div>
|
|
|
|
- <div class="chart-summary-item">
|
|
|
|
- <i class="chart-summary-icon"
|
|
|
|
- ><i class="icon icon-data-cyan"></i
|
|
|
|
- ></i>
|
|
|
|
- <p>不及格率<span>(总体)</span></p>
|
|
|
|
- <p>{{ scoreAnalyseSummary.notPassRate }}<span>%</span></p>
|
|
|
|
- </div>
|
|
|
|
- <div class="chart-summary-item">
|
|
|
|
- <i class="chart-summary-icon"
|
|
|
|
- ><i class="icon icon-wave-blue"></i
|
|
|
|
- ></i>
|
|
|
|
- <p>平均分<span>(应届)</span></p>
|
|
|
|
- <p>{{ scoreAnalyseSummary.currentAvgScore }}<span>分</span></p>
|
|
|
|
- </div>
|
|
|
|
- <div class="chart-summary-item">
|
|
|
|
- <i class="chart-summary-icon"
|
|
|
|
- ><i class="icon icon-data-blue"></i
|
|
|
|
- ></i>
|
|
|
|
- <p>不及格率<span>(应届)</span></p>
|
|
|
|
|
|
+ <div class="summary-school">
|
|
|
|
+ <p>
|
|
|
|
+ <span>赋分系数:</span><span>{{ summary.coefficient }}</span>
|
|
|
|
+ </p>
|
|
|
|
+ <p>
|
|
|
|
+ <span>开课学院:</span><span>{{ summary.teachCollegeName }}</span>
|
|
|
|
+ </p>
|
|
|
|
+ <p>
|
|
|
|
+ <span>考查学院:</span>
|
|
|
|
+ <span>
|
|
|
|
+ <MoreText
|
|
|
|
+ v-if="summary.inspectCollegeNames"
|
|
|
|
+ :content="summary.inspectCollegeNames"
|
|
|
|
+ />
|
|
|
|
+ </span>
|
|
|
|
+ <!-- <span>{{ summary.inspectCollegeNames }}</span> -->
|
|
|
|
+ </p>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <!-- 各难度水平题目上的作答分析 -->
|
|
|
|
+ <DifficultLevelAnalysis
|
|
|
|
+ v-if="customReportSet.difficultLevelAnalysis"
|
|
|
|
+ ref="DifficultLevelAnalysis"
|
|
|
|
+ />
|
|
|
|
+
|
|
|
|
+ <!-- 试题难度得分情况分析 -->
|
|
|
|
+ <QuestionDifficultScoreAnalysis
|
|
|
|
+ v-if="customReportSet.questionDifficultScoreAnalysis"
|
|
|
|
+ ref="QuestionDifficultScoreAnalysis"
|
|
|
|
+ />
|
|
|
|
+
|
|
|
|
+ <!-- 区分度及难度分析情况 -->
|
|
|
|
+ <div v-if="customReportSet.distinctionList" class="part-box part-box-pad">
|
|
|
|
+ <div class="part-box-head">
|
|
|
|
+ <h3>
|
|
|
|
+ <span>区分度及容易度分析情况</span>
|
|
|
|
+ <el-popover
|
|
|
|
+ popper-class="el-popper-dark"
|
|
|
|
+ placement="right-start"
|
|
|
|
+ width="300"
|
|
|
|
+ trigger="hover"
|
|
|
|
+ >
|
|
|
|
+ <i class="el-icon-question" slot="reference"></i>
|
|
|
|
+ <div>
|
|
<p>
|
|
<p>
|
|
- {{ scoreAnalyseSummary.currentNotPassRate }}<span>%</span>
|
|
|
|
|
|
+ 1.区分度与参加本次考试的学生水平有关。因此,这里计算出来的区分度大小,只是对本次考试测评的学生相对而言的容易度评估;
|
|
|
|
+ </p>
|
|
|
|
+ <p>
|
|
|
|
+ 2.一般情况下,区分度应为正值,值越大则区分度越好;若区分度为负值,则为消极区分,则说明这个题目可能存在问题,建议审查原因;区分度为0,为无区分作用。
|
|
</p>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
+ </el-popover>
|
|
|
|
+ </h3>
|
|
|
|
+ <!-- modules -->
|
|
|
|
+ <div class="module-select">
|
|
|
|
+ <div
|
|
|
|
+ v-for="mod in distinctionList"
|
|
|
|
+ :key="mod.id"
|
|
|
|
+ :class="[
|
|
|
|
+ 'module-select-item',
|
|
|
|
+ {
|
|
|
|
+ 'module-select-item-act': mod.id === curDistinction.id
|
|
|
|
+ }
|
|
|
|
+ ]"
|
|
|
|
+ @click="distinctionChange(mod)"
|
|
|
|
+ >
|
|
|
|
+ {{ mod.paperType }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <div class="chart-table">
|
|
|
|
- <table class="table">
|
|
|
|
- <tr>
|
|
|
|
- <th rowspan="3">分数段</th>
|
|
|
|
- <th colspan="4" class="text-center">赋分前</th>
|
|
|
|
- <th colspan="4" class="text-center">赋分后</th>
|
|
|
|
- </tr>
|
|
|
|
- <tr class="text-center">
|
|
|
|
- <th colspan="2">总体</th>
|
|
|
|
- <th colspan="2">应届</th>
|
|
|
|
- <th colspan="2">总体</th>
|
|
|
|
- <th colspan="2">应届</th>
|
|
|
|
- </tr>
|
|
|
|
- <tr>
|
|
|
|
- <th>有效人数</th>
|
|
|
|
- <th>占比</th>
|
|
|
|
- <th>有效人数</th>
|
|
|
|
- <th>占比</th>
|
|
|
|
- <th>有效人数</th>
|
|
|
|
- <th>占比</th>
|
|
|
|
- <th>有效人数</th>
|
|
|
|
- <th>占比</th>
|
|
|
|
- </tr>
|
|
|
|
- <tr v-for="(grade, index) in scoreAnalyseList" :key="index">
|
|
|
|
- <td class="text-left">{{ grade.describe }}</td>
|
|
|
|
- <td>{{ grade.allCountBefore }}</td>
|
|
|
|
- <td>{{ grade.allCountRateBefore }}%</td>
|
|
|
|
- <td>{{ grade.currentCountBefore }}</td>
|
|
|
|
- <td>{{ grade.currentCountRateBefore }}%</td>
|
|
|
|
- <td>{{ grade.allCountAfter }}</td>
|
|
|
|
- <td>{{ grade.allCountRateAfter }}%</td>
|
|
|
|
- <td>{{ grade.currentCountAfter }}</td>
|
|
|
|
- <td>{{ grade.currentCountRateAfter }}%</td>
|
|
|
|
- </tr>
|
|
|
|
- <tr>
|
|
|
|
- <td class="text-left">小计</td>
|
|
|
|
- <td>{{ scoreAnalyseListSum.allCountBefore }}</td>
|
|
|
|
- <td></td>
|
|
|
|
- <td>{{ scoreAnalyseListSum.currentCountBefore }}</td>
|
|
|
|
- <td></td>
|
|
|
|
- <td>{{ scoreAnalyseListSum.allCountAfter }}</td>
|
|
|
|
- <td></td>
|
|
|
|
- <td>{{ scoreAnalyseListSum.currentCountAfter }}</td>
|
|
|
|
- <td></td>
|
|
|
|
- </tr>
|
|
|
|
- </table>
|
|
|
|
|
|
+ </div>
|
|
|
|
+ <div class="chart-box chart-qfdnd">
|
|
|
|
+ <v-chart
|
|
|
|
+ :option="curDistinction.chartOption"
|
|
|
|
+ autoresize
|
|
|
|
+ v-if="curDistinction.chartOption"
|
|
|
|
+ ></v-chart>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 教师各课堂成绩排名 -->
|
|
|
|
+ <TeacherClazzScore
|
|
|
|
+ v-if="customReportSet.teacherClazzScore"
|
|
|
|
+ ref="TeacherClazzScore"
|
|
|
|
+ :filter="filter"
|
|
|
|
+ />
|
|
|
|
+
|
|
|
|
+ <!-- 赋分分数段分布情况 -->
|
|
|
|
+ <div
|
|
|
|
+ v-if="customReportSet.scoreAnalyse"
|
|
|
|
+ class="part-box part-box-pad school-course"
|
|
|
|
+ >
|
|
|
|
+ <div class="part-box-head">
|
|
|
|
+ <h3>
|
|
|
|
+ <span>赋分分数段分布情况</span>
|
|
|
|
+ <el-popover
|
|
|
|
+ popper-class="el-popper-dark"
|
|
|
|
+ placement="right-start"
|
|
|
|
+ width="300"
|
|
|
|
+ trigger="hover"
|
|
|
|
+ >
|
|
|
|
+ <i class="el-icon-question" slot="reference"></i>
|
|
|
|
+ <div>
|
|
|
|
+ <p>1.总体:包含应届、非应届类型;</p>
|
|
|
|
+ <p>2.应届:只包含应届类型;</p>
|
|
|
|
+ </div>
|
|
|
|
+ </el-popover>
|
|
|
|
+ </h3>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="chart-box chart-fsdfb">
|
|
|
|
+ <v-chart
|
|
|
|
+ :option="scoreAnalyseOption"
|
|
|
|
+ autoresize
|
|
|
|
+ v-if="scoreAnalyseOption"
|
|
|
|
+ ></v-chart>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="chart-summary">
|
|
|
|
+ <div class="chart-summary-body">
|
|
|
|
+ <div class="chart-summary-item">
|
|
|
|
+ <i class="chart-summary-icon"
|
|
|
|
+ ><i class="icon icon-wave-cyan"></i
|
|
|
|
+ ></i>
|
|
|
|
+ <p>平均分<span>(总体)</span></p>
|
|
|
|
+ <p>{{ scoreAnalyseSummary.avgScore }}<span>分</span></p>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="chart-summary-item">
|
|
|
|
+ <i class="chart-summary-icon"
|
|
|
|
+ ><i class="icon icon-data-cyan"></i
|
|
|
|
+ ></i>
|
|
|
|
+ <p>不及格率<span>(总体)</span></p>
|
|
|
|
+ <p>{{ scoreAnalyseSummary.notPassRate }}<span>%</span></p>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="chart-summary-item">
|
|
|
|
+ <i class="chart-summary-icon"
|
|
|
|
+ ><i class="icon icon-wave-blue"></i
|
|
|
|
+ ></i>
|
|
|
|
+ <p>平均分<span>(应届)</span></p>
|
|
|
|
+ <p>{{ scoreAnalyseSummary.currentAvgScore }}<span>分</span></p>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="chart-summary-item">
|
|
|
|
+ <i class="chart-summary-icon"
|
|
|
|
+ ><i class="icon icon-data-blue"></i
|
|
|
|
+ ></i>
|
|
|
|
+ <p>不及格率<span>(应届)</span></p>
|
|
|
|
+ <p>{{ scoreAnalyseSummary.currentNotPassRate }}<span>%</span></p>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <DifficultLevelAnalysis ref="DifficultLevelAnalysis" />
|
|
|
|
- <TeacherClazzScore ref="TeacherClazzScore" :filter="filter" />
|
|
|
|
- </el-col>
|
|
|
|
- </el-row>
|
|
|
|
- <MistakeAnalysis v-if="mistakeDatas" :datas="mistakeDatas" />
|
|
|
|
|
|
+ <div class="chart-table">
|
|
|
|
+ <table class="table">
|
|
|
|
+ <tr>
|
|
|
|
+ <th rowspan="3">分数段</th>
|
|
|
|
+ <th colspan="4" class="text-center">赋分前</th>
|
|
|
|
+ <th colspan="4" class="text-center">赋分后</th>
|
|
|
|
+ </tr>
|
|
|
|
+ <tr class="text-center">
|
|
|
|
+ <th colspan="2">总体</th>
|
|
|
|
+ <th colspan="2">应届</th>
|
|
|
|
+ <th colspan="2">总体</th>
|
|
|
|
+ <th colspan="2">应届</th>
|
|
|
|
+ </tr>
|
|
|
|
+ <tr>
|
|
|
|
+ <th>有效人数</th>
|
|
|
|
+ <th>占比</th>
|
|
|
|
+ <th>有效人数</th>
|
|
|
|
+ <th>占比</th>
|
|
|
|
+ <th>有效人数</th>
|
|
|
|
+ <th>占比</th>
|
|
|
|
+ <th>有效人数</th>
|
|
|
|
+ <th>占比</th>
|
|
|
|
+ </tr>
|
|
|
|
+ <tr v-for="(grade, index) in scoreAnalyseList" :key="index">
|
|
|
|
+ <td class="text-left">{{ grade.describe }}</td>
|
|
|
|
+ <td>{{ grade.allCountBefore }}</td>
|
|
|
|
+ <td>{{ grade.allCountRateBefore }}%</td>
|
|
|
|
+ <td>{{ grade.currentCountBefore }}</td>
|
|
|
|
+ <td>{{ grade.currentCountRateBefore }}%</td>
|
|
|
|
+ <td>{{ grade.allCountAfter }}</td>
|
|
|
|
+ <td>{{ grade.allCountRateAfter }}%</td>
|
|
|
|
+ <td>{{ grade.currentCountAfter }}</td>
|
|
|
|
+ <td>{{ grade.currentCountRateAfter }}%</td>
|
|
|
|
+ </tr>
|
|
|
|
+ <tr>
|
|
|
|
+ <td class="text-left">小计</td>
|
|
|
|
+ <td>{{ scoreAnalyseListSum.allCountBefore }}</td>
|
|
|
|
+ <td></td>
|
|
|
|
+ <td>{{ scoreAnalyseListSum.currentCountBefore }}</td>
|
|
|
|
+ <td></td>
|
|
|
|
+ <td>{{ scoreAnalyseListSum.allCountAfter }}</td>
|
|
|
|
+ <td></td>
|
|
|
|
+ <td>{{ scoreAnalyseListSum.currentCountAfter }}</td>
|
|
|
|
+ <td></td>
|
|
|
|
+ </tr>
|
|
|
|
+ </table>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <MistakeAnalysis
|
|
|
|
+ v-if="mistakeDatas && customReportSet.mistakeAnalysis"
|
|
|
|
+ :datas="mistakeDatas"
|
|
|
|
+ />
|
|
|
|
+
|
|
|
|
+ <!-- 自定义报告对话框 -->
|
|
|
|
+ <el-dialog
|
|
|
|
+ :visible.sync="customModalIsShow"
|
|
|
|
+ title="自定义报告设置"
|
|
|
|
+ top="10vh"
|
|
|
|
+ width="400px"
|
|
|
|
+ :close-on-click-modal="false"
|
|
|
|
+ :close-on-press-escape="false"
|
|
|
|
+ append-to-body
|
|
|
|
+ >
|
|
|
|
+ <el-checkbox-group v-model="customMenus">
|
|
|
|
+ <div v-for="item in customReports" :key="item.field">
|
|
|
|
+ <el-checkbox :label="item.field">{{ item.name }}</el-checkbox>
|
|
|
|
+ <br />
|
|
|
|
+ </div>
|
|
|
|
+ </el-checkbox-group>
|
|
|
|
+
|
|
|
|
+ <div slot="footer">
|
|
|
|
+ <el-button type="primary" @click="customConfirm">确认</el-button>
|
|
|
|
+ <el-button type="danger" @click="customModalIsShow = false" plain
|
|
|
|
+ >取消</el-button
|
|
|
|
+ >
|
|
|
|
+ </div>
|
|
|
|
+ </el-dialog>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
@@ -300,7 +344,7 @@ import DifficultLevelAnalysis from "./DifficultLevelAnalysis";
|
|
import TeacherClazzScore from "./TeacherClazzScore";
|
|
import TeacherClazzScore from "./TeacherClazzScore";
|
|
import MistakeAnalysis from "./MistakeAnalysis";
|
|
import MistakeAnalysis from "./MistakeAnalysis";
|
|
import MoreText from "../../../../components/MoreText";
|
|
import MoreText from "../../../../components/MoreText";
|
|
-import { calcSum } from "@/plugins/utils";
|
|
|
|
|
|
+import { calcSum, toPrecision } from "@/plugins/utils";
|
|
|
|
|
|
export default {
|
|
export default {
|
|
name: "owner-course-exam-analysis",
|
|
name: "owner-course-exam-analysis",
|
|
@@ -331,12 +375,64 @@ export default {
|
|
scoreAnalyseOption: null,
|
|
scoreAnalyseOption: null,
|
|
distinctionList: [],
|
|
distinctionList: [],
|
|
curDistinction: {},
|
|
curDistinction: {},
|
|
- mistakeDatas: null
|
|
|
|
|
|
+ mistakeDatas: null,
|
|
|
|
+ // 自定义报告
|
|
|
|
+ reportKey: 0,
|
|
|
|
+ customReportSet: {
|
|
|
|
+ summary: true,
|
|
|
|
+ questionDifficultScoreAnalysis: true,
|
|
|
|
+ distinctionList: true,
|
|
|
|
+ scoreAnalyse: true,
|
|
|
|
+ difficultLevelAnalysis: true,
|
|
|
|
+ teacherClazzScore: true,
|
|
|
|
+ mistakeAnalysis: true
|
|
|
|
+ },
|
|
|
|
+ customModalIsShow: false,
|
|
|
|
+ customMenus: [],
|
|
|
|
+ customReports: [
|
|
|
|
+ {
|
|
|
|
+ name: "考试概况",
|
|
|
|
+ field: "summary"
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ name: "各难度水平题目上的作答分析",
|
|
|
|
+ field: "difficultLevelAnalysis"
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ name: "区分度及容易度分析情况",
|
|
|
|
+ field: "distinctionList"
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ name: "教师各课堂成绩排名",
|
|
|
|
+ field: "teacherClazzScore"
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ name: "赋分分数段分布情况",
|
|
|
|
+ field: "scoreAnalyse"
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ name: "试题难度得分情况分析",
|
|
|
|
+ field: "questionDifficultScoreAnalysis"
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ name: "考生错题难度分析",
|
|
|
|
+ field: "mistakeAnalysis"
|
|
|
|
+ }
|
|
|
|
+ ]
|
|
};
|
|
};
|
|
},
|
|
},
|
|
- created() {
|
|
|
|
|
|
+ mounted() {
|
|
const orgInfo = this.$ls.get("user", { orgInfo: { name: "" } }).orgInfo;
|
|
const orgInfo = this.$ls.get("user", { orgInfo: { name: "" } }).orgInfo;
|
|
if (orgInfo) this.orgName = orgInfo.name;
|
|
if (orgInfo) this.orgName = orgInfo.name;
|
|
|
|
+
|
|
|
|
+ this.customMenus = this.$ls.get("customMenus", null);
|
|
|
|
+ if (!this.customMenus) {
|
|
|
|
+ this.customMenus = this.customReports.map(item => item.field);
|
|
|
|
+ }
|
|
|
|
+ this.customReports.forEach(item => {
|
|
|
|
+ this.customReportSet[item.field] = this.customMenus.includes(item.field);
|
|
|
|
+ });
|
|
|
|
+
|
|
this.initPage();
|
|
this.initPage();
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
@@ -355,13 +451,15 @@ export default {
|
|
this.search();
|
|
this.search();
|
|
this.selectDefault = true;
|
|
this.selectDefault = true;
|
|
this.$ls.remove("ownerCourseSet");
|
|
this.$ls.remove("ownerCourseSet");
|
|
|
|
+
|
|
|
|
+ this.updateWaterfallColumn();
|
|
});
|
|
});
|
|
} else {
|
|
} else {
|
|
this.setReady = true;
|
|
this.setReady = true;
|
|
this.selectDefault = true;
|
|
this.selectDefault = true;
|
|
}
|
|
}
|
|
},
|
|
},
|
|
- search() {
|
|
|
|
|
|
+ async search() {
|
|
if (
|
|
if (
|
|
!this.filter.semesterId ||
|
|
!this.filter.semesterId ||
|
|
!this.filter.examId ||
|
|
!this.filter.examId ||
|
|
@@ -371,13 +469,13 @@ export default {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
this.mistakeDatas = null;
|
|
this.mistakeDatas = null;
|
|
- this.getData();
|
|
|
|
|
|
+ await this.getData();
|
|
// 教师各课堂成绩排名
|
|
// 教师各课堂成绩排名
|
|
- this.$refs.TeacherClazzScore.getData();
|
|
|
|
|
|
+ await this.$refs.TeacherClazzScore?.getData();
|
|
// 试题难度得分情况分析
|
|
// 试题难度得分情况分析
|
|
- this.$refs.QuestionDifficultScoreAnalysis.initData(this.filter);
|
|
|
|
|
|
+ await this.$refs.QuestionDifficultScoreAnalysis?.initData(this.filter);
|
|
// 各难度水平题目上的作答分析
|
|
// 各难度水平题目上的作答分析
|
|
- this.$refs.DifficultLevelAnalysis.initData(this.filter);
|
|
|
|
|
|
+ await this.$refs.DifficultLevelAnalysis?.initData(this.filter);
|
|
},
|
|
},
|
|
async getData() {
|
|
async getData() {
|
|
const datas = {
|
|
const datas = {
|
|
@@ -432,7 +530,9 @@ export default {
|
|
name: `${elem.mainNumber}-${elem.subNumber}`,
|
|
name: `${elem.mainNumber}-${elem.subNumber}`,
|
|
detailName: elem.questionName,
|
|
detailName: elem.questionName,
|
|
validity: elem.validity,
|
|
validity: elem.validity,
|
|
- scoreRate: elem.scoreRate / 100
|
|
|
|
|
|
+ scoreRate: elem.scoreRate / 100,
|
|
|
|
+ sind: toPrecision(Math.abs(Math.sin(elem.scoreRate) / 2)),
|
|
|
|
+ xd: toPrecision(Math.abs(Math.sin(elem.scoreRate + 10) / 2))
|
|
};
|
|
};
|
|
});
|
|
});
|
|
|
|
|
|
@@ -463,11 +563,59 @@ export default {
|
|
) {
|
|
) {
|
|
this.isInit = true;
|
|
this.isInit = true;
|
|
this.search();
|
|
this.search();
|
|
|
|
+
|
|
|
|
+ this.updateWaterfallColumn();
|
|
}
|
|
}
|
|
},
|
|
},
|
|
distinctionChange(mod) {
|
|
distinctionChange(mod) {
|
|
this.curDistinction = mod;
|
|
this.curDistinction = mod;
|
|
|
|
+ },
|
|
|
|
+ toCustom() {
|
|
|
|
+ this.customModalIsShow = true;
|
|
|
|
+ },
|
|
|
|
+ updateWaterfallColumn() {
|
|
|
|
+ this.$nextTick(() => {
|
|
|
|
+ const menus = this.customMenus.filter(
|
|
|
|
+ item => item !== "mistakeAnalysis"
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ if (menus.length <= 2) {
|
|
|
|
+ this.$refs.waterfallRef.style.columnCount = 1;
|
|
|
|
+ } else {
|
|
|
|
+ this.$refs.waterfallRef.style.columnCount = 2;
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ },
|
|
|
|
+ customConfirm() {
|
|
|
|
+ if (this.customMenus.length === 0) {
|
|
|
|
+ this.$message.error("至少选择一项!");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ this.customReports.forEach(item => {
|
|
|
|
+ this.customReportSet[item.field] = this.customMenus.includes(
|
|
|
|
+ item.field
|
|
|
|
+ );
|
|
|
|
+ });
|
|
|
|
+ this.customModalIsShow = false;
|
|
|
|
+
|
|
|
|
+ this.reportKey = Date.now();
|
|
|
|
+ this.$ls.set("customMenus", this.customMenus);
|
|
|
|
+ this.search();
|
|
|
|
+ this.updateWaterfallColumn();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
};
|
|
</script>
|
|
</script>
|
|
|
|
+
|
|
|
|
+<style lang="scss">
|
|
|
|
+.waterfall-container {
|
|
|
|
+ column-count: 2;
|
|
|
|
+ column-gap: 20px;
|
|
|
|
+ .part-box {
|
|
|
|
+ display: inline-block;
|
|
|
|
+ width: 100%;
|
|
|
|
+ margin-bottom: 20px;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+</style>
|