瀏覽代碼

Merge branch 'develop' of http://106.12.23.251:10080/TEAMMODEL/TEAMModelOS into develop

liqk 5 年之前
父節點
當前提交
6aa03427de
共有 37 個文件被更改,包括 4026 次插入448 次删除
  1. 10 0
      TEAMModelOS/ClientApp/app.js
  2. 92 13
      TEAMModelOS/ClientApp/common/BaseExamList.vue
  3. 49 0
      TEAMModelOS/ClientApp/common/EditableLabel.vue
  4. 1 1
      TEAMModelOS/ClientApp/components/student-analysis/total/BaseEntryLine.vue
  5. 4 4
      TEAMModelOS/ClientApp/components/student-analysis/total/BaseKnowledgeBar.vue
  6. 5 10
      TEAMModelOS/ClientApp/components/student-analysis/total/BaseKnowledgeDetail.vue
  7. 4 34
      TEAMModelOS/ClientApp/components/student-analysis/total/BaseLineBar.vue
  8. 69 59
      TEAMModelOS/ClientApp/components/student-analysis/total/BaseMyTable.vue
  9. 8 6
      TEAMModelOS/ClientApp/components/student-analysis/total/BasePie.vue
  10. 57 3
      TEAMModelOS/ClientApp/components/student-analysis/total/BaseScatter.vue
  11. 63 6
      TEAMModelOS/ClientApp/components/student-analysis/total/BaseTestScatter.vue
  12. 2 0
      TEAMModelOS/ClientApp/filters/http.js
  13. 70 0
      TEAMModelOS/ClientApp/mock/index.js
  14. 6 0
      TEAMModelOS/ClientApp/router/index.js
  15. 1 1
      TEAMModelOS/ClientApp/router/routes.js
  16. 81 74
      TEAMModelOS/ClientApp/static/classList.json
  17. 30 12
      TEAMModelOS/ClientApp/static/examList.json
  18. 83 0
      TEAMModelOS/ClientApp/static/exerciseList.json
  19. 82 42
      TEAMModelOS/ClientApp/static/knowledgeList.json
  20. 2222 0
      TEAMModelOS/ClientApp/static/scatter.json
  21. 752 0
      TEAMModelOS/ClientApp/static/testScatter.json
  22. 7 2
      TEAMModelOS/ClientApp/store/module/totalAnalysis.js
  23. 41 10
      TEAMModelOS/ClientApp/view/school-mgmt/SystemSetting/SystemSetting.less
  24. 76 33
      TEAMModelOS/ClientApp/view/school-mgmt/SystemSetting/SystemSetting.vue
  25. 3 4
      TEAMModelOS/ClientApp/view/student-analysis/total-analysis/AchievementAnalysis/AchievementAnalysis.css
  26. 17 15
      TEAMModelOS/ClientApp/view/student-analysis/total-analysis/AchievementAnalysis/AchievementAnalysis.vue
  27. 1 1
      TEAMModelOS/ClientApp/view/student-analysis/total-analysis/AchievementAnalysis/EarlyWarning.vue
  28. 31 9
      TEAMModelOS/ClientApp/view/student-analysis/total-analysis/AchievementAnalysis/EntryTables.vue
  29. 1 1
      TEAMModelOS/ClientApp/view/student-analysis/total-analysis/EvaluationList/EvaluationList.vue
  30. 37 10
      TEAMModelOS/ClientApp/view/student-analysis/total-analysis/KnowledgeAnalysis/KnowledgeAnalysis.vue
  31. 37 39
      TEAMModelOS/ClientApp/view/student-analysis/total-analysis/KnowledgeAnalysis/ScoreDetails.vue
  32. 14 13
      TEAMModelOS/ClientApp/view/student-analysis/total-analysis/ScatterAnalysis/ScatterAnalysis.vue
  33. 6 8
      TEAMModelOS/ClientApp/view/student-analysis/total-analysis/TestAnalysis/TestAnalysis.css
  34. 34 28
      TEAMModelOS/ClientApp/view/student-analysis/total-analysis/TestAnalysis/TestAnalysis.vue
  35. 2 1
      TEAMModelOS/ClientApp/view/student-analysis/total-analysis/index.css
  36. 26 9
      TEAMModelOS/ClientApp/view/student-analysis/total-analysis/index.vue
  37. 2 0
      TEAMModelOS/package.json

+ 10 - 0
TEAMModelOS/ClientApp/app.js

@@ -10,12 +10,17 @@ import iView from 'iview';
 import 'iview/dist/styles/iview.css';
 import commons from "@/utils/public.js";
 import apiTools from '@/api';
+import mockTools from '@/mock';
 import { fetch, post } from '@/filters/http';
 import VideoPlayer from 'vue-video-player';
 import jwtDecode from 'jwt-decode';
 import Loading from '@/common/Loading';
 import BaseChangeLine from '@/components/student-analysis/total/BaseChangeLine.vue'
 //import 'echarts/theme/dark.js'
+import HappyScroll from 'vue-happy-scroll'
+// 引入css
+import 'vue-happy-scroll/docs/happy-scroll.css'
+Vue.use(HappyScroll)
 
 require('video.js/dist/video-js.css');
 require('vue-video-player/src/custom-theme.css');
@@ -33,6 +38,8 @@ Vue.prototype.$api = apiTools;
 Vue.prototype.$post = post;
 Vue.prototype.$get = fetch;
 
+//mock数据工具
+Vue.prototype.$Mock = mockTools;
 
 Vue.prototype.$jwtDecode = jwtDecode;
 
@@ -55,6 +62,9 @@ router.afterEach((to, from, next) => {
   document.body.scrollTop = 0;
 });
 
+
+
+
 Vue.use(iView, {
   i18n: (key, value) => i18n.t(key, value)
 })

+ 92 - 13
TEAMModelOS/ClientApp/common/BaseExamList.vue

@@ -3,16 +3,19 @@
     <!-- 搜索框区域 -->
     <Input v-model="searchValue" placeholder="请输入测验名称或其他关键字..." />
 
-    <!-- 选择器区域 -->
+    <!-- 选择器 区域 -->
     <div class="ex-select-wrap">
-      <Select v-model="selectGrade" placeholder="所有年级">
-        <Option v-for="item in gradeList" :value="item.value" :key="item.value">{{ item.label }}</Option>
+      <Select v-model="selectPeriod" @on-change="periodChange">
+        <Option v-for="(item,index) in periodList" :value="index" :key="index">{{ item }}</Option>
       </Select>
-      <Select v-model="selectTerm" placeholder="所有学年期">
-        <Option v-for="item in termList" :value="item.value" :key="item.value">{{ item.label }}</Option>
+      <Select v-model="selectGrade" @on-change="gradeChange">
+        <Option v-for="(item,index) in gradeList" :value="index" :key="index">{{ item }}</Option>
       </Select>
-      <Select v-model="selectExamType" placeholder="所有测验类型">
-        <Option v-for="item in examTypeList" :value="item.value" :key="item.value">{{ item.label }}</Option>
+      <Select v-model="selectTerm" @on-change="termChange">
+        <Option v-for="(item,index) in termList" :value="index" :key="index">{{ item }}</Option>
+      </Select>
+      <Select v-model="selectExamType" @on-change="examTypeChange">
+        <Option v-for="(item,index) in examTypeList" :value="index" :key="index">{{ item }}</Option>
       </Select>
     </div>
     <div class="btn-more" @click="goEvaluationList">
@@ -21,7 +24,8 @@
     </div>
     <!-- 测验列表展示区域 -->
     <div class="ex-list-wrap scrollstyle">
-      <div v-for="(item,index) in examList" :class="['list-item',examIndex == index ? 'list-item-active' : '']" :key="index" @click="handleExamClick(index,item)">
+      <div class="no-data-text" v-if="!examList.length">暂无数据</div>
+      <div v-else v-for="(item,index) in examList" :class="['list-item',examIndex == index ? 'list-item-active' : '']" :key="index" @click="handleExamClick(index,item)">
         <p class="list-item-type"><span class="type1" :style="{color:colorTransfer[item.examType],borderColor:colorTransfer[item.examType]}">{{item.examType}}</span></p>
         <span class="list-item-name">{{item.name}}</span>
         <span class="list-item-info">{{item.joinNum}}人 | {{item.date}}</span>
@@ -38,12 +42,14 @@
     data() {
       return {
         searchValue: "",
-        selectGrade: "",
-        selectTerm: "",
-        selectExamType: "",
+        selectPeriod:0,
+        selectGrade: 0,
+        selectTerm: 0,
+        selectExamType: 0,
+        periodList: ['所有学段','高中','初中'],
         gradeList: [],
         termList: [],
-        examTypeList: [],
+        examTypeList: ['所有测验类型','模拟测验','校内测验','全国测验'],
         examList: [],
         examIndex: 0,
         typesTransfer: {
@@ -66,6 +72,54 @@
       })
     },
     methods: {
+
+      //学段选择
+      periodChange(val) {
+        if (val == 0) {
+          this.selectGrade = 0;
+          this.gradeChange(0);
+        } else if (val == 1) {
+          this.gradeList = ['所有年级', '高一', '高二', '高三'];
+          this.selectGrade = 1;
+          this.gradeChange(1);
+        } else {
+          this.gradeList = ['所有年级', '初一', '初二', '初三'];
+          this.selectGrade = 1;
+          this.gradeChange(1);
+        }
+
+      },
+      //年级选择
+      gradeChange(val) {
+        this.termList = ['所有学年期', '上学期', '下学期'];
+        this.selectTerm = val == 0 ? 0 : 1;
+        this.termChange(this.selectTerm);
+      },
+      //学期选择
+      termChange(val) {
+        console.log(this.gradeList[this.selectGrade]);
+        let currentGrade = this.gradeList[this.selectGrade];
+        let currentTerm = this.termList[val];
+        this.handleFilterExam(currentGrade, currentTerm);
+      },
+      //测验类型选择
+      examTypeChange(val) {
+
+      },
+
+
+      handleFilterExam(grade, term) {
+        if (this.selectPeriod == 0 && grade == "所有年级" && term == "所有学年期") {
+          this.examList = examList;
+        } else {
+          console.log(grade, term);
+        this.examList = examList.filter(item => item.grade == grade && item.term == term);
+        console.log(this.examList);
+
+        }
+              },
+
+
       handleExamClick(index, item) {
         console.log(item);
         this.examIndex = index;
@@ -98,6 +152,15 @@
     border-bottom: 1px solid rgba(128,128,128,.3);
   }
 
+  .ex-list-container .no-data-text {
+        width: 100%;
+        font-size: 20px;
+        font-weight: bold;
+        color: #777777;
+        text-align: center;
+        padding-top: 30px;
+  }
+
   .ex-list-wrap {
     width: 100%;
     overflow-y: auto;
@@ -145,7 +208,8 @@
     flex-direction:row;
     justify-content:space-between;
     cursor:pointer;
-    }
+    box-shadow: 0px 1px 3px 0px #5a5a5a;
+  }
   .ex-list-container .btn-more .ivu-icon {
     font-size:16px;
     margin-left:2px;
@@ -217,6 +281,7 @@
   .ex-select-wrap .ivu-select {
     margin: 5px 0;
     height: 40px;
+    color:#c5c8ce;
   }
 
   .ex-select-wrap .ivu-select-single .ivu-select-selection {
@@ -229,6 +294,20 @@
   .ex-select-wrap .ivu-select-single .ivu-select-dropdown {
     background: #3e3e3e;
   }
+  .ex-select-wrap .ivu-select-single .ivu-select-item {
+    color:#fff;
+  }
+
+    .ex-select-wrap .ivu-select-single .ivu-select-item:hover {
+      background:#5f5f5f;
+    }
+    .ex-select-wrap .ivu-select-single .ivu-select-selected-value {
+      font-size:16px;
+    }
+
+    .ex-select-wrap .ivu-select-single .ivu-select-item-focus {
+      background:transparent;
+    }
 
   .ex-select-wrap .ivu-select-single .ivu-select-placeholder {
     height: 40px;

+ 49 - 0
TEAMModelOS/ClientApp/common/EditableLabel.vue

@@ -0,0 +1,49 @@
+<template>
+  <div class="editable-label">
+    <span v-if="!isEdit" @click="handleEdit">{{content}}</span>
+    <Input v-model="editContent" v-else  @on-blur="handleComplete" autofocus	/>
+  </div>
+
+</template>
+
+<script>
+    export default {
+    name: "EditableLabel",
+    props: ["content"],
+    data() {
+      return {
+        editContent: "",
+        isEdit:false
+      }
+    },
+    created() {
+      //this.content = content;
+    },
+    methods: {
+      handleEdit() {
+        this.isEdit = true;
+        this.editContent = this.content;
+      },
+
+      handleComplete() {
+        this.isEdit = false;
+        this.$emit('editComplete', this.editContent);
+      }
+    }
+    }
+</script>
+<style>
+  .editable-label {
+    display:inline-block;
+    width:80%;
+  }
+
+    .editable-label .ivu-input {
+      background:#565656;
+      border-color:transparent;
+      font-size:18px;
+      font-weight:bold;
+      color:#fff;
+      padding-left:5px;
+    }
+</style>

+ 1 - 1
TEAMModelOS/ClientApp/components/student-analysis/total/BaseEntryLine.vue

@@ -90,7 +90,7 @@
                   shadowOffsetY: 7
                 }
               },
-              data:this.echartData.map(item => item.entryRate - 40),
+              data:this.echartData.map(item => item.entryRate),
               smooth: true
             },
           ]

