Jelajahi Sumber

得分率组件完善

OnePsycho 4 tahun lalu
induk
melakukan
db3c07708f

File diff ditekan karena terlalu besar
+ 666 - 641
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseMyTable.vue


+ 37 - 25
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseScoreRateBar.vue

@@ -1,14 +1,15 @@
 <template>
 <template>
-	<div id="myScoreRateBar"></div>
+	<div class="myScoreRateBar" :id="echartsId"></div>
 </template>
 </template>
 
 
 <script>
 <script>
 	export default {
 	export default {
 		name: 'hello',
 		name: 'hello',
-		props: ['echartsData'],
+		props: ['echartsId','echartsData'],
 		data() {
 		data() {
 			return {
 			return {
-
+				scoreRateCountArr:[],
+				splitArr:[10,20,30,40,50,60,70,80,90,100]
 			}
 			}
 		},
 		},
 		created() {
 		created() {
@@ -19,7 +20,7 @@
 			// 执行图表渲染工作
 			// 执行图表渲染工作
 			drawLine(data) {
 			drawLine(data) {
 				// 基于准备好的dom,初始化echarts实例
 				// 基于准备好的dom,初始化echarts实例
-				let myBar = this.$echarts.init(document.getElementById('myScoreRateBar'))
+				let myBar = this.$echarts.init(document.getElementById(this.echartsId))
 				let that = this
 				let that = this
 
 
 				// 指定图表的配置项和数据
 				// 指定图表的配置项和数据
@@ -32,6 +33,10 @@
 								color: '#fff',
 								color: '#fff',
 								fontSize: '26'
 								fontSize: '26'
 							},
 							},
+						},
+						formatter: function(value) {
+							let range = (that.splitArr[value[0].dataIndex] - 10) + '%-' + that.splitArr[value[0].dataIndex] + '%:'
+							return range + '<br>' + value[0].data + that.$t('unit.text7')
 						}
 						}
 					},
 					},
 					legend: {
 					legend: {
@@ -50,7 +55,7 @@
 						height: 300,
 						height: 300,
 						width: '75%',
 						width: '75%',
 						top:'20%',
 						top:'20%',
-						left: '6%',
+						left: '8%',
 						tooltip: {
 						tooltip: {
 							show: true,
 							show: true,
 							trigger: 'axis', // 触发类型
 							trigger: 'axis', // 触发类型
@@ -96,6 +101,7 @@
 						axisLabel: {
 						axisLabel: {
 							color: '#aaaaaa',
 							color: '#aaaaaa',
 							margin: 10,
 							margin: 10,
+							align:'left'
 						},
 						},
 						splitLine: {
 						splitLine: {
 						    show: true,
 						    show: true,
@@ -105,7 +111,7 @@
 						        type: 'solid'
 						        type: 'solid'
 						    }
 						    }
 						},
 						},
-						data: ['10%', '20%', '30%', '40%','50%', '60%', '70%', '80%','90%', '100%'],
+						data: ['     10%', '     20%', '     30%', '     40%','     50%', '     60%', '     70%', '     80%','     90%', '   100%'],
 
 
 					}],
 					}],
 					yAxis: [{
 					yAxis: [{
@@ -161,7 +167,7 @@
 									}]
 									}]
 								}
 								}
 							},
 							},
-							data: [15,8,6,20,0,14,18,22,34,5]
+							data: that.scoreRateCountArr
 						},
 						},
 					]
 					]
 				};
 				};
@@ -172,36 +178,42 @@
 				})
 				})
 			},
 			},
 
 
