Browse Source

Merge branch 'develop3.0-tmd' of http://106.12.23.251:10080/TEAMMODEL/TEAMModelOS into develop3.0-tmd

OnePsycho 4 years ago
parent
commit
9fe7b408cc

+ 388 - 0
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReportCharts/StudentScore.vue

@@ -0,0 +1,388 @@
+<template>
+    <div id="stuScore">
+        <div class="stu-analyse">
+            <div class="stu-info">
+                <ul>
+                    <li>
+                        <p><Icon type="ios-home" size="24" />本次考试名称:<span>成都市第三次月考</span></p>
+                    </li>
+                    <li>
+                        <p><Icon type="ios-paper" size="24" />考试类型:<span>正规考</span></p>
+                    </li>
+                    <li>
+                        <p><Icon type="ios-list-box" size="24" />学习稳定系数:<span>0.8</span></p>
+                    </li>
+                    <li>
+                        <p><Icon type="ios-person" size="24" />姓名:<span>SOUL</span></p>
+                    </li>
+                    <li>
+                        <p style="margin-top:5px">学号:<span>12345678</span></p>
+                    </li>
+                    <li>
+                        <p style="margin-top:5px">班级:<span>高三五班</span></p>
+                    </li>
+                </ul>
+            </div>
+            <div class="stu-score">
+                <p class="all-sub">全学科成绩</p>
+                <ul>
+                    <li style="margin-right:5%;margin-top:15px;">
+                        <h2 style="color:cornflowerblue;font-size:18px">个人总分</h2>
+                        <p style="color: cornflowerblue;font-size: 30px;font-weight: 800">483</p>
+                    </li>
+                    <li class="sub-ave">
+                        <h2>班级平均分</h2>
+                        <p>472</p>
+                    </li>
+                    <li class="sub-ave">
+                        <h2>年级平均分</h2>
+                        <p>468</p>
+                    </li>
+                    <li class="sub-ave">
+                        <h2>区级平均分</h2>
+                        <p>457</p>
+                    </li>
+                    <li class="sub-ave">
+                        <h2>班级排名</h2>
+                        <p>05<span>/56</span></p>
+                    </li>
+                    <li class="sub-ave">
+                        <h2>年级排名</h2>
+                        <p>65<span>/456</span></p>
+                    </li>
+                    <li class="sub-ave">
+                        <h2>区级排名</h2>
+                        <p>296<span>/1456</span></p>
+                    </li>
+                    <li>
+                        <span style="font-size:16px;margin-top:20px;display:block">是否进线</span>
+                        <p style="font-size:24px;font-weight:600;width:60px;text-align:center">是</p>
+                    </li>
+                </ul>
+            </div>
+            <div class="sub-title">
+                <ul>
+                    <li class="sub-item">
+                        <span>学科</span>
+                    </li>
+                    <li class="sub-item">
+                        <span>个人得分</span>
+                    </li>
+                    <li class="sub-item">
+                        <span>班级平均</span>
+                    </li>
+                    <li class="sub-item">
+                        <span>年级平均</span>
+                    </li>
+                    <li class="sub-item">
+                        <span>区级平均</span>
+                    </li>
+                    <li class="sub-item">
+                        <span>班级排名</span>
+                    </li>
+                    <li class="sub-item">
+                        <span>年级排名</span>
+                    </li>
+                    <li class="sub-item">
+                        <span>区级排名</span>
+                    </li>
+                    <li class="sub-item">
+                        <span>答对题数</span>
+                    </li>
+                    <li class="sub-item">
+                        <span>综合难度</span>
+                    </li>
+                </ul>
+                <ul v-for="(item,index) in data.examInfo">
+                    <li class="sub-item">
+                        <div class="sub-show"><span>{{item.subject}}</span></div>
+                    </li>
+                    <li class="sub-item">
+                        <p>{{item.stuScore}}<span>/{{item.score}}</span></p>
+                    </li>
+                    <li class="sub-item">
+                        <p>{{item.classAve}}</p>
+                    </li>
+                    <li class="sub-item">
+                        <p>{{item.gradeAve}}</p>
+                    </li>
+                    <li class="sub-item">
+                        <p>{{item.areaAve}}</p>
+                    </li>
+                    <li class="sub-item">
+                        <p>08<span>/56</span></p>
+                    </li>
+                    <li class="sub-item">
+                        <p>45<span>/456</span></p>
+                    </li>
+                    <li class="sub-item">
+                        <p>455<span>/1456</span></p>
+                    </li>
+                    <li class="sub-item">
+                        <div class="ans">
+                            <div class="obj-ans">
+                                <h5>客观</h5>
+                                <p>36<span>/40</span></p>
+                            </div>
+                            <div class="sub-ans">
+                                <h5>主观</h5>
+                                <p>5<span>/6</span></p>
+                            </div>
+                        </div>
+
+                    </li>
+                    <li class="sub-item">
+                        <span>一般</span>
+                    </li>
+                </ul>
+            </div>
+
+        </div>
+    </div>
+</template>
+<script>
+
+export default {
+  data(){
+    return {
+        data: {
+            "paperInfo": {
+                "personScore": 483,
+                "classScore": 472,
+                "gradeScore": 468,
+                "areaScore": 457,
+                "classNum": 56,
+                "gradeNum": 456,
+                "areaNum": 1456,
+                "classIndex": 5,
+                "gradeIndex": 65,
+                "areaIndex": 296,
+                "pr": 0.8
+            },
+            "examInfo": [
+                {
+                    "subject": "语文",
+                    "subCode":"5465456-hjghj-5464564-23123",
+                    "score": 150,
+                    "stuScore": 120,
+                    "classAve": 104,
+                    "gradeAve": 102,
+                    "areaAve": 105,
+                    "classIndex": 8,
+                    "gradeIndex": 45,
+                    "areaIndex": 465,
+                    "type": "normal"
+                },
+                {
+                    "subject": "数学",
+                    "subCode":"5465456-hjghj-5464564-23123",
+                    "score": 150,
+                    "stuScore": 116,
+                    "classAve": 110,
+                    "gradeAve": 102,
+                    "areaAve": 108,
+                    "classIndex": 10,
+                    "gradeIndex": 87,
+                    "areaIndex": 494,
+                    "type": "normal"
+                },
+                {
+                    "subject": "英语",
+                    "subCode":"5465456-hjghj-5464564-23123",
+                    "score": 150,
+                    "stuScore": 138,
+                    "classAve": 114,
+                    "gradeAve": 112,
+                    "areaAve": 115,
+                    "classIndex": 3,
+                    "gradeIndex": 35,
+                    "areaIndex": 365,
+                    "type": "normal"
+                }
+            ]
+        }
+    }
+  },
+  created() {
+  },
+ 
+  methods: {
+
+  },
+  mounted(){
+  }
+}
+</script>
+<style lang="less" scoped>
+    .stu-analyse {
+        /*height: 300px;*/
+        width: 100%;
+        border-radius: 5px;
+        background-color: #F0F0F0;
+    }
+
+        .stu-analyse .stu-info {
+            padding-top: 5px;
+        }
+
+            .stu-analyse .stu-info ul {
+                display: flex;
+                list-style: none;
+                width: 98%;
+                border-radius: 5px;
+                margin-left: 10px;
+            }
+
+            .stu-analyse .stu-info li {
+                margin-right: 6%;
+                font-weight: 600;
+                font-size: 14px;
+            }
+
+        .stu-analyse .stu-score .all-sub {
+            display: block;
+            margin-top: 10px;
+            margin-bottom: 5px;
+            font-size: 18px;
+            font-weight: 800;
+            margin-left: 5px;
+            width: 120px;
+            color: #24b880;
+            border-radius: 5px;
+            text-align: center;
+            background-color: #ffffff
+        }
+
+        .stu-analyse .stu-score ul {
+            background-color: #ffffff;
+            display: flex;
+            list-style: none;
+            margin-left: 5px;
+            width: calc(100% - 10px);
+        }
+
+        .stu-analyse .stu-score .sub-ave {
+            margin-right: 7%;
+        }
+
+            .stu-analyse .stu-score .sub-ave h2 {
+                display: block;
+                margin-top: 20px;
+                font-size: 16px;
+                font-weight: 600;
+            }
+
+            .stu-analyse .stu-score .sub-ave p {
+                display: block;
+                margin-top: 5px;
+                font-size: 24px;
+                font-weight: 600;
+            }
+
+            .stu-analyse .stu-score .sub-ave span {
+                font-size: 14px;
+                font-weight: 600;
+            }
+
+
+
+        .stu-analyse .sub-title ul {
+            /*       background-color: #ffffff;
+            opacity: 0.8;*/
+            font-size: 18px;
+            display: flex;
+            list-style: none;
+            width: calc(100% - 10px);
+            margin-left: 5px;
+        }
+
+        .stu-analyse .sub-title .sub-item {
+            margin-right: 5%;
+        }
+
+        .stu-analyse .sub-title .sub-items {
+            margin-right: 8%;
+        }
+
+        .stu-analyse .sub-title .sub-item span {
+            display: block;
+            font-size: 14px;
+            font-weight: 800;
+            /*width: 70px;*/
+        }
+
+        .stu-analyse .sub-title .sub {
+            width: 80px;
+            background-color: #ffffff;
+            padding: 5px 5px;
+        }
+
+        .stu-analyse .sub-title .sub-show {
+            /*background-color:#ffffff;*/
+            /*height:20px;*/
+            margin-top: 15px;
+            border-left: 5px solid #24b880;
+        }
+
+            .stu-analyse .sub-title .sub-show span {
+                display: block;
+                font-weight: 800;
+                font-size: 18px;
+                text-align: center;
+                margin-left: 5px;
+            }
+
+        .stu-analyse .sub-title .sub-item {
+            width: 5%;
+        }
+
+            .stu-analyse .sub-title .sub-item p {
+                margin-top: 15px;
+                display: flex;
+                font-size: 20px;
+            }
+
+            .stu-analyse .sub-title .sub-item span {
+                margin-top: 6px;
+            }
+
+            .stu-analyse .sub-title .sub-item .ans {
+                display: flex;
+                width: 95px;
+                height: 50px;
+            }
+
+                .stu-analyse .sub-title .sub-item .ans p {
+                    display: flex;
+                    margin-top: -5px;
+                    text-align: center;
+                }
+
+                .stu-analyse .sub-title .sub-item .ans .obj-ans {
+                    border-right: 2px solid #24B880;
+                    margin-right: 5px;
+                    padding-right: 5px;
+                    height: 45px;
+                }
+
+        .stu-analyse .sub-score ul {
+            font-size: 18px;
+            display: flex;
+            list-style: none;
+            width: 98%;
+            margin-left: 10px;
+            margin-top: 20px;
+        }
+
+
+        .stu-analyse .sub-score li {
+            margin-left: 20px;
+            margin-right: 50px;
+        }
+
+
+        .stu-analyse .sub-score span {
+            font-size: 14px;
+            font-weight: 600;
+        }   
+</style>