+ 4 - 4
TEAMModelOS/ClientApp/components/student-analysis/total/BaseKnowledgeBar.vue

@@ -4,11 +4,11 @@
 
 <script>
 export default {
-    name: "hello",
     props: ['echartData'],
   data() {
     return {
-      msg: "Welcome to Your Vue.js App"
+      x: ['方程与不等式', '图形的性质', '统计与概率', '函数', '图形的相似', '锐角三角函数', '几何图形初步', '投影与视图'],
+      y:[28,10,23,25,11,10,12,10]
     };
   },
   mounted() {
@@ -81,7 +81,7 @@ export default {
           splitArea: {
             show: false // 是否显示,默认为false
           },
-          data:this.echartData.map(item => item.name)
+          data: this.x
         },
         yAxis: {
           show: true, // 是否显示
@@ -130,7 +130,7 @@ export default {
               width: 20,
             },
             barWidth:30,
-            data:this.echartData.map(item => item.entryRate)
+            data:this.y
           }]
       };
 

+ 5 - 10
TEAMModelOS/ClientApp/components/student-analysis/total/BaseKnowledgeDetail.vue

@@ -8,7 +8,8 @@ export default {
     props: ['echartData'],
   data() {
     return {
-      msg: "Welcome to Your Vue.js App"
+      x: ['方程与不等式', '图形的性质', '统计与概率', '函数', '图形的相似', '锐角三角函数', '几何图形初步', '投影与视图'],
+      y:[28,10,23,25,11,10,12,10]
     };
   },
   mounted() {
@@ -81,7 +82,7 @@ export default {
           splitArea: {
             show: false // 是否显示,默认为false
           },
-          data:this.echartData.map(item => item.name)
+          data:this.x
         },
         yAxis: {
           show: true, // 是否显示
@@ -130,7 +131,7 @@ export default {
               width: 20,
             },
             barWidth:30,
-            data:this.echartData.map(item => item.entryRate)
+            data:this.y
           }]
       };
 
@@ -142,13 +143,7 @@ export default {
 
       let that = this;
       myBar.on('click', function (params) {
-        let className = params.name;
-        if (className == "高二5班") {
-          //that.$router.push('')
-          that.$router.push({path: '/total/achievement/entryTables', replace: true})
-        } else {
-          that.$Message.warning("暂不支持查看其它班级数据!")
-        }
+        that.$emit('handleItemClick', params);
       })
     }
   }

+ 4 - 34
TEAMModelOS/ClientApp/components/student-analysis/total/BaseLineBar.vue

@@ -23,14 +23,7 @@ export default {
         var option = {
           legend: {
             data: [{
-              name: '学生得分率',
-              textStyle: {
-                color: '#fff'
-              }
-            },
-            {
               name: '班级得分率',
-              color: "red",
               textStyle: {
                 color: '#fff'
               }
@@ -130,7 +123,7 @@ export default {
           },
           series: [
             {
-              name:'学生得分率',
+              name:'班级得分率',
               type: "bar",
               itemStyle: {
                 normal: {  //渐变色
@@ -152,30 +145,7 @@ export default {
               //    color:"#ebebeb"
               //  }
               //},
-              data: echartData.map(item => item.areaPR)
-            },
-            {
-              name:'班级得分率',
-              type: "line",
-              itemStyle: {
-                color: "yellow",
-                width: 0,
-              },
-              symbol: 'none',
-              lineStyle: {
-                type: "dashed",
-                width: 0,
-              },
-              markLine: {
-                data: [
-                  { type: 'average' }
-                ],
-                lineStyle: {
-                  color: 'yellow',
-                  type: "dashed"
-                }
-              },
-              data: echartData.map(item => item.areaPR - 10)
+              data: echartData.map(item => item.entryRate)
             },
             {
               name:'年级得分率',
@@ -198,7 +168,7 @@ export default {
                   type: "dashed"
                 }
               },
-              data: echartData.map(item => item.areaPR - 20)
+              data: echartData.map(item => 60)
             },
             {
               name:'区级得分率',
@@ -221,7 +191,7 @@ export default {
                   type: "dashed"
                 }
               },
-              data: echartData.map(item => item.areaPR - 30)
+              data: echartData.map(item => 88)
             },
           ]
         };

+ 69 - 59
TEAMModelOS/ClientApp/components/student-analysis/total/BaseMyTable.vue

@@ -1,11 +1,17 @@
 <template>
   <div class="myTable">
-    <Table :border="isShowBorder" :data="tableData" :columns="tableColumns"></Table>
-    <div style="margin: 10px;overflow: hidden">
-      <div style="float: right;">
-        <Page :total="100" :current="1" @on-change="changePage"></Page>
+      <Table :border="isShowBorder" :data="tableData" :columns="tableColumns"></Table>
+      <div style="margin: 10px;overflow: hidden">
+        <div style="float: right;">
+          <Page show-total
+                :current="1"
+                :total="tableDatas.length"
+                :page-size="pageSize"
+                @on-change="pageChange"
+                @on-page-size-change="pageSizeChange"
+                show-sizer />
+        </div>
       </div>
-    </div>
   </div>
 </template>
 <script>
@@ -16,7 +22,8 @@
         isShowBorder: true,
         tableData:[],
         tableColumns: [],
-        poperData:[]
+        poperData: [],
+        pageSize:10
       }
     },
     created() {
@@ -30,13 +37,22 @@
         item.poperData = [Math.floor(Math.random() * 50 + 1),Math.floor(Math.random() * 100 + 1),Math.floor(Math.random() * 70 + 1)]
       })
 
+      this.pageChange(1);
+
 
     },
     methods: {
 
       //分页操作
-      changePage() {
-        //this.tableData = this.mockTableData1();
+      pageChange(page) {
+        let start = this.pageSize * (page - 1);
+        let end = this.pageSize * page;
+        this.tableData = this.tableDatas.slice(start, end);
+      },
+
+      pageSizeChange(val) {
+        this.pageSize = val;
+        this.pageChange(1);
       },
 
       renderSimple() {
@@ -60,6 +76,7 @@
       //总分排名Render
       renderRank(h, params) {
         const row = params.row;
+        console.log(row);
         return h('span', {
           domProps: {
             className: "badge-wrap"
@@ -131,44 +148,44 @@
             ])
         ]);
       },
-    //排名变化
-    renderRankChange(h, params) {
-      const row = params.row;
-      return h('span', [
-        h('Icon', {
-          props: {
-            type: row.classRank == 1 ? 'md-arrow-up' : row.classRank == 2 ? 'md-arrow-down' : 'md-git-commit',
-            color: row.classRank == 1 ? '#13ff13' : row.classRank == 2 ? '#fd4e4e' : 'yellow',
-            size: '22'
-          },
-          style: {
-            cursor: 'pointer'
-          }
-        }),
-        h('span', {
-          domProps: {
-            className: "table-rank-value"
-          },
-        }, row.classRank)
-      ]);
-    },
-    //变化状态
-    renderStauts(h, params) {
-      const row = params.row;
-      return h('span', [
-        h('Icon', {
-          props: {
-            type: row.classRank === 1 ? 'md-arrow-up' : row.classRank === 2 ? 'md-arrow-down' : 'md-git-commit',
-            color: row.classRank === 1 ? '#13ff13' : row.classRank === 2 ? '#fd4e4e' : 'yellow',
-            size: '22'
-          },
-          style: {
-            cursor: 'pointer'
-          }
-        })
-      ]);
-    }
-    },
+      //排名变化
+      renderRankChange(h, params) {
+        const row = params.row;
+        return h('span', [
+          h('Icon', {
+            props: {
+              type: row.classRank == 1 ? 'md-arrow-up' : row.classRank == 2 ? 'md-arrow-down' : 'md-git-commit',
+              color: row.classRank == 1 ? '#13ff13' : row.classRank == 2 ? '#fd4e4e' : 'yellow',
+              size: '22'
+            },
+            style: {
+              cursor: 'pointer'
+            }
+          }),
+          h('span', {
+            domProps: {
+              className: "table-rank-value"
+            },
+          }, row.classRank)
+        ]);
+      },
+      //变化状态
+      renderStauts(h, params) {
+        const row = params.row;
+        return h('span', [
+          h('Icon', {
+            props: {
+              type: row.classRank === 1 ? 'md-arrow-up' : row.classRank === 2 ? 'md-arrow-down' : 'md-git-commit',
+              color: row.classRank === 1 ? '#13ff13' : row.classRank === 2 ? '#fd4e4e' : 'yellow',
+              size: '22'
+            },
+            style: {
+              cursor: 'pointer'
+            }
+          })
+        ]);
+      }
+      },
 
     mounted() {
 
@@ -307,37 +324,30 @@
       color:#595959;
     }
 
-
-
-
-
-
-
     .myTable .ivu-table-fixed {
       /*padding-top:3px;*/
       background:#282828;
     }
 
+    .myTable .ivu-select-arrow {
+      top:72%;
+    }
+
     .myTable .ivu-table-fixed-right::before, .ivu-table-fixed::before {
       height:0;
     }
 
-    /* 设置滚动条的样式 */
     .ivu-table-overflowX::-webkit-scrollbar {
         height: 12px !important;
-    }
-    /*滚动槽*/
+     }
     .ivu-table-overflowX::-webkit-scrollbar-track {
         border-radius: 0px;
+        display:none;
     }
-    /* 滚动条滑块 */
     .ivu-table-overflowX::-webkit-scrollbar-thumb {
         border-radius: 0px;
         background: #949494;
     }
 
-        .ivu-table-overflowX::-webkit-scrollbar-thumb:window-inactive {
-            /*background: #85929a;*/
-        }
 </style>
 

+ 8 - 6
TEAMModelOS/ClientApp/components/student-analysis/total/BasePie.vue

@@ -41,15 +41,17 @@ export default {
             type: "pie",
             radius: [30, 150],
             center: ["45%", 190],
-            roseType: "area",
             max: 100, // for funnel
             sort: "ascending", // for funnel
             data: [
-              { value: 28, name: "图形的性质",itemStyle:{color:'#2cc7cb'} },
-              { value: 25, name: "函数",itemStyle:{color:'#b6a2df'} },
-              { value: 33, name: "图形的变化",itemStyle:{color:'#59b2ef'} },
-              { value: 35, name: "统计与概率",itemStyle:{color:'#ffba82'} },
-              { value: 30, name: "数学表达式",itemStyle:{color:'#db7982'} },
+              { value: 28, name: "方程与不等式",itemStyle:{color:'#00cc66'} },
+              { value: 10, name: "图形的性质",itemStyle:{color:'#b6a2df'} },
+              { value: 23, name: "统计与概率",itemStyle:{color:'#59b2ef'} },
+              { value: 25, name: "函数",itemStyle:{color:'#ffba82'} },
+              { value: 11, name: "图形的相似",itemStyle:{color:'#2cc7cb'} },
+              { value: 10, name: "锐角三角函数",itemStyle:{color:'#66cc33'} },
+              { value: 12, name: "几何图形初步",itemStyle:{color:'#db7984'} },
+              { value: 10, name: "投影与视图",itemStyle:{color:'#66ccff'} },
             ]
           }
       };

+ 57 - 3
TEAMModelOS/ClientApp/components/student-analysis/total/BaseScatter.vue

@@ -3,17 +3,70 @@
 </template>
 
 <script>