-
-			doRender(val) {
+			
+			/* 根据学生总体数据来换取得分率区间分布数据 */
+			doRender(list) {
+				console.log(list)
+				let sRateArr = list.map(i => i.sRate)
+				let splitArr = [...new Array(10).keys()]
+				let result = new Array(10).fill(0)
+				sRateArr.forEach(rate => {
+					splitArr.forEach((j,index) => {
+						if(rate.toString().slice(0,1) === j.toString()){
+							result[index]++
+						}
+					})
+				})
+				this.scoreRateCountArr = result
 			}
 			}
 		},
 		},
 		mounted() {
 		mounted() {
+			console.log(this.echartsData)
+			this.doRender(this.echartsData)
 			this.drawLine()
 			this.drawLine()
-			if (this.getBaseBarData) {
-				console.log('BaseBar接收到的vuex', this.getBaseBarData)
-				this.doRender(this.getBaseBarData)
-				this.drawLine()
-			}
-		},
-		computed: {
-			// 获取最新柱状图数据
-			getBaseBarData() {
-				return this.$store.state.totalAnalysis.analysisJson
-			}
 		},
 		},
 		watch: {
 		watch: {
-			getBaseBarData(val) {
-				if (!val) return
+			echartsData(val) {
+				console.log(val)
+				this.doRender(val)
 				this.drawLine()
 				this.drawLine()
-				console.log('BaseBar接收到watch的vuex', val)
-			}
+			},
+			deep:true,
+			immediate:true
 		}
 		}
 	}
 	}
 </script>
 </script>
 
 
 <style scoped>
 <style scoped>
-	#myScoreRateBar {
+	.myScoreRateBar {
 		width: 100%;
 		width: 100%;
 		height: 500px;
 		height: 500px;
 		margin: 0 auto;
 		margin: 0 auto;

+ 1 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/totalAnalysis.js

@@ -4,6 +4,7 @@ export default {
 		tab1:'统计数据',
 		tab1:'统计数据',
 		tab2:'评测数据',
 		tab2:'评测数据',
 	},
 	},
+	lostStu:'缺考人数',
 	allSubjects:'全科',
 	allSubjects:'全科',
 	noData:'暂无有效数据返回!',
 	noData:'暂无有效数据返回!',
 	allClasses:'所有班级',
 	allClasses:'所有班级',

+ 1 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/totalAnalysis.js

@@ -5,6 +5,7 @@ export default {
 		tab2: '評測數據',
 		tab2: '評測數據',
 		noData:'暫無有效數據返回!'
 		noData:'暫無有效數據返回!'
 	},
 	},
+	lostStu:'缺考人數',
 	allSubjects:'全科',
 	allSubjects:'全科',
 	allClasses:'所有班級',
 	allClasses:'所有班級',
 	all:'全部',
 	all:'全部',

+ 26 - 6
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/AchievementAnalysis/AchievementAnalysis.vue

@@ -8,10 +8,10 @@
             <div class="percent-item" v-for="(item,index) in passRate" :key="index">
             <div class="percent-item" v-for="(item,index) in passRate" :key="index">
                 <div class="fl-col-center">
                 <div class="fl-col-center">
                     <span class="percent-name">{{item.name}}</span>
                     <span class="percent-name">{{item.name}}</span>
-                    <span class="percent-value"><span class="percent-line" :style="{background:colorList[index]}"></span>{{item.value}}</span>
+                    <span class="percent-value"><span class="percent-line" :style="{background:colorList[index]}"></span>{{item.sRate}} <span style="font-size: 22px;">%</span></span>
 					<div style="margin-left: 30px;">
 					<div style="margin-left: 30px;">
-						<p>平均分:110</p>
-						<p>标准差:20</p>
+						<p>{{ $t('totalAnalysis.echarts_text15') }}:{{item.average.toFixed(1)}} </p>
+						<p>{{ $t('totalAnalysis.ach_table_text4') }}:{{item.standard.toFixed(1)}}</p>
 					</div>
 					</div>
                 </div>
                 </div>
             </div>
             </div>
@@ -26,8 +26,23 @@
 				<span class="component-title">{{$t('totalAnalysis.ach_title3')}}</span>
 				<span class="component-title">{{$t('totalAnalysis.ach_title3')}}</span>
 				<BaseEntryBar :echartData="classDatas" echartsId="entryNumberBar"></BaseEntryBar>
 				<BaseEntryBar :echartData="classDatas" echartsId="entryNumberBar"></BaseEntryBar>
 			</Col>
 			</Col>
