Browse Source

Add: 教学看板调整&&智育看板编写

OnePsycho 2 years ago
parent
commit
3f13ca6312

+ 60 - 60
TEAMModelOS/ClientApp/public/lang/zh-CN.js

@@ -504,7 +504,7 @@ const LANG_ZH_CN = {
         hadExp: '(已到期)',
         unuse: '(未启用)',
         forever: '(永久授权)',
-        longTime:'长期授权',
+        longTime: '长期授权',
         useInfo: '使用状况:',
         unband: '解绑设备',
         cancel: '取消',
@@ -1110,7 +1110,7 @@ const LANG_ZH_CN = {
         classStuErr: '获取班级名单失败',
         unGroup: '未分组学生',
         setGroupName: '请设置组名',
-        filterExpList:'到期名单',
+        filterExpList: '到期名单',
 
         //NewCusMgt.vue
         schdTable: '课表模式',
@@ -3065,13 +3065,13 @@ const LANG_ZH_CN = {
         attendCount: '出席率',
         groupCount: '小组数',
         totalPoint: '总记分',
-        collateTaskCount: '任务总数',
+        collateTaskCount: '合作学习',
         collateCount: '作品总数',
-        pushCount: '推送资源数',
+        pushCount: '差异教学',
         score: '总互动分',
         interactionCount: '互动题数',
-        clientInteractionCount: '互动总数',
-        examQuizCount: '测验总题数',
+        clientInteractionCount: '互动教学',
+        examQuizCount: '精准教学',
         examPointRate: '测验得分率',
         action: '操作',
         allTable: '课例数据汇总表',
@@ -3096,7 +3096,7 @@ const LANG_ZH_CN = {
             pie1: '教研组',
             pie2: '课例类别',
             pie3: '年级',
-            pie4: '科',
+            pie4: '科',
             title2: '课例趋势图',
             title3: '减负数据分析',
             title4: '常用科技工具统计',
@@ -3422,7 +3422,7 @@ const LANG_ZH_CN = {
         dashboard: {
             title: '校园大数据',
             title3: '五育并举大数据看板',
-            block1: '教学数据',
+            block1: '教学数据看板',
             block2: '教室物联',
             block3: '德育评价',
             block4: '学情分析',
@@ -3433,7 +3433,7 @@ const LANG_ZH_CN = {
             comingSoon: '即将上线',
             loading: '加载中',
             quit: '退出',
-            title2: '教学数据',
+            title2: '教学数据看板',
         },
         // 播放视频
         video: {
@@ -3687,7 +3687,7 @@ const LANG_ZH_CN = {
         irsRep: 'IRS号码重复',
         noRep: '座号重复',
         getTeachersErr: '获取教师列表失败',
-        gdFreeze:'已毕业的班级不能被删除和修改',
+        gdFreeze: '已毕业的班级不能被删除和修改',
 
         //ClassMgt.vue
         className: '名称',
@@ -5451,8 +5451,8 @@ const LANG_ZH_CN = {
             trainCheck: '研修考核',
             activity: '活动平台',
             trainSystem: '研修平台',
-            artExam:'评测活动',
-            artExam1:'评测考核',
+            artExam: '评测活动',
+            artExam1: '评测考核',
         },
         compt: {
             cusWare: '课件',
@@ -5629,8 +5629,8 @@ const LANG_ZH_CN = {
     },
     // 教师管理
     teachContent: {
-        ext1:'请保持后缀名与源文件后缀名',
-        ext2:'一致!',
+        ext1: '请保持后缀名与源文件后缀名',
+        ext2: '一致!',
         recent: '最近',
         recentTips: '临时缓存最近上传的资源,最多保存20条。退出账号或更换电脑缓存记录将会被清空。',
         filterRes: '教材',
@@ -6950,51 +6950,51 @@ const LANG_ZH_CN = {
         rate: '占比'
     },
     // 艺术评价模块
-    ae:{
-        ae0:'评测',
-        ae1:'材料',
-        ae2:'名称',
-        ae3:'请输入艺术评测活动名称',
-        ae4:'学科',
-        ae5:'请选择艺术评测活动学科',
-        ae6:'班级',
-        ae7:'时间',
-        ae8:'请设置评测时间',
-        ae9:'评价指标',
-        ae10:'音乐',
-        ae11:'美术',
-        ae12:'艺术评测发布成功',
-        ae13:'艺术评测发布失败',
-        ae14:'试卷复制失败',
-        ae15:'查询发布对象失败',
-        ae16:'评测试卷:',
-        ae17:'重选',
-        ae18:'请挑选评测试卷',
-        ae19:'作答方式:',
-        ae20:'默认排序',
-        ae21:'乱序作答',
-        ae22:'挑选艺术评测试卷',
-        ae23:'试卷来源:',
-        ae24:'醍摩豆',
-        ae25:'本校',
-        ae26:'返回试卷列表',
-        ae27:'参数异常',
-        ae28:'艺术评测活动',
-        ae29:'未提交',
-        ae30:'暂无区级艺术评测指标',
-        ae31:'删除艺术评测活动',
-        ae32:'是否确认删除',
-        ae33:'删除成功',
-        ae34:'删除失败',
-        ae35:'获取班级列表失败',
-        ae36:'提交时间',
-        ae37:'材料描述:',
-        ae38:'请输入材料描述...',
-        ae39:'请完成评价指标详细设置',
-        ae40:'请完成',
-        ae41:'详细设置',
-        ae42:'试卷不可用',
-        ae43:'艺术评测试卷只能包含客观题(单选、多选、判断),请重新挑选试卷或前往试卷库修改当前试卷。',
-        ae44:'试卷数据异常',
+    ae: {
+        ae0: '评测',
+        ae1: '材料',
+        ae2: '名称',
+        ae3: '请输入艺术评测活动名称',
+        ae4: '学科',
+        ae5: '请选择艺术评测活动学科',
+        ae6: '班级',
+        ae7: '时间',
+        ae8: '请设置评测时间',
+        ae9: '评价指标',
+        ae10: '音乐',
+        ae11: '美术',
+        ae12: '艺术评测发布成功',
+        ae13: '艺术评测发布失败',
+        ae14: '试卷复制失败',
+        ae15: '查询发布对象失败',
+        ae16: '评测试卷:',
+        ae17: '重选',
+        ae18: '请挑选评测试卷',
+        ae19: '作答方式:',
+        ae20: '默认排序',
+        ae21: '乱序作答',
+        ae22: '挑选艺术评测试卷',
+        ae23: '试卷来源:',
+        ae24: '醍摩豆',
+        ae25: '本校',
+        ae26: '返回试卷列表',
+        ae27: '参数异常',
+        ae28: '艺术评测活动',
+        ae29: '未提交',
+        ae30: '暂无区级艺术评测指标',
+        ae31: '删除艺术评测活动',
+        ae32: '是否确认删除',
+        ae33: '删除成功',
+        ae34: '删除失败',
+        ae35: '获取班级列表失败',
+        ae36: '提交时间',
+        ae37: '材料描述:',
+        ae38: '请输入材料描述...',
+        ae39: '请完成评价指标详细设置',
+        ae40: '请完成',
+        ae41: '详细设置',
+        ae42: '试卷不可用',
+        ae43: '艺术评测试卷只能包含客观题(单选、多选、判断),请重新挑选试卷或前往试卷库修改当前试卷。',
+        ae44: '试卷数据异常',
     }
 }

+ 54 - 54
TEAMModelOS/ClientApp/public/lang/zh-TW.js

@@ -504,7 +504,7 @@ const LANG_ZH_TW = {
         hadExp: '(已到期)',
         unuse: '(未啟用)',
         forever: '(永久授權)',
-        longTime:'長期授權',
+        longTime: '長期授權',
         useInfo: '使用狀況:',
         unband: '解綁設備',
         cancel: '取消',
@@ -1110,7 +1110,7 @@ const LANG_ZH_TW = {
         classStuErr: '獲取班級名單失敗',
         unGroup: '未分組學生',
         setGroupName: '請設定組名',
-        filterExpList:'到期名單',
+        filterExpList: '到期名單',
 
         //NewCusMgt.vue
         schdTable: '課表模式',
@@ -3098,7 +3098,7 @@ const LANG_ZH_TW = {
             pie1: '教師群組',
             pie2: '課堂類別',
             pie3: '年級',
-            pie4: '科',
+            pie4: '科',
             title2: '課堂趨勢圖',
             title3: '活動類型分析',
             title4: '常用科技工具統計',
@@ -3688,7 +3688,7 @@ const LANG_ZH_TW = {
         irsRep: 'IRS號碼重複',
         noRep: '座號重複',
         getTeachersErr: '獲取教師列表失敗',
-        gdFreeze:'已畢業的班級不能被刪除和修改',
+        gdFreeze: '已畢業的班級不能被刪除和修改',
 
         //ClassMgt.vue
         className: '名稱',
@@ -5452,8 +5452,8 @@ const LANG_ZH_TW = {
             trainCheck: '研習審核',
             activity: '活動平臺',
             trainSystem: '研習平臺',
-            artExam:'評測活動',
-            artExam1:'評測考核',
+            artExam: '評測活動',
+            artExam1: '評測考核',
         },
         compt: {
             cusWare: '教材',
@@ -5630,8 +5630,8 @@ const LANG_ZH_TW = {
     },
     // 教师管理
     teachContent: {
-        ext1:'請保持後綴名與源文件後綴名',
-        ext2:'一致!',
+        ext1: '請保持後綴名與源文件後綴名',
+        ext2: '一致!',
         recent: '最近',
         recentTips: '暫存最近上傳的資源,最多儲存20條。 登出帳號或是更換電腦,暫存紀錄將會被清空。 ',
         filterRes: '教材',
@@ -6950,51 +6950,51 @@ const LANG_ZH_TW = {
         rate: '比例'
     },
     // 艺术评价模块
-    ae:{
-        ae0:'評量',
-        ae1:'材料',
-        ae2:'名稱',
-        ae3:'請輸入藝術評量活動名稱',
-        ae4:'學科',
-        ae5:'請選擇藝術評量活動科目',
-        ae6:'班級',
-        ae7:'時間',
-        ae8:'請設置評量時間',
-        ae9:'評量指標',
-        ae10:'音樂',
-        ae11:'美術',
-        ae12:'藝術評量發布成功',
-        ae13:'藝術評量發布失敗',
-        ae14:'試卷複製失敗',
-        ae15:'查詢發佈對象失敗',
-        ae16:'評量試卷:',
-        ae17:'重選',
-        ae18:'請挑選評量試卷',
-        ae19:'作答方式:',
-        ae20:'預設排序',
-        ae21:'亂序作答',
-        ae22:'挑選藝術評量試卷',
-        ae23:'試卷來源:',
-        ae24:'醍摩豆',
-        ae25:'本校',
-        ae26:'返回試卷列表',
-        ae27:'參數異常',
-        ae28:'藝術評量活動',
-        ae29:'未提交',
-        ae30:'暫無區級藝術評量指標',
-        ae31:'刪除藝術評量活動',
-        ae32:'是否確認刪除',
-        ae33:'刪除成功',
-        ae34:'刪除失敗',
-        ae35:'獲取班級列表失敗',
-        ae36:'繳交時間',
-        ae37:'資料描述:',
-        ae38:'請輸入資料描述...',
-        ae39:'請完成評量指標詳細設定',
-        ae40:'請完成',
-        ae41:'詳細設定',
-        ae42:'試卷不可用',
-        ae43:'藝術評量試卷只能包含客觀類題型(單選、複選、是非),請重新挑選試卷或前往試卷庫修改當前試卷。 ',
-        ae44:'試卷資料異常',
+    ae: {
+        ae0: '評量',
+        ae1: '材料',
+        ae2: '名稱',
+        ae3: '請輸入藝術評量活動名稱',
+        ae4: '學科',
+        ae5: '請選擇藝術評量活動科目',
+        ae6: '班級',
+        ae7: '時間',
+        ae8: '請設置評量時間',
+        ae9: '評量指標',
+        ae10: '音樂',
+        ae11: '美術',
+        ae12: '藝術評量發布成功',
+        ae13: '藝術評量發布失敗',
+        ae14: '試卷複製失敗',
+        ae15: '查詢發佈對象失敗',
+        ae16: '評量試卷:',
+        ae17: '重選',
+        ae18: '請挑選評量試卷',
+        ae19: '作答方式:',
+        ae20: '預設排序',
+        ae21: '亂序作答',
+        ae22: '挑選藝術評量試卷',
+        ae23: '試卷來源:',
+        ae24: '醍摩豆',
+        ae25: '本校',
+        ae26: '返回試卷列表',
+        ae27: '參數異常',
+        ae28: '藝術評量活動',
+        ae29: '未提交',
+        ae30: '暫無區級藝術評量指標',
+        ae31: '刪除藝術評量活動',
+        ae32: '是否確認刪除',
+        ae33: '刪除成功',
+        ae34: '刪除失敗',
+        ae35: '獲取班級列表失敗',
+        ae36: '繳交時間',
+        ae37: '資料描述:',
+        ae38: '請輸入資料描述...',
+        ae39: '請完成評量指標詳細設定',
+        ae40: '請完成',
+        ae41: '詳細設定',
+        ae42: '試卷不可用',
+        ae43: '藝術評量試卷只能包含客觀類題型(單選、複選、是非),請重新挑選試卷或前往試卷庫修改當前試卷。 ',
+        ae44: '試卷資料異常',
     }
 }

+ 11 - 14
TEAMModelOS/ClientApp/src/components/research-dashboard/BaseTechBar.vue

@@ -9,23 +9,13 @@ export default {
     }
   },
   methods: {
-    doRender() {
+    doRender(data) {
       let myChart = this.$echarts.init(document.getElementById('baseTechBar'))
       var echartsData = {
         title: 'title',
         city: ['互动教学', '合作学习', '差异教学', '精准教学'],
-        legend: ['一年级', '二年级', '三年级', '四年级'],
-        data: this.isTestSite ? [
-          [0, 0, 0, 0],
-          [0, 0, 0, 0],
-          [0, 0, 0, 0],
-          [0, 0, 0, 0],
-        ] : [
-          [1550, 1260, 2125, 1800],
-          [929, 945, 1012, 930],
-          [2310, 2890, 3198, 3645],
-          [1670, 2337, 2724, 2990],
-        ],
+        legend: data.legend,
+        data: data.data,
       };
       var colors = ['#F56679', '#4C98FB', '#8CDF6C', '#9D50E0'];
       let option = {
@@ -130,7 +120,14 @@ export default {
     }
   },
   mounted() {
-    this.doRender()
+    let pieJson = this.$store.state.dashboard.researchDashboard
+    let echartJson = {
+      legend: pieJson.teachingCount.map(i => i.name),
+      data: pieJson.teachingCount.map(i => {
+        return [i.clientInteractionCount, i.collateTaskCount, i.pushCount, i.examCount]
+      })
+    }
+    this.doRender(echartJson)
   },
   computed: {
     isTestSite() {

+ 112 - 119
TEAMModelOS/ClientApp/src/components/research-dashboard/LeftBottom.vue

@@ -1,133 +1,126 @@
 <template>
-	<div id="bottomLeft">
-		<p class="dashboard-block-title">
-			<Icon type="md-pie" />
-			<span>{{ $t('lessonRecord.echarts.title1') }}</span>
-			<dv-decoration-3 class="dv-dec-3" />
-		</p>
-		<div class="bg-color-black">
-			<div class="pie-item">
-				<BasePie :title="$t('lessonRecord.echarts.pie3')" :pieData="gradeData"/>
-			</div>
-			<div class="pie-item">
-				<BasePie :title="$t('lessonRecord.echarts.pie4')" :pieData="subjectData"/>
-			</div>
-			<div class="pie-item">
-				<BasePie :title="$t('lessonRecord.echarts.pie1')" :pieData="groupData"/>
-			</div>
-			<div class="pie-item">
-				<BasePie :title="$t('lessonRecord.echarts.pie2')" :pieData="cateData"/>
-			</div>
-		</div>
-	</div>
+  <div id="bottomLeft">
+    <p class="dashboard-block-title">
+      <Icon type="md-pie" />
+      <span>{{ $t('lessonRecord.echarts.title1') }}</span>
+      <dv-decoration-3 class="dv-dec-3" />
+    </p>
+    <div class="bg-color-black">
+      <div class="pie-item">
+        <BasePie :title="$t('lessonRecord.echarts.pie3')" :pieData="gradeData" />
+      </div>
+      <div class="pie-item">
+        <BasePie :title="$t('lessonRecord.echarts.pie4')" :pieData="subjectData" />
+      </div>
+      <div class="pie-item">
+        <BasePie :title="$t('lessonRecord.echarts.pie1')" :pieData="groupData" />
+      </div>
+      <div class="pie-item">
+        <BasePie :title="$t('lessonRecord.echarts.pie2')" :pieData="cateData" />
+      </div>
+    </div>
+  </div>
 </template>
 
 <script>
-	import BasePie from '@/components/echart/pie/index'
-	export default {
-		components: {
-			BasePie
-		},
-		data() {
-			return {
-				groupData: [],
-				cateData:[],
-				gradeData:[],
-				subjectData:[]
-			}
-		},
-		created() {
-			let pieJson = this.$store.state.dashboard.researchDashboard
-			let curPeriod = this.$store.state.user.curPeriod
-			console.log(curPeriod.subjects.map(i => i.id))
-			if(pieJson){
-				this.gradeData = pieJson.classify_grade.map(i => {
-					return {
-						name:curPeriod.grades[+i.name],
-						value:i.value
-					}
-				})
-				
-				this.subjectData = pieJson.classify_sub.map(i => {
-					let findSubject = curPeriod.subjects.find(j => j.id === i.name)
-					return {
-						name:findSubject ? findSubject.name : this.$t('vote.form.noMatchDataTip'),
-						value:i.value
-					}
-				})
-				
-				if(!pieJson.classify_group.length){
-					this.groupData = [{
-						name:this.$t('lessonRecord.echarts.noGroup'),
-						value:0
-					}]
-				}else{
-					this.groupData = pieJson.classify_group.map(i => {
-						return {
-							name:i.name,
-							value:i.value
-						}
-					})
-				}
-				
-				if(!pieJson.classify_type.length){
-					this.cateData = [{
-						name:this.$t('lessonRecord.echarts.noType'),
-						value:0
-					}]
-				}else{
-					this.cateData = pieJson.classify_type.map(i => {
-						return {
-							name:i.name,
-							value:i.value
-						}
-					})
-				}
-				
-			}
-		},
-	}
+import BasePie from '@/components/echart/pie/index'
+export default {
+  components: {
+    BasePie
+  },
+  data() {
+    return {
+      groupData: [],
+      cateData: [],
+      gradeData: [],
+      subjectData: []
+    }
+  },
+  created() {
+    let pieJson = this.$store.state.dashboard.researchDashboard
+    let curPeriod = this.$store.state.user.curPeriod
+    console.log(curPeriod.subjects.map(i => i.id))
+    if (pieJson) {
+      this.gradeData = pieJson.classify_grade
+      this.subjectData = pieJson.classify_sub.map(i => {
+        let findSubject = curPeriod.subjects.find(j => j.id === i.name)
+        return {
+          name: findSubject ? findSubject.name : this.$t('vote.form.noMatchDataTip'),
+          value: i.value
+        }
+      })
+
+      if (!pieJson.classify_group.length) {
+        this.groupData = [{
+          name: this.$t('lessonRecord.echarts.noGroup'),
+          value: 0
+        }]
+      } else {
+        this.groupData = pieJson.classify_group.map(i => {
+          return {
+            name: i.name,
+            value: i.value
+          }
+        })
+      }
+
+      if (!pieJson.classify_type.length) {
+        this.cateData = [{
+          name: this.$t('lessonRecord.echarts.noType'),
+          value: 0
+        }]
+      } else {
+        this.cateData = pieJson.classify_type.map(i => {
+          return {
+            name: i.name,
+            value: i.value
+          }
+        })
+      }
+
+    }
+  },
+}
 </script>
 
 <style lang="less" scoped>
-	@box-height: 100%;
-	@box-width: 100%;
-
-	#bottomLeft {
-		padding: 20px 16px;
-		height: @box-height;
-		width: @box-width;
-		display: flex;
-		flex-direction: column;
-		justify-content: space-between;
+@box-height: 100%;
+@box-width: 100%;
 
+#bottomLeft {
+  padding: 20px 16px;
+  height: @box-height;
+  width: @box-width;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
 
-		.bg-color-black {
-			height: 96%;
-			padding-top: 10px;
-			display: flex;
-			flex-wrap: wrap;
-			justify-content: center;
-			align-items: center;
+  .bg-color-black {
+    height: 96%;
+    padding-top: 10px;
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: center;
+    align-items: center;
 
-			.pie-item {
-				width: 48%;
-				height: 48%;
-			}
-		}
+    .pie-item {
+      width: 48%;
+      height: 48%;
+    }
+  }
 
-		.text {
-			color: #c3cbde;
-		}
+  .text {
+    color: #c3cbde;
+  }
 
-		.chart-box {
-			margin-top: 16px;
-			width: 170px;
-			height: 170px;
+  .chart-box {
+    margin-top: 16px;
+    width: 170px;
+    height: 170px;
 
-			.active-ring-name {
-				padding-top: 10px;
-			}
-		}
-	}
+    .active-ring-name {
+      padding-top: 10px;
+    }
+  }
+}
 </style>

+ 24 - 1
TEAMModelOS/ClientApp/src/view/dashboard/Index.vue

@@ -25,6 +25,7 @@
   </div>
 </template>
 <script>
+import { mapGetters } from 'vuex'
 export default {
   data(vm) {
     return {
@@ -121,12 +122,34 @@ export default {
         this.$router.push('/stuDetails')
       } else if (item.path === 'fiveEdu' && localStorage.getItem('srvAdr') === 'China' && ['habook', 'ydzt', 'cdydzt', 'hbcn'].includes(this.$store.state.userInfo.schoolCode)) {
         this.$router.push('/fiveEdu')
+      } else if (item.path === 'teacher') {
+        this.toPrivSokrate()
       } else {
         this.$Message.warning(this.$t('researchCenter.dashboard.comingSoon'))
       }
-    }
+    },
+    //获取快速登录的code
+    getLoginCode() {
+      this.isLoading = true
+      let idToken = localStorage.getItem('id_token')
+      return this.$api.login.getCode(idToken)
+    },
+    //教师个人跳转苏格拉底
+    toPrivSokrate() {
+      this.getLoginCode().then(
+        res => {
+          let url = `${this.curSiteConfig.sokrateUrl}/auth/login/callback-habook?code=${res.code}`
+          window.open(url)
+        }
+      ).finally(() => {
+        this.isLoading = false
+      })
+    },
   },
   computed: {
+    ...mapGetters({
+      curSiteConfig: 'config/getCurSiteConfig',
+    }),
     /* 判断是否为测试站 */
     isTestSite() {
       return window.location.host.includes('test.teammodel')

+ 6 - 7
TEAMModelOS/ClientApp/src/view/dashboard/fiveEdu/FiveEdu.vue

@@ -28,7 +28,7 @@
           <dv-decoration-10 class="dv-dec-10-s" />
         </div>
 
-        <div class="body-box">
+        <div class="body-box" v-if="activeMenuId === 'all'">
           <!-- 左侧 -->
           <div class="left-box">
             <div class="left-box-top">
@@ -169,10 +169,7 @@
           </div>
         </div>
 
-        <!-- <div class="iframe-box" v-if="activeMenuId !== 'all'" style="width:100%;height:100%">
-          <iframe style="width:100%;height:100%" src="https://paas-admin.xydqq.cn/GkI043vXpK9sat5yDW008oaWt9yZ1dwIIq7rdiUywbU4HgI656W2cIbzOWRzoI93vzv82l28DyQKxVVd9qPqFkLLmrlCkIvDlWecschool-datawuhZVGb2K8KM5hlGfU0123tKhKd6b5f84EPUOcszar3ltNpImTPa8BeQtVbcuUtdWUL0zmRaUJRHOlYRVbDofmn9K7XTNwf4Q9mh" frameborder="0" width="100%" height="100%"></iframe>
-        </div> -->
-
+        <StudyDash v-else-if="activeMenuId === 'study'"></StudyDash>
       </div>
     </div>
   </div>
@@ -189,6 +186,7 @@ import BaseMusicCircle from '@/components/dashboard/student/BaseMusicCircle'
 import BaseCircle from '@/components/dashboard/student/BaseCircle'
 import StudentDetails from '../Student'
 import BaseProgressBar from '@/components/dashboard/student/BaseProgressBar'
+import StudyDash from '../study/StudyDash'
 export default {
   data() {
     return {
@@ -352,6 +350,7 @@ export default {
     }
   },
   components: {
+    StudyDash,
     countTo,
     StudentDetails,
     BaseRateLine,
@@ -384,9 +383,9 @@ export default {
       if (menu.id === 'moral') {
         window.open('https://paas-admin.xydqq.cn/GkI043vXpK9sat5yDW008oaWt9yZ1dwIIq7rdiUywbU4HgI656W2cIbzOWRzoI93vzv82l28DyQKxVVd9qPqFkLLmrlCkIvDlWecschool-datawuhZVGb2K8KM5hlGfU0123tKhKd6b5f84EPUOcszar3ltNpImTPa8BeQtVbcuUtdWUL0zmRaUJRHOlYRVbDofmn9K7XTNwf4Q9mh')
       } else if (menu.id === 'study') {
-        window.open('https://np3mzo.axshare.com/#id=p2g0pj&p=%E6%99%BA%E8%82%B2%E7%9C%8B%E6%9D%BF%EF%BC%88%E6%A0%A1%E7%BA%A7%EF%BC%89')
+        // window.open('https://np3mzo.axshare.com/#id=p2g0pj&p=%E6%99%BA%E8%82%B2%E7%9C%8B%E6%9D%BF%EF%BC%88%E6%A0%A1%E7%BA%A7%EF%BC%89')
       } else if (menu.id === 'all') {
-        window.open('https://np3mzo.axshare.com/#id=ck6wma&p=五育看板(总览)')
+        // window.open('https://np3mzo.axshare.com/#id=ck6wma&p=五育看板(总览)')
       } else if (menu.id === 'sport') {
         window.open('https://ydztshow.cdwalker.com/app-health-100/smart-course')
       } else if (menu.id === 'art') {

File diff suppressed because it is too large
+ 258 - 0
TEAMModelOS/ClientApp/src/view/dashboard/study/BaseExamLine.vue


+ 123 - 0
TEAMModelOS/ClientApp/src/view/dashboard/study/BaseRadar.vue

@@ -0,0 +1,123 @@
+<template>
+  <div id="studyRadar" class="art-echart"></div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      option: null,
+    }
+  },
+  methods: {
+    doRender() {
+      let myChart = this.$echarts.init(document.getElementById('studyRadar'))
+      var dataname = ['记忆', '理解', '应用', '创造', '评价', '分析']
+      var datamax = [20, 20, 20, 20, 20, 20]
+      var datavaule = [10, 16, 20, 15, 12, 18]
+
+      var indicator = []
+      for (var i = 0; i < dataname.length; i++) {
+        indicator.push({
+          name: dataname[i],
+          max: datamax[i],
+        })
+      }
+      let option = {
+        tooltip: {
+          show: false,
+          trigger: "item",
+        },
+        radar: {
+          center: ["50%", "50%"],
+          radius: "90%",
+          startAngle: 240,
+          splitNumber: 5,
+          splitArea: {
+            areaStyle: {
+              color: [
+                'rgba(0,96,208, 0.1)', 'rgba(0,96,208, 0.2)',
+                'rgba(0,96,208, 0.4)', 'rgba(0,96,208, 0.6)',
+                'rgba(0,96,208, 0.8)', 'rgba(0,96,208, 1)'
+              ].reverse()
+            }
+          },
+          axisLabel: {
+            show: false,
+          },
+          axisLine: {
+            show: true,
+            lineStyle: {
+              color: "transparent"
+            }
+          },
+          splitLine: {
+            show: true,
+            lineStyle: {
+              color: "transparent"
+            }
+          },
+          name: {
+            textStyle: {
+              color: '#fff',
+              fontSize: '12',
+              padding: 10
+            }
+          },
+          indicator: indicator
+        },
+
+        series: [{
+          type: "radar",
+          symbol: "circle",
+          symbolSize: 7,
+          areaStyle: {
+            normal: {
+              color: 'rgba(170, 216, 255, 0.2)',
+            }
+          },
+
+          itemStyle: {
+            color: '#84E1FF',
+            borderColor: '#00A7FE',
+            borderWidth: 1,
+          },
+          lineStyle: {
+            normal: {
+              color: "#00A7FE",
+              width: 2
+            }
+          },
+          data: [datavaule]
+        }]
+      };
+      myChart.clear()
+      myChart.setOption(option)
+      window.addEventListener('resize', function () {
+        myChart.resize()
+      })
+
+    }
+  },
+  mounted() {
+    this.doRender()
+  },
+  //   watch: {
+  //     '$store.state.dashboard.artDashboard': {
+  //       deep: true,
+  //       immediate: true,
+  //       handler(n, o) {
+
+  //       }
+  //     }
+  //   }
+}
+</script>
+
+<style>
+.art-echart {
+  width: 100%;
+  height: 100%;
+  margin: 0 auto;
+  display: block;
+}
+</style>

+ 146 - 0
TEAMModelOS/ClientApp/src/view/dashboard/study/BaseSubLine.vue

@@ -0,0 +1,146 @@
+<template>
+  <div id="studySubjectLine" class="art-echart"></div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      option: null,
+    }
+  },
+  methods: {
+    doRender() {
+      let myChart = this.$echarts.init(document.getElementById('studySubjectLine'))
+      let name = "单科平均分"
+      let xData = [
+        "语文",
+        "数学",
+        "英语",
+        "音乐"
+      ]
+      let yData = [
+        68,
+        84,
+        77,
+        72
+      ]
+      let option = {
+        tooltip: {
+          trigger: 'axis',
+          axisPointer: {            // 坐标轴指示器,坐标轴触发有效
+            type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
+          },
+          backgroundColor: 'rgba(13,5,30,.6)',
+          borderColor: ' rgba(255,255,255,.2)',
+          borderWidth: 1,
+          padding: 5
+        },
+        legend: {
+          show: false
+        },
+        grid: {
+          left: '3%',
+          right: '8%',
+          bottom: '5%',
+          top: ' 15%',
+          containLabel: true
+        },
+        xAxis: [
+          {
+            type: 'category',
+            data: xData,
+            splitLine: {
+              show: false
+            },
+            axisLabel: {
+              show: true,
+              // interval: '0',//X轴坐标全显示
+              textStyle: {
+                color: "#fff"
+              }
+            }
+          }
+        ],
+        yAxis: [
+          {
+            type: 'value',
+            splitLine: {
+              show: false
+            },
+            axisLabel: {
+              show: true,
+              textStyle: {
+                color: "#fff"
+              }
+            }
+          }
+        ],
+        series: [
+          {
+            name: name,
+            type: 'bar',
+            barMaxWidth: 20,
+            barMinWidth: 10,
+            minWidth: 5,
+            xAxisIndex: 0,
+            yAxisIndex: 0,
+            itemStyle: {
+              barBorderRadius: 20,
+              normal: {
+                barBorderRadius: 10,
+                color: function (params) {
+                  var colors = []
+                  var maxIndex = 1;
+                  if (params.dataIndex == maxIndex) {
+                    colors = ["#fc532d", "#fe7018", "#ff8706"]
+                  } else {
+                    colors = ["#00aef2", "#0077fe", "#0072ff"];
+                  }
+                  return new echarts.graphic.LinearGradient(0, 0, 1, 0,
+                    [
+                      { offset: 0, color: colors[0] },
+                      { offset: 0.5, color: colors[1] },
+                      { offset: 1, color: colors[2] }
+                    ]);
+                }
+              },
+              emphasis: {
+                color: "#fc532d"
+              }
+            },
+            zlevel: 1,
+            data: yData
+          }
+        ]
+      };
+      myChart.clear()
+      myChart.setOption(option)
+      window.addEventListener('resize', function () {
+        myChart.resize()
+      })
+
+    }
+  },
+  mounted() {
+    this.doRender()
+  },
+  //   watch: {
+  //     '$store.state.dashboard.artDashboard': {
+  //       deep: true,
+  //       immediate: true,
+  //       handler(n, o) {
+
+  //       }
+  //     }
+  //   }
+}
+</script>
+
+<style>
+.art-echart {
+  width: 100%;
+  height: 100%;
+  margin: 0 auto;
+  display: block;
+}
+</style>

+ 33 - 0
TEAMModelOS/ClientApp/src/view/dashboard/study/StudyDash.less

@@ -0,0 +1,33 @@
+.study-dash-container {
+    .right-box-top {
+        height: 64% !important;
+    }
+
+    .rank-wrap {
+        display: flex;
+        flex-direction: column;
+        padding: 10px;
+
+        .stu-rank-item {
+            margin-bottom: 10px;
+            display: flex;
+
+            .img-avatar {
+                border-radius: 100px;
+            }
+
+            .stu-info {
+                margin-left: 20px;
+                height: 100%;
+                display: flex;
+                flex-direction: column;
+                justify-content: space-between;
+
+                .name {
+                    font-weight: bold;
+                    font-size: 18px;
+                }
+            }
+        }
+    }
+}

+ 223 - 0
TEAMModelOS/ClientApp/src/view/dashboard/study/StudyDash.vue

@@ -0,0 +1,223 @@
+<template>
+  <div class="body-box study-dash-container">
+    <!-- 左侧 -->
+    <div class="left-box">
+      <div class="left-box-top">
+        <dv-border-box-12>
+          <div class="dashboard-block">
+            <div class="block-content">
+              <div class="static-wrap">
+                <div class="item" v-for="(item,index) in staticArr">
+                  <span class="num" :style="{color:item.color}">
+                    <countTo :startVal='0' :endVal='item.val' :duration='1000' class="count-num"></countTo>
+                  </span>
+                  <span class="label">{{ item.label }}</span>
+                </div>
+              </div>
+              <!-- <BaseLine></BaseLine> -->
+            </div>
+          </div>
+        </dv-border-box-12>
+      </div>
+      <div class="left-box-bottom">
+        <div class="left-bottom-left">
+          <dv-border-box-13>
+            <div class="dashboard-block">
+              <div class="block-title">
+                <span>近三次评测统计图</span>
+                <dv-decoration-1 style="width:150px;height:20px;" />
+              </div>
+              <div class="block-content">
+                <BaseExamLine></BaseExamLine>
+              </div>
+            </div>
+          </dv-border-box-13>
+          <dv-border-box-13>
+            <div class="dashboard-block">
+              <div class="block-title">
+                <span>学习稳定度统计分布</span>
+                <dv-decoration-1 style="width:150px;height:20px;" />
+              </div>
+              <div class="block-content">
+                <BaseScoreBar></BaseScoreBar>
+              </div>
+            </div>
+          </dv-border-box-13>
+        </div>
+        <div class="left-bottom-right">
+          <div class="top">
+            <dv-border-box-13>
+              <div class="dashboard-block">
+                <div class="block-title">
+                  <span>班级排名</span>
+                  <dv-decoration-1 style="width:150px;height:20px;" />
+                </div>
+                <div class="block-content">
+                  <dv-scroll-board :config="classRankConfig" />
+                </div>
+              </div>
+            </dv-border-box-13>
+            <dv-border-box-13>
+              <div class="dashboard-block">
+                <div class="block-title">
+                  <span>学生排名</span>
+                  <dv-decoration-1 style="width:150px;height:20px;" />
+                </div>
+                <div class="block-content">
+                  <div class="rank-wrap">
+                    <div class="stu-rank-item">
+                      <img class="img-avatar" @click="goStudent()" src="https://paas-admin.xydqq.cn/img/avatar.647bbbfe.png" alt="" width="60">
+                      <div class="stu-info">
+                        <p class="name">张三</p>
+                        <p class="id">140015511001</p>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </dv-border-box-13>
+          </div>
+        </div>
+      </div>
+    </div>
+    <!-- 右侧 -->
+    <div class="right-box">
+      <div class="right-box-top">
+        <dv-border-box-13>
+          <div class="dashboard-block">
+            <div class="block-title">
+              <span>各科表现排行</span>
+              <dv-decoration-1 style="width:150px;height:20px;" />
+            </div>
+            <div class="block-content" style="display:flex;flex-direction:column;">
+              <BaseSubLine></BaseSubLine>
+              <br>
+              <dv-scroll-ranking-board :config="stuRankConfig" style="width:90%;margin-left:5%" />
+            </div>
+          </div>
+        </dv-border-box-13>
+      </div>
+      <div class="right-box-bottom">
+        <dv-border-box-13>
+          <div class="dashboard-block">
+            <div class="block-title">
+              <span>认知层次分布</span>
+              <dv-decoration-1 style="width:150px;height:20px;" />
+            </div>
+            <div class="block-content">
+              <BaseStudyRadar></BaseStudyRadar>
+            </div>
+          </div>
+        </dv-border-box-13>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import countTo from 'vue-count-to'
+import BaseCircle from '@/components/dashboard/student/BaseCircle'
+import BaseScoreBar from '@/components/dashboard/studentAll/BaseScoreBar'
+import BaseExamLine from './BaseExamLine'
+import BaseSubLine from './BaseSubLine'
+import BaseStudyRadar from './BaseRadar'
+export default {
+  components: {
+    countTo,
+    BaseCircle,
+    BaseExamLine,
+    BaseScoreBar,
+    BaseSubLine,
+    BaseStudyRadar
+  },
+  data() {
+    return {
+      staticArr: [
+        {
+          label: '学生总数',
+          color: '#7ec4ff',
+          val: 7944
+        },
+        {
+          label: '评测总数',
+          color: '#7ec4ff',
+          val: 135
+        }, {
+          label: '线上评测数',
+          color: '#7ec4ff',
+          val: 44
+        },
+        {
+          label: '课中评测数',
+          color: '#7ec4ff',
+          val: 12
+        },
+        {
+          label: '阅卷评测数',
+          color: '#20d99d',
+          val: 64
+        },
+        {
+          label: '智育平均分',
+          color: '#ff8e2e',
+          val: 82.26
+        }
+      ],
+      stuTopArr: new Array(10),
+      classRankConfig: {
+        header: ['<span style="color:#32c5e9;font-weight: bold;">班级</span>', '<span style="color:#32c5e9;font-weight: bold;">最高分</span>', '<span style="color:#32c5e9;font-weight: bold;">最低分</span>', '<span style="color:#32c5e9;font-weight: bold;">综合平均分</span>'],
+        data: [
+          ['一年级1班', '84.3 分', '84.3 分', '84.3 分'],
+          ['一年级2班', '82.6 分', '84.3 分', '84.3 分'],
+          ['一年级3班', '76.0 分', '84.3 分', '84.3 分'],
+          ['一年级4班', '74.1 分', '84.3 分', '84.3 分'],
+          ['一年级5班', '65.8 分', '84.3 分', '84.3 分'],
+          ['一年级6班', '64.3 分', '84.3 分', '84.3 分'],
+          ['一年级1班', '84.3 分', '84.3 分', '84.3 分'],
+          ['一年级2班', '82.6 分', '84.3 分', '84.3 分'],
+          ['一年级3班', '76.0 分', '84.3 分', '84.3 分'],
+          ['一年级4班', '74.1 分', '84.3 分', '84.3 分'],
+          ['一年级5班', '65.8 分', '84.3 分', '84.3 分'],
+          ['一年级6班', '64.3 分', '84.3 分', '84.3 分'],
+        ],
+        align: ['center'],
+        rowNum: 12,
+        headerHeight: 30,
+        headerBGC: "transparent", //表头
+        oddRowBGC: "transparent", //奇数行
+        evenRowBGC: "transparent", //偶数行
+      },
+      stuRankConfig: {
+        data: [
+          {
+            name: '詹姆斯',
+            value: 55
+          },
+          {
+            name: '库里',
+            value: 96
+          },
+          {
+            name: '奥尼尔',
+            value: 78
+          },
+          {
+            name: '韦德',
+            value: 66
+          },
+          {
+            name: '科比',
+            value: 80
+          }
+        ],
+        unit: '分'
+      },
+    }
+  }
+}
+</script>
+
+<style lang="less">
+@import "StudyDash.less";
+// @import "../fiveEdu/FiveEdu.less";
+</style>

+ 30 - 25
TEAMModelOS/ClientApp/src/view/research-center/ResearchMgt.vue

@@ -332,8 +332,8 @@ export default {
           type: '>='
         },
         {
-          name: this.$t('lessonRecord.examQuizCount'),
-          key: 'examQuizCount',
+          name: this.$t('lessonRecord.examCount'),
+          key: 'examCount',
           val: 0,
           unit: 'count',
           type: '>='
@@ -408,68 +408,72 @@ export default {
           minWidth: 400
         },
         {
-          title: vm.$t('lessonRecord.attendCount'),
-          key: 'attendRate',
+          title: vm.$t('lessonRecord.clientInteractionCount'),
+          key: 'clientInteractionCount',
           sortable: true,
           ellipsis: true,
-          render: function (h, params) {
-            return h('span', (Number(params.row.attendRate)).toFixed(2) + '%')
-          },
         },
         {
-          title: vm.$t('lessonRecord.groupCount'),
-          key: 'groupCount',
+          title: vm.$t('lessonRecord.collateTaskCount'),
+          key: 'collateTaskCount',
           sortable: true,
           ellipsis: true,
         },
         {
-          title: vm.$t('lessonRecord.totalPoint'),
-          key: 'totalPoint',
+          title: vm.$t('lessonRecord.pushCount'),
+          key: 'pushCount',
           sortable: true,
           ellipsis: true,
         },
         {
-          title: vm.$t('lessonRecord.collateTaskCount'),
-          key: 'collateTaskCount',
+          title: vm.$t('lessonRecord.examQuizCount'),
+          key: 'examCount',
           sortable: true,
           ellipsis: true,
         },
         {
-          title: vm.$t('lessonRecord.collateCount'),
-          key: 'collateCount',
+          title: vm.$t('lessonRecord.attendCount'),
+          key: 'attendRate',
           sortable: true,
           ellipsis: true,
+          render: function (h, params) {
+            return h('span', (Number(params.row.attendRate)).toFixed(2) + '%')
+          },
         },
         {
-          title: vm.$t('lessonRecord.pushCount'),
-          key: 'pushCount',
+          title: vm.$t('lessonRecord.groupCount'),
+          key: 'groupCount',
           sortable: true,
           ellipsis: true,
         },
         {
-          title: vm.$t('lessonRecord.score'),
-          key: 'totalInteractPoint',
+          title: vm.$t('lessonRecord.totalPoint'),
+          key: 'totalPoint',
           sortable: true,
           ellipsis: true,
         },
+
         {
-          title: vm.$t('lessonRecord.interactionCount'),
-          key: 'interactionCount',
+          title: vm.$t('lessonRecord.collateCount'),
+          key: 'collateCount',
           sortable: true,
           ellipsis: true,
         },
+
         {
-          title: vm.$t('lessonRecord.clientInteractionCount'),
-          key: 'clientInteractionCount',
+          title: vm.$t('lessonRecord.score'),
+          key: 'totalInteractPoint',
           sortable: true,
           ellipsis: true,
         },
         {
-          title: vm.$t('lessonRecord.examQuizCount'),
-          key: 'examQuizCount',
+          title: vm.$t('lessonRecord.interactionCount'),
+          key: 'interactionCount',
           sortable: true,
           ellipsis: true,
         },
+
+
         {
           title: vm.$t('lessonRecord.examPointRate'),
           key: 'examPointRate',
@@ -555,6 +559,7 @@ export default {
                 interactionCount: record.interactionCount,
                 clientInteractionCount: record.clientInteractionCount,
                 examQuizCount: record.examQuizCount,
+                examCount: record.examCount,
                 examPointRate: record.examPointRate.toFixed(2) + '%',
                 time: this.$tools.formatTime(record.startTime, 'yyyy-MM-dd')
               }