+  import scatterList from '@/static/scatter.json'
   export default {
     name: "hello",
     data() {
       return {
+        originArr:[],
+        dataArr:[]
       };
     },
+    created() {
+      this.originArr = scatterList;
+      this.originArr.forEach(item => {
+        let arr = [];
+        arr.push(item.x);
+        arr.push(item.y);
+        arr.push(item.name);
+        this.dataArr.push(arr);
+      })
+
+      //let list = scatterList.sort(function (a, b) { return  Number(b.score) - Number(a.score) });
+      scatterList.forEach((item,index) => {
+        //item.rank = list.indexOf(item) + 1;
+        //item.areaName = this.areaName(item.x, item.y);
+      })
+
+      //console.log(JSON.stringify(scatterList));
+
+    },
     mounted() {
       this.drawLine();
 
     },
     methods: {
+
+      randomNum(minNum,maxNum){ 
+          switch(arguments.length){ 
+              case 1: 
+                  return parseInt(Math.random()*minNum+1,10); 
+              break; 
+              case 2: 
+                  return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10); 
+              break; 
+                  default: 
+                      return 0; 
+                  break; 
+          } 
+      },
+
+      areaName(x, y) {
+        if (x <= 0.5 && y <= 50) {
+          return 'C';
+        } else if (x <= 1 && x > 0.5 && y <= 50) {
+          return 'C-'
+        } else if (x <= 0.5 && y > 50 && y <= 75) {
+          return 'B'
+        } else if (x <= 1 && x > 0.5 && y > 50 && y <= 75) {
+          return 'B-'
+        } else if (x <= 0.5 && y > 75 && y <= 100) {
+          return 'A'
+        } else if(x <= 1 && x > 0.5 && y > 75 && y <= 100){
+          return 'A-'
+        }
+      },
+
       random() {
         var r = Math.floor(Math.random() * 100 );
         return r;
@@ -21,10 +74,11 @@
        
       randomDataArray() {
         var d = [];
-        var len = 50;
+        var len = 60;
         while (len--) {
-          d.push([Number(Math.random().toFixed(3)), this.random(), "张三"]);
+          d.push([Number((Math.random() * 0.99).toFixed(3)), this.random(), "张三"]);
         }
+        console.log(d);
         return d;
       },
       drawLine() {
@@ -126,7 +180,7 @@
             {
               name: "学生",
               type: "scatter",
-              data: this.randomDataArray(),
+              data: this.dataArr,
               itemStyle: {
                 color:"#79c8e8"
               },

+ 63 - 6
TEAMModelOS/ClientApp/components/student-analysis/total/BaseTestScatter.vue

@@ -3,12 +3,39 @@
 </template>
 
 <script>
+  import testScatter from '@/static/testScatter.json'
+  import knowledgeList from '@/static/knowledgeList.json'
+
   export default {
     name: "hello",
     data() {
       return {
+        originArr:[],
+        dataArr:[]
       };
     },
+    created(){
+      this.originArr = testScatter;
+      this.originArr.forEach(item => {
+        let arr = [];
+        arr.push(item.x);
+        arr.push(item.y);
+        arr.push(item.type);
+        arr.push(item.id);
+        this.dataArr.push(arr);
+      })
+
+      let list = testScatter.map(item => item.tableData);
+      let knowList = ['方程与不等式','图形的性质','统计与概率','函数','图形的相似','锐角三角函数','几何图形初步','投影与视图']
+
+      //list.forEach((item, index) => {
+      //  item.knowledgePoint = knowList[Math.ceil(Math.random() * 7)];
+      //  item.areaName = this.areaName(testScatter[index].x, testScatter[index].y);
+      //})
+
+      //console.log(JSON.stringify(testScatter));
+
+    },
     mounted() {
       this.drawLine();
 
@@ -18,6 +45,35 @@
         var r = Math.floor(Math.random() * 100 );
         return r;
       },
+
+      
+      areaName(x, y) {
+        if (x <= 0.5 && y <= 50) {
+          return 'B';
+        } else if (x <= 1 && x > 0.5 && y <= 50) {
+          return 'B -'
+        } else if (x <= 0.5 && y > 50 && y <= 100) {
+          return 'A'
+        } else {
+          return 'A -'
+        }
+      },
+
+
+      randomNum(minNum, maxNum) {
+        switch (arguments.length) {
+          case 1:
+            return parseInt(Math.random() * minNum + 1, 10);
+            break;
+          case 2:
+            return parseInt(Math.random() * ( maxNum - minNum + 1 ) + minNum, 10);
+            //或者 Math.floor(Math.random()*( maxNum - minNum + 1 ) + minNum );
+            break;
+          default:
+            return 0;
+            break;
+        }
+      }, 
        
       randomDataArray() {
         var d = [];
@@ -25,6 +81,7 @@
         while (len--) {
           d.push([Number(Math.random().toFixed(3)), this.random(), "张三"]);
         }
+        console.log(d);
         return d;
       },
       drawLine() {
@@ -49,14 +106,14 @@
             formatter: function (params) {
               const item = params;
               return `信息<br/>
-                        题号:${item.data[2]}
-                        <br/>题型:${item.data[1]}%
-                        <br/>答对率:${item.data[0]}
+                        题号:${item.data[3]}
+                        <br/>题型:${item.data[2]}
+                        <br/>答对率:${item.data[1]}%
                        `;
               }
           },
           legend: {
-            data: ["学生"]
+            data: ["试题"]
           },
           toolbox: {
             show: true,
@@ -125,9 +182,9 @@
           ],
           series: [
             {
-              name: "学生",
+              name: "试题",
               type: "scatter",
-              data: this.randomDataArray(),
+              data: this.dataArr,
               itemStyle: {
                 color:"#79c8e8"
               },

+ 2 - 0
TEAMModelOS/ClientApp/filters/http.js

@@ -10,6 +10,8 @@ axios.interceptors.request.use(
     // const token = getCookie('名称');
     config.data = JSON.stringify(config.data);
 
+    console.log(config);
+
     if (localStorage.getItem('token')) {
       config.headers = {
         'Content-Type': 'application/json',

+ 70 - 0
TEAMModelOS/ClientApp/mock/index.js

@@ -0,0 +1,70 @@
+import Mock from 'mockjs';//es6语法引入mock模块
+
+//后续项目需要产生模拟数据即可使用此工具
+export default {
+  data: Mock.mock({
+    'examList|10': [{
+      "id|+1": 1,   
+      "name": "@cname",  
+      "ago|18-28": 25,     
+      "sex|1": ["男", "女"],    
+      "job|1": ["web", "UI", "python", "php"]  
+    }], 
+    'classList|8': [{
+      "id|+1": 1,
+      "name": function () {
+        return "高二" + this.id + "班"
+      },
+      "classId|+1": 140015511001,
+      "average|520-630": 630,
+      "totalNum|50-70": 70,
+      "entryNum|50-70": function () {
+        return (this.totalNum - Math.ceil(Math.random() * 20))
+      },
+      "gradeRank": function () {
+        return this.id
+      },
+      "entryRate": function () {
+        return (this.entryNum / this.totalNum).toFixed(2) * 100 + '%'
+      },
+      "standardDeviation": 55,
+      "rankStatus|1-8": 1
+    }],
+    'studentList|60': [{
+      "id|+1": 1,
+      "name": "@cname",
+      "memberId|+1": 140015511001,
+      "score|520-630": 630,
+      "classRank|1-60": 1,
+      "classPR": function () {
+        return 100 - Math.ceil(Math.random() * 20) + '%'
+      },
+      "gradeRank|1-200": function () {
+        return this.classRank + Math.ceil(Math.random() * 100);
+      },
+      "gradePR": function () {
+        return 100 - Math.ceil(Math.random() * 20) + '%'
+      },
+      "areaRank|1-400": function () {
+        return this.classRank + Math.ceil(Math.random() * 300)
+      },
+      "areaPR": function () {
+        return 100 - Math.ceil(Math.random() * 20) + '%'
+      },
+      "chinese|90-150": 150,
+      "math|90-150": 150,
+      "english|90-150": 150,
+      "chemistry|60-100": 100,
+      "physics|60-100": 100,
+      "biology|60-100": 100,
+      "chineseRank|1-400":400,
+      "mathRank|1-400":400,
+      "englishRank|1-400":400,
+      "chemistryRank|1-400":400,
+      "physicsRank|1-400":400,
+      "biologyRank|1-400":400,
+    }]
+    })
+};
+
+

+ 6 - 0
TEAMModelOS/ClientApp/router/index.js

@@ -19,4 +19,10 @@ let router = new VueRouter(
 },
 )
 
+//解决NavigationDuplicated 报错
+  const originalPush = VueRouter.prototype.push
+  VueRouter.prototype.push = function push(location) {
+    return originalPush.call(this, location).catch(err => err)
+  }
+
 export default router

+ 1 - 1
TEAMModelOS/ClientApp/router/routes.js

@@ -91,7 +91,7 @@ export const routes = [
 
   //学校区校班管理
   {
-    name: 'school',
+    name: 'schoolIndex',
     path: '/school',
     component: resolve => require(['@/view/school-mgmt/Index.vue'], resolve),
     children: [

+ 81 - 74
TEAMModelOS/ClientApp/static/classList.json

@@ -1,99 +1,106 @@
 [
   {
-    "id": "1",
+    "id": 1,
+    "classId": 140015511001,
+    "average": 550,
+    "totalNum": 55,
+    "standardDeviation": 55,
+    "rankStatus": 5,
     "name": "高二1班",
-    "classId": "140015511001",
-    "average": "580",
-    "totalNum": "100",
-    "entryNum": "95",
-    "gradeRank": "1",
-    "entryRate": "95",
-    "standardDeviation": "55",
-    "rankStatus": "1"
+    "entryNum": 38,
+    "gradeRank": 5,
+    "entryRate": 69,
+    "overAverageRate": "70%"
   },
   {
-    "id": "2",
+    "id": 2,
+    "classId": 140015511002,
+    "average": 540,
+    "totalNum": 69,
+    "standardDeviation": 55,
+    "rankStatus": 2,
     "name": "高二2班",
-    "classId": "140015511001",
-    "average": "580",
-    "totalNum": "90",
-    "entryNum": "85",
-    "gradeRank": "2",
-    "entryRate": "75",
-    "standardDeviation": "55",
-    "rankStatus": "1"
+    "entryNum": 52,
+    "gradeRank": 6,
+    "entryRate": 75,
+    "overAverageRate": "73%"
   },
   {
-    "id": "3",
+    "id": 3,
+    "classId": 140015511003,
+    "average": 583,
+    "totalNum": 55,
+    "standardDeviation": 55,
+    "rankStatus": 3,
     "name": "高二3班",
-    "classId": "140015511003",
-    "average": "580",
-    "totalNum": "103",
-    "entryNum": "93",
-    "gradeRank": "3",
-    "entryRate": "93",
-    "standardDeviation": "55",
-    "rankStatus": "0"
+    "entryNum": 51,
+    "gradeRank": 3,
+    "entryRate": 93,
+    "overAverageRate": "76%"
   },
   {
-    "id": "4",
+    "id": 4,
+    "classId": 140015511004,
+    "average": 531,
+    "totalNum": 66,
+    "standardDeviation": 55,
+    "rankStatus": 3,
     "name": "高二4班",
-    "classId": "140015511004",
-    "average": "580",
-    "totalNum": "140",
-    "entryNum": "125",
-    "gradeRank": "4",
-    "entryRate": "90",
-    "standardDeviation": "45",
-    "rankStatus": "2"
+    "entryNum": 63,
+    "gradeRank": 7,
+    "entryRate": 95,
+    "overAverageRate": "80%"
   },
   {
-    "id": "5",
+    "id": 5,
+    "classId": 140015511005,
+    "average": 622,
+    "totalNum": 53,
+    "standardDeviation": 55,
+    "rankStatus": 5,
     "name": "高二5班",
-    "classId": "140015511005",
-    "average": "550",
-    "totalNum": "90",
-    "entryNum": "85",
-    "gradeRank": "5",
-    "entryRate": "75",
-    "standardDeviation": "55",
-    "rankStatus": "0"
+    "entryNum": 48,
+    "gradeRank": 1,
+    "entryRate": 91,
+    "overAverageRate": "82%"
   },
   {
-    "id": "6",
+    "id": 6,
+    "classId": 140015511006,
+    "average": 608,
+    "totalNum": 60,
+    "standardDeviation": 55,
+    "rankStatus": 5,
     "name": "高二6班",
-    "classId": "140015511006",
-    "average": "580",
-    "totalNum": "160",
-    "entryNum": "155",
-    "gradeRank": "6",
-    "entryRate": "95",
-    "standardDeviation": "55",
-    "rankStatus": "1"
+    "entryNum": 47,
+    "gradeRank": 2,
+    "entryRate": 78,
+    "overAverageRate": "70%"
   },
   {
-    "id": "7",
+    "id": 7,
+    "classId": 140015511007,
+    "average": 521,
+    "totalNum": 59,
+    "standardDeviation": 55,
+    "rankStatus": 8,
     "name": "高二7班",
-    "classId": "140015511007",
-    "average": "560",
-    "totalNum": "120",
-    "entryNum": "80",
-    "gradeRank": "7",
-    "entryRate": "65",
-    "standardDeviation": "55",
-    "rankStatus": "1"
+    "entryNum": 56,
+    "gradeRank": 8,
+    "entryRate": 95,
+    "overAverageRate": "75%"
   },
   {
-    "id": "7",
-    "name": "高二7班",
-    "classId": "140015511007",
-    "average": "560",
-    "totalNum": "120",
-    "entryNum": "80",
-    "gradeRank": "7",
-    "entryRate": "65",
-    "standardDeviation": "55",
-    "rankStatus": "1"
+    "id": 8,
+    "classId": 140015511008,
+    "average": 570,
+    "totalNum": 66,
+    "standardDeviation": 55,
+    "rankStatus": 3,
+    "name": "高二8班",
+    "entryNum": 63,
+    "gradeRank": 4,
+    "entryRate": 95,
+    "overAverageRate": "78%"
   }
-
 ]

+ 30 - 12
TEAMModelOS/ClientApp/static/examList.json

@@ -1,45 +1,63 @@
 [
   {
     "id": "1",
-    "name": "高新区芳草小学2019年5月期中考试",
+    "name": "成都新川外国语学校2019年5月期中考试",
     "joinNum": "1580",
     "date": "2019-06-11",
-    "examType": "A"
+    "examType": "A",
+    "period": "初中",
+    "grade": "初一",
+    "term": "上学期"
   },
   {
     "id": "2",
-    "name": "高新区芳草小学2019年6月期中考试",
+    "name": "成都新川外国语学校2019年6月期中考试",
     "joinNum": "1380",
     "date": "2019-06-11",
-    "examType": "A"
+    "examType": "A",
+    "period": "高中",
+    "grade": "高一",
+    "term": "下学期"
   },
   {
     "id": "3",
-    "name": "高新区芳草小学2019年7月期中考试",
+    "name": "成都新川外国语学校2019年7月期中考试",
     "joinNum": "1280",
     "date": "2019-06-11",
-    "examType": "B"
+    "examType": "B",
+    "period": "初中",
+    "grade": "初一",
+    "term": "上学期"
   },
   {
     "id": "4",
-    "name": "高新区芳草小学2019年8月期中考试",
+    "name": "成都新川外国语学校2019年8月期中考试",
     "joinNum": "2580",
     "date": "2019-06-11",
-    "examType": "A"
+    "examType": "A",
+    "period": "初中",
+    "grade": "初一",
+    "term": "上学期"
   },
   {
     "id": "5",
-    "name": "高新区芳草小学2019年9月期中考试",
+    "name": "成都新川外国语学校2019年9月期中考试",
     "joinNum": "1580",
     "date": "2019-06-11",
-    "examType": "C"
+    "examType": "C",
+    "period": "高中",
+    "grade": "高一",
+    "term": "上学期"
   },
   {
     "id": "6",
-    "name": "高新区芳草小学2019年10月期中考试",
+    "name": "成都新川外国语学校2019年10月期中考试",
     "joinNum": "1540",
     "date": "2019-06-11",
-    "examType": "B"
+    "examType": "B",
+    "period": "初中",
+    "grade": "初一",
+    "term": "上学期"
   }
 
 ]

+ 83 - 0
TEAMModelOS/ClientApp/static/exerciseList.json

@@ -0,0 +1,83 @@
+[
+  {
+    "id": "1",
+    "name": "求复平面内对应的坐标",
+    "type": "问答",
+    "knowledgePoint": "函数",
+    "level": "评鉴",
+    "gradeScoreRate": "90%",
+    "poperData": [ 14, 50, 44 ]
+  },
+  {
+    "id": "2",
+    "name": "求复平面内对应的坐标",
+    "type": "多选",
+    "knowledgePoint": "锐角三角函数",
+    "level": "理解",
+    "gradeScoreRate": "77%",
+    "poperData": [ 18, 46, 60 ]
+  },
+  {
+    "id": "3",
+    "name": "求复平面内对应的坐标",
+    "type": "判断",
+    "knowledgePoint": "图形的相似",
+    "level": "评鉴",
+    "gradeScoreRate": "85%",
+    "poperData": [ 24, 87, 69 ]
+  },
+  {
+    "id": "4",
+    "name": "求复平面内对应的坐标",
+    "type": "判断",
+    "knowledgePoint": "几何图形初步",
+    "level": "评鉴",
+    "gradeScoreRate": "70%",
+    "poperData": [ 34, 9, 63 ]
+  },
+  {
+    "id": "5",
+    "name": "求复平面内对应的坐标",
+    "type": "多选",
+    "knowledgePoint": "投影与视图",
+    "level": "应用",
+    "gradeScoreRate": "62%",
+    "poperData": [ 40, 40, 68 ]
+  },
+  {
+    "id": "6",
+    "name": "求复平面内对应的坐标",
+    "type": "判断",
+    "knowledgePoint": "函数",
+    "level": "应用",
+    "gradeScoreRate": "71%",
+    "poperData": [ 33, 45, 22 ]
+  },
+  {
+    "id": "7",
+    "name": "求复平面内对应的坐标",
+    "type": "问答",
+    "knowledgePoint": "锐角三角函数",
+    "level": "应用",
+    "gradeScoreRate": "83%",
+    "poperData": [ 23, 43, 25 ]
+  },
+  {
+    "id": "8",
+    "name": "求复平面内对应的坐标",
+    "type": "判断",
+    "knowledgePoint": "投影与视图",
+    "level": "应用",
+    "gradeScoreRate": "77%",
+    "poperData": [ 46, 4, 63 ]
+  },
+  {
+    "id": "9",
+    "name": "求复平面内对应的坐标",
+    "type": "判断",
+    "knowledgePoint": "图形的性质",
+    "level": "综合",
+    "gradeScoreRate": "81%",
+    "poperData": [ 41, 73, 55 ]
+  }
+]

+ 82 - 42
TEAMModelOS/ClientApp/static/knowledgeList.json

@@ -2,11 +2,16 @@
   {
     "id": "1",
     "name": "算法平均值",
-    "classId": "140015511001",
-    "average": "580",
-    "totalNum": "100",
-    "entryNum": "95",
-    "gradeRank": "1",
+    "type": "填空",
+    "areaName": "A",
+    "score": "6",
+    "diff": "0.5",
+    "identify": "0.6",
+    "classScoreRate": "80%",
+    "gradeScoreRate": "80%",
+    "areaScoreRate": "80%",
+    "highScoreRate": "80%",
+    "lowScoreRate": "80%",
     "entryRate": "95",
     "standardDeviation": "55",
     "rankStatus": "1"
@@ -14,11 +19,16 @@
   {
     "id": "2",
     "name": "一元二次方程",
-    "classId": "140015511001",
-    "average": "580",
-    "totalNum": "90",
-    "entryNum": "85",
-    "gradeRank": "2",
+    "type": "填空",
+    "areaName": "A",
+    "score": "6",
+    "diff": "0.5",
+    "identify": "0.6",
+    "classScoreRate": "80%",
+    "gradeScoreRate": "80%",
+    "areaScoreRate": "80%",
+    "highScoreRate": "80%",
+    "lowScoreRate": "80%",
     "entryRate": "75",
     "standardDeviation": "55",
     "rankStatus": "1"
@@ -26,23 +36,33 @@
   {
     "id": "3",
     "name": "全等三角形性质",
-    "classId": "140015511003",
-    "average": "580",
-    "totalNum": "103",
-    "entryNum": "93",
-    "gradeRank": "3",
+    "type": "填空",
+    "areaName": "A",
+    "score": "6",
+    "diff": "0.5",
+    "identify": "0.6",
+    "classScoreRate": "80%",
+    "gradeScoreRate": "80%",
+    "areaScoreRate": "80%",
+    "highScoreRate": "80%",
+    "lowScoreRate": "80%",
     "entryRate": "93",
     "standardDeviation": "55",
     "rankStatus": "0"
   },
   {
     "id": "4",
-    "name": "等腰三角形的周长计算",
-    "classId": "140015511004",
-    "average": "580",
-    "totalNum": "140",
-    "entryNum": "125",
-    "gradeRank": "4",
+    "name": "全等三角形性质",
+    "type": "填空",
+    "areaName": "A",
+    "score": "6",
+    "diff": "0.5",
+    "identify": "0.6",
+    "classScoreRate": "80%",
+    "gradeScoreRate": "80%",
+    "areaScoreRate": "80%",
+    "highScoreRate": "80%",
+    "lowScoreRate": "80%",
     "entryRate": "90",
     "standardDeviation": "45",
     "rankStatus": "2"
@@ -50,11 +70,16 @@
   {
     "id": "5",
     "name": "二元二次方程",
-    "classId": "140015511005",
-    "average": "550",
-    "totalNum": "90",
-    "entryNum": "85",
-    "gradeRank": "5",
+    "type": "填空",
+    "areaName": "A",
+    "score": "6",
+    "diff": "0.5",
+    "identify": "0.6",
+    "classScoreRate": "80%",
+    "gradeScoreRate": "80%",
+    "areaScoreRate": "80%",
+    "highScoreRate": "80%",
+    "lowScoreRate": "80%",
     "entryRate": "75",
     "standardDeviation": "55",
     "rankStatus": "0"
@@ -62,11 +87,16 @@
   {
     "id": "6",
     "name": "等边三角形的面积",
-    "classId": "140015511006",
-    "average": "580",
-    "totalNum": "160",
-    "entryNum": "155",
-    "gradeRank": "6",
+    "type": "填空",
+    "areaName": "A",
+    "score": "6",
+    "diff": "0.5",
+    "identify": "0.6",
+    "classScoreRate": "80%",
+    "gradeScoreRate": "80%",
+    "areaScoreRate": "80%",
+    "highScoreRate": "80%",
+    "lowScoreRate": "80%",
     "entryRate": "95",
     "standardDeviation": "55",
     "rankStatus": "1"
@@ -74,23 +104,33 @@
   {
     "id": "7",
     "name": "全等三角形的性质",
-    "classId": "140015511007",
-    "average": "560",
-    "totalNum": "120",
-    "entryNum": "80",
-    "gradeRank": "7",
+    "type": "填空",
+    "areaName": "A",
+    "score": "6",
+    "diff": "0.5",
+    "identify": "0.6",
+    "classScoreRate": "80%",
+    "gradeScoreRate": "80%",
+    "areaScoreRate": "80%",
+    "highScoreRate": "80%",
+    "lowScoreRate": "80%",
     "entryRate": "65",
     "standardDeviation": "55",
     "rankStatus": "1"
   },
   {
-    "id": "7",
+    "id": "8",
     "name": "多元多次方程",
-    "classId": "140015511007",
-    "average": "560",
-    "totalNum": "120",
-    "entryNum": "80",
-    "gradeRank": "7",
+    "type": "填空",
+    "areaName": "A",
+    "score": "6",
+    "diff": "0.5",
+    "identify": "0.6",
+    "classScoreRate": "80%",
+    "gradeScoreRate": "80%",
+    "areaScoreRate": "80%",
+    "highScoreRate": "80%",
+    "lowScoreRate": "80%",
     "entryRate": "65",
     "standardDeviation": "55",
     "rankStatus": "1"

File diff suppressed because it is too large
+ 2222 - 0
TEAMModelOS/ClientApp/static/scatter.json


+ 752 - 0
TEAMModelOS/ClientApp/static/testScatter.json

@@ -0,0 +1,752 @@
+[
+  {
+    "id": 1,
+    "type": "问答",
+    "y": 93.618,
+    "x": 0.47,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "问答",
+      "areaName": "A",
+      "score": 4,
+      "diff": 0.47,
+      "identify": "0.20",
+      "classScoreRate": "52%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "统计与概率",
+      "poperData": [ 47, 92, 36 ]
+    }
+  },
+  {
+    "id": 2,
+    "type": "判断",
+    "y": 79.742,
+    "x": 0.08,
+    "tableData": {
+      "id": "2",
+      "name": "一元二次方程",
+      "type": "判断",
+      "areaName": "A",
+      "score": 7,
+      "diff": 0.08,
+      "identify": "0.60",
+      "classScoreRate": "66%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "75",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "几何图形初步",
+      "poperData": [ 34, 57, 37 ]
+    }
+  },
+  {
+    "id": 3,
+    "type": "多选",
+    "y": 67.322,
+    "x": 0.05,
+    "tableData": {
+      "id": "3",
+      "name": "全等三角形性质",
+      "type": "多选",
+      "areaName": "A",
+      "score": 3,
+      "diff": 0.05,
+      "identify": "0.70",
+      "classScoreRate": "73%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "93",
+      "standardDeviation": "55",
+      "rankStatus": "0",
+      "knowledgePoint": "图形的相似",
+      "poperData": [ 30, 10, 26 ]
+    }
+  },
+  {
+    "id": 4,
+    "type": "多选",
+    "y": 51.714,
+    "x": 0.42,
+    "tableData": {
+      "id": "4",
+      "name": "全等三角形性质",
+      "type": "多选",
+      "areaName": "A",
+      "score": 12,
+      "diff": 0.42,
+      "identify": "0.20",
+      "classScoreRate": "87%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "90",
+      "standardDeviation": "45",
+      "rankStatus": "2",
+      "knowledgePoint": "统计与概率",
+      "poperData": [ 22, 19, 28 ]
+    }
+  },
+  {
+    "id": 5,
+    "type": "单选",
+    "y": 76.833,
+    "x": 0.5,
+    "tableData": {
+      "id": "5",
+      "name": "二元二次方程",
+      "type": "单选",
+      "areaName": "A",
+      "score": 5,
+      "diff": 0.5,
+      "identify": "0.50",
+      "classScoreRate": "69%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "75",
+      "standardDeviation": "55",
+      "rankStatus": "0",
+      "knowledgePoint": "几何图形初步",
+      "poperData": [ 15, 73, 63 ]
+    }
+  },
+  {
+    "id": 6,
+    "type": "填空",
+    "y": 67.349,
+    "x": 0.5,
+    "tableData": {
+      "id": "6",
+      "name": "等边三角形的面积",
+      "type": "填空",
+      "areaName": "A",
+      "score": 11,
+      "diff": 0.5,
+      "identify": "0.50",
+      "classScoreRate": "57%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "统计与概率",
+      "poperData": [ 12, 36, 54 ]
+    }
+  },
+  {
+    "id": 7,
+    "type": "单选",
+    "y": 76.238,
+    "x": 0.28,
+    "tableData": {
+      "id": "7",
+      "name": "全等三角形的性质",
+      "type": "单选",
+      "areaName": "A",
+      "score": 10,
+      "diff": 0.28,
+      "identify": "0.50",
+      "classScoreRate": "75%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "65",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "图形的性质",
+      "poperData": [ 38, 87, 25 ]
+    }
+  },
+  {
+    "id": 8,
+    "type": "判断",
+    "y": 61.213,
+    "x": 0.16,
+    "tableData": {
+      "id": "8",
+      "name": "多元多次方程",
+      "type": "判断",
+      "areaName": "A",
+      "score": 6,
+      "diff": 0.16,
+      "identify": "0.30",
+      "classScoreRate": "68%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "65",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "图形的性质",
+      "poperData": [ 33, 92, 17 ]
+    }
+  },
+  {
+    "id": 9,
+    "type": "判断",
+    "y": 82.888,
+    "x": 0.23,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "判断",
+      "areaName": "A",
+      "score": 4,
+      "diff": 0.23,
+      "identify": "0.60",
+      "classScoreRate": "67%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "统计与概率",
+      "poperData": [ 33, 23, 2 ]
+    }
+  },
+  {
+    "id": 10,
+    "type": "多选",
+    "y": 57.022,
+    "x": 0.33,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "多选",
+      "areaName": "A",
+      "score": 5,
+      "diff": 0.33,
+      "identify": "1.00",
+      "classScoreRate": "87%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "锐角三角函数",
+      "poperData": [ 40, 83, 12 ]
+    }
+  },
+  {
+    "id": 11,
+    "type": "判断",
+    "y": 50.597,
+    "x": 0.13,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "判断",
+      "areaName": "A",
+      "score": 2,
+      "diff": 0.13,
+      "identify": "0.60",
+      "classScoreRate": "78%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "统计与概率",
+      "poperData": [ 41, 42, 5 ]
+    }
+  },
+  {
+    "id": 12,
+    "type": "多选",
+    "y": 56.657,
+    "x": 0.22,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "多选",
+      "areaName": "A",
+      "score": 3,
+      "diff": 0.22,
+      "identify": "0.80",
+      "classScoreRate": "74%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "锐角三角函数",
+      "poperData": [ 5, 6, 21 ]
+    }
+  },
+  {
+    "id": 13,
+    "type": "多选",
+    "y": 61.516,
+    "x": 0.44,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "多选",
+      "areaName": "A",
+      "score": 7,
+      "diff": 0.44,
+      "identify": "0.30",
+      "classScoreRate": "79%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "锐角三角函数",
+      "poperData": [ 10, 26, 25 ]
+    }
+  },
+  {
+    "id": 14,
+    "type": "多选",
+    "y": 98.757,
+    "x": 0.08,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "多选",
+      "areaName": "A",
+      "score": 2,
+      "diff": 0.08,
+      "identify": "0.40",
+      "classScoreRate": "72%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "几何图形初步",
+      "poperData": [ 49, 84, 63 ]
+    }
+  },
+  {
+    "id": 15,
+    "type": "单选",
+    "y": 87.139,
+    "x": 0.21,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "单选",
+      "areaName": "A",
+      "score": 2,
+      "diff": 0.21,
+      "identify": "0.30",
+      "classScoreRate": "73%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "函数",
+      "poperData": [ 21, 8, 27 ]
+    }
+  },
+  {
+    "id": 16,
+    "type": "多选",
+    "y": 54.914,
+    "x": 0.03,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "多选",
+      "areaName": "A",
+      "score": 2,
+      "diff": 0.03,
+      "identify": "0.90",
+      "classScoreRate": "53%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "几何图形初步",
+      "poperData": [ 37, 62, 13 ]
+    }
+  },
+  {
+    "id": 17,
+    "type": "问答",
+    "y": 54.212,
+    "x": 0.16,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "问答",
+      "areaName": "A",
+      "score": 2,
+      "diff": 0.16,
+      "identify": "0.80",
+      "classScoreRate": "65%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "函数",
+      "poperData": [ 36, 3, 20 ]
+    }
+  },
+  {
+    "id": 18,
+    "type": "填空",
+    "y": 82.468,
+    "x": 0.13,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "填空",
+      "areaName": "A",
+      "score": 8,
+      "diff": 0.13,
+      "identify": "0.30",
+      "classScoreRate": "51%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "图形的性质",
+      "poperData": [ 11, 98, 36 ]
+    }
+  },
+  {
+    "id": 19,
+    "type": "判断",
+    "y": 80.553,
+    "x": 0.44,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "判断",
+      "areaName": "A",
+      "score": 1,
+      "diff": 0.44,
+      "identify": "0.90",
+      "classScoreRate": "83%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "图形的相似",
+      "poperData": [ 22, 70, 68 ]
+    }
+  },
+  {
+    "id": 20,
+    "type": "多选",
+    "y": 81.154,
+    "x": 0.84,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "多选",
+      "areaName": "A -",
+      "score": 3,
+      "diff": 0.84,
+      "identify": "0.20",
+      "classScoreRate": "73%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "图形的相似",
+      "poperData": [ 23, 59, 6 ]
+    }
+  },
+  {
+    "id": 21,
+    "type": "填空",
+    "y": 82.468,
+    "x": 0.73,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "填空",
+      "areaName": "A -",
+      "score": 10,
+      "diff": 0.73,
+      "identify": "0.80",
+      "classScoreRate": "72%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "几何图形初步",
+      "poperData": [ 47, 39, 29 ]
+    }
+  },
+  {
+    "id": 22,
+    "type": "判断",
+    "y": 80.553,
+    "x": 0.64,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "判断",
+      "areaName": "A -",
+      "score": 3,
+      "diff": 0.64,
+      "identify": "0.30",
+      "classScoreRate": "57%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "锐角三角函数",
+      "poperData": [ 34, 60, 40 ]
+    }
+  },
+  {
+    "id": 23,
+    "type": "多选",
+    "y": 31.154,
+    "x": 0.54,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "多选",
+      "areaName": "B -",
+      "score": 2,
+      "diff": 0.54,
+      "identify": "0.40",
+      "classScoreRate": "64%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "统计与概率",
+      "poperData": [ 44, 44, 30 ]
+    }
+  },
+  {
+    "id": 24,
+    "type": "填空",
+    "y": 42.468,
+    "x": 0.13,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "填空",
+      "areaName": "B",
+      "score": 3,
+      "diff": 0.13,
+      "identify": "0.40",
+      "classScoreRate": "53%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "图形的性质",
+      "poperData": [ 43, 8, 46 ]
+    }
+  },
+  {
+    "id": 25,
+    "type": "判断",
+    "y": 40.553,
+    "x": 0.24,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "判断",
+      "areaName": "B",
+      "score": 8,
+      "diff": 0.24,
+      "identify": "0.60",
+      "classScoreRate": "70%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "图形的性质",
+      "poperData": [ 40, 15, 5 ]
+    }
+  },
+  {
+    "id": 26,
+    "type": "多选",
+    "y": 31.154,
+    "x": 0.34,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "多选",
+      "areaName": "B",
+      "score": 6,
+      "diff": 0.34,
+      "identify": "1.00",
+      "classScoreRate": "80%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "函数",
+      "poperData": [ 1, 68, 53 ]
+    }
+  },
+  {
+    "id": 27,
+    "type": "多选",
+    "y": 71.154,
+    "x": 0.34,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "多选",
+      "areaName": "A",
+      "score": 12,
+      "diff": 0.34,
+      "identify": "0.30",
+      "classScoreRate": "63%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "图形的相似",
+      "poperData": [ 3, 82, 28 ]
+    }
+  },
+  {
+    "id": 28,
+    "type": "填空",
+    "y": 42.468,
+    "x": 0.13,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "填空",
+      "areaName": "B",
+      "score": 12,
+      "diff": 0.13,
+      "identify": "1.00",
+      "classScoreRate": "65%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "图形的相似",
+      "poperData": [ 26, 98, 10 ]
+    }
+  },
+  {
+    "id": 29,
+    "type": "判断",
+    "y": 40.553,
+    "x": 0.64,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "判断",
+      "areaName": "B -",
+      "score": 12,
+      "diff": 0.64,
+      "identify": "0.70",
+      "classScoreRate": "86%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "函数",
+      "poperData": [ 40, 38, 5 ]
+    }
+  },
+  {
+    "id": 30,
+    "type": "多选",
+    "y": 51.154,
+    "x": 0.74,
+    "tableData": {
+      "id": "1",
+      "name": "算法平均值",
+      "type": "多选",
+      "areaName": "A -",
+      "score": 1,
+      "diff": 0.74,
+      "identify": "1.00",
+      "classScoreRate": "90%",
+      "gradeScoreRate": "80%",
+      "areaScoreRate": "80%",
+      "highScoreRate": "80%",
+      "lowScoreRate": "80%",
+      "entryRate": "95",
+      "standardDeviation": "55",
+      "rankStatus": "1",
+      "knowledgePoint": "投影与视图",
+      "poperData": [ 10, 7, 70 ]
+    }
+  }
+]

