ソースを参照

Merge branch 'develop' of http://52.130.252.100:10000/TEAMMODEL/TEAMModelOS into develop

zhouj1203@hotmail.com 1 年間 前
コミット
aaca8f9a90

BIN
TEAMModelOS/ClientApp/src/assets/dashboard/student/sport6.png


+ 55 - 0
TEAMModelOS/ClientApp/src/common/EmptyDash.vue

@@ -0,0 +1,55 @@
+<template>
+    <div class="empty-dash-container">
+        <img src="@/assets/image/no_data.png" width="100" />
+        <span>暂无数据</span>
+    </div>
+</template>
+
+<script>
+	let that = this
+    export default {
+        name: 'emptyDash',
+        props: {
+		  top: {
+			type: Number,
+			default: 20
+		  },
+		  textTop: {
+			type: Number,
+			default: 10
+		  },
+		  textContent: {
+			type: String,
+			default: function (){
+				return this.$t('evaluation.noData')
+			}
+		  }
+		},
+        data() {
+            return {
+            }
+        },
+        created() {
+            // console.log(this.top);
+        },
+        methods: {
+
+        }
+    }
+</script>
+<style>
+    .empty-dash-container {
+        width: 100%;
+        height: 100%;
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
+        align-items: center;
+    }
+
+        .empty-dash-container span {
+            font-size: 14px;
+            color: #92ccfc;
+            margin-top: 10px;
+        }
+</style>

+ 3 - 8
TEAMModelOS/ClientApp/src/components/dashboard/student/BaseExamBar.vue