+ 58 - 36
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperView.vue

@@ -4,42 +4,48 @@
         <PaperTest :papers="selectData" v-if="this.$store.getters.getisOpenLessonTestPopNow"  />
         <div>
             <EventBasicInfo :paper="paperData" />
-                <div class="title-rect-group">
-                    <div class="title-rect" />
-                    <h2 class="title-rect-name">试卷链接</h2>
-                </div>
-                <!--多學科試卷-->
-                <div v-if="paperData.length > 0 ">
-                    <div class="item-box">
-                        <div v-for="(item, index) in paperData" 
-                        :key="index"
-                        :class="['paper-item',item.paperId == chooseData.paperId ? 'paper-choose' : '']"
-                        @click="opentestWithSubject(item)"
-                             >
-                            <svg-icon icon-class="test" class="title-icon" />
-                            <span style="margin-top:5px">{{ item.subject.name }}{{$store.getters.getItemTitle.scope == 'school' ? '科试卷':''}}</span>
-                            <div :class="{ unfinished: item.stuAns.length == 0 ,finished:item.stuAns.length != 0 }">
-                                <Icon style="margin-top:-10px;margin-left:-8px;" type="ios-checkmark" size="36" />
-                            </div>
+            <div class="title-rect-group">
+                <div class="title-rect" />
+                <h2 class="title-rect-name">试卷链接</h2>
+            </div>
+            <!--多學科試卷-->
+            <div v-if="paperData.length > 0 ">
+                <div class="item-box">
+                    <div v-for="(item, index) in paperData"
+                         :key="index"
+                         :class="['paper-item',item.paperId == chooseData.paperId ? 'paper-choose' : '']"
+                         @click="opentestWithSubject(item)">
+                        <svg-icon icon-class="test" class="title-icon" />
+                        <span style="margin-top:5px">{{ item.subject.name }}{{$store.getters.getItemTitle.scope == 'school' ? '科试卷':''}}</span>
+                        <div :class="{ unfinished: item.stuAns.length == 0 ,finished:item.stuAns.length != 0 }">
+                            <Icon style="margin-top:-10px;margin-left:-8px;" type="ios-checkmark" size="36" />
                         </div>