+			<!-- <Col span="8">
+				<span class="component-title">{{$t('totalAnalysis.ach_title3')}}</span>
+				<BaseScoreRateBar></BaseScoreRateBar>
+			</Col> -->
         </Row>
         </Row>
 		
 		
+		<Row></Row>
+		<Row>
+			<Col span="12">
+				<span class="component-title">{{$t('totalAnalysis.scoreRate')}}</span>
+				<BaseScoreRateBar echartsId="sRateBar1" :echartsData="getAnalysisJson.students"></BaseScoreRateBar>
+			</Col>
+			<Col span="12">
+				
+			</Col>
+		</Row>
+		
 		<!-- 进线人数统计 -->
 		<!-- 进线人数统计 -->
 <!--        <Row>
 <!--        <Row>
             <span class="component-title">{{$t('totalAnalysis.ach_title3')}}</span>
             <span class="component-title">{{$t('totalAnalysis.ach_title3')}}</span>
@@ -58,9 +73,10 @@
     import BaseEntryBar from '@/components/student-analysis/total/BaseEntryBar.vue'
     import BaseEntryBar from '@/components/student-analysis/total/BaseEntryBar.vue'
     import BaseTable from '@/components/student-analysis/total/BaseMyTable.vue'
     import BaseTable from '@/components/student-analysis/total/BaseMyTable.vue'
     import EntryTables from '@/view/student-analysis/total-analysis/AchievementAnalysis/EntryTables.vue'
     import EntryTables from '@/view/student-analysis/total-analysis/AchievementAnalysis/EntryTables.vue'