+ 7 - 2
TEAMModelOS/ClientApp/store/module/totalAnalysis.js

@@ -1,18 +1,23 @@
 //全科学情分析数据
+import mockTools from '@/mock';
 import classList from '@/static/classList.json' //模拟班级数据
 import memberList from '@/static/studentsInfo.json' //模拟学生数据
+import scatter from '@/static/scatter.json' //模拟学生数据
 import examList from '@/static/examList.json' //模拟评测数据
 import knowledgeList from '@/static/knowledgeList.json' //模拟知识点数据
+import exerciseList from '@/static/exerciseList.json' //模拟知识点数据
 import questions from '@/view/evaluation/index/list.json' //模拟题目数据
 
 
 export default {
   state: {
     classList: classList,
-    memberList: memberList,
+    memberList: mockTools.data.studentList,
     examList: examList,
     knowledgeList: knowledgeList,
-    questions: questions
+    questions: questions,
+    scatter: scatter,
+    exerciseList: exerciseList
   },
   getters: {
 

+ 41 - 10
TEAMModelOS/ClientApp/view/school-mgmt/SystemSetting/SystemSetting.less

@@ -2,6 +2,7 @@
 @borderColor: #424242; //边框颜色
 @primary-textColor: #fff; //文本主颜色
 @second-textColor: #a5a5a5; //文本副级颜色
+@nothing-textColor:#5f5f5f;
 @primary-fontSize: 14px;
 @second-fontSize: 16px;
 @large-fontSize: 20px;
@@ -119,7 +120,7 @@
                 font-size: @large-fontSize;
                 color: @primary-textColor;
                 font-weight: bold;
-                margin: 2px 3px;
+                margin: 2px 0px;
 
                 .period-btn-edit {
                     font-size: @primary-fontSize;
@@ -159,12 +160,13 @@
     }
 
     &-center {
-        .colSpan(30%);
+        .colSpan(25%);
 
         .col-body {
             width: 100%;
             height: 100%;
-            .fl-row-center;
+            display: flex;
+            flex-direction: row;
         }
 
         .term-list {
@@ -176,15 +178,31 @@
                 width: 100%;
                 border-bottom: 1px solid @borderColor;
                 padding: 10px 20px;
+                cursor: pointer;
+
+                &:hover {
+                    background-image: -webkit-linear-gradient(90deg, rgba(30,30,30,0) 0%, rgba(110,110,110,.2) 50%, rgba(110,110,110,.4) 100%);
+                    background-image: -o-linear-gradient(90deg, rgba(30,30,30,0) 0%, rgba(110,110,110,.2) 50%, rgba(110,110,110,.4) 100%);
+                    background-image: -moz-linear-gradient(90deg, rgba(30,30,30,0) 0%, rgba(110,110,110,.2) 50%, rgba(110,110,110,.4) 100%);
+                    background-image: linear-gradient(90deg, rgba(30,30,30,0) 0%, rgba(110,110,110,.2) 50%, rgba(110,110,110,.4) 100%);
+                    /*.period-btn-edit {
+                        display: inline-block;
+                    }
+
+                    .period-item-tool {
+                        display: unset;
+                    }*/
+                }
 
                 &-name {
-                    font-size: 24px;
+                    font-size: 20px;
                     font-weight: bold;
                     color: @primary-textColor;
+                }
 
-                    span {
-                        .lineSpan(18px,3px,red,15px)
-                    }
+                &-name-line {
+                    display:inline-block;
+                    .lineSpan(16px,3px,red,15px);
                 }
 
                 &-students-num {
@@ -196,7 +214,7 @@
                 &-start {
                     color: @second-textColor;
                     font-size: @primary-fontSize;
-                    margin-left: 10px;
+                    margin: 10px;
                 }
             }
         }
@@ -278,7 +296,7 @@
     }
 
     &-right {
-        .colSpan(52%);
+        .colSpan(57%);
 
         .grade-body {
             width: 100%;
@@ -344,13 +362,25 @@
         margin-right: @mr;
     }
 
+    .no-data-text {
+        width: 70%;
+        height: 100%;
+        font-size: 30px;
+        font-weight: bold;
+        color: @nothing-textColor;
+        text-align: center;
+        padding-top: 30px;
+        border-right: 1px solid @borderColor;
+    }
+
+
     .col-title {
         .fl-row-center;
         height: 60px;
         min-height: 60px;
         width: 100%;
         justify-content: space-between;
-        padding: 0 30px;
+        padding: 0 10px 0 30px;
         font-weight: bold;
         font-size: @primary-fontSize;
         color: @second-textColor;
@@ -360,6 +390,7 @@
             font-size: @large-fontSize;
             color: @primary-textColor;
             cursor: pointer;
+            margin-right: 10px;
         }
     }
 }

+ 76 - 33
TEAMModelOS/ClientApp/view/school-mgmt/SystemSetting/SystemSetting.vue

@@ -38,20 +38,22 @@
       <div class="sm-system-center">
         <div class="col-title">
           <span>学期(季)设定</span>
-          <Icon type="md-add" />
+          <Icon type="md-add" @click="handleAddTerm"/>
         </div>
         <div class="col-body">
-          <div class="term-list">
+          <div class="no-data-text" v-if="!termList.length">没有设置学期</div>
+          <div class="term-list" v-if="termList.length">
             <div class="term-item" v-for="(item,index) in termList" :key="index">
-              <p class="term-item-name"><span class="term-item-name-line" :style="{backgroundColor: getRandomColor()}"></span>上学期</p>
-              <p class="term-item-students-num">涉及学生数:572</p>
+              <span class="term-item-name-line" :style="{backgroundColor: colorList[index]}"></span>
+              <EditableLabel class="term-item-name" :content="item.name" @editComplete="handleEditComplete()">
+              </EditableLabel>
               <div class="term-item-start">
                 <span>开始于</span>
-                <Select v-model="termMonthVal">
+                <Select v-model="item.startMonth">
                   <Option v-for="(item,index) in monthList" :value="index + 1" :key="index">{{ index + 1 }}</Option>
                 </Select>
                 <span> / </span>
-                <Select v-model="termDayVal">
+                <Select v-model="item.startDay">
                   <Option v-for="(item,index) in dayList" :value="index + 1" :key="index">{{ index + 1 }}</Option>
                 </Select>
               </div>
@@ -75,7 +77,10 @@
       <div class="sm-system-right">
         <div class="col-title">
           <span>学级(年级)项目建置</span>
-          <Icon type="md-add" />
+          <div>
+            <Icon type="md-add" />
+            <Icon type="md-trash" v-show="gradeSelectList.length" />
+          </div>
         </div>
         <div class="grade-body">
           <div class="grade-item" v-for="(item,index) in gradeList" :key="index" @click="handleGradeClick(item,$event)">
@@ -85,18 +90,19 @@
           </div>
         </div>
         <div class="col-title">
-          <span>学级(年级)项目建置</span>
-          <Icon type="md-add" />
+          <span>学科(科目)项目建置</span>
+          <div>
+            <Icon type="md-add" />
+            <Icon type="md-trash" v-show="subjectSelectList.length" />
+          </div>
+        </div>
+        <div class="grade-body">
+          <div class="grade-item" v-for="(item,index) in subjectList" :key="index" @click="handleSubjectClick(item,$event)">
+            <span class="grade-item-icon" v-show="subjectSelectList.indexOf(item) == -1"></span>
+            <Icon type="md-checkmark" v-show="subjectSelectList.indexOf(item) > -1" />
+            <span class="grade-item-name">{{item}}</span>
+          </div>
         </div>
-
-        <Upload multiple action="http://192.168.8.192:5000/api/file/UploadDocument" :on-success="uploadSuccess">
-        <Button type="info">导入习题</Button>
-
-        </Upload>
-
-        <!--<Button type="info" @click="handleUpload">导入习题</Button>-->
-
-
       </div>
     </div>
   </div>
@@ -104,19 +110,35 @@
 </template>
 
 <script>
+  import EditableLabel from "@/common/EditableLabel.vue"
+
+    //学期默认模板
+  const defaultTerm = {
+    name: "点击设置名称",
+    startMonth: 1,
+    startDay:1,
+    durationDays:157
+  }
   export default {
+    components: {
+      EditableLabel
+    },
     data() {
       return {
         tabIndex: 0,
         periodList: [],
         termList: [],
         gradeList:[],
+        subjectList:[],
         monthList: [],
         monthEnList:[],
         dayList: [],
+        colorList:[],
         gradeSelectList:[],
+        subjectSelectList:[],
         termMonthVal:1,
-        termDayVal:1
+        termDayVal: 1,
+        TERM_MAX_LENGTH:3, //学期数上限
       }
     },
     methods: {
@@ -126,42 +148,63 @@
         return '#' + Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, '0');
       },
 
+      //添加学期
+      handleAddTerm() {
+        if (this.termList.length < this.TERM_MAX_LENGTH) {
+          let newTerm = Object.assign({}, defaultTerm);
+          this.termList.push(newTerm);
+        } else {
+          this.$Message.info("学期数已达上限!");
+        }
+      },
+
+      handleEditComplete(val) {
+        console.log(val);
+      },
+
       //年级选择事件
       handleGradeClick(item, e) {
         e.preventDefault();
         let isExist = this.gradeSelectList.indexOf(item);
-        let itemDom = e.path[0].className == "grade-item" ? e.path[0] : e.path[1];
+        //判断操作需要的DOM
+        let itemDom = e.path[0].className.split(' ').indexOf("grade-item") > -1 ? e.path[0] : e.path[1];
+        itemDom.classList.toggle('item-active');
         if (isExist > -1) {
           this.gradeSelectList.splice(isExist, 1);
-          itemDom.classList.remove('item-active');
         } else {
           this.gradeSelectList.push(item);
-          itemDom.classList.add('item-active');
         }
       },
 
-
-      uploadSuccess(response, file, fileList) {
-        console.log(response);
+      //年级选择事件
+      handleSubjectClick(item, e) {
+        e.preventDefault();
+        let isExist = this.subjectSelectList.indexOf(item);
+        //判断操作需要的DOM
+        let itemDom = e.path[0].className.split(' ').indexOf("grade-item") > -1 ? e.path[0] : e.path[1];
+        itemDom.classList.toggle('item-active');
+        if (isExist > -1) {
+          this.subjectSelectList.splice(isExist, 1);
+        } else {
+          this.subjectSelectList.push(item);
+        }
       },
 
-      handleUpload() {
-        this.$post('http://192.168.8.192:5000/api/login/GetMiniAPPAccessToken').then(res => {
-          console.log(res)
-        })
-      }
     },
     mounted() {
-      this.periodList = [...Array(10).keys()];
-      this.termList = [...Array(2).keys()];
+      this.periodList = [...Array(3).keys()];
       this.monthList = [...Array(11).keys()];
       this.gradeList = ['一年级','二年级','三年级','四年级','五年级'];
+      this.subjectList = ['语文','数学','外语','化学','物理','语文','数学','外语','化学','物理'];
       this.dayList = [...Array(30).keys()];
-      this.monthEnList = ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC','JAN']
+      this.monthEnList = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC', 'JAN'];
+      this.colorList = ['#F16C6A', '#68CDF1', '#00796B', '#7C4DFF', '#0288D1', '#D32F2F', '#00796B', '#7C4DFF','#0288D1', '#D32F2F', '#00796B', '#7C4DFF'];
+
     }
   }
 </script>
 