-                    </div>         
-                </div>
-                <div class="title-rect-group">
-                    <div v-if="chooseData.subject !== undefined">
-                        <div class="title-rect" />
-                        <h2 class="title-rect-name">当前科目:{{chooseData.subject.name}}</h2>
-                        <!--<span v-show="isExamDown" @click="showTest" style="margin-left: 25px;color: #03966a;cursor:pointer">--><!--试卷详情--><!--</span>-->
-                        <LessonTestReport :paperInfo="selectData" :examInfo="chooseData" />
-                    </div>
-                    <div class="load-box">
-                        <load :active.sync="isLoad"
-                              background-color="#000">
-                            <template slot="default">
-                                <svg-icon icon-class="loader" class="loader-icon" />
-                            </template>
-                        </load>
                     </div>
                 </div>
+            </div>
+            <!--<div class="title-rect-group" >
+                <div class="title-rect" />
+                <h2 class="title-rect-name">评测分析</h2>
+            </div>
+            <div style="display:none">
+                <StudentScore></StudentScore>
+            </div>-->
+            <div class="title-rect-group">
+                <div v-if="chooseData.subject !== undefined">
+                    <div class="title-rect" />
+                    <h2 class="title-rect-name">当前科目:{{chooseData.subject.name}}</h2>
+                    <!--<span v-show="isExamDown" @click="showTest" style="margin-left: 25px;color: #03966a;cursor:pointer">--><!--试卷详情--><!--</span>-->
+                    <LessonTestReport :paperInfo="selectData" :examInfo="chooseData" />
+                </div>
+                <div class="load-box">
+                    <load :active.sync="isLoad"
+                          background-color="#000">
+                        <template slot="default">
+                            <svg-icon icon-class="loader" class="loader-icon" />
+                        </template>
+                    </load>
+                </div>
+            </div>
         </div>
     </div>
 </template>