+    import BaseScoreRateBar from '@/components/student-analysis/total/BaseScoreRateBar.vue'
     export default {
     export default {
         components: {
         components: {
-            BaseBar, BaseEntryBar, BaseTable, EntryTables
+            BaseBar, BaseEntryBar, BaseTable, EntryTables,BaseScoreRateBar
         },
         },
         data() {
         data() {
             return {
             return {
@@ -141,7 +157,9 @@
 				console.log(analysisJson)
 				console.log(analysisJson)
 				let result = [{
 				let result = [{
 					name: this.$t('totalAnalysis.allSubjects'),
 					name: this.$t('totalAnalysis.allSubjects'),
-					value: '88.8%'
+					average:analysisJson.all.average,
+					sRate:analysisJson.all.sRate,
+					standard:analysisJson.all.standard
 				}]
 				}]
 				analysisJson.subjects.forEach((item,index) => {
 				analysisJson.subjects.forEach((item,index) => {
 					let o = {}
 					let o = {}
@@ -152,7 +170,9 @@
 					})
 					})
 					result.push({
 					result.push({
 						name:item.name,
 						name:item.name,
-						value:(+(classAverage / analysisJson.classes.length) * 100).toFixed(1) + '%',
+						average:item.average,
+						sRate:item.sRate,
+						standard:item.standard
 					})
 					})
 				})
 				})
 				return result
 				return result

+ 8 - 2
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/AchievementAnalysis/EarlyWarning.vue

@@ -47,7 +47,7 @@
 			<div class="percent-item">
 			<div class="percent-item">
 				<div class="fl-col-center">
 				<div class="fl-col-center">
 					<span class="percent-name">{{ this.$t('totalAnalysis.sca_chart_text1') }}</span>
 					<span class="percent-name">{{ this.$t('totalAnalysis.sca_chart_text1') }}</span>
-					<span class="percent-value">64.58%</span>
+					<span class="percent-value">{{ currentClass.csRate }}%</span>
 				</div>
 				</div>
 			</div>
 			</div>
 		</Row>
 		</Row>
@@ -67,7 +67,7 @@
 			</Col>
 			</Col>
 			<Col span="12">
 			<Col span="12">
 				<span class="component-title">{{ this.$t('totalAnalysis.scoreRate') }}</span>
 				<span class="component-title">{{ this.$t('totalAnalysis.scoreRate') }}</span>
-				<BaseScoreRateBar></BaseScoreRateBar>
+				<BaseScoreRateBar echartsId="sRateBar2"  :echartsData="scoreRateBarData"></BaseScoreRateBar>
 			</Col>
 			</Col>
 		</Row>
 		</Row>
 		<!-- PR排名表格 -->
 		<!-- PR排名表格 -->
@@ -88,6 +88,9 @@
 		},
 		},
 		data() {
 		data() {
 			return {
 			return {
+				scoreRateBarData:{
+					students:[]
+				},
 				currentClass:{
 				currentClass:{
 					stuCount:0,
 					stuCount:0,
 					lineCount:0,
 					lineCount:0,
@@ -200,6 +203,7 @@
 				let curClassItem = analysisJson.classes.filter(i => i.className === this.className)[0]
 				let curClassItem = analysisJson.classes.filter(i => i.className === this.className)[0]
 				let studentIds = curClassItem.studentIds
 				let studentIds = curClassItem.studentIds
 				this.currentClass = curClassItem
 				this.currentClass = curClassItem
+				// this.currentClass.standardDeviation = subjectIndex === 0 ? curClassItem.standardDeviation : curClassItem.subjects[subjectIndex - 1].standardDeviation
 				this.classAverage = subjectIndex === 0 ? curClassItem.totalAverage.toFixed(1) : curClassItem.subjects[subjectIndex - 1].average
 				this.classAverage = subjectIndex === 0 ? curClassItem.totalAverage.toFixed(1) : curClassItem.subjects[subjectIndex - 1].average
 				// 判断当前选择科目是全科还是单科 赋予不同的值
 				// 判断当前选择科目是全科还是单科 赋予不同的值
 				studentIds.forEach((stuId, stuIndex) => {
 				studentIds.forEach((stuId, stuIndex) => {
@@ -208,6 +212,7 @@
 					result.push({
 					result.push({
 						name: stuItem.name,
 						name: stuItem.name,
 						setNo: stuItem.no,
 						setNo: stuItem.no,
+						sRate: subjectIndex === 0 ? stuItem.sRate : stuSubjectItem.sRate,
 						score: subjectIndex === 0 ? stuItem.total : stuSubjectItem.score,
 						score: subjectIndex === 0 ? stuItem.total : stuSubjectItem.score,
 						classPR: subjectIndex === 0 ? stuItem.cpr : stuSubjectItem.cpr,
 						classPR: subjectIndex === 0 ? stuItem.cpr : stuSubjectItem.cpr,
 						classRank: subjectIndex === 0 ? stuItem.csort : stuSubjectItem.csort,
 						classRank: subjectIndex === 0 ? stuItem.csort : stuSubjectItem.csort,
@@ -217,6 +222,7 @@
 						areaRank: 0
 						areaRank: 0
 					})
 					})
 				})
 				})
+				this.scoreRateBarData = result
 				return result
 				return result
 			},
 			},
 
 

+ 2 - 1
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/AchievementAnalysis/EntryTables.vue

@@ -96,7 +96,7 @@
                     },
                     },
 					{
 					{
 					    title: this.$t('totalAnalysis.sca_chart_text1'),
 					    title: this.$t('totalAnalysis.sca_chart_text1'),
-					    key: 'sRate',
+					    key: 'csRate',
 					    sortable: 'custom',
 					    sortable: 'custom',
 					    minWidth: 50
 					    minWidth: 50
 					},
 					},
@@ -194,6 +194,7 @@
 						className:classItem.className,
 						className:classItem.className,
 						entryNum:classItem.lineCount,
 						entryNum:classItem.lineCount,
 						totalNum:classItem.stuCount,
 						totalNum:classItem.stuCount,
+						csRate:classItem.csRate + '%',
 						overAverageRate:classItem.stuCount > 0 ? ((classItem.lineCount / classItem.stuCount) * 100).toFixed(2) : 0.00,
 						overAverageRate:classItem.stuCount > 0 ? ((classItem.lineCount / classItem.stuCount) * 100).toFixed(2) : 0.00,
 						average:classItem.totalAverage.toFixed(1),
 						average:classItem.totalAverage.toFixed(1),
 						standardDeviation:classItem.standardDeviation.toFixed(1),
 						standardDeviation:classItem.standardDeviation.toFixed(1),

+ 5 - 1
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/EvaluationList/TotalIndex.vue

@@ -140,13 +140,17 @@
 									<!-- 暂无实际参与人数数据 -->
 									<!-- 暂无实际参与人数数据 -->
 									{{ item.stuCount }}
 									{{ item.stuCount }}
 								</span>
 								</span>
+								<span>{{ $t("totalAnalysis.lostStu") }}:
+									<!-- 得分率数据 -->
+									{{ item.lostStu.length }}
+								</span>
 								<span>{{ $t("totalAnalysis.echarts_text14") }}:
 								<span>{{ $t("totalAnalysis.echarts_text14") }}:
 									<!-- 暂无参与率数据 -->
 									<!-- 暂无参与率数据 -->
 									{{ getJoinRate(item) }}
 									{{ getJoinRate(item) }}
 								</span>
 								</span>
 								<span>{{ $t("totalAnalysis.sca_chart_text1") }}:
 								<span>{{ $t("totalAnalysis.sca_chart_text1") }}:
 									<!-- 得分率数据 -->
 									<!-- 得分率数据 -->
-									<!-- {{ item.score.toFixed(2) + '%' }} -->
+									{{ item.sRate.toFixed(2) + '%' }}
 								</span>
 								</span>
 								<!-- <span>{{ $t("totalAnalysis.echarts_text15") }}:
 								<!-- <span>{{ $t("totalAnalysis.echarts_text15") }}:
 										</span> -->
 										</span> -->

+ 2 - 7
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/ScatterAnalysis/ScatterAnalysis.vue

@@ -104,7 +104,7 @@
                     },
                     },
 					{
 					{
 					    title: this.$t('totalAnalysis.sca_chart_text1'),
 					    title: this.$t('totalAnalysis.sca_chart_text1'),
-					    key: 'scoreRate',
+					    key: 'sRate',
 					    sortable: 'custom',
 					    sortable: 'custom',
 					    minWidth: 50
 					    minWidth: 50
 					},
 					},