@@ -22,7 +22,7 @@ export default {
         grid: {
           left: "2%",
           right: "4%",
-          bottom: "14%",
+          bottom: "8%",
           top: "16%",
           containLabel: true,
         },
@@ -44,11 +44,6 @@ export default {
             "评测二",
             "评测三"
           ],
-          axisLine: {
-            lineStyle: {
-              color: "white",
-            },
-          },
           axisLabel: {
             textStyle: {
               fontFamily: "Hm",
@@ -83,9 +78,9 @@ export default {
         dataZoom: [
           {
             show: true,
-            height: 12,
+            height: 10,
             xAxisIndex: [0],
-            bottom: "6%",
+            bottom: "1",
             start: 0,
             end: 100,
             handleIcon:

+ 5 - 5
TEAMModelOS/ClientApp/src/components/dashboard/student/BaseRadar.vue

@@ -23,11 +23,11 @@ export default {
       ];
       let stuInfo = JSON.parse(sessionStorage.getItem('dash_stu_info'))
       var dataValue = [
-        stuInfo.virtue,
-        stuInfo.intelligence,
-        stuInfo.sports,
+        stuInfo.virtue.toFixed(2),
+        stuInfo.intelligence.toFixed(2),
+        stuInfo.sports.toFixed(2),
         stuInfo.art.toFixed(2),
-        stuInfo.labour
+        stuInfo.labour.toFixed(2)
       ];
 
       var dataArr = [
@@ -80,7 +80,7 @@ export default {
           },
         },
         radar: {
-          radius: "60%",
+          radius: "55%",
           triggerEvent: true, //开启雷达图的边角名称可点击
           name: {
             // (圆外的标签)雷达图每个指示器名称的配置项。分

+ 119 - 164
TEAMModelOS/ClientApp/src/components/dashboard/student/BaseSportRadar.vue

@@ -1,170 +1,125 @@
 <template>
-  <div id="sportRadar" class="art-echart"></div>
+	<div id="sportRadar" class="art-echart"></div>
 </template>
 <script>
-export default {
-  data() {
-    return {
-      option: null,
-    }
-  },
-  methods: {
-    doRender() {
-      let myChart = this.$echarts.init(document.getElementById('sportRadar'))
-      var attaData = [62, 52, 34, 61, 15, 25];
-      //十六进制颜色转RBG 拼接为rgba返回
-      function colorRgb(val) {
-        // 16进制颜色值的正则
-        var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
-        // 把颜色值变成小写
-        var color = val.toLowerCase();
-        if (reg.test(color)) {
-          // 如果只有三位的值,需变成六位,如:#fff => #ffffff
-          if (color.length === 4) {
-            var colorNew = "#";
-            for (var i = 1; i < 4; i += 1) {
-              colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1));
-            }
-            color = colorNew;
-          }
-          // 处理六位的颜色值,转为RGB
-          var colorChange = [];
-          for (var i = 1; i < 7; i += 2) {
-            colorChange.push(parseInt("0x" + color.slice(i, i + 2)));
-          }
-          return "rgba(" + colorChange.join(",") + ",0.4)";
-        } else {
-          return color;
-        }
-      }
-      //渐变底色
-      var attackSourcesColor1 = [
-        '#52A8FF',
-        '#00B389',
-        '#FFA940',
-        '#FF5A57',
-        '#29EFC4',
-      ];
-      //拼接itemStyle
-      function attackSourcesDataFmt(sData) {
-        var sss = [];
-        sData.forEach(function (item, i) {
-          let itemStyle = {
-            barBorderRadius: 20,
-            color: attackSourcesColor1[i],
-          };
-          sss.push({
-            value: item,
-            itemStyle: itemStyle,
-          });
-        });
-        return sss;
-      }
-      var option = {
-        tooltip: {
-          trigger: "axis",
-          borderColor: "#62FFFF",
-          formatter: " {b}     {c}%",
-          axisPointer: {
-            type: "shadow",
-          },
-        },
-        grid: {
-          x: 35,
-          y: 2,
-          x2: 20,
-          y2: 20,
-        },
-        xAxis: {
-          axisLine: {
-            lineStyle: {
-              color: "#44A0B7",
-            },
-          },
-          axisLabel: {
-            textStyle: {
-              color: "#fff",
-            },
-          },
-          show: true,
-          type: "value",
-          axisTick: {
-            show: false,
-          },
-          splitLine: {
-            show: false,
-          },
-        },
-        yAxis: {
-          type: "category",
-          data: ["评测", "问卷", "投票", "作业"],
-          axisLine: {
-            lineStyle: {
-              color: "#44A0B7",
-            },
-          },
-          axisLabel: {
-            textStyle: {
-              color: "#fff",
-            },
-          },
-          axisTick: {
-            show: false,
-          },
-          splitLine: {
-            show: false,
-          },
-        },
-        series: [
-          {
-            name: "",
-            type: "bar",
-            barWidth: 16,
-            label: { show: true, position: 'insideRight', offset: [-5, 2], color: '#fff' },
-            data: attackSourcesDataFmt(attaData),
-          },
-          {
-            name: "",
-            type: "bar",
-            barWidth: 16,
-            barGap: "-100%",
-            z: 0,
-            itemStyle: {
-              barBorderRadius: 20,
-              color: "rgba(0, 120, 121, 0.1)",
-            },
-            data: [100, 100, 100, 100, 100, 100],
-          },
-        ],
-      };
-      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) {
-
-  //       }
-  //     }
-  //   }
-}
+	export default {
+		data() {
+			return {
+				option: null,
+				indicator: [],
+				scoreArr: []
+			};
+		},
+		methods: {
+			doRender() {
+				let myChart = this.$echarts.init(document.getElementById("sportRadar"));
+				let that = this;
+				var option = {
+					tooltip: {
+						trigger: "axis",
+						backgroundColor: "rgba(13, 178, 255, .4)",
+						borderColor: "rgba(13, 178, 255, 1)",
+						borderWidth: 2,
+						textStyle: {
+							align: "left"
+						}
+					},
+					radar: {
+						indicator: that.indicator,
+						radius: "70%",
+						center: ["50%", "50%"],
+						shape: "circle",
+						splitNumber: 4,
+						name: {
+							textStyle: {
+								color: "#ffffff",
+								fontFamily: "Hm",
+								fontSize: 12
+							}
+						},
+						splitArea: {
+							areaStyle: {
+								color: ["rgba(255,255,255,0.1)", "rgba(255,255,255,0.03)", "rgba(255,255,255,0.1)", "rgba(255,255,255,0.03)"]
+							}
+						},
+						splitLine: {
+							lineStyle: {
+								color: ["#0b5866", "#0b5866", "#0b5866", "#0b5866", "#0b5866", "#0b5866"].reverse(),
+								width: 3
+							}
+						},
+						axisLine: {
+							lineStyle: {
+								color: "rgba(238,238,238, 0.2)"
+							}
+						}
+					},
+					series: {
+						name: "体育测试表现",
+						type: "radar",
+						tooltip: {
+							trigger: "item"
+						},
+						data: [
+							{
+								value: that.scoreArr
+							}
+						],
+						symbol: "circle",
+						symbolSize: 5,
+						itemStyle: {
+							normal: {
+								color: "rgba(87,201,255,0.8)",
+								borderColor: "rgba(87,201,255,0.2)",
+								borderWidth: 5
+							}
+						},
+						areaStyle: {
+							normal: {
+								color: "rgba(13, 178, 255, 0.49)"
+							}
+						},
+						lineStyle: {
+							normal: {
+								color: "rgba(13, 178, 255, 1)",
+								width: 2
+							}
+						}
+					}
+				};
+				myChart.clear();
+				myChart.setOption(option);
+				window.addEventListener("resize", function () {
+					myChart.resize();
+				});
+			}
+		},
+		mounted() {
+			this.doRender();
+		},
+		watch: {
+			"$store.state.fiveEdu.dashEnv": {
+				immediate: true,
+				handler(n, o) {
+					let overbase = this.$store.state.fiveEdu.stuOverbase;
+					this.indicator = overbase.sports.length ? overbase.sports[0].itemScore.map((i) => {
+						return {
+							name: i.name,
+							max: 100
+						};
+					}) : [];
+					this.scoreArr = overbase.sports.length ? overbase.sports[0].itemScore.map((i) => i.score) : [];
+				}
+			}
+		}
+	};
 </script>
 
 <style>
-.art-echart {
-  width: 100%;
-  height: 100%;
-  margin: 0 auto;
-  display: block;
-}
-</style>
+	.art-echart {
+		width: 100%;
+		height: 100%;
+		margin: 0 auto;
+		display: block;
+	}
+</style>

+ 1 - 1
TEAMModelOS/ClientApp/src/components/dashboard/student/BaseStuProfile.vue

@@ -9,7 +9,7 @@
       </div>
       <div class="stu-info-grade">
         <Tag color="primary">{{ stuInfo.groupName }}{{ stuInfo.className || '' }}</Tag>
-        <Tag color="warning">{{ stuInfo.job.join('、') }}</Tag>
+        <!-- <Tag color="warning">{{ stuInfo.job.join('、') }}</Tag> -->
         <img src="@/assets/dashboard/student/award1.png" alt="" width="30">
         <img src="@/assets/dashboard/student/award2.png" alt="" width="30">
         <img src="@/assets/dashboard/student/award3.png" alt="" width="30">

+ 1 - 19
TEAMModelOS/ClientApp/src/components/dashboard/student/BaseStuRankList.vue

@@ -65,25 +65,7 @@
 		},
 		methods: {
 			goStudent(stuInfo) {
-				sessionStorage.setItem("dash_stu_info", JSON.stringify(stuInfo));
-				console.error(stuInfo);
-				let params = {
-					school: this.$store.state.userInfo.schoolCode,
-					periodId: this.$store.state.user.curPeriod.id,
-					studentId: stuInfo.studentId,
-					semesterId: "08b81e76-e7d2-4001-8b4c-e7c789ef4bs1",
-					studentYear: this.studentYear,
-					studyYear: this.studyYear
-				};
-				this.$api.dashboard.fiveEduBase(params).then((res) => {
-					this.$store.commit("fiveEdu/setStuOverbase", res.studentOverallEducation);
-					this.$store.commit(
-						"fiveEdu/setClassStuaArr",
-						this.originList.filter((i) => i.classId === stuInfo.classId)
-					);
-					this.$tools.exitFullscreen();
-					this.$router.push("/stuDetails");
-				});
+				this.$emit('stu-click',stuInfo)
 			},
 			changeSort(index) {
 				this.isTop = index !== 2;

+ 1 - 1
TEAMModelOS/ClientApp/src/components/dashboard/student/BaseStudyBar.vue

@@ -41,7 +41,7 @@ export default {
           type: "category",
           data: [
             "学习态度",
-            "学习合作",
+            "合作分享",
             "学习能力"
           ],
           axisLine: {

+ 2 - 2
TEAMModelOS/ClientApp/src/components/dashboard/studentAll/BaseStudyLineBar.vue

@@ -57,7 +57,7 @@ export default {
           },
         ],
         legend: {
-          data: ["学习态度", "学习合作", "学习能力"],
+          data: ["学习态度", "合作分享", "学习能力"],
           left: "center",
           top: "0%",
           textStyle: {
@@ -162,7 +162,7 @@ export default {
             data: renderJson.countArr1
           },
           {
-            name: "学习合作",
+            name: "合作分享",
             type: "bar",
             barWidth: 15,
             markLine: {

+ 1 - 1
TEAMModelOS/ClientApp/src/view/dashboard/Setting.vue

@@ -62,7 +62,7 @@
           %
         </p>
         <p style="margin: 20px 0">
-          学习合作
+          合作分享
           <InputNumber
             v-model="schoolSetting.percents[1]"
             :min="0"

+ 45 - 381
TEAMModelOS/ClientApp/src/view/dashboard/Student.less

@@ -1,419 +1,83 @@
 @mainColor: #568aea;
 
-#stuIndex {
+.student-detail-container {
   color: #d3d6dd;
   width: 100%;
   height: 100%;
   overflow: hidden;
-  position: relative;
-  font-family: "Hm",
-    "Microsoft JhengHei UI",
-    "Microsoft JhengHei";
 
-  .ivu-modal-content {
-    background-color: #2fa0efe0;
-
-    .ivu-icon-ios-close {
-      color: #fff !important;
-    }
-  }
-
-
-
-  .school-info {
-    position: absolute;
-    left: 30px;
-    top: 40px;
-    font-size: 20px;
-    font-weight: bold;
+  .report-tip {
+    margin-left: auto;
+    color: #32c5e9;
+    font-size: 12px;
     cursor: pointer;
-    display: flex;
-    align-items: center;
-
-
-
-    &-name {
-      margin: 0 10px;
-    }
-
-    &-period {
-      font-size: 12px;
-      background-color: #2d2d2d;
-      display: inline-block;
-      padding: 2px 10px;
-      border-radius: 4px;
-      margin-right: 5px;
-    }
-
-    &-semester {
-      font-size: 12px;
-      background-color: #2d2d2d;
-      display: inline-block;
-      padding: 2px 10px;
-      border-radius: 4px;
-      margin-right: 5px;
-    }
-
-    .dashboard-menu {
-      margin-left: 20px;
-      cursor: pointer;
-
-      &-active {
-        border-bottom: 2px solid #fff;
-      }
-    }
-
-    img {
-      border-radius: 50%;
-      width: 25px;
-    }
-  }
-
-  .border-box-content {
-    padding: 15px;
   }
-
-  .dashboard-block {
-    position: relative;
-    width: 100%;
-    height: 100%;
-    // margin: 10px;
-    // padding: 0px;
-    display: inline-flex;
+  //下方区域的布局
+  .left-box {
+    width: 25% !important;
+    height: calc(100vh - 75px) !important;
+    display: flex;
     flex-direction: column;
-    box-sizing: border-box;
-    border-radius: 10px;
-    background-color: #4685fa11;
 
-    .person {
-      position: absolute;
-      left: 0;
-      top: 0;
-      bottom: 0;
-      right: 0;
-      margin: auto;
-      width: 280px;
-    }
-
-    .block-title {
+    &-top {
       width: 100%;
-      display: flex;
-      padding: 10px;
-      font-size: 14px;
-      align-items: center;
-      &::before {
-        content: '';
-        display: inline-block;
-        width: 5px;
-        height: 15px;
-        margin-right: 10px;
-        border-radius: 5px;
-        background-color: #6184ec;
+      height: 23% !important;
       }
-    }
-
-    .report-tip {
-      margin-left: auto;
-      color: #32c5e9;
-      font-size: 12px;
-      cursor: pointer;
-    }
 
-    .block-content {
+    &-center {
       width: 100%;
-      height: 100%;
-      display: flex;
-      padding: 10px;
-
-      .honor-avatar {
-        display: flex;
-        flex-wrap: wrap;
-        justify-content: center;
-        align-items: space-between;
-        width: 100%;
-
-        .honor-item {
-          position: relative;
-          display: flex;
-          flex-direction: column;
-          align-items: center;
-          justify-content: space-around;
-          width: 33.3%;
-
-          .img-avatar {
-            border-radius: 50%;
-            border: 3px solid #58a8bb;
-            cursor: pointer;
-          }
-
-          .img-crown {
-            position: absolute;
-            top: -17px;
-            left: 28px;
-          }
-        }
-      }
-
-      .static-wrap {
-        display: flex;
-        width: 100%;
-        justify-content: space-around;
-        align-items: center;
-
-        .item {
-          display: flex;
-          flex-direction: column;
-          align-items: center;
-          justify-content: center;
-
-          .num {
-            font-size: 46px;
-            font-weight: bold;
-            font-family: staticFont;
-            color: #1dd86b;
-          }
-
-
-          .label {
-            font-weight: bold;
-            color: #a1a5a5;
-          }
-        }
+      height: 42% !important;
       }
-    }
 
-    .cicle2 {
-      width: 80%;
-      height: 100%;
-      background: url(./circle.png) no-repeat center;
-      background-size: 100%;
-      position: absolute;
-      top: 27%;
-      left: 10%;
-      transform-style: preserve-3d;
-      transform: translateX(-50%) rotateX(75deg);
-      animation: rotate2 15s linear infinite;
-    }
-
-    @keyframes rotate2 {
-      0% {
-        transform: rotateX(75deg) rotateZ(0);
+    &-bottom {
+      width: 100%;
+      height: 30% !important;
       }
-
-      100% {
-        transform: rotateX(75deg) rotateZ(360deg);
       }
-    }
-  }
 
-  .tools {
-    position: absolute;
-    right: 30px;
-    top: 40px;
-    font-size: 26px;
-    font-weight: bold;
+  .mid-box {
+    width: 50%;
+    height: calc(100vh - 75px) !important;
     display: flex;
-    align-items: center;
-    cursor: pointer;
-
-    .time-text {
-      font-size: 30px;
-      margin-right: 20px;
-      font-weight: 200;
-      color: #9f9f9f;
-      font-family: 'staticFont';
-    }
-  }
-
-  .bg {
-    width: 100%;
-    height: 100%;
-    padding: 16px 16px 0 16px;
-    background-image: url("../../assets/image/pageBg.png");
-    background-size: cover;
-    background-position: center center;
-  }
-
-  .single-student {
-
-    .dv-dec-10,
-    .dv-dec-10-s {
-      width: 33.3%;
-      height: 5px;
-    }
-
-    .dv-dec-10-s {
-      transform: rotateY(180deg);
-    }
-
-    .dv-dec-8 {
-      width: 200px;
-      height: 50px;
-    }
-
-    .title {
-      position: relative;
-      width: 500px;
-      text-align: center;
-      background-size: cover;
-      background-repeat: no-repeat;
-
-      .title-text {
-        font-size: 24px;
-        font-weight: bold;
-        position: absolute;
-        bottom: 20px;
-        left: 50%;
-        transform: translate(-50%);
-      }
-
-      .dv-dec-6 {
-        position: absolute;
-        bottom: 0;
-        left: 50%;
-        width: 250px;
-        height: 8px;
-        transform: translate(-50%);
-      }
-    }
-
-    // 第二行
-    .aside-width {
-      width: 40%;
-    }
-
-    // 平行四边形
-    .react-right {
-      &.react-l-s {
-        text-align: left;
-        width: 500px;
-      }
-
-      font-size: 18px;
-      width: 300px;
-      line-height: 50px;
-      text-align: center;
-      transform: skewX(-45deg);
+    flex-direction: column;
 
-      .react-after {
-        position: absolute;
-        right: -25px;
-        top: 0;
-        height: 50px;
-        width: 50px;
-        background-color: #0f1325;
-        transform: skewX(45deg);
+    &-top {
+      width: 100%;
+      height: 65% !important;
       }
 
-      .text {
-        display: inline-block;
-        transform: skewX(45deg);
+    &-bottom {
+      width: 100%;
+      height: 30% !important;
+      display: flex;
       }
-    }
-
-    .react-left {
-      &.react-l-s {
-        width: 500px;
-        text-align: left;
       }
 
-      font-size: 18px;
-      width: 300px;
-      height: 50px;
-      line-height: 50px;
-      text-align: center;
-      transform: skewX(45deg);
-      background-color: #0f1325;
+  // 底部数据
+  .right-box {
+    width: 25%;
+    height: calc(100vh - 75px);
+    display: flex;
+    flex-direction: column;
 
-      .react-before {
-        position: absolute;
-        left: -25px;
-        top: 0;
-        height: 50px;
-        width: 50px;
-        background-color: #0f1325;
-        transform: skewX(-45deg);
+    &-top {
+      width: 100%;
+      height: 35% !important;
       }
 
-      .text {
-        display: inline-block;
-        transform: skewX(-45deg);
+    &-center {
+      width: 100%;
+      height: 30% !important;
       }
-    }
 
-    .body-box {
-      margin-top: 20px;
+    &-bottom {
+      width: 100%;
+      height: 30% !important;
       display: flex;
-      justify-content: space-between;
-
-      //下方区域的布局
-      .left-box {
-        width: 25%;
-        height: calc(100vh - 75px);
-        display: flex;
-        flex-direction: column;
 
-        &-top {
-          width: 100%;
-          height: 23%;
-        }
-
-        &-center {
-          width: 100%;
-          height: 42%;
-        }
-
-        &-bottom {
-          width: 100%;
-          height: 30%;
-        }
-      }
-
-      .mid-box {
+      .right-bottom-single {
         width: 50%;
-        height: calc(100vh - 75px);
-        display: flex;
-        flex-direction: column;
-
-        &-top {
-          width: 100%;
-          height: 65%;
-        }
-
-        &-bottom {
-          width: 100%;
-          height: 30%;
-          display: flex;
-        }
-      }
-
-      // 底部数据
-      .right-box {
-        width: 25%;
-        height: calc(100vh - 75px);
-        display: flex;
-        flex-direction: column;
-
-        &-top {
-          width: 100%;
-          height: 30%;
-        }
-
-        &-center {
-          width: 100%;
-          height: 35%;
-        }
-
-        &-bottom {
-          width: 100%;
-          height: 30%;
-          display: flex;
-
-          .right-bottom-single {
-            width: 50%;
-            height: 100%;
-          }
-        }
+        height: 100%;
       }
     }
   }

+ 312 - 378
TEAMModelOS/ClientApp/src/view/dashboard/Student.vue

@@ -1,387 +1,321 @@
 <template>
-  <div id="stuIndex" ref="appRef">
-    <div class="bg">
-      <dv-loading v-if="loading">{{
-        $t("researchCenter.dashboard.loading")
-      }}</dv-loading>
-      <div v-else class="host-body single-student">
-        <div class="tools">
-          <span class="time-text"
-            >{{ dateYear }}
-            <span
-              style="display: inline-block; margin: 0 5px; color: #0fa2fe"
-              >{{ dateDay }}</span
-            >
-          </span>
-          <span
-            class="icon iconfont icon-tuichuquanping"
-            style="font-size: 22px"
-            :title="$t('researchCenter.dashboard.quit')"
-            @click="goQuit"
-          ></span>
-          <span
-            class="icon iconfont icon-undo"
-            style="font-size: 22px; margin-left: 20px"
-            :title="$t('researchCenter.dashboard.quit')"
-            @click="goBack"
-          ></span>
-        </div>
-        <div class="school-info">
-          <img :src="schoolInfo.schoolLogo" />
-          <span class="school-info-name">{{ schoolInfo.schoolName }}</span>
-          <span class="school-info-period">{{ schoolInfo.periodName }}</span>
-          <span class="school-info-semester">{{ schoolInfo.curSemester }}</span>
-        </div>
-        <div class="d-flex jc-center">
-          <dv-decoration-10 class="dv-dec-10" />
-          <div class="d-flex jc-center">
-            <dv-decoration-8 class="dv-dec-8" :color="['#568aea', '#000000']" />
-            <div class="title">
-              <span class="dash-title-text">学生全面发展大数据画像</span>
-              <dv-decoration-6
-                class="dv-dec-6"
-                :reverse="true"
-                :color="['#50e3c2', '#67a1e5']"
-              />
-            </div>
-            <dv-decoration-8
-              class="dv-dec-8"
-              :reverse="true"
-              :color="['#568aea', '#000000']"
-            />
-          </div>
-          <dv-decoration-10 class="dv-dec-10-s" />
-        </div>
+	<div class="body-box student-detail-container">
+		<!-- 左侧 -->
+		<div class="left-box">
+			<div class="left-box-top">
+				<dv-border-box-13>
+					<div class="dashboard-block">
+						<div class="block-title">
+							<span>学生信息</span>
+							<dv-decoration-1 style="width: 100px; height: 20px" />
+						</div>
+						<div class="block-content">
+							<BaseStuProfile></BaseStuProfile>
+						</div>
+					</div>
+				</dv-border-box-13>
+			</div>
 
-        <div class="body-box">
-          <!-- 左侧 -->
-          <div class="left-box">
-            <div class="left-box-top">
-              <dv-border-box-13>
-                <div class="dashboard-block">
-                  <div class="block-title">
-                    <span>学生信息</span>
-                    <dv-decoration-1 style="width: 100px; height: 20px" />
-                  </div>
-                  <div class="block-content">
-                    <BaseStuProfile></BaseStuProfile>
-                  </div>
-                </div>
-              </dv-border-box-13>
-            </div>
-
-            <div class="left-box-bottom">
-              <dv-border-box-13>
-                <div class="dashboard-block">
-                  <div class="block-title">
-                    <span>德育综合表现</span>
-                    <dv-decoration-1 style="width: 100px; height: 20px" />
-                    <span class="report-tip">德育报告 > </span>
-                  </div>
-                  <div class="block-content">
-                    <dv-scroll-board :config="lessonConfig" />
-                  </div>
-                </div>
-              </dv-border-box-13>
-            </div>
-            <div class="left-box-center">
-              <dv-border-box-13>
-                <div class="dashboard-block">
-                  <div class="block-title">
-                    <span>智育综合表现</span>
-                    <BaseDashTab
-                      :tabs="['学业水平表现', '学习素养表现']"
-                      @tab-change="onLineBarTabChange"
-                    ></BaseDashTab>
-                    <span class="report-tip">智育报告 > </span>
-                  </div>
-                  <div class="block-content">
-                    <BaseStuExamBar
-                      v-if="lineBarType === 'exam'"
-                    ></BaseStuExamBar>
-                    <BaseStuStudyBar v-else></BaseStuStudyBar>
-                  </div>
-                </div>
-              </dv-border-box-13>
-            </div>
-          </div>
-          <!-- 中间 -->
-          <div class="mid-box">
-            <div class="mid-box-top">
-              <dv-border-box-12>
-                <div class="dashboard-block">
-                  <div class="cicle2"></div>
-                  <!-- <img src="https://paas-admin.xydqq.cn/img/person.294648df.png" alt="" class="person"> -->
-                  <BaseRadar @handleMessage="handleMessage"></BaseRadar>
-                </div>
-              </dv-border-box-12>
-            </div>
-            <div class="mid-box-bottom">
-              <dv-border-box-13>
-                <div class="dashboard-block">
-                  <div class="block-title">
-                    <span>评分表现({{ barTitle }})</span>
-                    <dv-decoration-1 style="width: 100px; height: 20px" />
-                  </div>
-                  <div class="block-content">
-                    <BaseBar></BaseBar>
-                  </div>
-                </div>
-              </dv-border-box-13>
-            </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: 100px; height: 20px" />
-                    <span class="report-tip" @click="goReport('sport')"
-                      >体育报告 >
-                    </span>
-                  </div>
-                  <div class="block-content">
-                    <dv-conical-column-chart :config="sportConfig" />
-                  </div>
-                </div>
-              </dv-border-box-13>
-            </div>
-            <div class="right-box-center">
-              <dv-border-box-13>
-                <div class="dashboard-block">
-                  <div class="block-title">
-                    <span>艺术综合表现</span>
-                    <dv-decoration-1 style="width: 100px; height: 20px" />
-                    <span class="report-tip">艺术报告 > </span>
-                  </div>
-                  <div class="block-content">
-                    <BaseArtCircle></BaseArtCircle>
-                    <BaseMusicCircle></BaseMusicCircle>
-                  </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: 100px; height: 20px" />
-                    <span class="report-tip">劳动报告 > </span>
-                  </div>
-                  <div class="block-content">
-                    <BaseProgressBar></BaseProgressBar>
-                  </div>
-                </div>
-              </dv-border-box-13>
-            </div>
-          </div>
-        </div>
-      </div>
-    </div>
-    <Modal v-model="messageModal" footer-hide :transfer="false">
-      <p style="color: #fff; font-weight: bold; margin: 20px; font-size: 18px">
-        {{ message }}
-      </p>
-    </Modal>
-  </div>
+			<div class="left-box-bottom">
+				<dv-border-box-13>
+					<div class="dashboard-block">
+						<div class="block-title">
+							<span>德育综合表现</span>
+							<dv-decoration-1 style="width: 100px; height: 20px" />
+							<span class="report-tip">德育报告 > </span>
+						</div>
+						<div class="block-content">
+							<dv-scroll-board :config="lessonConfig" />
+						</div>
+					</div>
+				</dv-border-box-13>
+			</div>
+			<div class="left-box-center">
+				<dv-border-box-13>
+					<div class="dashboard-block">
+						<div class="block-title">
+							<span>智育综合表现</span>
+							<BaseDashTab :tabs="['学业水平表现', '学习素养表现']" @tab-change="onLineBarTabChange"></BaseDashTab>
+							<span class="report-tip">智育报告 > </span>
+						</div>
+						<div class="block-content">
+							<BaseStuExamBar v-if="lineBarType === 'exam'"></BaseStuExamBar>
+							<BaseStuStudyBar v-else></BaseStuStudyBar>
+						</div>
+					</div>
+				</dv-border-box-13>
+			</div>
+		</div>
+		<!-- 中间 -->
+		<div class="mid-box">
+			<div class="mid-box-top">
+				<dv-border-box-12>
+					<div class="dashboard-block">
+						<div class="cicle2"></div>
+						<!-- <img src="https://paas-admin.xydqq.cn/img/person.294648df.png" alt="" class="person"> -->
+						<BaseRadar @handleMessage="handleMessage"></BaseRadar>
+					</div>
+				</dv-border-box-12>
+			</div>
+			<div class="mid-box-bottom">
+				<dv-border-box-13>
+					<div class="dashboard-block">
+						<div class="block-title">
+							<span>评分表现({{ barTitle }})</span>
+							<dv-decoration-1 style="width: 100px; height: 20px" />
+						</div>
+						<div class="block-content">
+							<BaseBar></BaseBar>
+						</div>
+					</div>
+				</dv-border-box-13>
+			</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: 100px; height: 20px" />
+							<span class="report-tip" @click="goReport('sport')">体育报告 > </span>
+						</div>
+						<div class="block-content">
+              <EmptyDash v-if="$store.state.fiveEdu.stuOverbase.sports.length === 0"></EmptyDash>
+							<BaseSportRadar v-else></BaseSportRadar>
+						</div>
+					</div>
+				</dv-border-box-13>
+			</div>
+			<div class="right-box-center">
+				<dv-border-box-13>
+					<div class="dashboard-block">
+						<div class="block-title">
+							<span>艺术综合表现</span>
+							<dv-decoration-1 style="width: 100px; height: 20px" />
+							<span class="report-tip">艺术报告 > </span>
+						</div>
+						<div class="block-content">
+							<BaseArtCircle></BaseArtCircle>
+							<BaseMusicCircle></BaseMusicCircle>
+						</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: 100px; height: 20px" />
+							<span class="report-tip">劳动报告 > </span>
+						</div>
+						<div class="block-content">
+							<BaseProgressBar></BaseProgressBar>
+						</div>
+					</div>
+				</dv-border-box-13>
+			</div>
+		</div>
+	</div>
 </template>
 
 <script>
-import axios from "axios";
-import BaseRadar from "@/components/dashboard/student/BaseRadar";
-import BaseStuProfile from "@/components/dashboard/student/BaseStuProfile";
-import BaseStuExamBar from "@/components/dashboard/student/BaseExamBar";
-import BaseStuStudyBar from "@/components/dashboard/student/BaseStudyBar";
-import BaseBar from "@/components/dashboard/student/BaseBar";
-import BaseLine from "@/components/dashboard/student/BaseLine";
-import BaseProgressBar from "@/components/dashboard/student/BaseProgressBar";
-import BaseSportRadar from "@/components/dashboard/student/BaseSportRadar";
-import BaseArtCircle from "@/components/dashboard/student/BaseArtCircle";
-import BaseMusicCircle from "@/components/dashboard/student/BaseMusicCircle";
-export default {
-  data() {
-    return {
-      barTitle: "综合",
-      message: "",
-      messageModal: false,
-      curStuJson: {
-        id: "",
-        name: "",
-        picture: "",
-      },
-      activeClassIndex: -1,
-      activeGradeIndex: 0,
-      activeMenu: "music",
-        lineBarType: "exam",
-      timing: null,
-      loading: true,
-      dateDay: null,
-      dateYear: null,
-      dateWeek: null,
-      classes: ["1班", "2班", "3班", "4班", "5班", "6班"],
-      grades: ["五年级", "六年级"],
-      lessonConfig: {
-        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>',
-        ],
-        data: [
-          ["6-20", "上课迟到", "-5"],
-          ["6-21", "积极发言", "+5"],
-          ["6-22", "上课迟到", "-5"],
-          ["6-23", "上课迟到", "-5"],
-          ["6-24", "上课迟到", "-5"],
-          ["6-25", "上课迟到", "-5"],
-          ["6-26", "上课迟到", "-5"],
-        ],
-        index: true,
-        align: ["center", "center", "center", "center"],
-        headerHeight: 30,
-        headerBGC: "transparent", //表头
-        oddRowBGC: "transparent", //奇数行
-        evenRowBGC: "transparent", //偶数行
-        columnWidth: [70],
-      },
-      sportConfig: {
-        data: [
-          {
-            name: "篮球",
-            value: 55,
-          },
-          {
-            name: "足球",
-            value: 120,
-          },
-          {
-            name: "排球",
-            value: 71,
-          },
-          {
-            name: "羽毛球",
-            value: 66,
-          },
-          {
-            name: "网球",
-            value: 80,
-          },
-        ],
-        img: [
-          require("@/assets/dashboard/student/sport2.png"),
-          require("@/assets/dashboard/student/sport5.png"),
-          require("@/assets/dashboard/student/sport3.png"),
-          require("@/assets/dashboard/student/sport4.png"),
-          require("@/assets/dashboard/student/sport1.png"),
-        ],
-        imgSideLength: 20,
-        showValue: true,
-      },
-    };
-  },
-  components: {
-    BaseBar,
-    BaseMusicCircle,
-    BaseArtCircle,
-    BaseSportRadar,
-    BaseProgressBar,
-    BaseRadar,
-    BaseLine,
-    BaseStuExamBar,
-    BaseStuStudyBar,
-    BaseStuProfile,
-  },
-  mounted() {
-    this.timeFn();
-    setTimeout(() => {
-      this.$tools.fullScreen(document.getElementById("stuIndex"));
-      this.cancelLoading();
-    }, 100);
-    this.$EventBus.$off("stu-radar-click");
-    this.$EventBus.$on("stu-radar-click", (val) => {
-      this.barTitle = !val ? "综合" : val + "育";
-    });
-  },
-  beforeDestroy() {
-    clearInterval(this.timing);
-  },
-  created() {
-    this.curStuJson = JSON.parse(sessionStorage.getItem("dash_stu_info"));
-    this.curPeriod = this.$store.state.user.curPeriod;
-    this.cancelLoading();
-
-    console.log(this.$store.state.fiveEdu.stuOverbase);
-  },
-  methods: {
-    onLineBarTabChange(val) {
-      this.lineBarType = val === 0 ? "exam" : "study";
-    },
-    goReport(type) {
-      if (type === "sport") {
-        axios({
-          method: "get",
-          url:
-            "https://sport.ykcdwalker.com/timodou/screen?type=1&schoolCode=" +
-            localStorage.getItem("login_schoolCode"),
-          timeout: 1000,
-        })
-          .then(async (res) => {
-            let stuInfo = JSON.parse(sessionStorage.getItem("dash_stu_info"));
-            if (res.data.data) {
-              window.open(res.data.data + "?tmStuId=" + stuInfo.id);
-            } else {
-              this.$emit("handleMessage", "获取体育个人看板链接失败!");
-            }
-          })
-          .catch((e) => {
-            console.error(e);
-          });
-      }else{
-
-      }
-    },
-    handleMessage(val) {
-      console.error(val);
-      this.messageModal = true;
-      this.message = val;
-    },
-    goQuit() {
-      this.$tools.exitFullscreen();
-      this.$router.push("/home/homePage");
-    },
-    goBack() {
-      this.$router.push("/fiveEdu");
-    },
-    timeFn() {
-      this.timing = setInterval(() => {
-        this.dateDay = this.$tools.formatTime(new Date(), "hh:mm:ss");
-        this.dateYear = this.$tools.formatTime(new Date(), "yyyy-MM-dd");
-      }, 1000);
-    },
-    cancelLoading() {
-      setTimeout(() => {
-        this.loading = false;
-      }, 1000);
-    },
-  },
-  computed: {
-    schoolInfo() {
-      let store_user = this.$store.state.user;
-      let semesterRange = this.$tools.getSemesterTimeRange();
-      return {
-        schoolName: store_user.schoolProfile.school_base.name,
-        schoolLogo: store_user.schoolProfile.school_base.picture,
-        periodName: store_user.curPeriod.name,
-        curSemester: semesterRange.name,
-      };
-    },
-  },
-};
+	import axios from "axios";
+	import BaseRadar from "@/components/dashboard/student/BaseRadar";
+	import BaseStuProfile from "@/components/dashboard/student/BaseStuProfile";
+	import BaseStuExamBar from "@/components/dashboard/student/BaseExamBar";
+	import BaseStuStudyBar from "@/components/dashboard/student/BaseStudyBar";
+	import BaseBar from "@/components/dashboard/student/BaseBar";
+	import BaseLine from "@/components/dashboard/student/BaseLine";
+	import BaseProgressBar from "@/components/dashboard/student/BaseProgressBar";
+	import BaseSportRadar from "@/components/dashboard/student/BaseSportRadar";
+	import BaseArtCircle from "@/components/dashboard/student/BaseArtCircle";
+	import BaseMusicCircle from "@/components/dashboard/student/BaseMusicCircle";
+	export default {
+		data() {
+			return {
+				barTitle: "综合",
+				message: "",
+				messageModal: false,
+				curStuJson: {
+					id: "",
+					name: "",
+					picture: ""
+				},
+				activeClassIndex: -1,
+				activeGradeIndex: 0,
+				activeMenu: "music",
+				lineBarType: "exam",
+				timing: null,
+				loading: true,
+				dateDay: null,
+				dateYear: null,
+				dateWeek: null,
+				classes: ["1班", "2班", "3班", "4班", "5班", "6班"],
+				grades: ["五年级", "六年级"],
+				lessonConfig: {
+					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>'],
+					data: [
+						["6-20", "上课迟到", "-5"],
+						["6-21", "积极发言", "+5"],
+						["6-22", "上课迟到", "-5"],
+						["6-23", "上课迟到", "-5"],
+						["6-24", "上课迟到", "-5"],
+						["6-25", "上课迟到", "-5"],
+						["6-26", "上课迟到", "-5"]
+					],
+					index: true,
+					align: ["center", "center", "center", "center"],
+					headerHeight: 30,
+					headerBGC: "transparent", //表头
+					oddRowBGC: "transparent", //奇数行
+					evenRowBGC: "transparent", //偶数行
+					columnWidth: [70]
+				},
+				sportConfig: {
+					data: [
+						{
+							name: "篮球",
+							value: 55
+						},
+						{
+							name: "足球",
+							value: 120
+						},
+						{
+							name: "排球",
+							value: 71
+						},
+						{
+							name: "羽毛球",
+							value: 66
+						},
+						{
+							name: "网球",
+							value: 80
+						}
+					],
+					img: [],
+					imgSideLength: 20,
+					showValue: true
+				}
+			};
+		},
+		components: {
+			BaseBar,
+			BaseMusicCircle,
+			BaseArtCircle,
+			BaseSportRadar,
+			BaseProgressBar,
+			BaseRadar,
+			BaseLine,
+			BaseStuExamBar,
+			BaseStuStudyBar,
+			BaseStuProfile
+		},
+		mounted() {
+			this.timeFn();
+			setTimeout(() => {
+				// this.$tools.fullScreen(document.getElementById("stuIndex"));
+				this.cancelLoading();
+			}, 100);
+			this.$EventBus.$off("stu-radar-click");
+			this.$EventBus.$on("stu-radar-click", (val) => {
+				this.barTitle = !val ? "综合" : val + "育";
+			});
+		},
+		beforeDestroy() {
+			clearInterval(this.timing);
+		},
+		created() {
+			this.curStuJson = JSON.parse(sessionStorage.getItem("dash_stu_info"));
+			this.curPeriod = this.$store.state.user.curPeriod;
+		},
+		methods: {
+			onLineBarTabChange(val) {
+				this.lineBarType = val === 0 ? "exam" : "study";
+			},
+			goReport(type) {
+				if (type === "sport") {
+					axios({
+						method: "get",
+						url: "https://sport.ykcdwalker.com/timodou/screen?type=1&schoolCode=" + localStorage.getItem("login_schoolCode"),
+						timeout: 1000
+					})
+						.then(async (res) => {
+							let stuInfo = JSON.parse(sessionStorage.getItem("dash_stu_info"));
+							if (res.data.data) {
+								window.open(res.data.data + "?tmStuId=" + stuInfo.id);
+							} else {
+								this.$emit("handleMessage", "获取体育个人看板链接失败!");
+							}
+						})
+						.catch((e) => {
+							console.error(e);
+						});
+				} else {
+				}
+			},
+			handleMessage(val) {
+				console.error(val);
+				this.messageModal = true;
+				this.message = val;
+			},
+			goQuit() {
+				this.$tools.exitFullscreen();
+				this.$router.push("/home/homePage");
+			},
+			goBack() {
+				this.$router.push("/fiveEdu");
+			},
+			timeFn() {
+				this.timing = setInterval(() => {
+					this.dateDay = this.$tools.formatTime(new Date(), "hh:mm:ss");
+					this.dateYear = this.$tools.formatTime(new Date(), "yyyy-MM-dd");
+				}, 1000);
+			},
+			cancelLoading() {
+				setTimeout(() => {
+					this.loading = false;
+				}, 1000);
+			}
+		},
+		computed: {
+			schoolInfo() {
+				let store_user = this.$store.state.user;
+				let semesterRange = this.$tools.getSemesterTimeRange();
+				return {
+					schoolName: store_user.schoolProfile.school_base.name,
+					schoolLogo: store_user.schoolProfile.school_base.picture,
+					periodName: store_user.curPeriod.name,
+					curSemester: semesterRange.name
+				};
+			}
+		},
+		watch: {
+			"$store.state.fiveEdu.dashEnv": {
+				immediate: true,
+				handler(n, o) {
+					let overbase = this.$store.state.fiveEdu.stuOverbase;
+					let sportConfig = this._.cloneDeep(this.sportConfig);
+					console.error(overbase);
+					sportConfig.data = overbase.sports.length ? overbase.sports[0].itemScore.map((i) => {
+						return {
+							name: i.name,
+							value: i.score
+						};
+					}) : [];
+					this.sportConfig = sportConfig;
+				}
+			}
+		}
+	};
 </script>
 
 <style lang="less">
-@import "Student.less";
-@import "style.less";
+	@import "style.less";
+	@import "Student.less";
+
 </style>

+ 32 - 11
TEAMModelOS/ClientApp/src/view/dashboard/fiveEdu/FiveEdu.vue

@@ -4,7 +4,7 @@
 			<dv-loading v-if="loading">{{ $t("researchCenter.dashboard.loading") }}</dv-loading>
 			<div v-else-if="isAll" class="host-body all-student">
 				<div class="tools">
-					<Cascader :data="targetData" v-model="targetValue" change-on-select :clearable="false" @on-change="onTargetChange" />
+					<Cascader v-show="activeMenuId !== 'student'" :data="targetData" v-model="targetValue" change-on-select :clearable="false" @on-change="onTargetChange" />
 					<Select v-model="semesterValue" @on-change="onSemesterChange" style="width: 160px">
 						<Option v-for="(item, index) in semesterData" :value="index">{{ item }}</Option>
 					</Select>
@@ -12,11 +12,15 @@
 				</div>
 				<span class="period-tag">{{ schoolInfo.schoolName + "-" + schoolInfo.periodName }}</span>
 				<div class="school-info">
-					<div class="dash-menus" style="display: flex">
+					<div class="dash-menus" style="display: flex" v-if="activeMenuId !== 'student'">
 						<div :class="['menu-item', activeMenuId === menu.id ? 'menu-item-active' : '']" v-for="(menu, menuIndex) in menus" :key="menuIndex" @click="onMenuClick(menu)">
 							<span>{{ menu.name }}</span>
 						</div>
 					</div>
+					<div style="display: flex; align-items: center" v-else>
+						<img :src="schoolInfo.schoolLogo" style="width: 30px" />
+						<span class="school-info-name">{{ schoolInfo.schoolName }}</span>
+					</div>
 				</div>
 				<div class="dash-header"></div>
 				<div class="d-flex jc-center">
@@ -24,8 +28,8 @@
 					<div class="d-flex jc-center">
 						<dv-decoration-8 class="dv-dec-8" :color="['#568aea', '#000000']" />
 						<div class="title">
-							<span class="dash-title-text">学校五育融合大数据看板</span>
-							<Poptip trigger="hover" placement="bottom" title="看板解析" style="position: absolute; right: 10%; top: 5px">
+							<span class="dash-title-text">{{ activeMenuId === "student" ? "学生全面发展大数据画像" : "学校五育融合大数据看板" }}</span>
+							<Poptip v-show="activeMenuId !== 'student'" trigger="hover" placement="bottom" title="看板解析" style="position: absolute; right: 10%; top: 5px">
 								<template slot="content">
 									<p style="color: #fff">目标:立德树人,科学评价</p>
 									<p style="color: #fff">标准:素养导向,课标为准</p>
@@ -172,6 +176,7 @@
 
 				<StudyDash v-else-if="activeMenuId === 'study'"></StudyDash>
 				<MoralDash v-else-if="activeMenuId === 'moral'"></MoralDash>
+				<StudentDetails v-else-if="activeMenuId === 'student'"></StudentDetails>
 			</div>
 		</div>
 		<Modal v-model="noAuthModal" footer-hide :transfer="false">
@@ -349,7 +354,7 @@
 					imgSideLength: 20,
 					showValue: true
 				},
-				studentYear:0,
+				studentYear: 0,
 				dashEnv: {
 					env: "grade",
 					envId: "1",
@@ -424,7 +429,7 @@
 			findHomeData(target) {
 				console.error(this.dashEnv);
 				let curYear = new Date().getFullYear();
-				this.studentYear = curYear - Number(target[0])
+				this.studentYear = curYear - Number(target[0]);
 				let curSemester = this.$tools.getCurSemester();
 				let params = {
 					school: this.$store.state.userInfo.schoolCode,
@@ -452,8 +457,8 @@
 					this.staticArr[0].val = res.studentCount;
 					this.staticArr[1].val = Number(target[0]);
 					this.staticArr[2].val = res.classCount;
-					this.staticArr[3].val = +(res.rate90).toFixed(2);
-					this.staticArr[4].val = +(res.rate60).toFixed(2);
+					this.staticArr[3].val = +res.rate90.toFixed(2);
+					this.staticArr[4].val = +res.rate60.toFixed(2);
 
 					this.artGoodPercent = this.homeData.subject_music_rate90;
 					this.artGoodCount = this.homeData.subject_music_count90;
@@ -642,11 +647,27 @@
 						});
 				}
 			},
-
+			/* 查看单个学生画像 */
 			goStudent(stuInfo) {
 				sessionStorage.setItem("dash_stu_info", JSON.stringify(stuInfo));
-				this.$tools.exitFullscreen();
-				this.$router.push("/stuDetails");
+				this.loading = true;
+				let params = {
+					school: this.$store.state.userInfo.schoolCode,
+					periodId: this.$store.state.user.curPeriod.id,
+					studentId: stuInfo.studentId,
+					semesterId: "08b81e76-e7d2-4001-8b4c-e7c789ef4bs1",
+					studentYear: this.studentYear,
+					studyYear: this.studyYear
+				};
+				this.$api.dashboard.fiveEduBase(params).then((res) => {
+					this.$store.commit("fiveEdu/setStuOverbase", res.studentOverallEducation);
+					this.$store.commit(
+						"fiveEdu/setClassStuaArr",
+						this.stuList.filter((i) => i.classId === stuInfo.classId)
+					);
+					this.activeMenuId = "student";
+					this.cancelLoading();
+				});
 			},
 			goBack() {
 				if (this.activeMenuId === "all") {

+ 1 - 1
TEAMModelOS/ClientApp/src/view/dashboard/study/BaseLevelBar.vue

@@ -174,7 +174,7 @@ export default {
             countArr4:overbase.classDimensions.map(i => i.intelligenceLevels.find(k => k.code === 'D') ? i.intelligenceLevels.find(k => k.code === 'D').value : 0),
           }
         }else{
-          let classItem = overbase.classDimensions[0]
+          let classItem = overbase.classDimensions.length ? overbase.classDimensions[0] : { intelligenceLevels : [] }
           renderJson = {
             nameArr:['A','B','C','D'],
             countArr1:[

+ 19 - 13
TEAMModelOS/ClientApp/src/view/dashboard/study/BaseRadar.vue

@@ -11,7 +11,7 @@ export default {
   methods: {
     doRender(renderJson) {
       let myChart = this.$echarts.init(document.getElementById("studyRadar"));
-      var dataname = ["学习态度", "学习合作", "学习能力", "学习成效"];
+      var dataname = ["学习态度", "合作分享", "学习能力", "学习成效"];
       var datamax = [100, 100, 100, 100];
       var datavaule = renderJson.level1.data;
       var datavaule2 = renderJson.level2.data;
@@ -152,24 +152,30 @@ export default {
       immediate: true,
       handler(n, o) {
         console.error("env变化", n.envName);
+        let overbase = this.$store.state.fiveEdu.overbase
         let renderJson  = {
             level1: {
-              name: n.env === "grade" ? "全校" : '全年级',
-              data: [
-                this.$tools.randomNum(40,98),
-                this.$tools.randomNum(40,98),
-                this.$tools.randomNum(40,98),
-                this.$tools.randomNum(40,98)
+              name: n.env === "grade" ? "" : '全年级',
+              data: n.env === "grade" ? [0,0,0,0] : [
+                overbase.grade_tscore_avg,
+                overbase.grade_gscore_avg,
+                overbase.grade_pscore_avg,
+                overbase.gscore_avg,
               ],
             },
             level2:{
               name:n.envName,
-              data: [
-                this.$tools.randomNum(40,98),
-                this.$tools.randomNum(40,98),
-                this.$tools.randomNum(40,98),
-                this.$tools.randomNum(40,98)
-              ],
+              data: n.env === "grade" ? [
+                overbase.grade_tscore_avg,
+                overbase.grade_gscore_avg,
+                overbase.grade_pscore_avg,
+                overbase.gscore_avg,
+              ] : overbase.classDimensions.length ? [
+                overbase.classDimensions[0].tscore,
+                overbase.classDimensions[0].gscore,
+                overbase.classDimensions[0].pscore,
+                overbase.classDimensions[0].exam
+              ] : [0,0,0,0],
             }
           };
         this.$nextTick(() => {

+ 2 - 2
TEAMModelOS/ClientApp/src/view/dashboard/study/BaseStudyLineBar.vue

@@ -57,7 +57,7 @@ export default {
           },
         ],
         legend: {
-          data: ["学习态度", "学习合作", "学习能力"],
+          data: ["学习态度", "合作分享", "学习能力"],
           left: "center",
           top: "0%",
           textStyle: {
@@ -158,7 +158,7 @@ export default {
             data: renderJson.countArr1
           },
           {
-            name: "学习合作",
+            name: "合作分享",
             type: "bar",
             barWidth: 15,
             markLine: {