@@ -49,6 +55,7 @@
     import "vue-loading-overlay/dist/vue-loading.css";
     import EventBasicInfo from "../../EventBasicInfo";
     import LessonTestReport from "./LessonTestReport";
+    import StudentScore from "./LessonTestReportCharts/StudentScore";
     import PaperTest from "./PaperTest";
     export default {
         name: "PaperView",
@@ -56,7 +63,8 @@
             EventBasicInfo,
             LessonTestReport,
             PaperTest,
-            Load
+            Load,
+            StudentScore
         },
         created() {
             this.getPaperData()
@@ -104,8 +112,13 @@
                         }
                         for (let i = 0; i < this.paperData.length; i++) {
                             this.paperData[i].subject = resData.subjects[i]
-                            this.paperData[i].stuAns = resData.stuAns[i]
-                            this.paperData[i].stuScore = resData.stuScore[i]
+                            if (resData.stuAns[i] == undefined) {
+                                this.paperData[i].stuAns = []
+                                this.paperData[i].stuScore = []
+                            } else {
+                                this.paperData[i].stuAns = resData.stuAns[i]
+                                this.paperData[i].stuScore = resData.stuScore[i]
+                            }
                         }
                         this.opentestWithSubject(this.paperData[0])
                     })
@@ -153,6 +166,15 @@
                     } else {
                         this.selectData = exam
                     }