@@ -121,12 +121,6 @@
 						},
 						},
 					    minWidth: 60
 					    minWidth: 60
 					},
 					},
-                    // {
-                    //     title: this.$t('totalAnalysis.base_score'),
-                    //     sortable: 'custom',
-                    //     key: 'score',
-                    //     minWidth: 60
-                    // },
                     {
                     {
                         title: this.$t('totalAnalysis.sca_table_text1'),
                         title: this.$t('totalAnalysis.sca_table_text1'),
                         key: 'trueNum',
                         key: 'trueNum',
@@ -201,6 +195,7 @@
 						stu.subjects[subjectIndex].scatter[0] = stu.name
 						stu.subjects[subjectIndex].scatter[0] = stu.name
 						obj[key] = stu.subjects[subjectIndex].scatter[index]
 						obj[key] = stu.subjects[subjectIndex].scatter[index]
 						obj.no = stu.no
 						obj.no = stu.no
+						obj.sRate = (stu.subjects[subjectIndex].sRate).toFixed(0) + '%'
 					})
 					})
 					result.push(obj)
 					result.push(obj)
 				})
 				})

+ 1 - 1
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/index.vue

@@ -174,7 +174,7 @@
 				let totalScore = analysisJson.students.reduce(function(total, currentValue, currentIndex, arr) {
 				let totalScore = analysisJson.students.reduce(function(total, currentValue, currentIndex, arr) {
 					return total + currentValue.total;
 					return total + currentValue.total;
 				}, 0);
 				}, 0);
-				this.totalAverage = (totalScore / analysisJson.students.length).toFixed(2)
+				this.totalAverage = (totalScore / analysisJson.students.length).toFixed(1)
 			},
 			},
 
 
 			onClassSelect(val) {
 			onClassSelect(val) {