+<!-- 覆盖iview样式 -->
 <style>
   .term-item-start .ivu-select {
     width:60px;

+ 3 - 4
TEAMModelOS/ClientApp/view/student-analysis/total-analysis/AchievementAnalysis/AchievementAnalysis.css

@@ -46,7 +46,7 @@
         }
 
     .achievement-container .award-class {
-        width: 100%;
+        width: 85%;
         height: 100%;
         border: 1px solid rgba(212, 212, 212, 0.2);
         background:rgba(239, 239, 239, 0.1);
@@ -84,18 +84,17 @@
             margin-top:10px;
         }
 
+ 
 
 .base-table-row {
     padding:20px 50px;
 }
 
-
 .achievement-table .myTable {
     height: 400px !important;
+    padding:0;
 }
 
-
-
 .fl-col-center {
     display: flex;
     flex-direction: column;

+ 17 - 15
TEAMModelOS/ClientApp/view/student-analysis/total-analysis/AchievementAnalysis/AchievementAnalysis.vue

@@ -6,32 +6,32 @@
     <Row class-name="component-percents">
       <div class="percent-item fl-col-center">
         <span class="percent-name">语文课平均</span>
-        <span class="percent-value"><span class="percent-line" style="background:#ff6b68"></span>75%</span>
-        <span class="percent-grade-value">年级平均:79%</span>
-        <span class="percent-area-value">区级平均:79%</span>
+        <span class="percent-value"><span class="percent-line" style="background:#ff6b68"></span>85%</span>
+        <span class="percent-grade-value">年级平均:81%</span>
+        <span class="percent-area-value">区级平均:86%</span>
       </div>
       <div class="percent-item fl-col-center">
         <span class="percent-name">数学课平均</span>
-        <span class="percent-value"><span class="percent-line" style="background:#ffa1f4"></span>75%</span>
-        <span class="percent-grade-value">年级平均:79%</span>
-        <span class="percent-area-value">区级平均:79%</span>
+        <span class="percent-value"><span class="percent-line" style="background:#ffa1f4"></span>72%</span>
+        <span class="percent-grade-value">年级平均:76%</span>
+        <span class="percent-area-value">区级平均:78%</span>
       </div>
       <div class="percent-item fl-col-center">
         <span class="percent-name">英语课平均</span>
-        <span class="percent-value"><span class="percent-line" style="background:#41b0c7"></span>75%</span>
-        <span class="percent-grade-value">年级平均:79%</span>
-        <span class="percent-area-value">区级平均:79%</span>
+        <span class="percent-value"><span class="percent-line" style="background:#41b0c7"></span>80%</span>
+        <span class="percent-grade-value">年级平均:75%</span>
+        <span class="percent-area-value">区级平均:75%</span>
       </div>
       <div class="percent-item fl-col-center">
         <span class="percent-name">生物课平均</span>
-        <span class="percent-value"><span class="percent-line" style="background:#1cd1a1"></span>75%</span>
-        <span class="percent-grade-value">年级平均:79%</span>
+        <span class="percent-value"><span class="percent-line" style="background:#1cd1a1"></span>95%</span>
+        <span class="percent-grade-value">年级平均:96%</span>
         <span class="percent-area-value">区级平均:79%</span>
       </div>
       <div class="percent-item fl-col-center">
         <span class="percent-name">化学课平均</span>
-        <span class="percent-value"><span class="percent-line"></span>75%</span>
-        <span class="percent-grade-value">年级平均:79%</span>
+        <span class="percent-value"><span class="percent-line"></span>65%</span>
+        <span class="percent-grade-value">年级平均:82%</span>
         <span class="percent-area-value">区级平均:79%</span>
       </div>
     </Row>
@@ -96,7 +96,7 @@
 
       </div>
       </Col>
-      <Col span="15" class-name="achievement-table">
+      <Col span="16" class-name="achievement-table">
       <BaseTable :columns="tableColumns" :tableDatas="tableData" ref="achievementTable"></BaseTable>
       </Col>
     </Row>
@@ -141,7 +141,7 @@
           },
           {
             title: '超均率',
-            key: 'entryRate',
+            key: 'overAverageRate',
             sortable: true,
           },
           {
@@ -159,6 +159,8 @@
     },
 
     created() {
+      console.log(JSON.stringify(this.$Mock.data.classList));
+      console.log(this.$Mock.data);
       this.tableData = this.$store.state.totalAnalysis.classList;
       this.classDatas = this.$store.state.totalAnalysis.classList;
     },