+                    if (data.stuScore[0] == undefined) {
+                        let score = []
+                        for (let item of this.selectData.slides) {
+                            if (item.type !== 'compose') {
+                                score.push(-1)
+                            }
+                        }
+                        data.stuScore = score
+                    }
                     this.chooseData = data
                     this.isLoad = false
                     if (this.selectData.item.length > 0) {

+ 6 - 4
TEAMModelOS/ClientApp/src/view/learnactivity/Scoring.less

@@ -43,16 +43,18 @@
     user-select: none;
 }
 .scoring-main-wrap {
-    // width: ~"calc(100% - 10px)";
-    width: 100%;
+    width: ~"calc(100% - 10px)";
+    // width: 100%;
     height: ~"calc(100% - 45px)";
 }
 
 .ev-target-box {
     margin-top: 20px;
-    width: 100%;
+    // width: 100%;
+    width: ~"calc(100% - 10px)";
     color: #ffffff;
-    padding-bottom:10px;
+    background: #353535;
+    padding: 10px 10px 10px 5px;
     border-bottom:1px solid #606060;
     .filter-select {
         display: inline-block;

+ 7 - 5
TEAMModelOS/ClientApp/src/view/learnactivity/Scoring.vue

@@ -253,7 +253,7 @@ export default {
                         console.log(fixed)
                         for (let iterator of fixed) {
                             console.log(iterator)
-                            let max = (this.tableHeight - 50) > (48 * this.studentScore.length) ? (48 * this.studentScore.length) : (this.tableHeight - 50)
+                            let max = 650 > (48 * this.studentScore.length) ? (48 * this.studentScore.length) : 650
                             // iterator.style.maxHeight =  (this.tableHeight - 40) + 'px'
                             iterator.style.maxHeight = max + 'px'
                         }
@@ -476,7 +476,8 @@ export default {
 </style>
 <style lang="less">
 .scoring-main-wrap .ivu-table-fixed-body {
-    background: #454545;
+    background: #353535;
+    // background: #2b2b2e;
     max-height: 650px;
 }
 .scoring-main-wrap .ivu-table-tip {
@@ -488,16 +489,17 @@ export default {
     display: none;
 }
 .scoring-main-wrap .ivu-table-fixed-header thead tr th {
-    background: #454545;
+    background: #353535;
+    // background: #2b2b2e;
     border-color: #606060;
     color: white;
 }
 .scoring-main-wrap {
     .ivu-table-header thead tr th {
-        background: #404040;
+        background: #353535;
     }
     .ivu-table td {
-        background: #404040;
+        background: #353535;
     }
 }
 </style>

+ 30 - 47
TEAMModelOS/ClientApp/src/view/learnactivity/SimpleAnalysis.vue

@@ -1,6 +1,6 @@
 <template>
     <div>
-        <div class="overview-box" v-if="status == 'finish'">
+        <div class="overview-box"  v-if="status == 'finish'">
             <div class="count-box">
                 <span class="count-subject-num">752</span>
                 <span class="count-subject-text">
@@ -22,44 +22,22 @@
                     班级
                 </span>
             </div>
-            <!-- <div class="count-box">
-                <span class="count-subject-num">3</span>
-                <span class="count-subject-text">
-                    <Icon custom="iconfont icon-kecheng" class="count-icon" size="14" style="vertical-align: text-top;" />
-                    学科
-                </span>
-            </div> -->
             <div class="count-box">
-                <span class="count-subject-num">92</span>
+                <span class="count-subject-num">3</span>
                 <span class="count-subject-text">
                     <Icon custom="iconfont icon-class-self" class="count-icon" />
-                    总平均
-                </span>
-            </div>
-            <div class="count-box">
-                <span class="count-subject-num">88</span>
-                <span class="count-subject-text">
-                    <!-- <Icon type="ios-arrow-down" class="count-icon" size="14" style="vertical-align: text-top;" /> -->
-                    <Icon custom="iconfont icon-kecheng" class="count-icon" size="14" style="vertical-align: text-top;" />
-                    语文均分
-                </span>
-            </div>
-            <div class="count-box">
-                <span class="count-subject-num">90</span>
-                <span class="count-subject-text">
-                    <Icon custom="iconfont icon-kecheng" class="count-icon" size="14" style="vertical-align: text-top;" />
-                    数学均分
+                    学科
                 </span>
             </div>
             <div class="count-box">
-                <span class="count-subject-num">95</span>
+                <span class="count-subject-num">273</span>
                 <span class="count-subject-text">
-                    <Icon custom="iconfont icon-kecheng" class="count-icon" size="14" style="vertical-align: text-top;" />
-                    英语均分
+                    <Icon custom="iconfont icon-class-self" class="count-icon" />
+                    平均分
                 </span>
             </div>
         </div>
-        <div class="overview-box" style="justify-content: space-around;padding-top:40px"  v-if="status == 'finish'">
+        <div class="overview-box" style="justify-content: space-around;padding-top:40px" v-if="status == 'finish'">
             <ScoreMatrix></ScoreMatrix>
             <AvgCompare></AvgCompare>
         </div>
@@ -74,28 +52,28 @@
             <div class="count-box">
                 <span class="count-subject-num">352</span>
                 <span class="count-subject-text">
-                    <Icon type="md-checkmark-circle"  class="count-icon"/>
+                    <Icon type="md-checkmark-circle" class="count-icon" />
                     已作答
                 </span>
             </div>
             <div class="count-box">
                 <span class="count-subject-num">400</span>
                 <span class="count-subject-text">
-                    <Icon type="md-remove-circle"  class="count-icon"/>
+                    <Icon type="md-remove-circle" class="count-icon" />
                     未作答
                 </span>
             </div>
             <div class="count-box">
                 <span class="count-subject-num">158</span>
                 <span class="count-subject-text">
-                    <Icon type="md-star" class="count-icon"/>
+                    <Icon type="md-star" class="count-icon" />
                     已评分
                 </span>
             </div>
             <div class="count-box">
                 <span class="count-subject-num">58</span>
                 <span class="count-subject-text">
-                    <Icon type="ios-star-outline" class="count-icon"/>
+                    <Icon type="ios-star-outline" class="count-icon" />
                     未评分
                 </span>
             </div>
@@ -110,46 +88,51 @@ export default {
         AvgCompare,
         ScoreMatrix
     },
-    props:{
-        status:{
-            default:'',
-            type:String
+    props: {
+        status: {
+            default: '',
+            type: String
         }
     }
 }
 </script>
 <style lang="less" scoped>
-.overview-box{
+.overview-box {
     width: 100%;
     flex-wrap: wrap;
-    padding: 10px 20px 10px 10px;
+    padding: 10px 10px 0px 0px;
     display: flex;
     justify-content: space-between;
-    background: #404040;
-    .count-box{
+    // background: #404040;
+    .count-box {
         min-width: 150px;
+        width: 16%;
         height: fit-content;
         text-align: center;
-        background: #404040;
-        padding: 10px 0px;
-        .count-icon{
+        background: #353535;
+        padding: 15px 0px;
+        .count-icon {
             color: white;
             font-size: 18px;
             margin-right: 5px;
             vertical-align: sub;
         }
-        .count-subject-text{
+        .count-subject-text {
             display: block;
             color: white;
             font-size: 12px;
         }
-        .count-subject-num{
+        .count-subject-num {
             display: block;
             color: white;
             font-size: 35px;
             font-weight: 800;
         }
     }
-    
+}
+.finish-count-box {
+    .count-box {
+        margin-bottom: 10px;
+    }
 }
 </style>

+ 63 - 16
TEAMModelOS/ClientApp/src/view/learnactivity/echarts/AvgCompare.vue

@@ -32,22 +32,22 @@ export default {
                 ],
                 legend: {
                     // data: ['语文', '数学', '英语']
-                    right:5,
-                    data:[
+                    right: 5,
+                    data: [
                         {
-                            name:'语文',
-                            textStyle:{
-                                color:'#FFF'
+                            name: '语文',
+                            textStyle: {
+                                color: '#FFF'
                             }
-                        },{
-                            name:'数学',
-                            textStyle:{
-                                color:'#FFF'
+                        }, {
+                            name: '数学',
+                            textStyle: {
+                                color: '#FFF'
                             }
-                        },{
-                            name:'英语',
-                            textStyle:{
-                                color:'#FFF'
+                        }, {
+                            name: '英语',
+                            textStyle: {
+                                color: '#FFF'
                             }
                         }
                     ]
@@ -65,9 +65,9 @@ export default {
                     trigger: 'axis'
                 },
                 grid: {
-                    left: '3%',
-                    right: '4%',
-                    bottom: '3%',
+                    left: '0%',
+                    right: '40px',
+                    bottom: '0%',
                     containLabel: true
                 },
                 // toolbox: {
@@ -122,6 +122,30 @@ export default {
                         stack: '总量',
                         barMaxWidth: 30,
                         data: [85, 89, 88, 92, 99]
+                    },
+                    {
+                        name: '总分',
+                        type: 'line',
+                        itemStyle: {
+                            color: '#11C2EE',
+                            width: 2
+                        },
+                        symbol: 'none',
+                        lineStyle: {
+                            type: 'dashed',
+                            width: 0
+                        },
+                        markLine: {
+                            data: [
+                                { type: 'average' }
+                            ],
+                            lineStyle: {
+                                color: '#11C2EE',
+                                type: 'dashed',
+                                width: 2
+                            }
+                        },
+                        data: [272, 271, 273, 279, 273]
                     }
                 ]
             }
@@ -138,6 +162,29 @@ export default {
                 this.progressPie.resize()
             })
         })
+        this.progressPie.on('legendselectchanged', (params) =>{
+            console.log(params)
+            let active = this.option.series.filter(item=>{
+                if(params.selected[item.name]){
+                    return true
+                }else{
+                    return false
+                }
+            })
+            let score = []
+            active.forEach((item)=>{
+                item.data.forEach((scoreItem,index)=>{
+                    if(!score[index]) score[index] = 0
+                    score[index] += scoreItem
+                })
+            })
+            console.log('active',active)
+            console.log('score',score)
+            let len = this.option.series.length
+            this.option.series[len-1].data = score
+            this.progressPie.setOption(this.option)
+
+        });
     },
     watch: {
         pieData: {

+ 2 - 2
TEAMModelOS/ClientApp/src/view/learnactivity/echarts/ScoreMatrix.vue

@@ -47,8 +47,8 @@ export default {
                     {
                         hoverOffset: 5,
                         type: 'pie',
-                        radius: '45%',
-                        center: ['50%', '50%'],
+                        radius: '50%',
+                        center: ['45%', '50%'],
                         selectedMode: 'single',
                         label: {
                             show: true,

+ 77 - 62
TEAMModelOS/Controllers/Common/ExamController.cs

@@ -348,13 +348,21 @@ namespace TEAMModelOS.Controllers
                     //classResult.studentAnswers[index] = ans;
                     if (index == -1)
                     {
+                        List<double> ansPoint = new List<double>();
+                        foreach (List<string> num in standard)
+                        {
+                            //ans.Add(new List<string>());
+                            ansPoint.Add(-1);
+                        }
                         result.studentIds.Add(studentId.ToString());
-                        result.studentScores.Add(new List<double>());
+                        result.studentScores.Add(ansPoint);
                         result.studentAnswers.Add(new List<string>());
+                        result.sum.Add(0);
                     }
+                    int newIndex = result.studentIds.IndexOf(studentId.ToString());
                     string FileName = result.examId + "/" + result.subjectId+"/" +studentId ;
                     string blob = await _azureStorage.UploadFileByContainer(school.ToString(), ans.ToJsonString(), "exam", FileName +"/"+ "ans.json");
-                    result.studentAnswers[index].Add(blob);
+                    result.studentAnswers[newIndex].Add(blob);
 
                     for (int i = 0; i < ans.Count; i++)
                     {                         
@@ -368,11 +376,11 @@ namespace TEAMModelOS.Controllers
                                 {
                                     if (standard[i].Contains(right))
                                     {
-                                        result.studentScores[index][i] = points[i];
+                                        result.studentScores[newIndex][i] = points[i];
                                     }
                                     else
                                     {
-                                        result.studentScores[index][i] = 0;
+                                        result.studentScores[newIndex][i] = 0;
                                     }
                                 }
 
@@ -382,87 +390,94 @@ namespace TEAMModelOS.Controllers
                                 if (rule > 0)
                                 {
                                     int falseCount = 0;
-                                    foreach (string obj in ans[i])
+                                    if (ans[i].Count > 0)
                                     {
-                                        if (!standard[i].Contains(obj))
+                                        foreach (string obj in ans[i])
                                         {
-                                            falseCount++;
-                                        }
-                                    }
-                                    switch (rule)
-                                    {
-                                        case 1:
-                                            if (ans[i].Count == standard[i].Count)
+                                            if (!standard[i].Contains(obj))
                                             {
-                                                if (falseCount == 0)
+                                                falseCount++;
+                                            }
+                                        }
+                                        switch (rule)
+                                        {
+                                            case 1:
+                                                if (ans[i].Count == standard[i].Count)
                                                 {
-                                                    result.studentScores[index][i] = points[i];
+                                                    if (falseCount == 0)
+                                                    {
+                                                        result.studentScores[newIndex][i] = points[i];
+                                                    }
+                                                    else
+                                                    {
+                                                        result.studentScores[newIndex][i] = 0;
+                                                    }
                                                 }
                                                 else
                                                 {
-                                                    result.studentScores[index][i] = 0;
+                                                    result.studentScores[newIndex][i] = 0;
                                                 }
-                                            }
-                                            else
-                                            {
-                                                result.studentScores[index][i] = 0;
-                                            }
-                                            break;
-                                        case 2:
-                                            if (falseCount > 0)
-                                            {
-                                                result.studentScores[index][i] = 0;
-                                            }
-                                            else
-                                            {
-                                                if (ans[i].Count == standard[i].Count)
+                                                break;
+                                            case 2:
+                                                if (falseCount > 0)
                                                 {
-                                                    result.studentScores[index][i] = points[i];
+                                                    result.studentScores[newIndex][i] = 0;
                                                 }
                                                 else
                                                 {
-                                                    result.studentScores[index][i] = points[i] / 2;
-                                                }
+                                                    if (ans[i].Count == standard[i].Count)
+                                                    {
+                                                        result.studentScores[newIndex][i] = points[i];
+                                                    }
+                                                    else
+                                                    {
+                                                        result.studentScores[newIndex][i] = points[i] / 2;
+                                                    }
 
-                                            }
-                                            break;
-                                        case 3:
-                                            if (falseCount > 0)
-                                            {
-                                                result.studentScores[index][i] = 0;
-                                            }
-                                            else
-                                            {
-                                                if (ans[i].Count == standard[i].Count)
+                                                }
+                                                break;
+                                            case 3:
+                                                if (falseCount > 0)
                                                 {
-                                                    result.studentScores[index][i] = points[i];
+                                                    result.studentScores[newIndex][i] = 0;
                                                 }
                                                 else
                                                 {
-                                                    result.studentScores[index][i] = System.Math.Round((double)ans[i].Count / standard[i].Count * points[i], 1);
-                                                }
+                                                    if (ans[i].Count == standard[i].Count)
+                                                    {
+                                                        result.studentScores[newIndex][i] = points[i];
+                                                    }
+                                                    else
+                                                    {
+                                                        result.studentScores[newIndex][i] = System.Math.Round((double)ans[i].Count / standard[i].Count * points[i], 1);
+                                                    }
 
-                                            }
-                                            break;
-                                        case 4:
-                                            if (ans[i].Count == standard[i].Count)
-                                            {
-                                                result.studentScores[index][i] = points[i];
-                                            }
-                                            else
-                                            {
-                                                double persent = (double)(standard[i].Count - 2 * falseCount) / standard[i].Count;
-                                                if (persent <= 0)
+                                                }
+                                                break;
+                                            case 4:
+                                                if (ans[i].Count == standard[i].Count)
                                                 {
-                                                    result.studentScores[index][i] = 0;
+                                                    result.studentScores[newIndex][i] = points[i];
                                                 }
                                                 else
                                                 {
-                                                    result.studentScores[index][i] = System.Math.Round(persent * points[i], 1);
+                                                    double persent = (double)(standard[i].Count - 2 * falseCount) / standard[i].Count;
+                                                    if (persent <= 0)
+                                                    {
+                                                        result.studentScores[newIndex][i] = 0;
+                                                    }
+                                                    else
+                                                    {
+                                                        result.studentScores[newIndex][i] = System.Math.Round(persent * points[i], 1);
+                                                    }
                                                 }
-                                            }
-                                            break;
+                                                break;
+                                        }
                                     }
+                                    else {
+                                        result.studentScores[newIndex][i] = 0;
+                                    }
+                                    
                                 }
                             }
                         }
@@ -495,7 +510,7 @@ namespace TEAMModelOS.Controllers
                         });
                         await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(exam, id.ToString(), new PartitionKey($"Exam-{school}"));
                     }
-                    result.sum[index] = result.studentScores[index].Sum();
+                    result.sum[newIndex] = result.studentScores[newIndex].Sum();
                     classResult = await client.GetContainer("TEAMModelOS", "Common").ReplaceItemAsync(result, result.id, new PartitionKey($"{result.code}"));
                 }
                 

+ 4 - 0
TEAMModelOS/Controllers/Import/ImportController.cs

@@ -215,7 +215,11 @@ namespace TEAMModelOS.Controllers
 
         private async Task<string> PPTXTranslator(string id, string FileName, Stream streamFile)
         {
+            if (string.IsNullOrWhiteSpace(id)) {
+                id = "teammodelos";
+            }
             var status = await _azureStorage.GetBlobServiceClient().DelectBlobs(id, $"res/{FileName}");
+            
             string shaCode = Guid.NewGuid().ToString();
             HTEXLib.Htex htex = _PPTX2HTEXTranslator.Translate(streamFile);
             htex.name = FileName;

+ 1 - 1
TEAMModelOS/Controllers/School/StudentController.cs

@@ -382,7 +382,7 @@ namespace TEAMModelOS.Controllers
                 writer.WriteNull("sn");
                 writer.WriteNull("style");
                 writer.WriteNull("timetable");
-                writer.WriteString("scope", "shcool");
+                writer.WriteString("scope", "school");//school单词拼写错误修正
                 writer.WriteNull("status");
                 writer.WriteEndObject();
                 writer.Flush();

+ 1 - 1
TEAMModelOS/TEAMModelOS.csproj

@@ -6,7 +6,7 @@
   <ItemGroup>
     <PackageReference Include="Caching.CSRedis" Version="3.6.50" />
     <PackageReference Include="CSRedisCore" Version="3.6.5" />
-    <PackageReference Include="HTEXLib" Version="2.1.5" />
+    <PackageReference Include="HTEXLib" Version="2.1.6" />
     <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.6" />
       <PackageReference Include="VueCliMiddleware" Version="3.1.2" />  </ItemGroup>
   <PropertyGroup>