+ 1 - 1
TEAMModelOS/ClientApp/view/student-analysis/total-analysis/AchievementAnalysis/EarlyWarning.vue

@@ -145,7 +145,7 @@
 
     created() {
       let memberList = this.$store.state.totalAnalysis.memberList;
-      this.tableData = memberList.slice(0,10);
+      this.tableData = memberList;
       this.echartData = memberList;
     },
 

+ 31 - 9
TEAMModelOS/ClientApp/view/student-analysis/total-analysis/AchievementAnalysis/EntryTables.vue

@@ -16,12 +16,13 @@
       <span class="component-title">进线率统计</span>
     </Row>
     <Row class-name="base-table-row">
-      <BaseTable :columns="entryRateColumns" :tableDatas="echartData" :isScroll="false" ref="rateTable"></BaseTable>
+      <BaseTable :columns="entryRateColumns" :tableDatas="classList" :isScroll="false" ref="rateTable"></BaseTable>
     </Row>
   </div>
 </template>
 
 <script>
+  import scatter from '@/static/scatter.json'
   import BaseTable from '@/components/student-analysis/total/BaseMyTable.vue'
   export default {
     components: {
@@ -29,7 +30,8 @@
     },
     data() {
       return {
-        echartData:[],
+        echartData: [],
+        classList:[],
         entryNumberColumns: [
           {
             title: '姓名',
@@ -62,7 +64,8 @@
           {
             title: '语文/年级排名',
             sortable: true,
-            width:150,
+            width: 150,
+            key:"chinese",
             renderType: 'renderRank'
           },
           {
@@ -225,26 +228,26 @@
         entryRateColumns: [
           {
             title: '年级排名',
-            key: 'name',
+            key: 'gradeRank',
             sortable: true
           },
           {
             title: '班级',
-            key: 'memberId'
+            key: 'name'
           },
           {
             title: '进线人数',
-            key: 'memberId',
+            key: 'entryNum',
             sortable: true
           },
           {
             title: '班级总人数',
-            key: 'memberId',
+            key: 'totalNum',
             sortable: true
           },
           {
             title: '进线率',
-            key: 'memberId',
+            key: 'entryRate',
             sortable: true,
           },
           {
@@ -258,7 +261,26 @@
 
     created() {
       let memberList = this.$store.state.totalAnalysis.memberList;
-      this.echartData = memberList;
+      this.classList = this.$store.state.totalAnalysis.classList;
+
+      let tableList = scatter.map(item => item.achievement);
+
+      this.echartData = tableList;
+
+      console.log(tableList);
+
+      //scatter.forEach((item, index) => {
+        //item.classRank = memberList[index].classRank;
+        //item.classPR = memberList[index].classPR;
+        //item.gradeRank = memberList[index].gradeRank;
+        //item.gradePR = memberList[index].gradePR;
+        //item.areaRank = memberList[index].areaRank;
+        //item.areaPR = memberList[index].areaPR;
+
+        //item.achievement = memberList[index];
+      //})
+
+      //console.log(JSON.stringify(scatter));
     },
 
     methods: {

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

@@ -3,7 +3,7 @@
     <div class="el-title-wrap">
       <div>
         <span style="width:4px;height:20px;display:inline-block;background:#447a94"></span>
-        <span class="el-title">成都市高新区芳草小学历次考试汇总</span>
+        <span class="el-title">成都新川外国语学校历次考试汇总</span>
       </div>
       <div class="el-tools">
         <Input v-model="searchValue" placeholder="输入学生姓名或学号..." style="width: 200px" search />

+ 37 - 10
TEAMModelOS/ClientApp/view/student-analysis/total-analysis/KnowledgeAnalysis/KnowledgeAnalysis.vue

@@ -46,7 +46,7 @@
           },
           {
             title: '题型',
-            key: 'name',
+            key: 'type',
             width:100
           },
           {
@@ -56,41 +56,41 @@
           },
           {
             title: '知识点',
-            key: 'name',
+            key: 'knowledgePoint',
             width:250
           },
           {
             title: '认知层次',
-            key: 'name',
+            key: 'level',
             width:100
           },
           {
             title: '年级得分率',
-            key: 'entryRate',
+            key: 'gradeScoreRate',
             sortable: true,
             width:150
           },
           {
             title: '1班/100人',
-            key: 'entryRate',
+            key: 'gradeScoreRate',
             sortable: true,
             width:120
           },
           {
             title: '2班/100人',
-            key: 'entryRate',
+            key: 'gradeScoreRate',
             sortable: true,
             width:120
           },
           {
             title: '3班/100人',
-            key: 'entryRate',
+            key: 'gradeScoreRate',
             sortable: true,
             width:120
           },
           {
             title: '4班/100人',
-            key: 'entryRate',
+            key: 'gradeScoreRate',
             sortable: true,
             width:120
           },
@@ -99,12 +99,39 @@
     },
     created() {
       let classList = this.$store.state.totalAnalysis.classList;
-      let knowledgeList = this.$store.state.totalAnalysis.knowledgeList;
+      let exerciseList = this.$store.state.totalAnalysis.exerciseList;
       this.tableData = classList;
-      this.knowledgeData = knowledgeList;
+      this.knowledgeData = exerciseList;
+
+      let knowList = ['方程与不等式','图形的性质','统计与概率','函数','图形的相似','锐角三角函数','几何图形初步','投影与视图']
+      let levelList = ['知识','理解','评鉴','综合','分析','应用']
+      let typeList = ['单选','多选','判断','问答','填空','问答']
+      //exerciseList.forEach(item => {
+      //  item.knowledgePoint = knowList[Math.ceil(Math.random() * 7)]
+      //  item.level = levelList[Math.ceil(Math.random() * 5)]
+      //  item.type = typeList[Math.ceil(Math.random() * 5)]
+      //  item.gradeScoreRate = this.randomNum(60,90).toString() + '%'
+      //})
+
+      console.log(JSON.stringify(exerciseList));
+
     },
 
     methods: {
+            randomNum(minNum, maxNum) {
+        switch (arguments.length) {
+          case 1:
+            return parseInt(Math.random() * minNum + 1, 10);
+            break;
+          case 2:
+            return parseInt(Math.random() * ( maxNum - minNum + 1 ) + minNum, 10);
+            //或者 Math.floor(Math.random()*( maxNum - minNum + 1 ) + minNum );
+            break;
+          default:
+            return 0;
+            break;
+        }
+      }, 
       changePieOrBar() {
         this.isShowPie = ! this.isShowPie;
       },

+ 37 - 39
TEAMModelOS/ClientApp/view/student-analysis/total-analysis/KnowledgeAnalysis/ScoreDetails.vue

@@ -3,10 +3,10 @@
     <Row>
       <Col span="12">
         <span class="component-title">知识点得分率统计</span>
-        <BaseDetailBar :echartData="knowledgeData"></BaseDetailBar>
+        <BaseDetailBar :echartData="knowledgeData" @handleItemClick="handleItemClick"></BaseDetailBar>
       </Col>
       <Col span="12">
-      <span class="component-title">知识点得分详情</span>
+      <span class="component-title">知识点得分详情<span style="font-size:14px;font-weight:bold;margin-left:20px;color:#66cccc">当前知识点:{{currentPoint}}</span></span>
       <div style="padding:0 50px;">
         <BaseMyTable :columns="detailsColumns" :tableDatas="tableData" ref="detailsTable"></BaseMyTable>
       </div>
@@ -16,13 +16,14 @@
     <Row>
       <span class="component-title">班级得分明细表</span>
       <div style="padding:20px 50px;">
-        <BaseMyTable :columns="tableColumns" :tableDatas="knowledgeData"></BaseMyTable>
+        <BaseMyTable :columns="tableColumns" :tableDatas="numData" ref="numTable"></BaseMyTable>
       </div>
     </Row>
   </div>
 </template>
 
 <script>
+  import Mock from 'mockjs'
   import BaseDetailBar from '@/components/student-analysis/total/BaseKnowledgeDetail.vue'
   import BaseMyTable from '@/components/student-analysis/total/BaseMyTable.vue'
   export default {
@@ -33,62 +34,44 @@
       return {
         tableData: [],
         classDatas: [],
-        knowledgeData:[],
+        currentPoint:"",
+        knowledgeData: [],
+        numData:[],
         tableColumns: [
           {
             title: '题号',
             key: 'id',
-            width:100
-          },
-          {
-            title: '题型',
-            key: 'name',
-            width:100
-          },
-          {
-            title: '题目',
-            key: 'name',
-            width:250
           },
           {
             title: '知识点',
-            key: 'name',
-            width:250
+            key: 'knowledgePoint',
           },
           {
-            title: '认知层次',
-            key: 'name',
-            width:100
+            title: '分值',
+            key: 'score',
           },
           {
-            title: '年级得分率',
-            key: 'entryRate',
-            sortable: true,
-            width:150
+            title: '平均得分率',
+            key: 'averageScoreRate',
           },
           {
-            title: '1班/100人',
-            key: 'entryRate',
-            sortable: true,
-            width:200
+            title: '错题人数',
+            key: 'falseNum',
           },
           {
-            title: '2班/100人',
-            key: 'entryRate',
+            title: '120以上错题',
+            key: 'falseNum',
             sortable: true,
-            width:200
           },
           {
-            title: '3班/100人',
-            key: 'entryRate',
+            title: '90-120分错题人数',
+            key: 'falseNum',
             sortable: true,
-            width:200
           },
           {
-            title: '4班/100人',
-            key: 'entryRate',
+            title: '90分以下错题人数',
+            key: 'falseNum',
             sortable: true,
-            width:200
           },
         ],
         detailsColumns: [
@@ -126,14 +109,29 @@
       let knowledgeList = this.$store.state.totalAnalysis.knowledgeList;
       this.tableData = memberList.slice(0,7);
       this.knowledgeData = knowledgeList;
-    },
 
-    methods: {
+      this.numData = Mock.mock({
+        'list|10': [{
+          "id|+1": 1,   
+          "knowledgePoint|1": ['算法平均值','一元二次方程','全等三角形性质'],  
+          "score|5-20": 20,     
+          "averageScoreRate|40-80": 40,    
+          "falseNum|10-20":20
+        }], 
+      }).list;
 
+    },
 
+    methods: {
+       //点击柱状图某个点事件
+      handleItemClick(item) {
+        console.log(item);
+        this.currentPoint = item.name;
+      }
     },
     mounted() {
       this.$refs.detailsTable.$el.childNodes[0].style.borderRight = "0";
+      this.$refs.numTable.$el.childNodes[0].style.borderRight = "0";
     },
   }
 </script>

+ 14 - 13
TEAMModelOS/ClientApp/view/student-analysis/total-analysis/ScatterAnalysis/ScatterAnalysis.vue

@@ -16,37 +16,37 @@
         <div class="scatter-table-line">
           <span>A</span>
           <span>学习良好,稳定度高</span>
-          <span>20</span>
+          <span>8</span>
         </div>
         <Divider />
         <div class="scatter-table-line">
           <span>A`</span>
           <span>粗心大意,不细心造成错误</span>
-          <span>20</span>
+          <span>2</span>
         </div>
         <Divider />
         <div class="scatter-table-line">
           <span>B</span>
           <span>学习尚且稳定,需要再用功</span>
-          <span>10</span>
+          <span>17</span>
         </div>
         <Divider />
         <div class="scatter-table-line">
           <span>B`</span>
           <span>偶尔粗心,准备不够充分</span>
-          <span>10</span>
+          <span>23</span>
         </div>
         <Divider />
         <div class="scatter-table-line">
           <span>C</span>
           <span>学习不够充分,需要更加努力</span>
-          <span>10</span>
+          <span>5</span>
         </div>
         <Divider />
         <div class="scatter-table-line">
           <span>C`</span>
           <span>学习极不稳定, 对考试没有充分准备</span>
-          <span>10</span>
+          <span>5</span>
         </div>
       </div>
       </Col>
@@ -82,7 +82,7 @@
           },
           {
             title: '座号',
-            key: 'memberId',
+            key: 'id',
           },
           {
             title: '分数',
@@ -91,32 +91,33 @@
           },
           {
             title: '答对题数',
-            key: 'id',
+            key: 'trueNum',
             sortable: true,
           },
           {
-            title: '答题数',
-            key: 'id',
+            title: '答题数',
+            key: 'falseNum',
             sortable: true,
           },
           {
             title: '稳定程度',
-            key: 'id',
+            key: 'x',
             sortable: true,
           },
           {
             title: '落点区域',
-            key: 'id',
+            key: 'areaName',
           },
           {
             title: '排名情况',
+            key:'rank',
             renderType: 'renderRank'
           }
         ]
       }
     },
     created() {
-      let memberList = this.$store.state.totalAnalysis.memberList;
+      let memberList = this.$store.state.totalAnalysis.scatter;
       this.tableData = memberList;
     },
 

+ 6 - 8
TEAMModelOS/ClientApp/view/student-analysis/total-analysis/TestAnalysis/TestAnalysis.css

@@ -39,17 +39,15 @@
     color: #e4eadb;
     height: 40px;
     font-size: 14px;
+    margin:20px 15px;
     /*border-bottom:1px solid #595959;*/
 }
 
-.scatter-statistics .scatter-table-line span {
-    text-align:center;
-    width:250px;
-}
-
-
-
-
+    .scatter-statistics .scatter-table-line span {
+        text-align: center;
+        width: 250px;
+        word-break: break-all;
+    }
 
 .fl-col-center {
     display: flex;

+ 34 - 28
TEAMModelOS/ClientApp/view/student-analysis/total-analysis/TestAnalysis/TestAnalysis.vue

@@ -16,30 +16,30 @@
         <Divider />
         <div class="scatter-table-line">
           <span>A</span>
-          <span>学习良好,稳定度高</span>
-          <span>20</span>
-          <span>20</span>
+          <span>试题相当适当,可以用来区分学生的不同</span>
+          <span>11</span>
+          <span>1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19</span>
         </div>
         <Divider />
         <div class="scatter-table-line">
           <span>A`</span>
-          <span>粗心大意,不细心造成错误</span>
-          <span>20</span>
-          <span>20</span>
+          <span>试题可能含有异质成分在内,需要局部修正</span>
+          <span>4</span>
+          <span>20,21,22,30</span>
         </div>
         <Divider />
         <div class="scatter-table-line">
           <span>B</span>
-          <span>学习尚且稳定,需要再用功</span>
-          <span>10</span>
-          <span>10</span>
+          <span>试题困难度较高,适合区分高成就者学生</span>
+          <span>3</span>
+          <span>25,26,28</span>
         </div>
         <Divider />
         <div class="scatter-table-line">
           <span>B`</span>
-          <span>偶尔粗心,准备不够充分</span>
-          <span>10</span>
-          <span>10</span>
+          <span>试题含有异质成分,可能数据错误或者题意不清,必须加以修改</span>
+          <span>2</span>
+          <span>23,29</span>
         </div>
       </div>
       </Col>
@@ -47,9 +47,9 @@
     <Divider />
     <Row>
       <Col span="12">
-      <span class="component-title">年级单题得分率统计</span>
+      <span class="component-title">年级单题得分率统计 <span style="font-size:14px;font-weight:bold;margin-left:20px;color:#66cccc">所选题号:{{currentExerciseIndex}}</span></span>
       <div>
-        <BaseLineBar :echartData="tableData"></BaseLineBar>
+        <BaseLineBar :echartData="rightTableData"></BaseLineBar>
       </div>
       </Col>
       <Col span="12">
@@ -70,6 +70,7 @@
 </template>
 
 <script>
+  import testScatter from '@/static/testScatter.json'
   import BaseTestScatter from '@/components/student-analysis/total/BaseTestScatter.vue'
   import BaseTable from '@/components/student-analysis/total/BaseMyTable.vue'
   import BaseLineBar from '@/components/student-analysis/total/BaseLineBar.vue'
@@ -80,70 +81,71 @@
     data() {
       return {
         tableData: [],
-        rightTableData:[],
+        rightTableData: [],
+        currentExerciseIndex:0,
         tableColumns: [
           {
             title: '题号',
-            key: 'name',
+            key: 'id',
             width:100
           },
           {
             title: '题型',
-            key: 'name',
+            key: 'type',
             width:100
           },
           {
             title: '知识点',
-            key: 'memberId',
+            key: 'knowledgePoint',
             width:200
           },
           {
             title: '落点区域',
-            key: 'name',
+            key: 'areaName',
             width:100
           },
           {
             title: '配分',
-            key: 'name',
+            key: 'score',
             width:100
           },
           {
             title: '难易度',
-            key: 'name',
+            key: 'diff',
             width:100
           },
           {
             title: '鉴别度',
-            key: 'score',
+            key: 'identify',
             width:100
           },
           {
             title: '班级得分率',
-            key: 'id',
+            key: 'classScoreRate',
             sortable: true,
             width:150
           },
           {
             title: '年级得分率',
-            key: 'id',
+            key: 'gradeScoreRate',
             sortable: true,
             width:150
           },
           {
             title: '区级得分率',
-            key: 'id',
+            key: 'areaScoreRate',
             sortable: true,
             width:150
           },
           {
             title: '高分得分率',
-            key: 'id',
+            key: 'highScoreRate',
             sortable: true,
             width:150
           },
           {
             title: '低分组得分率',
-            key: 'id',
+            key: 'lowScoreRate',
             sortable: true,
             width:150
           },
@@ -198,7 +200,10 @@
     created() {
       let memberList = this.$store.state.totalAnalysis.memberList;
       let classList = this.$store.state.totalAnalysis.classList;
-      this.tableData = memberList;
+      let knowledgeList = this.$store.state.totalAnalysis.knowledgeList;
+
+      let knowledgeArr = testScatter.map(item => item.tableData);
+      this.tableData = knowledgeArr;
       this.rightTableData = classList;
     },
 
@@ -206,6 +211,7 @@
        //点击落点图某个点事件
       handleItemClick(item) {
         console.log(item);
+        this.currentExerciseIndex = item.data[item.data.length - 1];
       }
 
     },

+ 2 - 1
TEAMModelOS/ClientApp/view/student-analysis/total-analysis/index.css

@@ -73,6 +73,7 @@ body, html, .total-container {
 }
 
 .total-body .total-content {
+    position:relative;
     width: -webkit-calc(100% - 383px);
     width: -moz-calc(100% - 383px);
     width: calc(100% - 383px);
@@ -122,7 +123,7 @@ body, html, .total-container {
 
 .total-content .basic-tools {
     position: absolute;
-    bottom: 20px;
+    bottom: 10px;
     right: 70px;
     color: #fff;
     font-size:14px;

+ 26 - 9
TEAMModelOS/ClientApp/view/student-analysis/total-analysis/index.vue

@@ -54,7 +54,8 @@
       <BaseExamList @chooseExam="chooseExam" @showEvaluationList="showEvaluationList" ref="examListRef"></BaseExamList>
 
       <!-- 右侧数据展示区域 -->
-      <div class="total-content"  ref="dataContainer">
+      <div class="total-content" ref="dataContainer">
+        <Spin fix v-show="contentLoading"></Spin>
         <div class="basic-info" v-if="!isShowEvaluations">
           <p>
             <span class="info-type" :style="{color:colorTransfer[currentExamItem.examType],borderColor:colorTransfer[currentExamItem.examType]}">{{currentExamItem.examType}}</span>
@@ -69,16 +70,16 @@
             <Select v-show="dataSelectIndex != 0" v-model="subjectSelectVal" style="width:150px">
               <Option v-for="(item,index) in subjectList" :value="index" :key="index">{{ item.name }}</Option>
             </Select>
-            <Input v-show="dataSelectIndex != 0" v-model="searchValue" placeholder="输入学生姓名或学号..." style="width: 200px" search @on-search="handleSearch"/>
+            <Input v-show="dataSelectIndex != 0" v-model="searchValue" placeholder="输入学生姓名或学号..." style="width: 200px" search @on-search="handleSearch" />
             <span class="basic-tool-export" @click="handleExportTables"> 导出表格 <Icon type="md-archive" /></span>
 
           </div>
         </div>
         <div class="data-select" v-if="!isShowQuestions">
-          <span :class="dataSelectIndex == 0 ? 'data-select-active' : ''" @click="handleDataSelect('0')">成绩分析</span>
-          <span :class="dataSelectIndex == 1 ? 'data-select-active' : ''" @click="handleDataSelect('1')">落点分析</span>
-          <span :class="dataSelectIndex == 2 ? 'data-select-active' : ''" @click="handleDataSelect('2')">试题分析</span>
-          <span :class="dataSelectIndex == 3 ? 'data-select-active' : ''" @click="handleDataSelect('3')">知识点掌握</span>
+          <span :class="this.$route.path == '/total' || this.$route.path.indexOf('/total/achievement') > -1 ? 'data-select-active' : ''" @click="handleDataSelect('0')">成绩分析</span>
+          <span :class="this.$route.path.indexOf('/total/scatter') > -1 ? 'data-select-active' : ''" @click="handleDataSelect('1')">落点分析</span>
+          <span :class="this.$route.path.indexOf('/total/test') > -1 ? 'data-select-active' : ''" @click="handleDataSelect('2')">试题分析</span>
+          <span :class="this.$route.path.indexOf('/total/knowledge') > -1 ? 'data-select-active' : ''" @click="handleDataSelect('3')">知识点掌握</span>
         </div>
         <div class="data-container">
           <transition name="fade">
@@ -112,7 +113,8 @@
     },
     data() {
       return {
-        searchValue:"",
+        searchValue: "",
+        contentLoading:false,
         dataSelectIndex: 0 ,
         menuIndex: 0,
         isShowQuestions:false,
@@ -146,6 +148,7 @@
       }
     },
     created() {
+      console.log(this.$route.path);
       //console.log(this.$route.params);
     },
 
@@ -187,11 +190,16 @@
 
       //选中某次测验
       chooseExam(item) {
+        let that = this;
+        this.contentLoading = true;
         this.isShowQuestions = false;
         this.isShowEvaluations = false;
         this.currentExamItem = item;
-        this.handleDataSelect(0);
+        //this.handleDataSelect(0);
         this.scrollToTop(this.$refs.dataContainer, 0, 100);
+        setTimeout(function () {
+          that.contentLoading = false;
+        },1000)
 
       },
 
@@ -235,7 +243,7 @@
     //监听部分路由变化
     watch: {
       '$route'(to, from) {
-        this.scrollToTop(this.$refs.dataContainer, 0, 300);
+        this.scrollToTop(this.$refs.dataContainer, 0, 100);
         if (to.path == "/total" && from.path == "/total/evaluationList") {
           this.isShowEvaluations = false;
           this.isShowQuestions = false;
@@ -298,6 +306,15 @@
       font-size: 16px;
   }
 
+  .total-content .ivu-spin-fix {
+    background:rgba(209, 209, 209, 0.51);
+  }
+
+  .total-content .ivu-spin-dot {
+     width:100px;
+     height:100px;
+  }
+
   .export-modal .ivu-modal-content {
     background:#757575;
     color:#fff;

+ 2 - 0
TEAMModelOS/package.json

@@ -27,10 +27,12 @@
     "iview": "^3.4.2",
     "jwt-decode": "^2.2.0",
     "less": "^3.9.0",
+    "mockjs": "^1.0.1-beta3",
     "videojs-contrib-hls": "^5.15.0",
     "videojs-contrib-hls.js": "^3.2.0",
     "vue": "^2.6.9",
     "vue-ckeditor5": "^0.4.1",
+    "vue-happy-scroll": "^2.1.0",
     "vue-infinite-loading": "^2.4.4",
     "vue-router": "^3.0.7",
     "vue-scroll": "^2.1.12",