Prechádzať zdrojové kódy

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

CrazyIter 5 rokov pred
rodič
commit
776aca1cd9
40 zmenil súbory, kde vykonal 2421 pridanie a 2439 odobranie
  1. 0 1
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseBar.vue
  2. 1 1
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseKnowledgeBar.vue
  3. 4 2
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseKnowledgeDetail.vue
  4. 2 2
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseLine.vue
  5. 5 5
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseMyTable.vue
  6. 4 4
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BasePie.vue
  7. 9 9
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseScatter.vue
  8. 15 16
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseTestScatter.vue
  9. 5 6
      TEAMModelOS/ClientApp/src/components/syllabus/KnowTree.vue
  10. 460 460
      TEAMModelOS/ClientApp/src/components/syllabus/Tree.vue
  11. 15 16
      TEAMModelOS/ClientApp/src/components/syllabus/newTree.vue
  12. 1 1
      TEAMModelOS/ClientApp/src/router/routes.js
  13. 2 2
      TEAMModelOS/ClientApp/src/store/module/totalAnalysis.js
  14. 5 5
      TEAMModelOS/ClientApp/src/view/evaluation/index/CreateCompose.vue
  15. 8 8
      TEAMModelOS/ClientApp/src/view/evaluation/index/CreateExercises.vue
  16. 8 8
      TEAMModelOS/ClientApp/src/view/evaluation/index/CreateNewChild.vue
  17. 26 26
      TEAMModelOS/ClientApp/src/view/evaluation/index/CreateTest.vue
  18. 8 8
      TEAMModelOS/ClientApp/src/view/evaluation/index/EditChild.vue
  19. 645 641
      TEAMModelOS/ClientApp/src/view/evaluation/index/ExercisesList.vue
  20. 465 464
      TEAMModelOS/ClientApp/src/view/evaluation/index/TestPaper.vue
  21. 20 27
      TEAMModelOS/ClientApp/src/view/evaluation/index/TestPaperList.vue
  22. 0 1
      TEAMModelOS/ClientApp/src/view/evaluation/index/index.vue
  23. 195 195
      TEAMModelOS/ClientApp/src/view/evaluation/types/BaseCompletion.vue
  24. 1 1
      TEAMModelOS/ClientApp/src/view/evaluation/types/BaseJudge.vue
  25. 3 3
      TEAMModelOS/ClientApp/src/view/evaluation/types/BaseMultiple.vue
  26. 4 4
      TEAMModelOS/ClientApp/src/view/evaluation/types/BaseSingle.vue
  27. 6 6
      TEAMModelOS/ClientApp/src/view/index.vue
  28. 23 22
      TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/AchievementAnalysis/AchievementAnalysis.vue
  29. 16 16
      TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/AchievementAnalysis/EarlyWarning.vue
  30. 363 363
      TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/EvaluationList/EvaluationList.vue
  31. 6 5
      TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/KnowledgeAnalysis/KnowledgeAnalysis.vue
  32. 0 2
      TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/KnowledgeAnalysis/ScoreDetails.vue
  33. 1 1
      TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/ScatterAnalysis/ScatterAnalysis.vue
  34. 25 27
      TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/TestAnalysis/QuestionList.vue
  35. 5 5
      TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/TestAnalysis/TestAnalysis.vue
  36. 1 3
      TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/TotalIndex/TotalIndex.vue
  37. 7 7
      TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/index.vue
  38. 33 37
      TEAMModelOS/ClientApp/src/view/syllabus/index/KnowPoint.vue
  39. 21 26
      TEAMModelOS/ClientApp/src/view/syllabus/index/Syllabus.vue
  40. 3 3
      TEAMModelOS/ClientApp/src/view/syllabus/index/index.vue

+ 0 - 1
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseBar.vue

@@ -349,7 +349,6 @@
 
         myBar.on('legendselectchanged', function(obj) {
           var selected = obj.selected
-          var legend = obj.name
           let arr = []
           for (let i in selected) {
             let o = {}

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

@@ -159,7 +159,7 @@ export default {
       let that = this
       myBar.on('click', function(params) {
         let className = params.name
-        if (className == '高二5班') {
+        if (className === '高二5班') {
           // that.$router.push('')
           that.$router.push({ path: '/total/achievement/entryTables', replace: true })
         } else {

+ 4 - 2
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseKnowledgeDetail.vue

@@ -19,7 +19,9 @@
       this.knowledgeData = this.echartData
       this.x = this.echartData.map(item => item.knowledgePoint)
       let arr = this.echartData.map(item => item.gradeScoreRate)
-      arr.forEach(items => items = items.replace('"', '').replace('"', ''))
+        arr.forEach(items => {
+            items = items.replace('"', '').replace('"', '')
+        })
       this.y = arr
     },
 
@@ -162,7 +164,7 @@
               itemStyle: {
                 color: function(params) {
                     var key = params.dataIndex
-                    if (key == _this.activeItemIndex) {
+                    if (key === _this.activeItemIndex) {
                         return '#ff9999'
                     } else {
                         return '#1b9dff'

+ 2 - 2
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseLine.vue

@@ -57,7 +57,7 @@
                                 backgroundColor: '#6a7985'
                             }
                         },
-                        formatter: function (v) {
+                        formatter: function(v) {
                             return v[0].name + ':' + v[0].data + '%'
                         }
                     },
@@ -136,7 +136,7 @@
 
                 // 绘制图表
                 myLine.setOption(option)
-                window.addEventListener('resize', function () {
+                window.addEventListener('resize', function() {
                     myLine.resize()
                 })
             }

+ 5 - 5
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseMyTable.vue

@@ -28,7 +28,7 @@
     props: {
       columns: {
         type: Array,
-        default: []
+        default: () => []
       },
       isScroll: {
         type: Boolean,
@@ -36,7 +36,7 @@
       },
       tableDatas: {
         type: Array,
-        default: []
+        default: () => []
       },
       showSelect: {
         type: Boolean,
@@ -176,7 +176,7 @@
               style: {
                 color: row.changesStatus === 1 ? '#0ccb0c' : '#ff5d5d'
               }
-            }, (row.changesStatus === 1 && row.changesVal !== 0) ? '+' + row.changesVal : (row.changesStatus === -1 && row.changesVal != 0) ? '-' + row.changesVal : ''),
+            }, (row.changesStatus === 1 && row.changesVal !== 0) ? '+' + row.changesVal : (row.changesStatus === -1 && row.changesVal !== 0) ? '-' + row.changesVal : ''),
             h('span', {
               domProps: {
                 className: 'table-rank-value'
@@ -244,7 +244,7 @@
             domProps: {
               className: 'table-rank-value'
             }
-          }, row.changesStatus == 0 ? '' : row.changesVal)
+          }, row.changesStatus === 0 ? '' : row.changesVal)
         ])
       },
 
@@ -304,7 +304,7 @@
                 that.$router.push({ path: '/total/questionList', query: { QIndex: item } })
               }
             }
-          }, item + (index == row.hardList.length - 1 ? '' : ' , '))
+          }, item + (index === row.hardList.length - 1 ? '' : ' , '))
         }))
       },
 

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

@@ -47,7 +47,7 @@
                 //     myRadar.resize();
                 // })
 
-                myPie.on('click', function (item) {
+                myPie.on('click', function(item) {
                     that.$emit('handleItemClick', item)
                 })
             }
@@ -55,9 +55,9 @@
         computed: {
             // 获取最新柱状图数据
             getPieData() {
-                let list = this.$store.state.totalAnalysis.pieData;
-                let a = list.map(item => item.value);
-                a = a;
+                let list = this.$store.state.totalAnalysis.pieData
+                // let a = list.map(item => item.value)
+                // a = a
                 return list
             }
         },

+ 9 - 9
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseScatter.vue

@@ -41,13 +41,13 @@
                 switch (arguments.length) {
                     case 1:
                         return parseInt(Math.random() * minNum + 1, 10)
-                        break;
+                        break
                     case 2:
                         return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10)
-                        break;
+                        break
                     default:
                         return 0
-                        break;
+                        break
                 }
             },
             areaName(x, y) {
@@ -98,7 +98,7 @@
                         textStyle: {
                             height: '160px'
                         },
-                        formatter: function (params) {
+                        formatter: function(params) {
                             const item = params
                             return `${_this.$t('totalAnalysis.base_name')}:${item.data[2]}
                         <br/>${_this.$t('totalAnalysis.sca_chart_text1')}:${item.data[1]}%
@@ -158,7 +158,7 @@
                             interval: 25,
                             axisLabel: {
                                 show: true,
-                                formatter: function (value) {
+                                formatter: function(value) {
                                     let val = []
                                     if (value !== 25) {
                                         val.push(value + '%')
@@ -341,17 +341,17 @@
 
                 // 绘制图表
                 myScatter.setOption(option)
-                window.addEventListener('resize', function () {
+                window.addEventListener('resize', function() {
                     myScatter.resize()
                 })
 
                 let that = this
-                myScatter.on('click', function (item) {
+                myScatter.on('click', function(item) {
                     that.activeItemIndex = item.dataIndex
                 })
 
                 // 缩放后显示还原按钮
-                myScatter.on('datazoom', function (params) {
+                myScatter.on('datazoom', function(params) {
                     // console.log(params);
                     var endValue = myScatter.getModel().option.dataZoom[0].endValue
                     option.toolbox.feature.restore.show = endValue !== 1
@@ -359,7 +359,7 @@
                 })
 
                 // 还原后隐藏还原按钮
-                myScatter.on('restore', function (params) {
+                myScatter.on('restore', function(params) {
                     option.toolbox.feature.restore.show = false
                     myScatter.setOption(option)
                 })

+ 15 - 16
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseTestScatter.vue

@@ -4,7 +4,6 @@
 
 <script>
     import testScatter from '@/static/testScatter.json'
-    import knowledgeList from '@/static/knowledgeList.json'
 
     export default {
         name: 'hello',
@@ -26,8 +25,8 @@
                 this.dataArr.push(arr)
             })
 
-            //let list = testScatter.map(item => item.tableData)
-            //let knowList = ['方程与不等式', '图形的性质', '统计与概率', '函数', '图形的相似', '锐角三角函数', '几何图形初步', '投影与视图']
+            // let list = testScatter.map(item => item.tableData)
+            // let knowList = ['方程与不等式', '图形的性质', '统计与概率', '函数', '图形的相似', '锐角三角函数', '几何图形初步', '投影与视图']
 
             // list.forEach((item, index) => {
             //  item.knowledgePoint = knowList[Math.ceil(Math.random() * 7)];
@@ -61,14 +60,14 @@
                 switch (arguments.length) {
                     case 1:
                         return parseInt(Math.random() * minNum + 1, 10)
-                        break;
+                        break
                     case 2:
                         return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10)
                         // 或者 Math.floor(Math.random()*( maxNum - minNum + 1 ) + minNum );
-                        break;
+                        break
                     default:
                         return 0
-                        break;
+                        break
                 }
             },
 
@@ -101,7 +100,7 @@
                         textStyle: {
                             height: '160px'
                         },
-                        formatter: function (params) {
+                        formatter: function(params) {
                             const item = params
                             return `${_this.$t('totalAnalysis.ta_table_text1')}:${item.data[3]}
                         <br/>${_this.$t('totalAnalysis.ta_table_text2')}:${item.data[2]}
@@ -161,9 +160,9 @@
                             interval: 50,
                             axisLabel: {
                                 show: true,
-                                formatter: function (value) {
+                                formatter: function(value) {
                                     let val = []
-                                    if (value != 25) {
+                                    if (value !== 25) {
                                         val.push(value + '%')
                                     }
                                     return val
@@ -189,9 +188,9 @@
                             //  color: "#79c8e8"
                             // },
                             itemStyle: {
-                                color: function (params) {
+                                color: function(params) {
                                     var key = params.dataIndex
-                                    if (key == _this.activeItemIndex) {
+                                    if (key === _this.activeItemIndex) {
                                         return '#ff99cc'
                                     } else {
                                         return '#79c8e8'
@@ -298,27 +297,27 @@
 
                 // 绘制图表
                 myScatter.setOption(option)
-                window.addEventListener('resize', function () {
+                window.addEventListener('resize', function() {
                     myScatter.resize()
                 })
 
                 let that = this
-                myScatter.on('click', function (item) {
+                myScatter.on('click', function(item) {
                     that.activeItemIndex = item.dataIndex
                     that.$emit('handleItemClick', item)
                     myScatter.setOption(option)
                 })
 
                 // 缩放后显示还原按钮
-                myScatter.on('datazoom', function (params) {
+                myScatter.on('datazoom', function(params) {
                     // console.log(params);
                     var endValue = myScatter.getModel().option.dataZoom[0].endValue
-                    option.toolbox.feature.restore.show = endValue != 1
+                    option.toolbox.feature.restore.show = endValue !== 1
                     myScatter.setOption(option)
                 })
 
                 // 还原后隐藏还原按钮
-                myScatter.on('restore', function (params) {
+                myScatter.on('restore', function(params) {
                     option.toolbox.feature.restore.show = false
                     myScatter.setOption(option)
                 })

+ 5 - 6
TEAMModelOS/ClientApp/src/components/syllabus/KnowTree.vue

@@ -25,7 +25,7 @@
       this.schoolInfo = JSON.parse(localStorage.getItem('c_role_info')).roleClaim[0] // 默认选中第一个学校
       let schoolClaims = this.schoolInfo.claim
       for (let i in schoolClaims) {
-        if (schoolClaims[i].claimType == 'SchoolCode') {
+        if (schoolClaims[i].claimType === 'SchoolCode') {
           this.schoolInfo = schoolClaims[i]
         }
       }
@@ -43,7 +43,7 @@
     methods: {
       // 自定义渲染树形工具
        renderContent(h, { root, node, data }) {
-        let that = this
+        // let that = this
         return h(
           'span',
           {
@@ -155,15 +155,14 @@
       handleTools(root, node, data, event) {
         let toolsDom = event.currentTarget.nextElementSibling
         const parentKey = root.find(el => el === node).parent
-        const parent = root.find(el => el.nodeKey === parentKey).node
-        const index = parent.children.indexOf(data)
+        // const parent = root.find(el => el.nodeKey === parentKey).node
         let list = document.getElementsByClassName('tools')
         let cFlag = toolsDom.style.display
         for (let i = 0; i < list.length; i++) {
           list[i].style.display = 'none'
         }
         // 判断TOOL显示与隐藏
-        if (cFlag == 'none') {
+        if (cFlag === 'none') {
           toolsDom.style.display = 'inline-flex'
           toolsDom.classList.add('animated')
           toolsDom.classList.add('slideInDown')
@@ -182,7 +181,7 @@
       },
       handleLiLeave(node, event) {
         event.currentTarget.lastElementChild.style.display = 'none'
-        if (this.currentLiNode.nodeKey != node.nodeKey) {
+        if (this.currentLiNode.nodeKey !== node.nodeKey) {
           event.currentTarget.style.backgroundColor = 'transparent'
           event.currentTarget.style.border = '0'
         }

+ 460 - 460
TEAMModelOS/ClientApp/src/components/syllabus/Tree.vue

@@ -1,497 +1,497 @@
 <template>
-  <div class="tree-main">
+    <div class="tree-main">
 
-    <Tree :data="treeData" :render="renderContent" ref="tree"></Tree>
-    <Modal v-model="modalFlag" title="添加新节点" ok-text="确认" cancel-text="取消" @on-ok="handleAddNode">
-      <Row class="modelRow">
-        <span>
-          当前章节:
-          <span style="margin-left:10px;">{{currentNode.title}}</span>
-        </span>
-      </Row>
-      <Row class="modelRow">
-        <span>节点名称:</span>
-        <Input v-model="inputValue" placeholder="输入新节点名称" style="width: 100%" />
-      </Row>
-    </Modal>
-    <Modal v-model="editFlag" title="修改节点" ok-text="确认" cancel-text="取消" @on-ok="handleUpdateNode">
-      <Row class="modelRow">
-        <span>
-          当前名称:
-          <span style="margin-left:10px;">{{currentNode.title}}</span>
-        </span>
-      </Row>
-      <Row class="modelRow">
-        <span>修改名称:</span>
-        <Input v-model="editValue" placeholder="输入节点新名称" style="width: 100%" />
-      </Row>
-    </Modal>
-  </div>
+        <Tree :data="treeData" :render="renderContent" ref="tree"></Tree>
+        <Modal v-model="modalFlag" title="添加新节点" ok-text="确认" cancel-text="取消" @on-ok="handleAddNode">
+            <Row class="modelRow">
+                <span>
+                    当前章节:
+                    <span style="margin-left:10px;">{{currentNode.title}}</span>
+                </span>
+            </Row>
+            <Row class="modelRow">
+                <span>节点名称:</span>
+                <Input v-model="inputValue" placeholder="输入新节点名称" style="width: 100%" />
+            </Row>
+        </Modal>
+        <Modal v-model="editFlag" title="修改节点" ok-text="确认" cancel-text="取消" @on-ok="handleUpdateNode">
+            <Row class="modelRow">
+                <span>
+                    当前名称:
+                    <span style="margin-left:10px;">{{currentNode.title}}</span>
+                </span>
+            </Row>
+            <Row class="modelRow">
+                <span>修改名称:</span>
+                <Input v-model="editValue" placeholder="输入节点新名称" style="width: 100%" />
+            </Row>
+        </Modal>
+    </div>
 </template>
 <script>
-  export default {
-    props: ['treeDatas', 'volumeCode'],
-    data() {
-      return {
-        treeData: [],
-        inputValue: '',
-        editValue: '',
-        modalFlag: false,
-        editFlag: false,
-        addBookFlag: false,
-        nodeType: '章节',
-        currentNode: '',
-        currentLiNode: ''
-      }
-    },
-    created() {
-      this.treeData = this.treeDatas
-    },
-    watch: {
-      treeDatas: {
-        handler(newValue, oldValue) {
-          this.treeData = newValue
-    },
-    deep: true
-  }
-    },
-    methods: {
-      renderContent(h, { root, node, data }) {
-        let that = this
-        return h(
-          'span',
-          {
-            style: {
-              display: 'inline-block',
-              width: '95%',
-              textAlign: 'left',
-              paddingLeft: '2%',
-              cursor: 'pointer',
-              position: 'relative',
-              boxSizing: 'border-box'
-            },
-            domProps: {
-              className: 'singleClass'
-            },
-            on: {
-              click: () => {
-                this.titleClick(data)
-              },
-              mouseover: e => {
-                e.stopPropagation()
-                this.handleLiOver(event)
-              },
-              mouseleave: e => {
-                e.stopPropagation()
-                this.handleLiLeave(node, event)
-              }
+    export default {
+        props: ['treeDatas', 'volumeCode'],
+        data() {
+            return {
+                treeData: [],
+                inputValue: '',
+                editValue: '',
+                modalFlag: false,
+                editFlag: false,
+                addBookFlag: false,
+                nodeType: '章节',
+                currentNode: '',
+                currentLiNode: ''
             }
-          },
-          [
-            h('span', [
-              h('Icon', {
-                props: {
-                  type:
-                    data.children && data.children.length > 0
-                      ? 'md-albums'
-                      : 'ios-paper-outline'
-                },
-                style: {
-                  marginRight: '5px',
-                  display: 'none'
-                }
-              }),
-              h('span', data.title)
-            ]),
-            h(
-              'span',
-              {
-                style: {
-                  float: 'right',
-                  top: '6px',
-                  display: 'none'
-                },
-                on: {
-                  mouseleave: e => {
-                    e.stopPropagation()
-                    // this.hideTools(event);
-                  }
+        },
+        created() {
+            this.treeData = this.treeDatas
+        },
+        watch: {
+            treeDatas: {
+                handler(newValue, oldValue) {
+                    this.treeData = newValue
                 },
-                domProps: {
-                  className: 'tools'
-                }
-              },
-              [
-                h(
-                  'Icon',
-                  {
-                    props: {
-                      type: 'md-add',
-                      title: '添加'
-                    },
-                    on: {
-                      click: e => {
-                        e.stopPropagation()
-                        this.appendClick(data)
-                      }
-                    }
-                  }
-                ),
-                h(
-                  'Icon',
-                  {
-                    props: {
-                      type: 'md-remove'
-                    },
-                    on: {
-                      click: e => {
-                        e.stopPropagation()
-                        this.remove(root, node, data)
-                      }
-                    }
-                  }
-                ),
-                h(
-                  'Icon',
-                  {
-                    props: {
-                      type: 'md-arrow-round-up'
-                    },
-                    on: {
-                      click: e => {
-                        e.stopPropagation()
-                        this.moveUp(root, node, data)
-                      }
-                    }
-                  }
-                ),
-                h(
-                  'Icon',
-                  {
-                    props: {
-                      type: 'md-arrow-round-down'
-                    },
-                    on: {
-                      click: e => {
-                        e.stopPropagation()
-                        this.moveDown(root, node, data)
-                      }
-                    }
-                  }
-                ),
-                h(
-                  'Icon',
-                  {
-                    props: {
-                      type: 'md-create'
+                deep: true
+            }
+        },
+        methods: {
+            renderContent(h, { root, node, data }) {
+                // let that = this
+                return h(
+                    'span',
+                    {
+                        style: {
+                            display: 'inline-block',
+                            width: '95%',
+                            textAlign: 'left',
+                            paddingLeft: '2%',
+                            cursor: 'pointer',
+                            position: 'relative',
+                            boxSizing: 'border-box'
+                        },
+                        domProps: {
+                            className: 'singleClass'
+                        },
+                        on: {
+                            click: () => {
+                                this.titleClick(data)
+                            },
+                            mouseover: e => {
+                                e.stopPropagation()
+                                this.handleLiOver(event)
+                            },
+                            mouseleave: e => {
+                                e.stopPropagation()
+                                this.handleLiLeave(node, event)
+                            }
+                        }
                     },
-                    on: {
-                      click: e => {
-                        e.stopPropagation()
-                        this.editClick(node, data)
-                      }
-                    }
-                  }
+                    [
+                        h('span', [
+                            h('Icon', {
+                                props: {
+                                    type:
+                                        data.children && data.children.length > 0
+                                            ? 'md-albums'
+                                            : 'ios-paper-outline'
+                                },
+                                style: {
+                                    marginRight: '5px',
+                                    display: 'none'
+                                }
+                            }),
+                            h('span', data.title)
+                        ]),
+                        h(
+                            'span',
+                            {
+                                style: {
+                                    float: 'right',
+                                    top: '6px',
+                                    display: 'none'
+                                },
+                                on: {
+                                    mouseleave: e => {
+                                        e.stopPropagation()
+                                        // this.hideTools(event);
+                                    }
+                                },
+                                domProps: {
+                                    className: 'tools'
+                                }
+                            },
+                            [
+                                h(
+                                    'Icon',
+                                    {
+                                        props: {
+                                            type: 'md-add',
+                                            title: '添加'
+                                        },
+                                        on: {
+                                            click: e => {
+                                                e.stopPropagation()
+                                                this.appendClick(data)
+                                            }
+                                        }
+                                    }
+                                ),
+                                h(
+                                    'Icon',
+                                    {
+                                        props: {
+                                            type: 'md-remove'
+                                        },
+                                        on: {
+                                            click: e => {
+                                                e.stopPropagation()
+                                                this.remove(root, node, data)
+                                            }
+                                        }
+                                    }
+                                ),
+                                h(
+                                    'Icon',
+                                    {
+                                        props: {
+                                            type: 'md-arrow-round-up'
+                                        },
+                                        on: {
+                                            click: e => {
+                                                e.stopPropagation()
+                                                this.moveUp(root, node, data)
+                                            }
+                                        }
+                                    }
+                                ),
+                                h(
+                                    'Icon',
+                                    {
+                                        props: {
+                                            type: 'md-arrow-round-down'
+                                        },
+                                        on: {
+                                            click: e => {
+                                                e.stopPropagation()
+                                                this.moveDown(root, node, data)
+                                            }
+                                        }
+                                    }
+                                ),
+                                h(
+                                    'Icon',
+                                    {
+                                        props: {
+                                            type: 'md-create'
+                                        },
+                                        on: {
+                                            click: e => {
+                                                e.stopPropagation()
+                                                this.editClick(node, data)
+                                            }
+                                        }
+                                    }
+                                )
+                            ]
+                        )
+                    ]
                 )
-              ]
-            )
-          ]
-        )
-      },
-      // 添加节点
-      append(data, value) {
-        const children = data.children || []
-        let newChild = {
-          title: value,
-          order: children.length,
-          pid: data.rowKey,
-          children: [],
-          expand: true,
-          type: data.type,
-          volumeCode: this.volumeCode,
-          remark: '备注'
-        }
-        children.push(newChild)
-        this.$set(data, 'children', children)
-        this.$api.SaveOrUpdateSingleNode(newChild).then(res => {
-          this.$Message.success('添加成功')
-          this.$api.FindSyllabusByVolumeCode({ VolumeCode: this.volumeCode, Status: 1 }).then(res => {
-            this.treeData = res.result.data
-          })
-        })
-      },
-      // 删除节点
-      remove(root, node, data) {
-        data.status = 0
-        this.$api.SaveOrUpdateSingleNode(data).then(res => {
-          this.$Message.success('删除成功')
-          this.$api.FindSyllabusByVolumeCode({ VolumeCode: this.volumeCode, Status: 1 }).then(res => {
-            this.treeData = res.result.data
-          })
-        })
-      },
-      // 点击编辑
-      editClick(node, data) {
-        this.currentNode = data
-        this.editFlag = true
-        this.editValue = ''
-      },
-      // 添加节点 弹出输入框
-      appendClick(data) {
-        this.currentNode = data
-        this.modalFlag = true
-        this.inputValue = ''
-      },
-      // 确认添加节点
-      handleAddNode() {
-        if (this.inputValue != '') {
-          this.append(this.currentNode, this.inputValue)
-        } else {
-          this.modalFlag = false
-        }
-      },
-      // 修改节点
-      handleUpdateNode() {
-        if (this.editValue != '') {
-          this.$api.SaveOrUpdateSingleNode(this.currentNode).then(res => {
-            this.$Message.success('修改成功')
-            this.currentNode.title = this.editValue
-          })
-        } else {
-          this.editFlag = false
-        }
-      },
-      // 标题点击收缩展开
-      titleClick(data) {
-        data.expand = !data.expand
-      },
-      // 根目录点击事件
-      rootClick(data) {
-        data.expand = !data.expand
-      },
-      // 上移章节操作
-      moveUp(root, node, data) {
-        let that = this
-        let list = []
-        const parentKey = root.find(el => el === node).parent
+            },
+            // 添加节点
+            append(data, value) {
+                const children = data.children || []
+                let newChild = {
+                    title: value,
+                    order: children.length,
+                    pid: data.rowKey,
+                    children: [],
+                    expand: true,
+                    type: data.type,
+                    volumeCode: this.volumeCode,
+                    remark: '备注'
+                }
+                children.push(newChild)
+                this.$set(data, 'children', children)
+                this.$api.SaveOrUpdateSingleNode(newChild).then(res => {
+                    this.$Message.success('添加成功')
+                    this.$api.FindSyllabusByVolumeCode({ VolumeCode: this.volumeCode, Status: 1 }).then(res => {
+                        this.treeData = res.result.data
+                    })
+                })
+            },
+            // 删除节点
+            remove(root, node, data) {
+                data.status = 0
+                this.$api.SaveOrUpdateSingleNode(data).then(res => {
+                    this.$Message.success('删除成功')
+                    this.$api.FindSyllabusByVolumeCode({ VolumeCode: this.volumeCode, Status: 1 }).then(res => {
+                        this.treeData = res.result.data
+                    })
+                })
+            },
+            // 点击编辑
+            editClick(node, data) {
+                this.currentNode = data
+                this.editFlag = true
+                this.editValue = ''
+            },
+            // 添加节点 弹出输入框
+            appendClick(data) {
+                this.currentNode = data
+                this.modalFlag = true
+                this.inputValue = ''
+            },
+            // 确认添加节点
+            handleAddNode() {
+                if (this.inputValue !== '') {
+                    this.append(this.currentNode, this.inputValue)
+                } else {
+                    this.modalFlag = false
+                }
+            },
+            // 修改节点
+            handleUpdateNode() {
+                if (this.editValue !== '') {
+                    this.$api.SaveOrUpdateSingleNode(this.currentNode).then(res => {
+                        this.$Message.success('修改成功')
+                        this.currentNode.title = this.editValue
+                    })
+                } else {
+                    this.editFlag = false
+                }
+            },
+            // 标题点击收缩展开
+            titleClick(data) {
+                data.expand = !data.expand
+            },
+            // 根目录点击事件
+            rootClick(data) {
+                data.expand = !data.expand
+            },
+            // 上移章节操作
+            moveUp(root, node, data) {
+                let that = this
+                let list = []
+                const parentKey = root.find(el => el === node).parent
 
-        // 判断是否存在父级
-        if (parentKey == null || parentKey == undefined) {
-          list = that.treeData
-        } else {
-          list = root.find(el => el.nodeKey === parentKey).node.children
-        }
-        const index = list.indexOf(data)
-        let currentOrder = data.order
+                // 判断是否存在父级
+                if (parentKey === null || parentKey === undefined) {
+                    list = that.treeData
+                } else {
+                    list = root.find(el => el.nodeKey === parentKey).node.children
+                }
+                const index = list.indexOf(data)
+                let currentOrder = data.order
 
-        // 第一个元素无法上移
-        if (index != 0) {
-          let preData = list[index - 1]
-          if (data.order == preData.order) {
-            data.order = data.order - 1
-          } else {
-            data.order = preData.order
-            preData.order = currentOrder
-          }
-          // 更新两条数据
-          that.$api.SaveOrUpdateSingleNode(data)
-          that.$api.SaveOrUpdateSingleNode(preData)
+                // 第一个元素无法上移
+                if (index !== 0) {
+                    let preData = list[index - 1]
+                    if (data.order === preData.order) {
+                        data.order = data.order - 1
+                    } else {
+                        data.order = preData.order
+                        preData.order = currentOrder
+                    }
+                    // 更新两条数据
+                    that.$api.SaveOrUpdateSingleNode(data)
+                    that.$api.SaveOrUpdateSingleNode(preData)
 
-          // 移动后刷新数据
-          setTimeout(function() {
-            that.$api.FindSyllabusByVolumeCode({ VolumeCode: that.volumeCode, Status: 1 }).then(res => {
-              that.treeData = res.result.data
-            })
-          }, 500)
-        }
-      },
-      // 下移章节操作
-      moveDown(root, node, data) {
-        let that = this
-        let list = []
-        const parentKey = root.find(el => el === node).parent
+                    // 移动后刷新数据
+                    setTimeout(function() {
+                        that.$api.FindSyllabusByVolumeCode({ VolumeCode: that.volumeCode, Status: 1 }).then(res => {
+                            that.treeData = res.result.data
+                        })
+                    }, 500)
+                }
+            },
+            // 下移章节操作
+            moveDown(root, node, data) {
+                let that = this
+                let list = []
+                const parentKey = root.find(el => el === node).parent
 
-        // 判断是否存在父级
-        if (parentKey == null || parentKey == undefined) {
-          list = that.treeData
-        } else {
-          list = root.find(el => el.nodeKey === parentKey).node.children
-        }
-        const index = list.indexOf(data)
-        let currentOrder = data.order
-        // 最后一个元素无法下移
-        if (index != (list.length - 1)) {
-           let nextData = list[index + 1]
-          if (data.order == nextData.order) {
-            data.order = data.order + 1
-          } else {
-            data.order = nextData.order
-            nextData.order = currentOrder
-          }
-          // 更新两条数据
-          that.$api.SaveOrUpdateSingleNode(data)
-          that.$api.SaveOrUpdateSingleNode(nextData)
+                // 判断是否存在父级
+                if (parentKey === null || parentKey === undefined) {
+                    list = that.treeData
+                } else {
+                    list = root.find(el => el.nodeKey === parentKey).node.children
+                }
+                const index = list.indexOf(data)
+                let currentOrder = data.order
+                // 最后一个元素无法下移
+                if (index !== (list.length - 1)) {
+                    let nextData = list[index + 1]
+                    if (data.order === nextData.order) {
+                        data.order = data.order + 1
+                    } else {
+                        data.order = nextData.order
+                        nextData.order = currentOrder
+                    }
+                    // 更新两条数据
+                    that.$api.SaveOrUpdateSingleNode(data)
+                    that.$api.SaveOrUpdateSingleNode(nextData)
 
-          // 移动后刷新数据
-          setTimeout(function() {
-            that.$api.FindSyllabusByVolumeCode({ VolumeCode: that.volumeCode, Status: 1 }).then(res => {
-              that.treeData = res.result.data
-            })
-          }, 500)
-        }
-      },
-      // 更多操作
-      handleTools(root, node, data, event) {
-        let toolsDom = event.currentTarget.nextElementSibling
-        const parentKey = root.find(el => el === node).parent
-        const parent = root.find(el => el.nodeKey === parentKey).node
-        const index = parent.children.indexOf(data)
-        let list = document.getElementsByClassName('tools')
-        let cFlag = toolsDom.style.display
-        for (let i = 0; i < list.length; i++) {
-          list[i].style.display = 'none'
-        }
-        // 判断TOOL显示与隐藏
-        if (cFlag == 'none') {
-          toolsDom.style.display = 'inline-flex'
-          toolsDom.classList.add('animated')
-          toolsDom.classList.add('slideInDown')
-        } else {
-          toolsDom.style.display = 'none'
-        }
-      },
-      // 鼠标从工具条移开的时候隐藏
-      hideTools(event) {
-        event.currentTarget.style.display = 'none'
-      },
-      handleLiOver(event) {
-        event.currentTarget.lastElementChild.style.display = 'block'
-        event.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.68)'
-        event.currentTarget.style.border = '1px solid #000'
-      },
-      handleLiLeave(node, event) {
-        event.currentTarget.lastElementChild.style.display = 'none'
-        if (this.currentLiNode.nodeKey != node.nodeKey) {
-          event.currentTarget.style.backgroundColor = 'transparent'
-          event.currentTarget.style.border = '0'
-        }
-      }
+                    // 移动后刷新数据
+                    setTimeout(function() {
+                        that.$api.FindSyllabusByVolumeCode({ VolumeCode: that.volumeCode, Status: 1 }).then(res => {
+                            that.treeData = res.result.data
+                        })
+                    }, 500)
+                }
+            },
+            // 更多操作
+            handleTools(root, node, data, event) {
+                let toolsDom = event.currentTarget.nextElementSibling
+                const parentKey = root.find(el => el === node).parent
+                const parent = root.find(el => el.nodeKey === parentKey).node
+                // const index = parent.children.indexOf(data)
+                let list = document.getElementsByClassName('tools')
+                let cFlag = toolsDom.style.display
+                for (let i = 0; i < list.length; i++) {
+                    list[i].style.display = 'none'
+                }
+                // 判断TOOL显示与隐藏
+                if (cFlag === 'none') {
+                    toolsDom.style.display = 'inline-flex'
+                    toolsDom.classList.add('animated')
+                    toolsDom.classList.add('slideInDown')
+                } else {
+                    toolsDom.style.display = 'none'
+                }
+            },
+            // 鼠标从工具条移开的时候隐藏
+            hideTools(event) {
+                event.currentTarget.style.display = 'none'
+            },
+            handleLiOver(event) {
+                event.currentTarget.lastElementChild.style.display = 'block'
+                event.currentTarget.style.backgroundColor = 'rgba(255, 255, 255, 0.68)'
+                event.currentTarget.style.border = '1px solid #000'
+            },
+            handleLiLeave(node, event) {
+                event.currentTarget.lastElementChild.style.display = 'none'
+                if (this.currentLiNode.nodeKey !== node.nodeKey) {
+                    event.currentTarget.style.backgroundColor = 'transparent'
+                    event.currentTarget.style.border = '0'
+                }
+            }
 
+        }
     }
-  }
 </script>
 <style scoped>
-  .tree-main {
-    margin-left: 5%;
-    width: 90%;
-  }
+      .tree-main {
+          margin-left: 5%;
+          width: 90%;
+      }
 
-    .tree-main /deep/ .ivu-icon-ios-paper-outline {
-      font-size: 16px;
-    }
+          .tree-main /deep/ .ivu-icon-ios-paper-outline {
+              font-size: 16px;
+          }
 
-    .tree-main /deep/ .ivu-select {
-      width: 80% !important;
-    }
+          .tree-main /deep/ .ivu-select {
+              width: 80% !important;
+          }
 
-  .slideSelect .ivu-select-selection {
-    height: 40px;
-    background: #d8d8d870;
-    border: 1px solid #808080;
-  }
+      .slideSelect .ivu-select-selection {
+          height: 40px;
+          background: #d8d8d870;
+          border: 1px solid #808080;
+      }
 
-  .slideSelect, .slideSelect .ivu-icon {
-    color: rgba(255,255,255,.8);
-  }
+      .slideSelect, .slideSelect .ivu-icon {
+          color: rgba(255,255,255,.8);
+      }
 
-  .tree-main /deep/ .ivu-select-single .ivu-select-selection .ivu-select-selected-value {
-    height: 40px;
-    line-height: 40px;
-    font-size: 14px;
-  }
-  /* .ivu-tree ul li {
-    margin: 18px 0;
-  } */
-  .tree-main /deep/ .ivu-tree ul {
-    font-size: 14px;
-  }
+      .tree-main /deep/ .ivu-select-single .ivu-select-selection .ivu-select-selected-value {
+          height: 40px;
+          line-height: 40px;
+          font-size: 14px;
+      }
+      /* .ivu-tree ul li {
+      margin: 18px 0;
+    } */
+      .tree-main /deep/ .ivu-tree ul {
+          font-size: 14px;
+      }
 
-    .tree-main /deep/ .ivu-tree ul li {
-      margin: 8px 0;
-    }
+          .tree-main /deep/ .ivu-tree ul li {
+              margin: 8px 0;
+          }
 
-  .ivu-tree .ivu-tree-arrow {
-    width: 2%;
-  }
+      .ivu-tree .ivu-tree-arrow {
+          width: 2%;
+      }
 
-  .ivu-input-wrapper {
-    width: 80% !important;
-  }
+      .ivu-input-wrapper {
+          width: 80% !important;
+      }
 
-  .modelRow {
-    margin: 20px;
-    font-size: 14px;
-  }
+      .modelRow {
+          margin: 20px;
+          font-size: 14px;
+      }
 
-  .tree-main /deep/ .tools {
-    position: absolute;
-    right: 60px;
-    bottom: 5px;
-    display: inline-flex;
-    z-index: 999;
-  }
+      .tree-main /deep/ .tools {
+          position: absolute;
+          right: 60px;
+          bottom: 5px;
+          display: inline-flex;
+          z-index: 999;
+      }
 
-    .tree-main /deep/ .tools .ivu-icon {
-      margin-right: 15px;
-      font-size: 16px;
-      font-weight: 200;
-      color: #808080;
-    }
+          .tree-main /deep/ .tools .ivu-icon {
+              margin-right: 15px;
+              font-size: 16px;
+              font-weight: 200;
+              color: #808080;
+          }
 
-  .btn_more {
-    background: #fff;
-    border: 1px solid rgb(248,248,248);
-  }
+      .btn_more {
+          background: #fff;
+          border: 1px solid rgb(248,248,248);
+      }
 
-  .animated {
-    animation-duration: 0.5s;
-  }
+      .animated {
+          animation-duration: 0.5s;
+      }
 
-  @-webkit-keyframes slideInDown {
-    from {
-      -webkit-transform: translate3d(0,-10%, 0);
-      transform: translate3d(0, -10%, 0) !important;
-      visibility: visible;
-    }
+      @-webkit-keyframes slideInDown {
+          from {
+              -webkit-transform: translate3d(0,-10%, 0);
+              transform: translate3d(0, -10%, 0) !important;
+              visibility: visible;
+          }
 
-    to {
-      -webkit-transform: translate3d(0, 0%, 0);
-      transform: translate3d(0, 0%, 0);
-    }
-  }
+          to {
+              -webkit-transform: translate3d(0, 0%, 0);
+              transform: translate3d(0, 0%, 0);
+          }
+      }
 
-  @keyframes slideInDown {
-    from {
-      -webkit-transform: translate3d(0, -10%, 0);
-      transform: translate3d(0, -10%, 0) !important;
-      visibility: visible;
-    }
+      @keyframes slideInDown {
+          from {
+              -webkit-transform: translate3d(0, -10%, 0);
+              transform: translate3d(0, -10%, 0) !important;
+              visibility: visible;
+          }
 
-    to {
-      -webkit-transform: translate3d(0, 0%, 0);
-      transform: translate3d(0, 0%, 0);
-    }
-  }
+          to {
+              -webkit-transform: translate3d(0, 0%, 0);
+              transform: translate3d(0, 0%, 0);
+          }
+      }
 
-  .slideInDown {
-    -webkit-animation-name: slideInDown;
-    animation-name: slideInDown;
-  }
+      .slideInDown {
+          -webkit-animation-name: slideInDown;
+          animation-name: slideInDown;
+      }
 
-  .tree-main /deep/ .singleClass {
-    display: inline-flex !important;
-    flex-direction: row;
-    align-items: center;
-    height: 40px;
-  }
+      .tree-main /deep/ .singleClass {
+          display: inline-flex !important;
+          flex-direction: row;
+          align-items: center;
+          height: 40px;
+      }
 </style>

+ 15 - 16
TEAMModelOS/ClientApp/src/components/syllabus/newTree.vue

@@ -47,17 +47,16 @@
     created() {
       this.treeData = this.treeDatas
     },
-    watch: {
-      treeDatas: {
-        handler(newValue, oldValue) {
-          this.treeData = newValue
-    },
-    deep: true
-  }
-    },
+  //  watch: {
+  //    treeDatas: {
+  //      handler(newValue, oldValue) {
+  //        this.treeData = newValue
+  //  },
+  //  deep: true
+  // }
+  //  },
     methods: {
       renderContent(h, { root, node, data }) {
-        let that = this
         return h(
           'span',
           {
@@ -235,7 +234,7 @@
       },
       // 确认添加节点
       handleAddNode() {
-        if (this.inputValue != '') {
+        if (this.inputValue !== '') {
           this.append(this.currentNode, this.inputValue)
         } else {
           this.modalFlag = false
@@ -243,7 +242,7 @@
       },
       // 修改节点
       handleUpdateNode() {
-        if (this.editValue != '') {
+        if (this.editValue !== '') {
           this.$api.SaveOrUpdateSingleNode(this.currentNode).then(res => {
             this.$Message.success('修改成功')
             this.currentNode.title = this.editValue
@@ -276,7 +275,7 @@
         let currentOrder = data.order
 
         // 第一个元素无法上移
-        if (index != 0) {
+        if (index !== 0) {
           let preData = list[index - 1]
           if (data.order === preData.order) {
             data.order = data.order - 1
@@ -311,7 +310,7 @@
         const index = list.indexOf(data)
         let currentOrder = data.order
         // 最后一个元素无法下移
-        if (index != (list.length - 1)) {
+        if (index !== (list.length - 1)) {
            let nextData = list[index + 1]
           if (data.order === nextData.order) {
             data.order = data.order + 1
@@ -334,8 +333,8 @@
       // 更多操作
       handleTools(root, node, data, event) {
         let toolsDom = event.currentTarget.nextElementSibling
-        const parentKey = root.find(el => el === node).parent
-        const parent = root.find(el => el.nodeKey === parentKey).node
+        // const parentKey = root.find(el => el === node).parent
+        // const parent = root.find(el => el.nodeKey === parentKey).node
         let list = document.getElementsByClassName('tools')
         let cFlag = toolsDom.style.display
         for (let i = 0; i < list.length; i++) {
@@ -361,7 +360,7 @@
       },
       handleLiLeave(node, event) {
         event.currentTarget.lastElementChild.style.display = 'none'
-        if (this.currentLiNode.nodeKey != node.nodeKey) {
+        if (this.currentLiNode.nodeKey !== node.nodeKey) {
           event.currentTarget.style.backgroundColor = 'transparent'
           event.currentTarget.style.border = '0'
         }

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

@@ -2,7 +2,7 @@ import Login from '@/view/login/Index.vue'
 import ServerSideLogin from '@/view/serverside/login'
 import Main from '@/components/public/main'
 // import HTTP404 from '@/view/404'
-//import { resolve } from 'url'
+// import { resolve } from 'url'
 
 export const routes = [
     { path: '*', redirect: '/404' },

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

@@ -122,11 +122,11 @@ export default {
       let mathList = ['图形的变化', '方程与不等式', '图形的性质', '统计与概率', '函数']
 
         state.pieData.forEach((item, index) => {
-          item.name = subject == 0 ? list[index] : mathList[index]
+          item.name = subject === 0 ? list[index] : mathList[index]
           item.value = Math.floor(Math.random() * 3) + 1
         })
 
-      state.exerciseList = subject == 0 ? chineseList : exerciseList
+      state.exerciseList = subject === 0 ? chineseList : exerciseList
     },
 
     // 更新认知层次分布数据

+ 5 - 5
TEAMModelOS/ClientApp/src/view/evaluation/index/CreateCompose.vue

@@ -13,7 +13,7 @@
     <Button type="info" @click="handleAddChild" style="margin:20px 0 0 0">添加小题</Button>
 
     <div class="children-list">
-      <div class="child-item" v-for="(item,index) in children"  @mouseenter="exerciseMouseover($event)" @mouseleave="exerciseMouseleave($event)">
+      <div class="child-item" v-for="(item,index) in children" :key="index" @mouseenter="exerciseMouseover($event)" @mouseleave="exerciseMouseleave($event)">
 
         <div class="item-tools">
           <div class="item-tools-t flex-row-center" @click="handleEditChild(item)"><Icon type="ios-brush-outline" />编辑</div>
@@ -26,15 +26,15 @@
           <p><span style="font-weight:bold">小题 {{index+1}} : </span><span class="item-content" v-html="item.question"></span></p>
         </div>
 
-        <div v-for="(option,optionIndex) in item.option" class="item-option">
+        <div v-for="(option,optionIndex) in item.option" :key="optionIndex" class="item-option">
           <p>{{String.fromCharCode(64 + parseInt(optionIndex+1))}} : <span class="item-content" v-html="option.value"></span></p>
         </div>
 
         <div class="item-answer">
           <span style="color:#01b4ef">【答案】:</span>
-          <span v-html="item.answer[0] || item.answer" v-if="item.type == 'Subjective'"></span>
-          <span :class="[ item.type == 'Complete' ? 'item-answer-item':'']" v-for="answer in item.answer" v-else-if="item.type == 'Complete'" v-html="answer"></span>
-          <span :class="[ item.type == 'Complete' ? 'item-answer-item':'']" v-for="answer in item.answer" v-else>{{answer}}</span>
+          <span v-html="item.answer[0] || item.answer" v-if="item.type === 'Subjective'"></span>
+          <span :class="[ item.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,index) in item.answer" :key="index" v-else-if="item.type === 'Complete'" v-html="answer"></span>
+          <span :class="[ item.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,index) in item.answer" :key="index" v-else>{{answer}}</span>
         </div>
         <div class="item-explain">
           <span style="color:#01b4ef">【解析】:</span>

+ 8 - 8
TEAMModelOS/ClientApp/src/view/evaluation/index/CreateExercises.vue

@@ -26,11 +26,11 @@
       </div>
     </div>
 
-    <BaseSingle v-if="exersicesType=='Single'" ref="single" :editInfo="editInfo"></BaseSingle>
-    <BaseMultiple v-else-if="exersicesType=='Multiple'" ref="multiple" :editInfo="editInfo"></BaseMultiple>
-    <BaseJudge v-else-if="exersicesType=='Judge'" ref="judge" :editInfo="editInfo"></BaseJudge>
-    <BaseCompletion v-else-if="exersicesType=='Complete'" ref="complete" :editInfo="editInfo"></BaseCompletion>
-    <BaseSubjective v-else-if="exersicesType=='Subjective'" ref="subjective" :editInfo="editInfo"></BaseSubjective>
+    <BaseSingle v-if="exersicesType==='Single'" ref="single" :editInfo="editInfo"></BaseSingle>
+    <BaseMultiple v-else-if="exersicesType==='Multiple'" ref="multiple" :editInfo="editInfo"></BaseMultiple>
+    <BaseJudge v-else-if="exersicesType==='Judge'" ref="judge" :editInfo="editInfo"></BaseJudge>
+    <BaseCompletion v-else-if="exersicesType==='Complete'" ref="complete" :editInfo="editInfo"></BaseCompletion>
+    <BaseSubjective v-else-if="exersicesType==='Subjective'" ref="subjective" :editInfo="editInfo"></BaseSubjective>
 
     <div class="exersices-analysis">
       <IconText :text="'解析'" :color="'#2892DD'" :icon="'md-list'" style="margin-bottom:15px;"></IconText>
@@ -113,7 +113,7 @@
         switch (type) {
           case 'Single':
             exerciseItem.question = this.$refs.single._data.stemContent
-            exerciseItem.option = this.$refs.single._data.optionsContent.length == this.$refs.single._data.options.length ? this.$refs.single._data.optionsContent : null
+            exerciseItem.option = this.$refs.single._data.optionsContent.length === this.$refs.single._data.options.length ? this.$refs.single._data.optionsContent : null
             exerciseItem.type = this.exersicesType
             exerciseItem.difficulty = this.exersicesDiff
             exerciseItem.explain = this.analysisContent
@@ -121,7 +121,7 @@
             break
           case 'Multiple':
             exerciseItem.question = this.$refs.multiple._data.stemContent
-            exerciseItem.option = this.$refs.multiple._data.optionsContent.length == this.$refs.multiple._data.options.length ? this.$refs.multiple._data.optionsContent : null
+            exerciseItem.option = this.$refs.multiple._data.optionsContent.length === this.$refs.multiple._data.options.length ? this.$refs.multiple._data.optionsContent : null
             exerciseItem.type = this.exersicesType
             exerciseItem.difficulty = this.exersicesDiff
             exerciseItem.explain = this.analysisContent
@@ -172,7 +172,7 @@
       typeChange(val) {
         if (this.isEdit) {
           this.$Message.warning('暂不支持更换题型!')
-        } else if (val == 'Compose') {
+        } else if (val === 'Compose') {
           this.$router.push({
             name: 'createCompose'
           })

+ 8 - 8
TEAMModelOS/ClientApp/src/view/evaluation/index/CreateNewChild.vue

@@ -23,11 +23,11 @@
       </div>
     </div>
 
-    <BaseSingle v-if="exersicesType=='Single'" ref="single" :editInfo="editInfo"></BaseSingle>
-    <BaseMultiple v-else-if="exersicesType=='Multiple'" ref="multiple" :editInfo="editInfo"></BaseMultiple>
-    <BaseJudge v-else-if="exersicesType=='Judge'" ref="judge" :editInfo="editInfo"></BaseJudge>
-    <BaseCompletion v-else-if="exersicesType=='Complete'" ref="complete" :editInfo="editInfo"></BaseCompletion>
-    <BaseSubjective v-else-if="exersicesType=='Subjective'" ref="subjective" :editInfo="editInfo"></BaseSubjective>
+    <BaseSingle v-if="exersicesType==='Single'" ref="single" :editInfo="editInfo"></BaseSingle>
+    <BaseMultiple v-else-if="exersicesType==='Multiple'" ref="multiple" :editInfo="editInfo"></BaseMultiple>
+    <BaseJudge v-else-if="exersicesType==='Judge'" ref="judge" :editInfo="editInfo"></BaseJudge>
+    <BaseCompletion v-else-if="exersicesType==='Complete'" ref="complete" :editInfo="editInfo"></BaseCompletion>
+    <BaseSubjective v-else-if="exersicesType==='Subjective'" ref="subjective" :editInfo="editInfo"></BaseSubjective>
 
     <div class="exersices-analysis">
       <IconText :text="'解析'" :color="'#2892DD'" :icon="'md-list'" style="margin-bottom:15px;"></IconText>
@@ -92,7 +92,7 @@
         switch (type) {
           case 'Single':
             exerciseItem.question = this.$refs.single._data.stemContent
-            exerciseItem.option = this.$refs.single._data.optionsContent.length == this.$refs.single._data.options.length ? this.$refs.single._data.optionsContent : null
+            exerciseItem.option = this.$refs.single._data.optionsContent.length === this.$refs.single._data.options.length ? this.$refs.single._data.optionsContent : null
             exerciseItem.type = this.exersicesType
             exerciseItem.difficulty = this.exersicesDiff
             exerciseItem.explain = this.analysisContent
@@ -100,7 +100,7 @@
             break
           case 'Multiple':
             exerciseItem.question = this.$refs.multiple._data.stemContent
-            exerciseItem.option = this.$refs.multiple._data.optionsContent.length == this.$refs.multiple._data.options.length ? this.$refs.multiple._data.optionsContent : null
+            exerciseItem.option = this.$refs.multiple._data.optionsContent.length === this.$refs.multiple._data.options.length ? this.$refs.multiple._data.optionsContent : null
             exerciseItem.type = this.exersicesType
             exerciseItem.difficulty = this.exersicesDiff
             exerciseItem.explain = this.analysisContent
@@ -153,7 +153,7 @@
       typeChange(val) {
         if (this.isEdit) {
           this.$Message.warning('暂不支持更换题型!')
-        } else if (val == 'Compose') {
+        } else if (val === 'Compose') {
           this.$router.push({
             name: 'createCompose'
           })

+ 26 - 26
TEAMModelOS/ClientApp/src/view/evaluation/index/CreateTest.vue

@@ -41,7 +41,7 @@
           </RadioGroup>
         </div>
       </div>
-      <div class="create-wrap" v-if="testBasicAttr.testMode == 'auto'">
+      <div class="create-wrap" v-if="testBasicAttr.testMode === 'auto'">
         <Divider />
         <div class="create-test-attr">
           <div>
@@ -51,7 +51,7 @@
           </div>
 
           <div class="test-chapter-wrap">
-            <p v-if="autoCreate.chapters.length == 0">您未选择章节!</p>
+            <p v-if="autoCreate.chapters.length === 0">您未选择章节!</p>
             <Tag type="dot" closable v-for="(item,index) in autoCreate.chapters" :key="index" @on-close="clearCurrentTag(index,'auto')">{{item}}</Tag>
           </div>
         </div>
@@ -85,27 +85,27 @@
         <div class="create-test-attr set-question-num">
           <IconText :text="'题型/题量设置'" :color="'#0086e6'" :icon="'md-list'"></IconText>
           <div class="test-attr-item border-buttom">
-            <div class="my-check-button" :class="testExerciseType.indexOf(1) == -1 ? '' : 'my-check-active' " @click="toggleStatus(1)">
+            <div class="my-check-button" :class="testExerciseType.indexOf(1) === -1 ? '' : 'my-check-active' " @click="toggleStatus(1)">
               单选题
             </div>
-            <div class="my-check-button" :class="testExerciseType.indexOf(2) == -1 ? '' : 'my-check-active' " @click="toggleStatus(2)">
+            <div class="my-check-button" :class="testExerciseType.indexOf(2) === -1 ? '' : 'my-check-active' " @click="toggleStatus(2)">
               多选题
             </div>
-            <div class="my-check-button" :class="testExerciseType.indexOf(3) == -1 ? '' : 'my-check-active' " @click="toggleStatus(3)">
+            <div class="my-check-button" :class="testExerciseType.indexOf(3) === -1 ? '' : 'my-check-active' " @click="toggleStatus(3)">
               判断题
             </div>
-            <div class="my-check-button" :class="testExerciseType.indexOf(4) == -1 ? '' : 'my-check-active' " @click="toggleStatus(4)">
+            <div class="my-check-button" :class="testExerciseType.indexOf(4) === -1 ? '' : 'my-check-active' " @click="toggleStatus(4)">
               填空题
             </div>
-            <div class="my-check-button" :class="testExerciseType.indexOf(5) == -1 ? '' : 'my-check-active' " @click="toggleStatus(5)">
+            <div class="my-check-button" :class="testExerciseType.indexOf(5) === -1 ? '' : 'my-check-active' " @click="toggleStatus(5)">
               问答题
             </div>
-            <div class="my-check-button" :class="testExerciseType.indexOf(6) == -1 ? '' : 'my-check-active' " @click="toggleStatus(6)">
+            <div class="my-check-button" :class="testExerciseType.indexOf(6) === -1 ? '' : 'my-check-active' " @click="toggleStatus(6)">
               综合题
             </div>
           </div>
           <div class="test-exercise-settting test-attr-item">
-            <div class="test-exercise-settting-item" v-show="testExerciseType.indexOf(1) != -1">
+            <div class="test-exercise-settting-item" v-show="testExerciseType.indexOf(1) !== -1">
               <span class="exercise-type">单选题:</span>
               <div class="test-settting-num-wrap">
                 <div class="test-exercise-settting-num">
@@ -130,7 +130,7 @@
               </div>
             </div>
 
-            <div class="test-exercise-settting-item" v-show="testExerciseType.indexOf(2) != -1">
+            <div class="test-exercise-settting-item" v-show="testExerciseType.indexOf(2) !== -1">
               <span class="exercise-type">多选题:</span>
               <div class="test-settting-num-wrap">
                 <div class="test-exercise-settting-num">
@@ -155,7 +155,7 @@
               </div>
             </div>
 
-            <div class="test-exercise-settting-item" v-show="testExerciseType.indexOf(3) != -1">
+            <div class="test-exercise-settting-item" v-show="testExerciseType.indexOf(3) !== -1">
               <span class="exercise-type">判断题:</span>
               <div class="test-settting-num-wrap">
                 <div class="test-exercise-settting-num">
@@ -180,7 +180,7 @@
               </div>
             </div>
 
-            <div class="test-exercise-settting-item" v-show="testExerciseType.indexOf(4) != -1">
+            <div class="test-exercise-settting-item" v-show="testExerciseType.indexOf(4) !== -1">
               <span class="exercise-type">填空题:</span>
               <div class="test-settting-num-wrap">
                 <div class="test-exercise-settting-num">
@@ -205,7 +205,7 @@
               </div>
             </div>
 
-            <div class="test-exercise-settting-item" v-show="testExerciseType.indexOf(5) != -1">
+            <div class="test-exercise-settting-item" v-show="testExerciseType.indexOf(5) !== -1">
               <span class="exercise-type">问答题:</span>
               <div class="test-settting-num-wrap">
                 <div class="test-exercise-settting-num">
@@ -230,7 +230,7 @@
               </div>
             </div>
 
-            <div class="test-exercise-settting-item" v-show="testExerciseType.indexOf(6) != -1">
+            <div class="test-exercise-settting-item" v-show="testExerciseType.indexOf(6) !== -1">
               <span class="exercise-type">综合题:</span>
               <div class="test-settting-num-wrap">
                 <div class="test-exercise-settting-num">
@@ -255,7 +255,7 @@
               </div>
             </div>
 
-            <p v-if="testExerciseType.length == 0">请选择题目类型,并设置题目数量!</p>
+            <p v-if="testExerciseType.length === 0">请选择题目类型,并设置题目数量!</p>
           </div>
           <div class="create-test-submit">
             <Button type="info" @click="autoCreateTest">生成试卷</Button>
@@ -264,7 +264,7 @@
         </div>
       </div>
 
-      <div class="create-wrap" v-if="testBasicAttr.testMode == 'import' ">
+      <div class="create-wrap" v-if="testBasicAttr.testMode === 'import' ">
         <Divider />
         <div class="create-test-attr">
           <IconText :text="'导入说明'" :color="'#0086e6'" :icon="'md-reorder'"></IconText>
@@ -292,7 +292,7 @@
         </div>
 
       </div>
-      <div class="create-wrap" v-if="testBasicAttr.testMode == 'choose'">
+      <div class="create-wrap" v-if="testBasicAttr.testMode === 'choose'">
         <Divider />
         <div class="create-test-attr">
           <div>
@@ -302,7 +302,7 @@
           </div>
 
           <div class="test-chapter-wrap">
-            <p v-if="chooseCreate.chapters.length == 0">您未选择章节!</p>
+            <p v-if="chooseCreate.chapters.length === 0">您未选择章节!</p>
             <Tag type="dot" closable v-for="(item,index) in chooseCreate.chapters" :key="index" @on-close="clearCurrentTag(index,'choose')">{{item}}</Tag>
           </div>
 
@@ -342,7 +342,7 @@
         </div>
       </div>
     </div>
-    <div class="text-order-type-wrap" v-if="testBasicAttr.testMode == 'choose'">
+    <div class="text-order-type-wrap" v-if="testBasicAttr.testMode === 'choose'">
       <div class="text-order-type" style="float:left;">
         <span>时间<Icon type="md-arrow-down" /></span>
         <span>使用次数<Icon type="md-arrow-down" /></span>
@@ -359,10 +359,10 @@
       <div style="clear:both;"></div>
     </div>
 
-    <div class="ev-container" v-if="testBasicAttr.testMode == 'choose'">
+    <div class="ev-container" v-if="testBasicAttr.testMode === 'choose'">
       题目列表
     </div>
-    <div class="ev-container perview-word-analysis" v-if="testBasicAttr.testMode == 'import' && srcdoc != ''">
+    <div class="ev-container perview-word-analysis" v-if="testBasicAttr.testMode === 'import' && srcdoc !== ''">
       <h2>文档解析预览 </h2>
       <Button shape="circle" icon="md-cloud-upload" @click="uploadHtmlString">确认上传</Button>
       <iframe class="my-iframe-style" src="https://www.baidu.com" :srcdoc="srcdoc"></iframe>
@@ -426,7 +426,7 @@
       },
       uploadSuccess(response, file, fileList) {
         console.log(response)
-        if (response.error == null) {
+        if (response.error === null) {
           this.$Message.success('文件上传解析成功!')
           this.srcdoc = response.result.data.HtmlString
           console.log(response.result.data.HtmlString)
@@ -440,7 +440,7 @@
         }
 
         this.$api.SaveAnalyzeHtml(requestData).then(res => {
-          if (res.error == null) {
+          if (res.error === null) {
             localStorage.setItem('questions', JSON.stringify(res.result.data))
             this.$router.push({
               name: 'testPaper', // 或者路径跳转path: '/addCreditCards',
@@ -459,21 +459,21 @@
       },
       toggleStatus(type) {
         let index = this.testExerciseType.indexOf(type)
-        if (index == -1) {
+        if (index === -1) {
           this.testExerciseType.push(type)
         } else {
           this.testExerciseType.splice(index, 1)
         }
       },
       clearTags(flag) {
-        if (flag == 'auto') {
+        if (flag === 'auto') {
           this.autoCreate.chapters = []
         } else {
           this.chooseCreate.chapters = []
         }
       },
       clearCurrentTag(index, flag) {
-        if (flag == 'auto') {
+        if (flag === 'auto') {
           this.autoCreate.chapters.splice(index, 1)
         } else {
           this.chooseCreate.chapters.splice(index, 1)

+ 8 - 8
TEAMModelOS/ClientApp/src/view/evaluation/index/EditChild.vue

@@ -26,11 +26,11 @@
       </div>
     </div>
 
-    <BaseSingle v-if="exersicesType=='Single'" ref="single" :editInfo="editInfo"></BaseSingle>
-    <BaseMultiple v-else-if="exersicesType=='Multiple'" ref="multiple" :editInfo="editInfo"></BaseMultiple>
-    <BaseJudge v-else-if="exersicesType=='Judge'" ref="judge" :editInfo="editInfo"></BaseJudge>
-    <BaseCompletion v-else-if="exersicesType=='Complete'" ref="complete" :editInfo="editInfo"></BaseCompletion>
-    <BaseSubjective v-else-if="exersicesType=='Subjective'" ref="subjective" :editInfo="editInfo"></BaseSubjective>
+    <BaseSingle v-if="exersicesType==='Single'" ref="single" :editInfo="editInfo"></BaseSingle>
+    <BaseMultiple v-else-if="exersicesType==='Multiple'" ref="multiple" :editInfo="editInfo"></BaseMultiple>
+    <BaseJudge v-else-if="exersicesType==='Judge'" ref="judge" :editInfo="editInfo"></BaseJudge>
+    <BaseCompletion v-else-if="exersicesType==='Complete'" ref="complete" :editInfo="editInfo"></BaseCompletion>
+    <BaseSubjective v-else-if="exersicesType==='Subjective'" ref="subjective" :editInfo="editInfo"></BaseSubjective>
 
     <div class="exersices-analysis">
       <IconText :text="'解析'" :color="'#2892DD'" :icon="'md-list'" style="margin-bottom:15px;"></IconText>
@@ -113,7 +113,7 @@
         switch (type) {
           case 'Single':
             exerciseItem.question = this.$refs.single._data.stemContent
-            exerciseItem.option = this.$refs.single._data.optionsContent.length == this.$refs.single._data.options.length ? this.$refs.single._data.optionsContent : null
+            exerciseItem.option = this.$refs.single._data.optionsContent.length === this.$refs.single._data.options.length ? this.$refs.single._data.optionsContent : null
             exerciseItem.type = this.exersicesType
             exerciseItem.difficulty = this.exersicesDiff
             exerciseItem.explain = this.analysisContent
@@ -121,7 +121,7 @@
             break
           case 'Multiple':
             exerciseItem.question = this.$refs.multiple._data.stemContent
-            exerciseItem.option = this.$refs.multiple._data.optionsContent.length == this.$refs.multiple._data.options.length ? this.$refs.multiple._data.optionsContent : null
+            exerciseItem.option = this.$refs.multiple._data.optionsContent.length === this.$refs.multiple._data.options.length ? this.$refs.multiple._data.optionsContent : null
             exerciseItem.type = this.exersicesType
             exerciseItem.difficulty = this.exersicesDiff
             exerciseItem.explain = this.analysisContent
@@ -172,7 +172,7 @@
       typeChange(val) {
         if (this.isEdit) {
           this.$Message.warning('暂不支持更换题型!')
-        } else if (val == 'Compose') {
+        } else if (val === 'Compose') {
           this.$router.push({
             name: 'createCompose'
           })

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 645 - 641
TEAMModelOS/ClientApp/src/view/evaluation/index/ExercisesList.vue


+ 465 - 464
TEAMModelOS/ClientApp/src/view/evaluation/index/TestPaper.vue

@@ -1,494 +1,495 @@
 <template>
-  <div class="paper-container">
-    <div class="ev-header">
-      <Icon type="md-paper" size="30" color="rgb(16, 171, 231)" />
-      <span class="ev-title" @click="backToAdd">测试组卷</span>
-      <span class="ev-length">共 {{paperInfo.ItemId.length}} 道题</span>
-    </div>
-    <!-- 试卷编辑工具栏 -->
-    <div class="paper-toolbar filter-wrap">
-
-      <div class="filter-item">
-        <span class="filter-title">测试用途:</span>
-        <RadioGroup v-model="testAttr.testType" type="button" @on-change="filterTypeChange">
-          <Radio label="0">正式考试</Radio>
-          <Radio label="1">普通测试</Radio>
-          <Radio label="2">统计</Radio>
-        </RadioGroup>
-      </div>
-      <div class="filter-item">
-        <span class="filter-title">测试情景:</span>
-        <RadioGroup v-model="testAttr.testScene" type="button" @on-change="filterSceneChange">
-          <Radio label="0">模拟</Radio>
-          <Radio label="1">段考</Radio>
-          <Radio label="2">周考</Radio>
-          <Radio label="3">小考</Radio>
-          <Radio label="4">自定义</Radio>
-        </RadioGroup>
-      </div>
-      <!--<div class="filter-item">
-        <span class="filter-title">测试对象:</span>
-        <RadioGroup v-model="testAttr.testTarget" type="button" @on-change="filterTargetChange">
-          <Radio label="0">同年级</Radio>
-          <Radio label="1">跨年级</Radio>
-          <Radio label="2">跨学校</Radio>
-        </RadioGroup>
-      </div>-->
-      <!--<div class="filter-item">
-        <span class="filter-title">创建方式:</span>
-        <RadioGroup v-model="testAttr.createType" type="button" @on-change="filterCreateChange">
-          <Radio label="0">自动组题</Radio>
-          <Radio label="1">批量导入</Radio>
-          <Radio label="2">题库挑选</Radio>
-        </RadioGroup>
-      </div>-->
-      <div class="paper-tools">
-        <span class="paper-tools-title">选择展示:</span>
-        <Checkbox v-model="isShowAnswer">答案与解析</Checkbox>
-        <Checkbox v-model="isShowConcept">关联知识点</Checkbox>
-        <Checkbox v-model="isShowTitle">评测标题</Checkbox>
-        <Checkbox v-model="isShowInfo">评测信息</Checkbox>
-        <Checkbox v-model="isShowPart">题块</Checkbox>
-      </div>
-    </div>
-
-    <!-- 试卷内容 -->
-    <div class="paper-content">
-      <!--<div class="paper-line">
-        <div id="pui_seal" title="点击设置&quot;装订线&quot;" style="display: block;">
-          <img alt="装订线" title="装订线" src="http://zujuan.xkw.com/resource/image/v2/peal_line.png" width="58" height="">
+    <div class="paper-container">
+        <div class="ev-header">
+            <Icon type="md-paper" size="30" color="rgb(16, 171, 231)" />
+            <span class="ev-title" @click="backToAdd">测试组卷</span>
+            <span class="ev-length">共 {{paperInfo.ItemId.length}} 道题</span>
         </div>
-      </div>-->
-      <div class="paper-body">
-        <!-- 试卷头部信息 -->
-        <div class="paper-header flex-col-center">
-          <Tooltip content="点击可编辑修改主标题" placement="right">
-            <p class="paper-title" v-show="isShowTitle" contenteditable="true" @blur="titleChange($event)">{{paperInfo.title}}</p>
-          </Tooltip>
-          <Tooltip content="点击可编辑修改副标题" placement="right">
-            <p class="paper-subTitle" v-show="isShowInfo" contenteditable="true" @blur="subTitleChange($event)">{{paperInfo.subTitle}}</p>
-          </Tooltip>
-            <p class="paper-info" v-show="isShowInfo">考试时间:<span contenteditable="true" @blur="timeChange($event)">{{paperInfo.time}}</span> 出卷人:{{paperInfo.builder}}</p>
+        <!-- 试卷编辑工具栏 -->
+        <div class="paper-toolbar filter-wrap">
+
+            <div class="filter-item">
+                <span class="filter-title">测试用途:</span>
+                <RadioGroup v-model="testAttr.testType" type="button" @on-change="filterTypeChange">
+                    <Radio label="0">正式考试</Radio>
+                    <Radio label="1">普通测试</Radio>
+                    <Radio label="2">统计</Radio>
+                </RadioGroup>
+            </div>
+            <div class="filter-item">
+                <span class="filter-title">测试情景:</span>
+                <RadioGroup v-model="testAttr.testScene" type="button" @on-change="filterSceneChange">
+                    <Radio label="0">模拟</Radio>
+                    <Radio label="1">段考</Radio>
+                    <Radio label="2">周考</Radio>
+                    <Radio label="3">小考</Radio>
+                    <Radio label="4">自定义</Radio>
+                </RadioGroup>
+            </div>
+            <!--<div class="filter-item">
+              <span class="filter-title">测试对象:</span>
+              <RadioGroup v-model="testAttr.testTarget" type="button" @on-change="filterTargetChange">
+                <Radio label="0">同年级</Radio>
+                <Radio label="1">跨年级</Radio>
+                <Radio label="2">跨学校</Radio>
+              </RadioGroup>
+            </div>-->
+            <!--<div class="filter-item">
+              <span class="filter-title">创建方式:</span>
+              <RadioGroup v-model="testAttr.createType" type="button" @on-change="filterCreateChange">
+                <Radio label="0">自动组题</Radio>
+                <Radio label="1">批量导入</Radio>
+                <Radio label="2">题库挑选</Radio>
+              </RadioGroup>
+            </div>-->
+            <div class="paper-tools">
+                <span class="paper-tools-title">选择展示:</span>
+                <Checkbox v-model="isShowAnswer">答案与解析</Checkbox>
+                <Checkbox v-model="isShowConcept">关联知识点</Checkbox>
+                <Checkbox v-model="isShowTitle">评测标题</Checkbox>
+                <Checkbox v-model="isShowInfo">评测信息</Checkbox>
+                <Checkbox v-model="isShowPart">题块</Checkbox>
+            </div>
         </div>
-        <!-- 题目类型及列表 -->
-        <div class="paper-part" v-for="(item,order) in paperInfo.parts">
-          <div class="paper-content-section" v-show="isShowPart">{{numberConvertToUppercase(order)+'、'+item.name}}<span>(共6题,每题5分,共30分)</span></div>
-          <div v-if="list.length == 0">暂无数据</div>
-          <div class="content-wrap" v-else>
-            <div class="exercise-item" v-for="(question,index) of item.questions" @mouseenter="exerciseMouseover($event)" @mouseleave="exerciseMouseleave($event)">
-              <div class="item-tools">
-                <div class="item-tools-t flex-row-center"><Icon type="ios-list-box-outline" />试题挑错</div>
-                <div class="item-tools-t flex-row-center" @click="handleBindPoint([])"><Icon type="ios-list-box-outline" />绑定知识点</div>
-                <div class="item-tools-t flex-row-center" @click="handleToolEdit(question)"><Icon type="ios-brush-outline" />编辑</div>
-                <div class="item-tools-t flex-row-center"><Icon type="ios-archive-outline" />删除</div>
-                <div class="item-tools-t flex-row-center" v-show="index != 0" @click="handleMoveUp(item.questions,index)"><Icon type="md-arrow-up" />上移</div>
-                <div class="item-tools-t flex-row-center" v-show="index != (item.questions.length - 1)" @click="handleMoveDown(item.questions,index)"><Icon type="md-arrow-down" />下移</div>
-              </div>
-              <div class="item-question">
-                <p>{{index+1}} : <span v-html="question.question"></span></p>
-              </div>
-              <div v-for="(option,optionIndex) in question.option">
-                <p>{{String.fromCharCode(64 + parseInt(optionIndex+1))}} : <span v-html="option.value"></span></p>
-              </div>
 
-              <!-- 如果是组合题 -->
-              <div v-for="(childQuestion,childIndex) in question.children" v-if="question.children.length">
-                <div class="item-question">
-                  <p>{{childIndex+1}} : <span v-html="childQuestion.question"></span></p>
-                </div>
-                <div v-for="(childOption,childOptionIndex) in childQuestion.option">
-                  <p>{{String.fromCharCode(64 + parseInt(childOptionIndex+1))}} : <span v-html="childOption.value"></span></p>
-                </div>
-                <div class="item-answer" v-show="isShowAnswer">
-                  <span style="color:#01b4ef">【知识点】:</span>
-                </div>
-                <div class="item-answer" v-show="isShowAnswer">
-                  <span style="color:#01b4ef">【答案】:</span>
-                  <span v-html="childQuestion.answer[0] || childQuestion.answer" v-if="childQuestion.type == 'Subjective'"></span>
-                  <span :class="[ childQuestion.type == 'Complete' ? 'item-answer-item':'']" v-for="answer in childQuestion.answer" v-else-if="childQuestion.type == 'Complete'" v-html="answer"></span>
-                  <span :class="[ childQuestion.type == 'Complete' ? 'item-answer-item':'']" v-for="answer in childQuestion.answer" v-else>{{answer}}</span>
+        <!-- 试卷内容 -->
+        <div class="paper-content">
+            <!--<div class="paper-line">
+              <div id="pui_seal" title="点击设置&quot;装订线&quot;" style="display: block;">
+                <img alt="装订线" title="装订线" src="http://zujuan.xkw.com/resource/image/v2/peal_line.png" width="58" height="">
+              </div>
+            </div>-->
+            <div class="paper-body">
+                <!-- 试卷头部信息 -->
+                <div class="paper-header flex-col-center">
+                    <Tooltip content="点击可编辑修改主标题" placement="right">
+                        <p class="paper-title" v-show="isShowTitle" contenteditable="true" @blur="titleChange($event)">{{paperInfo.title}}</p>
+                    </Tooltip>
+                    <Tooltip content="点击可编辑修改副标题" placement="right">
+                        <p class="paper-subTitle" v-show="isShowInfo" contenteditable="true" @blur="subTitleChange($event)">{{paperInfo.subTitle}}</p>
+                    </Tooltip>
+                    <p class="paper-info" v-show="isShowInfo">考试时间:<span contenteditable="true" @blur="timeChange($event)">{{paperInfo.time}}</span> 出卷人:{{paperInfo.builder}}</p>
                 </div>
-                <div class="item-explain" v-show="isShowAnswer">
-                  <span style="color:#01b4ef">【解析】:</span>
-                  <span v-html="childQuestion.explain"></span>
+                <!-- 题目类型及列表 -->
+                <div class="paper-part" v-for="(item,order) in paperInfo.parts" :key="order">
+                    <div class="paper-content-section" v-show="isShowPart">{{numberConvertToUppercase(order)+'、'+item.name}}<span>(共6题,每题5分,共30分)</span></div>
+                    <div v-if="list.length === 0">暂无数据</div>
+                    <div class="content-wrap" v-else>
+                        <div class="exercise-item" v-for="(question,index) of item.questions" :key="index" @mouseenter="exerciseMouseover($event)" @mouseleave="exerciseMouseleave($event)">
+                            <div class="item-tools">
+                                <div class="item-tools-t flex-row-center"><Icon type="ios-list-box-outline" />试题挑错</div>
+                                <div class="item-tools-t flex-row-center" @click="handleBindPoint([])"><Icon type="ios-list-box-outline" />绑定知识点</div>
+                                <div class="item-tools-t flex-row-center" @click="handleToolEdit(question)"><Icon type="ios-brush-outline" />编辑</div>
+                                <div class="item-tools-t flex-row-center"><Icon type="ios-archive-outline" />删除</div>
+                                <div class="item-tools-t flex-row-center" v-show="index != 0" @click="handleMoveUp(item.questions,index)"><Icon type="md-arrow-up" />上移</div>
+                                <div class="item-tools-t flex-row-center" v-show="index != (item.questions.length - 1)" @click="handleMoveDown(item.questions,index)"><Icon type="md-arrow-down" />下移</div>
+                            </div>
+                            <div class="item-question">
+                                <p>{{index+1}} : <span v-html="question.question"></span></p>
+                            </div>
+                            <div v-for="(option,optionIndex) in question.option" :key="optionIndex">
+                                <p>{{String.fromCharCode(64 + parseInt(optionIndex+1))}} : <span v-html="option.value"></span></p>
+                            </div>
+
+                            <!-- 如果是组合题 -->
+                            <div v-for="(childQuestion,childIndex) in question.children" :key="childIndex">
+                                <div v-if="question.children.length">
+                                    <div class="item-question">
+                                        <p>{{childIndex+1}} : <span v-html="childQuestion.question"></span></p>
+                                    </div>
+                                    <div v-for="(childOption,childOptionIndex) in childQuestion.option">
+                                        <p>{{String.fromCharCode(64 + parseInt(childOptionIndex+1))}} : <span v-html="childOption.value"></span></p>
+                                    </div>
+                                    <div class="item-answer" v-show="isShowAnswer">
+                                        <span style="color:#01b4ef">【知识点】:</span>
+                                    </div>
+                                    <div class="item-answer" v-show="isShowAnswer">
+                                        <span style="color:#01b4ef">【答案】:</span>
+                                        <span v-html="childQuestion.answer[0] || childQuestion.answer" v-if="childQuestion.type === 'Subjective'"></span>
+                                        <span :class="[ childQuestion.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,answerIndex) in childQuestion.answer" :key="answerIndex" v-else-if="childQuestion.type == 'Complete'" v-html="answer"></span>
+                                        <span :class="[ childQuestion.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,answerIndex) in childQuestion.answer" :key="answerIndex" v-else>{{answer}}</span>
+                                    </div>
+                                    <div class="item-explain" v-show="isShowAnswer">
+                                        <span style="color:#01b4ef">【解析】:</span>
+                                        <span v-html="childQuestion.explain"></span>
+                                    </div>
+                                </div>
+                            </div>
+
+                            <!-- 答案与解析部分选择是否展示 -->
+                            <div class="item-concept" v-show="isShowConcept">
+                                <span style="color:#01b4ef">【知识点】:</span>
+                            </div>
+                            <div class="item-answer" v-show="isShowAnswer && question.type != 'Compose'">
+                                <span style="color:#01b4ef">【答案】:</span>
+                                <span v-html="question.answer[0] || question.answer" v-if="question.type === 'Subjective'"></span>
+                                <span :class="[ question.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,answerIndex) in question.answer" :key="answerIndex" v-else-if="question.type == 'Complete'" v-html="answer"></span>
+                                <span :class="[ question.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,answerIndex) in question.answer" :key="answerIndex" v-else>{{answer}}</span>
+                            </div>
+                            <div class="item-explain" v-show="isShowAnswer && question.type != 'Compose'">
+                                <span style="color:#01b4ef">【解析】:</span>
+                                <span v-html="question.explain"></span>
+                            </div>
+                        </div>
+                    </div>
                 </div>
-              </div>
-
-              <!-- 答案与解析部分选择是否展示 -->
-              <div class="item-concept" v-show="isShowConcept">
-                <span style="color:#01b4ef">【知识点】:</span>
-              </div>
-              <div class="item-answer" v-show="isShowAnswer && question.type != 'Compose'">
-                <span style="color:#01b4ef">【答案】:</span>
-                <span v-html="question.answer[0] || question.answer" v-if="question.type == 'Subjective'"></span>
-                <span :class="[ question.type == 'Complete' ? 'item-answer-item':'']" v-for="answer in question.answer" v-else-if="question.type == 'Complete'" v-html="answer"></span>
-                <span :class="[ question.type == 'Complete' ? 'item-answer-item':'']" v-for="answer in question.answer" v-else>{{answer}}</span>
-              </div>
-              <div class="item-explain" v-show="isShowAnswer && question.type != 'Compose'">
-                <span style="color:#01b4ef">【解析】:</span>
-                <span v-html="question.explain"></span>
-              </div>
             </div>
-          </div>
         </div>
-      </div>
-    </div>
-    <div class="paper-footer">
-      <Button type="primary">保存试卷</Button>
+        <div class="paper-footer">
+            <Button type="primary">保存试卷</Button>
+        </div>
+        <!-- 绑定知识点弹窗开始 -->
+        <Modal v-model="bindPointModal"
+               title="绑定知识点"
+               width="500"
+               class-name="paperTransferModal"
+               @on-ok="handleTransferBlock">
+            <div class="point-list">
+                <p class="bind-title">选择知识点</p>
+                <Input search placeholder="搜索知识点..." v-model="searchWord" @on-change="filterChange" />
+                <Tabs v-model="tabSelectVal">
+                    <TabPane label="校本知识点" name="school">
+                        <Tree :data="knowPointList" ref="pointTree" :render="renderContent" check-strictly></Tree>
+                    </TabPane>
+                    <TabPane label="标准知识点" name="all">
+                        <Tree :data="allPointList" ref="pointTree" :render="renderContent" check-strictly></Tree>
+                    </TabPane>
+                </Tabs>
+                <Spin fix v-show="pointListLoading"></Spin>
+            </div>
+            <div class="selected-point-list">
+                <p class="bind-title">已选知识点<span style="font-weight:500;font-size:12px"> (最多绑定5个知识点,颜色代表不同来源)</span><span class="btn-clear" @click="handleClearChecked">清空</span></p>
+                <span class="checked-point" :style="{background:item.origin ==='school'?'#10abe7':'#12b9ab'}" v-for="(item,index) in checkedPointList" :key="index">{{item.name}}<Icon type="md-close" color="#fff" style="margin-left:5px;cursor:pointer" @click="deleteCheckedPoint(item)" /></span>
+            </div>
+        </Modal>
+        <!-- 绑定知识点弹窗结束 -->
     </div>
-    <!-- 绑定知识点弹窗开始 -->
-    <Modal v-model="bindPointModal"
-           title="绑定知识点"
-           width="500"
-           class-name="paperTransferModal"
-           @on-ok="handleTransferBlock"
-           @on-cancel="">
-      <div class="point-list">
-        <p class="bind-title">选择知识点</p>
-        <Input search placeholder="搜索知识点..." v-model="searchWord" @on-change="filterChange" />
-        <Tabs v-model="tabSelectVal">
-          <TabPane label="校本知识点" name="school">
-            <Tree :data="knowPointList" ref="pointTree" :render="renderContent" check-strictly></Tree>
-          </TabPane>
-          <TabPane label="标准知识点" name="all">
-            <Tree :data="allPointList" ref="pointTree" :render="renderContent" check-strictly></Tree>
-          </TabPane>
-        </Tabs>
-        <Spin fix v-show="pointListLoading"></Spin>
-      </div>
-      <div class="selected-point-list">
-        <p class="bind-title">已选知识点<span style="font-weight:500;font-size:12px"> (最多绑定5个知识点,颜色代表不同来源)</span><span class="btn-clear" @click="handleClearChecked">清空</span></p>
-        <span class="checked-point" :style="{background:item.origin=='school'?'#10abe7':'#12b9ab'}" v-for="item in checkedPointList">{{item.name}}<Icon type="md-close" color="#fff" style="margin-left:5px;cursor:pointer" @click="deleteCheckedPoint(item)" /></span>
-      </div>
-    </Modal>
-    <!-- 绑定知识点弹窗结束 -->
-  </div>
 </template>
 <script>
 
-  import questions from './list.json'
-  import paper from './paper.json'
-  export default {
-    data() {
-      return {
-        list: [],
-        schoolInfo: {},
-        paperInfo: {},
-        exersicesType: {
-          single: '单选',
-          multiple: '多选',
-          judge: '判断',
-          complete: '填空',
-          subjective: '问答'
+    import questions from './list.json'
+    import paper from './paper.json'
+    export default {
+        data() {
+            return {
+                list: [],
+                schoolInfo: {},
+                paperInfo: {},
+                exersicesType: {
+                    single: '单选',
+                    multiple: '多选',
+                    judge: '判断',
+                    complete: '填空',
+                    subjective: '问答'
+                },
+                testAttr: {
+                    testScene: '0',
+                    testType: '0',
+                    testTarget: '0',
+                    testMode: '0',
+                    createType: '0',
+                    questionFilter: []
+                },
+                exersicesDiff: ['容易', '较易', '一般', '较难', '困难'],
+                diffColors: ['#32CF74', '#E8BE15', '#F19300', '#EB5E00', '#D30000'],
+                filterType: '0',
+                filterDiff: '0',
+                filterSort: '0',
+                pageSize: 5,
+                pageNum: 1,
+                totalNum: 100,
+                allList: questions.result.data,
+                isShowAnswer: false,
+                isShowPart: false,
+                isShowConcept: false,
+                isShowTitle: true,
+                isShowInfo: false,
+                bindPointModal: false,
+                knowPointList: [],
+                schoolPointList: [],
+                allPointList: [],
+                checkedPointList: [],
+                searchWord: '',
+                pointListLoading: true,
+                tabSelectVal: 'school'
+            }
         },
-        testAttr: {
-          testScene: '0',
-          testType: '0',
-          testTarget: '0',
-          testMode: '0',
-          createType: '0',
-          questionFilter: []
+        created() {
+            this.schoolInfo = JSON.parse(localStorage.getItem('c_role_info')).roleClaim[0]
+            this.list = questions.result.data
+            this.paperInfo = paper
+            let flag = this.$route.params.flag
+            if (flag === 1) {
+                console.log(JSON.parse(localStorage.getItem('questions')))
+                this.paperInfo.parts[0].questions = JSON.parse(localStorage.getItem('questions'))
+            }
         },
-        exersicesDiff: ['容易', '较易', '一般', '较难', '困难'],
-        diffColors: ['#32CF74', '#E8BE15', '#F19300', '#EB5E00', '#D30000'],
-        filterType: '0',
-        filterDiff: '0',
-        filterSort: '0',
-        pageSize: 5,
-        pageNum: 1,
-        totalNum: 100,
-        allList: questions.result.data,
-        isShowAnswer: false,
-        isShowPart: false,
-        isShowConcept: false,
-        isShowTitle: true,
-        isShowInfo: false,
-        bindPointModal: false,
-        knowPointList: [],
-        schoolPointList: [],
-        allPointList: [],
-        checkedPointList: [],
-        searchWord: '',
-        pointListLoading: true,
-        tabSelectVal: 'school'
-      }
-    },
-    created() {
-      this.schoolInfo = JSON.parse(localStorage.getItem('c_role_info')).roleClaim[0]
-      this.list = questions.result.data
-      this.paperInfo = paper
-      let flag = this.$route.params.flag
-      if (flag == 1) {
-        console.log(JSON.parse(localStorage.getItem('questions')))
-        this.paperInfo.parts[0].questions = JSON.parse(localStorage.getItem('questions'))
-      }
-    },
-    methods: {
-
-      titleChange(e) {
-        this.paperInfo.title = e.target.innerHTML
-      },
-
-      subTitleChange(e) {
-        this.paperInfo.subTitle = e.target.innerHTML
-      },
-
-      timeChange(e) {
-        this.paperInfo.time = e.target.innerHTML
-      },
-
-      // 返回创建评测页面
-      backToAdd() {
-        this.$router.push({
-          path: '/testPaperList'// 或者路径跳转path: '/addCreditCards',
-        })
-      },
-
-      // 数字与中文转换
-      numberConvertToUppercase(num) {
-        num = Number(num + 1)
-        var upperCaseNumber = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '百', '千', '万', '亿']
-        var length = String(num).length
-        if (length == 1) {
-          return upperCaseNumber[num]
-        } else if (length == 2) {
-          if (num == 10) {
-            return upperCaseNumber[num]
-          } else if (num > 10 && num < 20) {
-            return '十' + upperCaseNumber[String(num).charAt(1)]
-          } else {
-            return upperCaseNumber[String(num).charAt(0)] + '十' + upperCaseNumber[String(num).charAt(1)].replace('零', '')
-          }
-        }
-      },
-
-      // 切换页码
-      pageChange(page) {
-        let start = this.pageSize * (page - 1)
-        let end = this.pageSize * page
-        let list = questions.result.data
-        this.list = list.slice(start, end)
-        window.scroll(0, 0)
-      },
-
-      // 切换分页Size
-      pageSizeChange(val) {
-        this.pageSize = val
-        this.pageChange(1)
-      },
-
-      // 题目鼠标滑过事件
-      exerciseMouseover(e) {
-        e.preventDefault()
-        e.target.children[0].style.display = 'block'
-      },
-
-      // 题目鼠标移出事件
-      exerciseMouseleave(e) {
-        e.preventDefault()
-        e.target.children[0].style.display = 'none'
-      },
-
-      // 测试用途
-      filterTypeChange(val) {
-
-      },
-
-      // 测试情景
-      filterSceneChange(val) {
-
-      },
-
-      // 测试对象
-      filterTargetChange(val) {
-
-      },
-
-      // 创建方式
-      filterCreateChange(val) {
-
-      },
-
-      handleToolEdit(item) {
-        item.options = item.option
-        item.difficulty = item.difficulty || 2
-        this.$router.push({
-          name: item.type == 'Compose' ? 'createCompose' : 'createExercises',
-          params: {
-            item: item
-          }
-        })
-      },
-
-      // 确认编辑知识块
-      handleTransferBlock() {
-
-      },
-
-      // 绑定知识点操作
-      handleBindPoint(concepts) {
-        this.bindPointModal = true
-        // this.checkedPointList = concepts;
-        this.checkedPointList = []
-        this.knowPointList = this.schoolPointList
-        console.log(concepts)
-      },
-
-      // 获取标准知识块数据
-      getStandardList() {
-        let data = {
-          periods: ['Period_21'],
-          pointParams: {
-            SubjectCode: 'Subject_Chinese',
-            PartitionKey: 'zh-CN'
-          }
-        }
-        this.$api.FindKnowledgeBlockAndPointByDict(data).then(res => {
-          let list = res.result.data
-          this.allPointList = list
-        })
-      },
-
-      // 获取学校知识块仓库数据
-      getSchoolPoints() {
-        let data = {
-          pointParams: {
-            SubjectCode: 'Subject_Chinese',
-            PartitionKey: 'zh-CN',
-            SchoolCode: this.schoolInfo.claim[0].claimCode,
-            Status: 1
-          }
-        }
-        this.$api.FindSchoolBlockAndPointByDict(data).then(res => {
-          let list = res.result.data
-          list.forEach(item => {
-            item.expand = !item.expand
-          })
-          this.schoolPointList = list
-          this.pointListLoading = false
-        })
-      },
-
-      // 知识点树形结构渲染
-      renderContent(h, { root, node, data }) {
-        return h(
-          'span',
-          {
-            domProps: {
-              className: 'singleClass'
+        methods: {
+
+            titleChange(e) {
+                this.paperInfo.title = e.target.innerHTML
             },
-            on: {
-              click: () => {
-                this.titleClick(root, node, data, event)
-              }
-            }
-          }, [
-            h('span', [
-              h('Icon', {
-                props: {
-                  type:
-                    data.children && data.children.length > 0
-                      ? 'md-albums'
-                      : 'ios-paper-outline'
-                },
-                style: {
-                  marginRight: '5px'
-                }
-              }),
-              h('span', data.name),
-              h('span', {
-                domProps: {
-                  className: this.checkedPointList.map(item => item.knowledgeId).indexOf(data.knowledgeId || data.rowKey) > -1 ? 'point-checkbox point-checked' : 'point-checkbox point-unchecked'
-                },
-                style: {
-                  display: data.children && data.children.length > 0
-                    ? 'none'
-                    : 'inline-block'
-                },
-                on: {
-                  click: () => {
-                    let conceptData = {}
-                    if (this.checkedPointList.map(item => item.knowledgeId).indexOf(data.knowledgeId || data.rowKey) == -1) {
-                      if (this.checkedPointList.length < 5) {
-                        conceptData.origin = this.tabSelectVal
-                        conceptData.knowledgeId = data.knowledgeId || data.rowKey
-                        conceptData.name = data.name
-                        conceptData.subjectCode = data.subjectCode
-                        this.checkedPointList.push(conceptData)
-                      } else {
-                        this.$Message.warning('最多绑定5个知识点!')
-                      }
+
+            subTitleChange(e) {
+                this.paperInfo.subTitle = e.target.innerHTML
+            },
+
+            timeChange(e) {
+                this.paperInfo.time = e.target.innerHTML
+            },
+
+            // 返回创建评测页面
+            backToAdd() {
+                this.$router.push({
+                    path: '/testPaperList'// 或者路径跳转path: '/addCreditCards',
+                })
+            },
+
+            // 数字与中文转换
+            numberConvertToUppercase(num) {
+                num = Number(num + 1)
+                var upperCaseNumber = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '百', '千', '万', '亿']
+                var length = String(num).length
+                if (length === 1) {
+                    return upperCaseNumber[num]
+                } else if (length === 2) {
+                    if (num === 10) {
+                        return upperCaseNumber[num]
+                    } else if (num > 10 && num < 20) {
+                        return '十' + upperCaseNumber[String(num).charAt(1)]
                     } else {
-                      this.checkedPointList.splice(this.checkedPointList.map(item => item.knowledgeId).indexOf(data.knowledgeId || data.rowKey), 1)
+                        return upperCaseNumber[String(num).charAt(0)] + '十' + upperCaseNumber[String(num).charAt(1)].replace('零', '')
+                    }
+                }
+            },
+
+            // 切换页码
+            pageChange(page) {
+                let start = this.pageSize * (page - 1)
+                let end = this.pageSize * page
+                let list = questions.result.data
+                this.list = list.slice(start, end)
+                window.scroll(0, 0)
+            },
+
+            // 切换分页Size
+            pageSizeChange(val) {
+                this.pageSize = val
+                this.pageChange(1)
+            },
+
+            // 题目鼠标滑过事件
+            exerciseMouseover(e) {
+                e.preventDefault()
+                e.target.children[0].style.display = 'block'
+            },
+
+            // 题目鼠标移出事件
+            exerciseMouseleave(e) {
+                e.preventDefault()
+                e.target.children[0].style.display = 'none'
+            },
+
+            // 测试用途
+            filterTypeChange(val) {
+
+            },
+
+            // 测试情景
+            filterSceneChange(val) {
+
+            },
+
+            // 测试对象
+            filterTargetChange(val) {
+
+            },
+
+            // 创建方式
+            filterCreateChange(val) {
+
+            },
+
+            handleToolEdit(item) {
+                item.options = item.option
+                item.difficulty = item.difficulty || 2
+                this.$router.push({
+                    name: item.type === 'Compose' ? 'createCompose' : 'createExercises',
+                    params: {
+                        item: item
                     }
+                })
+            },
+
+            // 确认编辑知识块
+            handleTransferBlock() {
 
-                    console.log(this.checkedPointList)
-                  }
+            },
+
+            // 绑定知识点操作
+            handleBindPoint(concepts) {
+                this.bindPointModal = true
+                // this.checkedPointList = concepts;
+                this.checkedPointList = []
+                this.knowPointList = this.schoolPointList
+                console.log(concepts)
+            },
+
+            // 获取标准知识块数据
+            getStandardList() {
+                let data = {
+                    periods: ['Period_21'],
+                    pointParams: {
+                        SubjectCode: 'Subject_Chinese',
+                        PartitionKey: 'zh-CN'
+                    }
                 }
-              })
-            ])
-          ]
-        )
-      },
-      // 标题点击收缩展开
-      titleClick(root, node, data, event) {
-        data.expand = !data.expand
-      },
-
-      // 清空已选知识点
-      handleClearChecked() {
-        this.checkedPointList = []
-      },
-
-      // 删除指定知识点
-      deleteCheckedPoint(item) {
-        this.checkedPointList.splice(this.checkedPointList.indexOf(item), 1)
-      },
-
-      // 知识点筛选功能
-      filterChange() {
-        this.knowPointList = !this.searchWord ? this.schoolPointList : this.schoolPointList.filter(item => item.name.toUpperCase().indexOf(this.searchWord.toUpperCase()) > -1)
-      },
-
-      // 子题顺序操作
-      moveItems(arr, index1, index2) {
-        arr[index1] = arr.splice(index2, 1, arr[index1])[0]
-        return arr
-      },
-
-      // 子题上移操作
-      handleMoveUp(arr, index) {
-        this.moveItems(arr, index, index - 1)
-      },
-
-      // 子题下移操作
-      handleMoveDown(arr, index) {
-        this.moveItems(arr, index, index + 1)
-      }
-
-    },
-    mounted() {
-      this.getStandardList()
-      this.getSchoolPoints()
+                this.$api.FindKnowledgeBlockAndPointByDict(data).then(res => {
+                    let list = res.result.data
+                    this.allPointList = list
+                })
+            },
+
+            // 获取学校知识块仓库数据
+            getSchoolPoints() {
+                let data = {
+                    pointParams: {
+                        SubjectCode: 'Subject_Chinese',
+                        PartitionKey: 'zh-CN',
+                        SchoolCode: this.schoolInfo.claim[0].claimCode,
+                        Status: 1
+                    }
+                }
+                this.$api.FindSchoolBlockAndPointByDict(data).then(res => {
+                    let list = res.result.data
+                    list.forEach(item => {
+                        item.expand = !item.expand
+                    })
+                    this.schoolPointList = list
+                    this.pointListLoading = false
+                })
+            },
+
+            // 知识点树形结构渲染
+            renderContent(h, { root, node, data }) {
+                return h(
+                    'span',
+                    {
+                        domProps: {
+                            className: 'singleClass'
+                        },
+                        on: {
+                            click: () => {
+                                this.titleClick(root, node, data, event)
+                            }
+                        }
+                    }, [
+                    h('span', [
+                        h('Icon', {
+                            props: {
+                                type:
+                                    data.children && data.children.length > 0
+                                        ? 'md-albums'
+                                        : 'ios-paper-outline'
+                            },
+                            style: {
+                                marginRight: '5px'
+                            }
+                        }),
+                        h('span', data.name),
+                        h('span', {
+                            domProps: {
+                                className: this.checkedPointList.map(item => item.knowledgeId).indexOf(data.knowledgeId || data.rowKey) > -1 ? 'point-checkbox point-checked' : 'point-checkbox point-unchecked'
+                            },
+                            style: {
+                                display: data.children && data.children.length > 0
+                                    ? 'none'
+                                    : 'inline-block'
+                            },
+                            on: {
+                                click: () => {
+                                    let conceptData = {}
+                                    if (this.checkedPointList.map(item => item.knowledgeId).indexOf(data.knowledgeId || data.rowKey) === -1) {
+                                        if (this.checkedPointList.length < 5) {
+                                            conceptData.origin = this.tabSelectVal
+                                            conceptData.knowledgeId = data.knowledgeId || data.rowKey
+                                            conceptData.name = data.name
+                                            conceptData.subjectCode = data.subjectCode
+                                            this.checkedPointList.push(conceptData)
+                                        } else {
+                                            this.$Message.warning('最多绑定5个知识点!')
+                                        }
+                                    } else {
+                                        this.checkedPointList.splice(this.checkedPointList.map(item => item.knowledgeId).indexOf(data.knowledgeId || data.rowKey), 1)
+                                    }
+
+                                    console.log(this.checkedPointList)
+                                }
+                            }
+                        })
+                    ])
+                ]
+                )
+            },
+            // 标题点击收缩展开
+            titleClick(root, node, data, event) {
+                data.expand = !data.expand
+            },
+
+            // 清空已选知识点
+            handleClearChecked() {
+                this.checkedPointList = []
+            },
+
+            // 删除指定知识点
+            deleteCheckedPoint(item) {
+                this.checkedPointList.splice(this.checkedPointList.indexOf(item), 1)
+            },
+
+            // 知识点筛选功能
+            filterChange() {
+                this.knowPointList = !this.searchWord ? this.schoolPointList : this.schoolPointList.filter(item => item.name.toUpperCase().indexOf(this.searchWord.toUpperCase()) > -1)
+            },
+
+            // 子题顺序操作
+            moveItems(arr, index1, index2) {
+                arr[index1] = arr.splice(index2, 1, arr[index1])[0]
+                return arr
+            },
+
+            // 子题上移操作
+            handleMoveUp(arr, index) {
+                this.moveItems(arr, index, index - 1)
+            },
+
+            // 子题下移操作
+            handleMoveDown(arr, index) {
+                this.moveItems(arr, index, index + 1)
+            }
+
+        },
+        mounted() {
+            this.getStandardList()
+            this.getSchoolPoints()
+        }
     }
-  }
 </script>
 <!--<style src="../index/TestPaper.css" scoped></style>-->
 <style src="../index/ExercisesList.css" scoped></style>
 
 <style src="../index/TestPaper.css" scoped>
-  /*@import "../index/TestPaper.css";*/
+    /*@import "../index/TestPaper.css";*/
 </style>
 <style>
 
-  .content-wrap .exercise-item p {
-    margin: 10px 0;
-    display: inherit;
-    word-break: break-all;
-  }
+    .content-wrap .exercise-item p {
+        margin: 10px 0;
+        display: inherit;
+        word-break: break-all;
+    }
 
-  .complete-line {
-    padding: 0 45px;
-    border-bottom: 2px solid rgb(128, 128, 128);
-  }
+    .complete-line {
+        padding: 0 45px;
+        border-bottom: 2px solid rgb(128, 128, 128);
+    }
 </style>

+ 20 - 27
TEAMModelOS/ClientApp/src/view/evaluation/index/TestPaperList.vue

@@ -50,9 +50,9 @@
       </div>
     </div>
     <!-- 题目列表部分 -->
-    <div v-if="list.length == 0">暂无数据</div>
+    <div v-if="list.length === 0">暂无数据</div>
     <div class="content-wrap" v-else>
-      <div class="exercise-item" v-for="(item,index) of list">
+      <div class="exercise-item" v-for="(item,index) of list" :key="index">
         <img class="icon-paper" src="../../../assets/icon/icon_paper.png" />
         <div class="paper-content">
           <p class="paper-title" v-html="item.type"></p>
@@ -80,13 +80,11 @@
   </div>
 </template>
 <script>
-  import IconText from '@/components/evaluation/IconText.vue'
   import questions from './list.json'
   import { setTimeout } from 'core-js'
   import CreateLink from '@/common/CreateLink.vue'
   export default {
     components: {
-      IconText,
       CreateLink
     },
     data() {
@@ -136,19 +134,19 @@
 
       // 筛选题型
       filterTypeChange(val) {
-        if (val == 'all') {
+        if (val === 'all') {
           this.list = questions.result.data
         } else {
-          this.list = questions.result.data.filter(item => item.type == val)
+          this.list = questions.result.data.filter(item => item.type === val)
         }
       },
 
       // 筛选难度
       filterDiffChange(val) {
-         if (val == 'all') {
+         if (val === 'all') {
           this.list = questions.result.data
          } else {
-           this.list = questions.result.data.filter(item => item.difficulty == val)
+           this.list = questions.result.data.filter(item => item.difficulty === val)
         }
       },
 
@@ -162,12 +160,12 @@
         let el = e.currentTarget
         let isShow = e.currentTarget.nextElementSibling.style.display || 'none'
         setTimeout(function() {
-          if (type == 'explain') {
-            el.nextElementSibling.style.display = isShow == 'none' ? 'block' : 'none'
-            el.innerHTML = isShow == 'none' ? '解析:点击收起解析详情' : '解析:点击展开解析详情'
+          if (type === 'explain') {
+            el.nextElementSibling.style.display = isShow === 'none' ? 'block' : 'none'
+            el.innerHTML = isShow === 'none' ? '解析:点击收起解析详情' : '解析:点击展开解析详情'
           } else {
-            el.nextElementSibling.style.display = isShow == 'none' ? 'block' : 'none'
-            el.innerHTML = isShow == 'none' ? '答案:点击收起答案详情' : '答案:点击展开答案详情'
+            el.nextElementSibling.style.display = isShow === 'none' ? 'block' : 'none'
+            el.innerHTML = isShow === 'none' ? '答案:点击收起答案详情' : '答案:点击展开答案详情'
           }
         }, 100)
       },
@@ -218,13 +216,13 @@
 
       // 获取标准知识块数据
       getStandardList() {
-        let data = {
-          periods: ['Period_21'],
-          pointParams: {
-              SubjectCode: 'Subject_Chinese',
-              PartitionKey: 'zh-CN'
-            }
-        }
+        // let data = {
+        //  periods: ['Period_21'],
+        //  pointParams: {
+        //      SubjectCode: 'Subject_Chinese',
+        //      PartitionKey: 'zh-CN'
+        //    }
+        // }
         // this.$api.FindKnowledgeBlockAndPointByDict(data).then(res => {
 
         // })
@@ -267,7 +265,7 @@
 
       // 知识点绑定选中事件
       pointTreeCheck(val, data) {
-        let points = val.filter(item => item.children.length == 0)
+        let points = val.filter(item => item.children.length === 0)
         if (points.length > 5) {
           this.checkedPointList = points.slice(0, 5)
           this.$Message.warning('最多绑定5个知识点!')
@@ -315,7 +313,7 @@
                 },
                 on: {
                   click: () => {
-                    if (this.checkedPointList.indexOf(data) == -1) {
+                    if (this.checkedPointList.indexOf(data) === -1) {
                       if (this.checkedPointList.length < 5) {
                         this.checkedPointList.push(data)
                       } else {
@@ -351,11 +349,6 @@
         this.knowPointList = !this.searchWord ? this.schoolPointList : this.schoolPointList.filter(item => item.name.toUpperCase().indexOf(this.searchWord.toUpperCase()) > -1)
       },
 
-      // 测试用途
-      filterTypeChange(val) {
-
-      },
-
       // 测试情景
       filterSceneChange(val) {
 

+ 0 - 1
TEAMModelOS/ClientApp/src/view/evaluation/index/index.vue

@@ -50,7 +50,6 @@
   import Header from '@/common/headers.vue'
   import SyllabusTree from '@/components/evaluation/SyllabusTree.vue'
   import Loading from '@/common/Loading.vue'
-import { setTimeout } from 'core-js'
 
   export default {
     components: {

+ 195 - 195
TEAMModelOS/ClientApp/src/view/evaluation/types/BaseCompletion.vue

@@ -1,216 +1,216 @@
 <template>
-  <div>
-    <div class="exersices-content">
-      <span class="add-underline"><Button type="primary" @click="addOption()">添加填空横线</Button></span>
-      <IconText :text="'题目'" :color="'#2d8cf0'" :icon="'ios-create'" style="margin-bottom:15px;"></IconText>
-      <div>
-        <div ref="completionEditor" style="text-align:left"></div>
-      </div>
+    <div>
+        <div class="exersices-content">
+            <span class="add-underline"><Button type="primary" @click="addOption()">添加填空横线</Button></span>
+            <IconText :text="'题目'" :color="'#2d8cf0'" :icon="'ios-create'" style="margin-bottom:15px;"></IconText>
+            <div>
+                <div ref="completionEditor" style="text-align:left"></div>
+            </div>
+        </div>
+        <div class="exersices-option">
+            <IconText :text="'填空选项'" :color="'#FF871C'" :icon="'md-reorder'"></IconText>
+            <div v-for="(item,index) in optionsIndexArr" :key="index" :class="['editor-wrap-'+item,'editor-wrap']" style="margin-top:10px;display:flex">
+                <span class="fl-center option-order">{{'空0'+(index+1)}}</span>
+                <div :ref="'editor'+index" style="text-align:left" class="option-editor" @click="optionClick(index)"></div>
+                <span :class="['fl-center', 'option-setting']" style="display:none;background:transparent;cursor:auto"></span>
+                <span class="fl-center option-delete" @click="deleteOption(index)"><Icon type="ios-close-circle" /></span>
+            </div>
+            <!--<p class="option-add"><span @click="addOption()">+ 添加选项 </span></p>-->
+        </div>
     </div>
-    <div class="exersices-option">
-      <IconText :text="'填空选项'" :color="'#FF871C'" :icon="'md-reorder'"></IconText>
-      <div v-for="(item,index) in optionsIndexArr" :class="['editor-wrap-'+item,'editor-wrap']" style="margin-top:10px;display:flex">
-        <span class="fl-center option-order">{{'空0'+(index+1)}}</span>
-        <div :ref="'editor'+index" style="text-align:left" class="option-editor" @click="optionClick(index)"></div>
-        <span :class="['fl-center', 'option-setting']" style="display:none;background:transparent;cursor:auto"></span>
-        <span class="fl-center option-delete" @click="deleteOption(index)"><Icon type="ios-close-circle" /></span>
-      </div>
-      <!--<p class="option-add"><span @click="addOption()">+ 添加选项 </span></p>-->
-    </div>
-  </div>
 </template>
 <script>
-  import E from 'wangeditor'
-  import IconText from '@/components/evaluation/IconText.vue'
-  export default {
-    components: {
-      IconText
-    },
-    props: ['editInfo'],
-    data() {
-      return {
-        completionEditor: '',
-        options: [...new Array(0).keys()],
-        optionsContent: [],
-        initFlag: true,
-        trueIndex: 0,
-        stemContent: '',
-        stemEditor: null,
-        answerContent: [],
-        linesIndexArr: [],
-        optionsIndexArr: [],
-        defaultConfig: {
-          uploadImgServer: '/api/file/uploadWangEditor', // 图片上传地址
-          showLinkImg: false, // 是否展示网络图片链接上传
-          uploadFileName: 'files' // 上传图片后台获取的文件名
-        }
-      }
-    },
-    created() {
-      // 编辑状态下回显
-      if (Object.keys(this.editInfo).length) {
-        let that = this
-        this.optionsIndexArr = this.editInfo.answer
-        this.optionsIndexArr.forEach((item, index) => {
-          this.optionsContent.push({ code: index, value: item }) // 填空答案回显
-          this.$nextTick(() => {
-              let editor = new E(that.$refs['editor' + index][0])
-              editor.customConfig = this.defaultConfig
-                // 每个填空选项 数据变化
-              editor.customConfig.onchange = (html) => {
-                let codeArr = this.optionsContent.map(item => item.code)
-                // 如果已经编辑过则 修改选项内容
-                if (codeArr.indexOf(index) != -1) {
-                  this.optionsContent[codeArr.indexOf(index)].value = html
-                } else { // 否则创建新选项
-                  let option = {
-                    code: index,
-                    value: html
-                  }
-                  this.optionsContent.push(option)
+    import E from 'wangeditor'
+    import IconText from '@/components/evaluation/IconText.vue'
+    export default {
+        components: {
+            IconText
+        },
+        props: ['editInfo'],
+        data() {
+            return {
+                completionEditor: '',
+                options: [...new Array(0).keys()],
+                optionsContent: [],
+                initFlag: true,
+                trueIndex: 0,
+                stemContent: '',
+                stemEditor: null,
+                answerContent: [],
+                linesIndexArr: [],
+                optionsIndexArr: [],
+                defaultConfig: {
+                    uploadImgServer: '/api/file/uploadWangEditor', // 图片上传地址
+                    showLinkImg: false, // 是否展示网络图片链接上传
+                    uploadFileName: 'files' // 上传图片后台获取的文件名
                 }
-              },
-              editor.customConfig.onblur = function() {
+            }
+        },
+        created() {
+            // 编辑状态下回显
+            if (Object.keys(this.editInfo).length) {
+                let that = this
+                this.optionsIndexArr = this.editInfo.answer
+                this.optionsIndexArr.forEach((item, index) => {
+                    this.optionsContent.push({ code: index, value: item }) // 填空答案回显
+                    this.$nextTick(() => {
+                        let editor = new E(that.$refs['editor' + index][0])
+                        editor.customConfig = this.defaultConfig
+                        // 每个填空选项 数据变化
+                        editor.customConfig.onchange = (html) => {
+                            let codeArr = this.optionsContent.map(item => item.code)
+                            // 如果已经编辑过则 修改选项内容
+                            if (codeArr.indexOf(index) !== -1) {
+                                this.optionsContent[codeArr.indexOf(index)].value = html
+                            } else { // 否则创建新选项
+                                let option = {
+                                    code: index,
+                                    value: html
+                                }
+                                this.optionsContent.push(option)
+                            }
+                        },
+                            editor.customConfig.onblur = function() {
+                                let allToolbars = document.getElementsByClassName('option-editor')
+                                for (let j = 0; j < allToolbars.length; j++) {
+                                    if (allToolbars[j].children.length) {
+                                        allToolbars[j].children[0].style.visibility = 'hidden'
+                                    }
+                                }
+                            },
+                            editor.create()
+                        editor.txt.html(item) // 填空答案回显内容
+                    })
+                })
+            }
+        },
+        methods: {
+            // 设置正确答案
+            settingAnswer(index) {
+                this.trueIndex = index
+            },
+            // 下划线点击事件
+            lineClick(e) {
+                console.log(e)
+            },
+            // 删除选项
+            deleteOption(index) {
+                // if (this.options.length > 2) {
+                //  this.options.splice(index, 1);
+                //  this.linesNum -= 1;
+                // } else {
+                //  this.$Message.warning("至少保留两个选项!");
+                // }
+                this.$Message.warning('请在题目编辑框内删除对应横线即可')
+            },
+            // 选项输入框点击事件
+            optionClick(index) {
                 let allToolbars = document.getElementsByClassName('option-editor')
-                for (let j = 0; j < allToolbars.length; j++) {
-                  if (allToolbars[j].children.length) {
-                    allToolbars[j].children[0].style.visibility = 'hidden'
-                  }
+                let that = this
+                for (let i = 0; i < allToolbars.length; i++) {
+                    allToolbars[i].children[0].style.visibility = 'hidden'
                 }
-              },
-              editor.create()
-              editor.txt.html(item) // 填空答案回显内容
-          })
-        })
-      }
-    },
-    methods: {
-      // 设置正确答案
-      settingAnswer(index) {
-        this.trueIndex = index
-      },
-      // 下划线点击事件
-      lineClick(e) {
-        console.log(e)
-      },
-      // 删除选项
-      deleteOption(index) {
-        // if (this.options.length > 2) {
-        //  this.options.splice(index, 1);
-        //  this.linesNum -= 1;
-        // } else {
-        //  this.$Message.warning("至少保留两个选项!");
-        // }
-        this.$Message.warning('请在题目编辑框内删除对应横线即可')
-      },
-      // 选项输入框点击事件
-      optionClick(index) {
-        let allToolbars = document.getElementsByClassName('option-editor')
-        let that = this
-        for (let i = 0; i < allToolbars.length; i++) {
-          allToolbars[i].children[0].style.visibility = 'hidden'
-        }
-        setTimeout(function() {
-          let currentToolBar = that.$refs['editor' + index][0].children[0]
-          currentToolBar.style.visibility = 'visible'
-        }, 100)
-      },
+                setTimeout(function() {
+                    let currentToolBar = that.$refs['editor' + index][0].children[0]
+                    currentToolBar.style.visibility = 'visible'
+                }, 100)
+            },
 
-      // 添加选项
-      addOption() {
-        let that = this
-        let newIndex = this.linesIndexArr.length ? parseInt(this.linesIndexArr[this.linesIndexArr.length - 1]) + 1 : 0 // 不能重复
-        let newLineIndex = this.linesIndexArr.length // 长度即标记
+            // 添加选项
+            addOption() {
+                let that = this
+                let newIndex = this.linesIndexArr.length ? parseInt(this.linesIndexArr[this.linesIndexArr.length - 1]) + 1 : 0 // 不能重复
+                let newLineIndex = this.linesIndexArr.length // 长度即标记
 
-        // 插入下划线
-        let addHtml = "&nbsp;<span class='complete-line' data-index=" + newIndex + ' data-answer=' + newIndex + " contenteditable='false'>&#93" + (newLineIndex + 12) + '</span>&nbsp;'
-        this.completionEditor.cmd.do('insertHTML', addHtml)
-        this.stemContent = this.stemContent + addHtml
-        this.linesIndexArr.push(newIndex) // 题干中下划线集合
-        this.optionsIndexArr.push(newIndex) // 选项集合
-          this.$nextTick(() => {
-            let editor = new E(that.$refs['editor' + newIndex][0])
-            editor.customConfig = this.defaultConfig
-              // 每个填空选项 数据变化
-            editor.customConfig.onchange = (html) => {
-              let codeArr = this.optionsContent.map(item => item.code)
-              // 如果已经编辑过则 修改选项内容
-              if (codeArr.indexOf(newIndex) != -1) {
-                this.optionsContent[codeArr.indexOf(newIndex)].value = html
-              } else { // 否则创建新选项
-                let option = {
-                  code: newIndex,
-                  value: html
-                }
-                this.optionsContent.push(option)
-              }
-              console.log(this.optionsContent)
-            },
-            editor.customConfig.onblur = function() {
-              let allToolbars = document.getElementsByClassName('option-editor')
-              for (let j = 0; j < allToolbars.length; j++) {
-                if (allToolbars[j].children.length) {
-                  allToolbars[j].children[0].style.visibility = 'hidden'
-                }
-              }
-            },
+                // 插入下划线
+                let addHtml = "&nbsp;<span class='complete-line' data-index=" + newIndex + ' data-answer=' + newIndex + " contenteditable='false'>&#93" + (newLineIndex + 12) + '</span>&nbsp;'
+                this.completionEditor.cmd.do('insertHTML', addHtml)
+                this.stemContent = this.stemContent + addHtml
+                this.linesIndexArr.push(newIndex) // 题干中下划线集合
+                this.optionsIndexArr.push(newIndex) // 选项集合
+                this.$nextTick(() => {
+                    let editor = new E(that.$refs['editor' + newIndex][0])
+                    editor.customConfig = this.defaultConfig
+                    // 每个填空选项 数据变化
+                    editor.customConfig.onchange = (html) => {
+                        let codeArr = this.optionsContent.map(item => item.code)
+                        // 如果已经编辑过则 修改选项内容
+                        if (codeArr.indexOf(newIndex) !== -1) {
+                            this.optionsContent[codeArr.indexOf(newIndex)].value = html
+                        } else { // 否则创建新选项
+                            let option = {
+                                code: newIndex,
+                                value: html
+                            }
+                            this.optionsContent.push(option)
+                        }
+                        console.log(this.optionsContent)
+                    },
+                        editor.customConfig.onblur = function() {
+                            let allToolbars = document.getElementsByClassName('option-editor')
+                            for (let j = 0; j < allToolbars.length; j++) {
+                                if (allToolbars[j].children.length) {
+                                    allToolbars[j].children[0].style.visibility = 'hidden'
+                                }
+                            }
+                        },
 
-            editor.create()
-          })
-      }
+                        editor.create()
+                })
+            }
 
-    },
+        },
 
-    mounted() {
-      let completionEditor = new E(this.$refs.completionEditor)
-      this.completionEditor = completionEditor
-      completionEditor.customConfig = this.defaultConfig
+        mounted() {
+            let completionEditor = new E(this.$refs.completionEditor)
+            this.completionEditor = completionEditor
+            completionEditor.customConfig = this.defaultConfig
 
-      // 当填空题型 题干部分插入下划线以及删除下划线监听
-      completionEditor.customConfig.onchange = (html) => {
-        this.stemContent = html
+            // 当填空题型 题干部分插入下划线以及删除下划线监听
+            completionEditor.customConfig.onchange = (html) => {
+                this.stemContent = html
 
-        // 获取修改后的下划线列表与之前的内容进行对比
-        let linesArr = Array.prototype.slice.call(document.getElementsByClassName('complete-line'))
-        let dataSetArr = linesArr.map((item, index) => index)
-        this.linesIndexArr = JSON.parse(JSON.stringify(this.linesIndexArr))
+                // 获取修改后的下划线列表与之前的内容进行对比
+                let linesArr = Array.prototype.slice.call(document.getElementsByClassName('complete-line'))
+                let dataSetArr = linesArr.map((item, index) => index)
+                this.linesIndexArr = JSON.parse(JSON.stringify(this.linesIndexArr))
 
-        // 如果是删除了下划线则删除对应选项输入框
-        if (this.linesIndexArr.length > dataSetArr.length) {
-          Array.prototype.diff = function(a) {
-              return this.filter(function(i) { return a.indexOf(i) < 0 })
-          }
-          let deleteIndexArr = this.linesIndexArr.diff(dataSetArr) // 获取要删除的选项下标
-          let optionsArr = Array.prototype.slice.call(document.getElementsByClassName('editor-wrap')) // 获取到所有的选项DOM
+                // 如果是删除了下划线则删除对应选项输入框
+                if (this.linesIndexArr.length > dataSetArr.length) {
+                    Array.prototype.diff = function(a) {
+                        return this.filter(function(i) { return a.indexOf(i) < 0 })
+                    }
+                    let deleteIndexArr = this.linesIndexArr.diff(dataSetArr) // 获取要删除的选项下标
+                    let optionsArr = Array.prototype.slice.call(document.getElementsByClassName('editor-wrap')) // 获取到所有的选项DOM
 
-          // 对指定选项进行删除操作
-          this.$nextTick(() => {
-            deleteIndexArr.forEach(item => {
-              let deleteDom = document.getElementsByClassName('editor-wrap')[item - 1]
-              this.optionsIndexArr.splice(this.optionsIndexArr.indexOf(deleteDom), 1)
-              this.optionsContent.splice(item, 1)
-              optionsArr.splice(item, 1)
-            })
-          })
-        }
-        this.linesIndexArr = [...dataSetArr]
-        // 重新渲染下划线的下标
-        linesArr.forEach((item, index) => {
-          let numCircle = '&#93' + (parseInt(index) + 12) + ''
-          item.innerHTML = numCircle
-          item.setAttribute('data-index', index)
-        })
-      },
-        completionEditor.create()
+                    // 对指定选项进行删除操作
+                    this.$nextTick(() => {
+                        deleteIndexArr.forEach(item => {
+                            let deleteDom = document.getElementsByClassName('editor-wrap')[item - 1]
+                            this.optionsIndexArr.splice(this.optionsIndexArr.indexOf(deleteDom), 1)
+                            this.optionsContent.splice(item, 1)
+                            optionsArr.splice(item, 1)
+                        })
+                    })
+                }
+                this.linesIndexArr = [...dataSetArr]
+                // 重新渲染下划线的下标
+                linesArr.forEach((item, index) => {
+                    let numCircle = '&#93' + (parseInt(index) + 12) + ''
+                    item.innerHTML = numCircle
+                    item.setAttribute('data-index', index)
+                })
+            },
+                completionEditor.create()
 
-        this.stemEditor = completionEditor
+            this.stemEditor = completionEditor
 
-         // 判断是否为编辑状态
-        if (Object.keys(this.editInfo).length > 0) {
-          this.stemEditor.txt.html(this.editInfo.question)
-          this.stemContent = this.editInfo.question
+            // 判断是否为编辑状态
+            if (Object.keys(this.editInfo).length > 0) {
+                this.stemEditor.txt.html(this.editInfo.question)
+                this.stemContent = this.editInfo.question
+            }
         }
-    }
 
-  }
+    }
 </script>

+ 1 - 1
TEAMModelOS/ClientApp/src/view/evaluation/types/BaseJudge.vue

@@ -51,7 +51,7 @@
       if (Object.keys(this.editInfo).length > 0) {
         this.stemEditor.txt.html(this.editInfo.question)
         this.stemContent = this.editInfo.question
-        this.trueAnswer = this.editInfo.answer[0] == 'A' ? '正确' : '错误'
+        this.trueAnswer = this.editInfo.answer[0] === 'A' ? '正确' : '错误'
       }
     }
   }

+ 3 - 3
TEAMModelOS/ClientApp/src/view/evaluation/types/BaseMultiple.vue

@@ -8,7 +8,7 @@
     </div>
     <div class="exersices-option">
       <IconText :text="'多选选项'" :color="'#FF871C'" :icon="'md-reorder'"></IconText>
-      <div v-for="(item,index) in options" :class="'editor-wrap-'+item" style="margin-top:10px;display:flex">
+      <div v-for="(item,index) in options" :key="index" :class="'editor-wrap-'+item" style="margin-top:10px;display:flex">
         <span class="fl-center option-order">{{String.fromCharCode(64 + parseInt(index+1))}}</span>
         <div :ref="'multipleEditor'+item" style="text-align:left" class="option-editor" @click="optionClick(item)"></div>
         <span :class="['fl-center', 'option-setting', trueArr.indexOf(item) > -1 ? 'option-true':'']" @click="settingAnswer(item,index)">{{ trueIndex.indexOf(item) > -1 ? '正确答案' :'设为答案' }}</span>
@@ -68,7 +68,7 @@
             let key = String.fromCharCode(64 + parseInt(i + 1))
             let codeArr = this.optionsContent.map(item => item.code)
             // 如果已经编辑过则 修改选项内容
-            if (codeArr.indexOf(key) != -1) {
+            if (codeArr.indexOf(key) !== -1) {
               this.optionsContent[codeArr.indexOf(key)].value = html
             } else { // 否则创建新选项
                 let option = {
@@ -115,7 +115,7 @@
               let key = String.fromCharCode(64 + parseInt(newIndex + 1))
               let codeArr = this.optionsContent.map(item => item.code)
               // 如果已经编辑过则 修改选项内容
-              if (codeArr.indexOf(key) != -1) {
+              if (codeArr.indexOf(key) !== -1) {
                 this.optionsContent[codeArr.indexOf(key)].value = html
                 console.log(this.optionsContent.map(item => item.code))
                 console.log(this.optionsContent.map(item => item.value))

+ 4 - 4
TEAMModelOS/ClientApp/src/view/evaluation/types/BaseSingle.vue

@@ -8,10 +8,10 @@
     </div>
     <div class="exersices-option">
       <IconText :text="'单选选项'" :color="'#FF871C'" :icon="'md-reorder'"></IconText>
-      <div v-for="(item,index) in options" :class="'editor-wrap-'+item" style="margin-top:10px;display:flex">
+      <div v-for="(item,index) in options" :key="index" :class="'editor-wrap-'+item" style="margin-top:10px;display:flex">
         <span class="fl-center option-order">{{String.fromCharCode(64 + parseInt(index+1))}}</span>
         <div :ref="'singleOption'+item" style="text-align:left" class="option-editor" @click="optionClick(item)"></div>
-        <span :class="['fl-center', 'option-setting', trueIndex == index ? 'option-true':'']" @click="settingAnswer(index)">{{ trueIndex == index ? '正确答案' :'设为答案' }}</span>
+        <span :class="['fl-center', 'option-setting', trueIndex === index ? 'option-true':'']" @click="settingAnswer(index)">{{ trueIndex === index ? '正确答案' :'设为答案' }}</span>
         <span class="fl-center option-delete" @click="deleteOption(index)"><Icon type="ios-close-circle" /></span>
       </div>
       <p class="option-add"><span @click="addOption()">+ 添加选项 </span><span style="color:rgb(60,196,82);margin-left:15px;font-weight:bold">正确答案 :{{String.fromCharCode(64 + parseInt(trueIndex+1))}}</span></p>
@@ -71,7 +71,7 @@
               let key = String.fromCharCode(64 + parseInt(i + 1))
               let codeArr = this.optionsContent.map(item => item.code)
               // 如果已经编辑过则 修改选项内容
-              if (codeArr.indexOf(key) != -1) {
+              if (codeArr.indexOf(key) !== -1) {
                 this.optionsContent[codeArr.indexOf(key)].value = html
               } else { // 否则创建新选项
                   let option = {
@@ -109,7 +109,7 @@
               let key = String.fromCharCode(64 + parseInt(newIndex + 1))
               let codeArr = this.optionsContent.map(item => item.code)
               // 如果已经编辑过则 修改选项内容
-              if (codeArr.indexOf(key) != -1) {
+              if (codeArr.indexOf(key) !== -1) {
                 this.optionsContent[codeArr.indexOf(key)].value = html
                 console.log(this.optionsContent.map(item => item.code))
                 console.log(this.optionsContent.map(item => item.value))

+ 6 - 6
TEAMModelOS/ClientApp/src/view/index.vue

@@ -7,7 +7,7 @@
       <div class="centerCol" v-if="isSelectRole">
         <span class="title">{{$t('index.chooseRole')}}</span>
         <div class="select-role-wrap center">
-          <div class="role-item centerCol" v-for="(item,index) in roleInfo" @click="handleRole(item,index)">
+          <div class="role-item centerCol" v-for="(item,index) in roleInfo" :key="index" @click="handleRole(item,index)">
             <Icon type="ios-ribbon" size="60" /><span class="role-name">{{item.role.name}}</span>
           </div>
         </div>
@@ -43,7 +43,6 @@
   </div>
 </template>
 <script>
-  import animate from 'animate.css'
   import SelectModule from '@/components/syllabus/SelectModule.vue'
   export default {
     components: {
@@ -99,12 +98,12 @@
       getParamAsCH(paramName) {
         var paramValue = ''
         var isFound = false
-        if (window.location.search.indexOf('?') == 0 && window.location.search.indexOf('=') > 1) {
+        if (window.location.search.indexOf('?') === 0 && window.location.search.indexOf('=') > 1) {
           var arrSource = decodeURI(window.location.search).substring(1, window.location.search.length).split('&')
           var i = 0
           while (i < arrSource.length && !isFound) {
             if (arrSource[i].indexOf('=') > 0) {
-              if (arrSource[i].split('=')[0].toLowerCase() == paramName.toLowerCase()) {
+              if (arrSource[i].split('=')[0].toLowerCase() === paramName.toLowerCase()) {
                 paramValue = arrSource[i].split('=')[1]
                 isFound = true
               }
@@ -119,8 +118,8 @@
       loginCallback() {
         let that = this
         let bcrypt = require('bcryptjs')
-        let name = this.getParamAsCH('name') ? this.getParamAsCH('name') : localStorage.getItem('username')
-        let teamModelId = this.getParamAsCH('id')
+        // let name = this.getParamAsCH('name') ? this.getParamAsCH('name') : localStorage.getItem('username')
+        // let teamModelId = this.getParamAsCH('id')
         // let ticket = this.getParamAsCH("ticket");
         let ticket = this.$tools.guid()
         let token = localStorage.getItem('token') ? localStorage.getItem('token') : ''
@@ -210,6 +209,7 @@
     }
   }
 </script>
+
 <style scoped>
   html, body, #app {
     height: 100% !important;

+ 23 - 22
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/AchievementAnalysis/AchievementAnalysis.vue

@@ -4,21 +4,25 @@
       <span class="component-title" style="margin-top:40px">{{$t('totalAnalysis.ach_title1')}}</span>
     </Row>
     <Row class-name="component-percents">
-      <div class="percent-item fl-col-center" v-for="(item,index) in subjectPercent" :key="index" v-if="subjectList.length > 3 && item.name" >
-        <span class="percent-name">{{item.name}}</span>
-        <span class="percent-value"><span class="percent-line" :style="{background:colorList[index]}"></span>{{item.classRate}}</span>
-        <span class="percent-grade-value">{{$t('totalAnalysis.ach_text2')}}:{{item.gradeRate}}</span>
-        <span class="percent-area-value">{{$t('totalAnalysis.ach_text3')}}:{{item.areaRate}}</span>
-      </div>
+        <div class="percent-item" v-for="(item,index) in subjectPercent" :key="index">
+            <div class="fl-col-center" v-if="subjectList.length > 3 && item.name">
+                <span class="percent-name">{{item.name}}</span>
+                <span class="percent-value"><span class="percent-line" :style="{background:colorList[index]}"></span>{{item.classRate}}</span>
+                <span class="percent-grade-value">{{$t('totalAnalysis.ach_text2')}}:{{item.gradeRate}}</span>
+                <span class="percent-area-value">{{$t('totalAnalysis.ach_text3')}}:{{item.areaRate}}</span>
+            </div>
+            </div>
 
-      <div  class="percent-item fl-col-center" v-for="(item,index) in subjectPercent" :key="index" v-if="subjectList.length <= 3 && item.name">
-        <span class="percent-name">{{item.name}}</span>
-        <span class="percent-value"><span class="percent-line" :style="{background:colorList[index]}"></span>{{item.classRate}}</span>
-        <span class="percent-grade-value">{{$t('totalAnalysis.ach_text2')}}:{{item.gradeRate}}</span>
-        <span class="percent-area-value">{{$t('totalAnalysis.ach_text3')}}:{{item.areaRate}}</span>
-      </div>
+            <!--<div class="percent-item fl-col-center" v-for="(item,index) in subjectPercent" :key="index">
+                <div class="percent-item fl-col-center" v-if="subjectList.length <= 3 && item.name">
+                    <span class="percent-name">{{item.name}}</span>
+                    <span class="percent-value"><span class="percent-line" :style="{background:colorList[index]}"></span>{{item.classRate}}</span>
+                    <span class="percent-grade-value">{{$t('totalAnalysis.ach_text2')}}:{{item.gradeRate}}</span>
+                    <span class="percent-area-value">{{$t('totalAnalysis.ach_text3')}}:{{item.areaRate}}</span>
+                </div>
+            </div>-->
 
-    </Row>
+</Row>
     <Divider />
     <Row>
       <span class="component-title">{{$t('totalAnalysis.ach_title2')}}</span>
@@ -55,14 +59,11 @@
 <script>
   import BaseBar from '@/components/student-analysis/total/BaseBar'
   import BaseEntryBar from '@/components/student-analysis/total/BaseEntryBar.vue'
-  import BaseLine from '@/components/student-analysis/total/BaseLine.vue'
-  import BaseEntryLine from '@/components/student-analysis/total/BaseEntryLine.vue'
-  import BaseCircle from '@/components/student-analysis/total/BaseCircle.vue'
   import BaseTable from '@/components/student-analysis/total/BaseMyTable.vue'
   import EntryTables from '@/view/student-analysis/total-analysis/AchievementAnalysis/EntryTables.vue'
   export default {
     components: {
-      BaseBar, BaseLine, BaseCircle, BaseEntryBar, BaseEntryLine, BaseTable, EntryTables
+      BaseBar, BaseEntryBar, BaseTable, EntryTables
     },
     data() {
       return {
@@ -95,11 +96,11 @@
             filterMultiple: false,
             filterMethod(value, row) {
               if (value === 1) {
-                return row.changesStatus == 1 && row.changesVal != 0
+                return row.changesStatus === 1 && row.changesVal !== 0
               } else if (value === 2) {
-                return row.changesStatus == -1 && row.changesVal != 0
+                return row.changesStatus === -1 && row.changesVal !== 0
               } else {
-                return row.changesStatus == 0
+                return row.changesStatus === 0
               }
             }
           },
@@ -139,9 +140,9 @@
                       className: 'table-rank-badge'
                     },
                     style: {
-                      color: row.changesStatus == 1 ? '#0ccb0c' : '#ff5d5d'
+                      color: row.changesStatus === 1 ? '#0ccb0c' : '#ff5d5d'
                     }
-                  }, (row.changesStatus == 1 && row.changesVal != 0) ? '+' + row.changesVal : (row.changesStatus == -1 && row.changesVal != 0) ? '-' + row.changesVal : ''),
+                  }, (row.changesStatus === 1 && row.changesVal !== 0) ? '+' + row.changesVal : (row.changesStatus === -1 && row.changesVal !== 0) ? '-' + row.changesVal : ''),
                   h('span', {
                     domProps: {
                       className: 'table-rank-value'

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

@@ -19,7 +19,7 @@
       </div>-->
     </Row>
     <Row class-name="base-table-row">
-      <BaseTable :columns="earlyPercentColumns" :tableDatas="tableData" ref="percentTable" v-show="warningIndex == 0" showSelect @onSelectChange="onSelectChange"></BaseTable>
+      <BaseTable :columns="earlyPercentColumns" :tableDatas="tableData" ref="percentTable" v-show="warningIndex === 0" showSelect @onSelectChange="onSelectChange"></BaseTable>
       <!--<BaseTable :columns="earlyScoreColumns" :tableDatas="tableData" ref="scoreTable" v-show="warningIndex == 1"></BaseTable>-->
     </Row>
     <Row class-name="averageBarRow">
@@ -86,9 +86,9 @@
                       className: 'table-rank-badge'
                     },
                     style: {
-                      color: row.changesStatus == 1 ? '#0ccb0c' : '#ff5d5d'
+                      color: row.changesStatus === 1 ? '#0ccb0c' : '#ff5d5d'
                     }
-                  }, (row.changesStatus == 1 && row.changesVal != 0) ? '+' + row.changesVal : (row.changesStatus == -1 && row.changesVal != 0) ? '-' + row.changesVal : ''),
+                  }, (row.changesStatus === 1 && row.changesVal !== 0) ? '+' + row.changesVal : (row.changesStatus === -1 && row.changesVal !== 0) ? '-' + row.changesVal : ''),
                   h('span', {
                     domProps: {
                       className: 'table-rank-value'
@@ -116,9 +116,9 @@
                       className: 'table-rank-badge'
                     },
                     style: {
-                      color: row.changesStatus == 1 ? '#0ccb0c' : '#ff5d5d'
+                      color: row.changesStatus === 1 ? '#0ccb0c' : '#ff5d5d'
                     }
-                  }, (row.changesStatus == 1 && row.changesVal != 0) ? '+' + row.changesVal : (row.changesStatus == -1 && row.changesVal != 0) ? '-' + row.changesVal : ''),
+                  }, (row.changesStatus === 1 && row.changesVal !== 0) ? '+' + row.changesVal : (row.changesStatus === -1 && row.changesVal !== 0) ? '-' + row.changesVal : ''),
                   h('span', {
                     domProps: {
                       className: 'table-rank-value'
@@ -146,9 +146,9 @@
                       className: 'table-rank-badge'
                     },
                     style: {
-                      color: row.changesStatus2 == 1 ? '#0ccb0c' : '#ff5d5d'
+                      color: row.changesStatus2 === 1 ? '#0ccb0c' : '#ff5d5d'
                     }
-                  }, (row.changesStatus2 == 1 && row.changesVal2 != 0) ? '+' + row.changesVal2 : (row.changesStatus2 == -1 && row.changesVal2 != 0) ? '-' + row.changesVal2 : ''),
+                  }, (row.changesStatus2 === 1 && row.changesVal2 !== 0) ? '+' + row.changesVal2 : (row.changesStatus2 === -1 && row.changesVal2 !== 0) ? '-' + row.changesVal2 : ''),
                   h('span', {
                     domProps: {
                       className: 'table-rank-value'
@@ -176,9 +176,9 @@
                       className: 'table-rank-badge'
                     },
                     style: {
-                      color: row.changesStatus2 == 1 ? '#0ccb0c' : '#ff5d5d'
+                      color: row.changesStatus2 === 1 ? '#0ccb0c' : '#ff5d5d'
                     }
-                  }, (row.changesStatus2 == 1 && row.changesVal2 != 0) ? '+' + row.changesVal2 : (row.changesStatus2 == -1 && row.changesVal2 != 0) ? '-' + row.changesVal2 : ''),
+                  }, (row.changesStatus2 === 1 && row.changesVal2 !== 0) ? '+' + row.changesVal2 : (row.changesStatus2 === -1 && row.changesVal2 !== 0) ? '-' + row.changesVal2 : ''),
                   h('span', {
                     domProps: {
                       className: 'table-rank-value'
@@ -206,9 +206,9 @@
                       className: 'table-rank-badge'
                     },
                     style: {
-                      color: row.changesStatus3 == 1 ? '#0ccb0c' : '#ff5d5d'
+                      color: row.changesStatus3 === 1 ? '#0ccb0c' : '#ff5d5d'
                     }
-                  }, (row.changesStatus3 == 1 && row.changesVal3 != 0) ? '+' + row.changesVal : (row.changesStatus3 == -1 && row.changesVal3 != 0) ? '-' + row.changesVal3 : ''),
+                  }, (row.changesStatus3 === 1 && row.changesVal3 !== 0) ? '+' + row.changesVal : (row.changesStatus3 === -1 && row.changesVal3 !== 0) ? '-' + row.changesVal3 : ''),
                   h('span', {
                     domProps: {
                       className: 'table-rank-value'
@@ -236,9 +236,9 @@
                       className: 'table-rank-badge'
                     },
                     style: {
-                      color: row.changesStatus3 == 1 ? '#0ccb0c' : '#ff5d5d'
+                      color: row.changesStatus3 === 1 ? '#0ccb0c' : '#ff5d5d'
                     }
-                  }, (row.changesStatus3 == 1 && row.changesVal3 != 0) ? '+' + row.changesVal3 : (row.changesStatus3 == -1 && row.changesVal3 != 0) ? '-' + row.changesVal3 : ''),
+                  }, (row.changesStatus3 === 1 && row.changesVal3 !== 0) ? '+' + row.changesVal3 : (row.changesStatus3 === -1 && row.changesVal3 !== 0) ? '-' + row.changesVal3 : ''),
                   h('span', {
                     domProps: {
                       className: 'table-rank-value'
@@ -270,9 +270,9 @@
 
       handleSort(index) {
         let memberList = [...this.$store.state.totalAnalysis.memberList]
-        if (index == 0) {
+        if (index === 0) {
           this.echartData = memberList.sort(function(a, b) { return Number(b.id) - Number(a.id) })
-        } else if (index == 1) {
+        } else if (index === 1) {
           this.echartData = memberList.sort(function(a, b) { return Number(b.score) - Number(a.score) })
         } else {
           this.echartData = memberList.sort(function(a, b) { return Number(b.score) - Number(a.score) }).reverse()
@@ -282,7 +282,7 @@
 
       onSelectChange(val) {
         let memberList = this.$store.state.totalAnalysis.memberList
-        let list = ['A', 'A-', 'B', 'B-', 'C', 'C-']
+        // let list = ['A', 'A-', 'B', 'B-', 'C', 'C-']
         memberList.forEach(item => {
           item.chinese = Math.abs(90 - Math.ceil(Math.random() * 30))
           item.classPR = Math.abs(item.classPR - 9 + Math.ceil(Math.random() * 10))

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

@@ -1,392 +1,392 @@
 <template>
-  <div class="evaluation-list-container fl-col-center">
-    <Spin fix v-show="contentLoading"></Spin>
-    <div class="el-title-wrap">
-      <div>
-        <span style="width:6px;height:28px;display:inline-block;background:#009dec;margin-bottom:-5px;border-radius: 5px;"></span>
-        <span class="el-title">成都新川外国语学校{{$t('totalAnalysis.text1')}}</span>
-      </div>
-    </div>
-
-    <div class="datas-wrap">
-      <div class="datas-item" v-for="item in dataList">
-        <p>{{item.name}}{{$t('totalAnalysis.text2')}}</p>
-        <div class="datas-val">
-          <countTo :startVal='0' :endVal='item.count' :duration='3000'></countTo>
+    <div class="evaluation-list-container fl-col-center">
+        <Spin fix v-show="contentLoading"></Spin>
+        <div class="el-title-wrap">
+            <div>
+                <span style="width:6px;height:28px;display:inline-block;background:#009dec;margin-bottom:-5px;border-radius: 5px;"></span>
+                <span class="el-title">成都新川外国语学校{{$t('totalAnalysis.text1')}}</span>
+            </div>
         </div>
-      </div>
-    </div>
 
-    <div class="el-search-wrap">
-      <Input v-model="searchValue"
-             :placeholder="$t('totalAnalysis.text4')"
-             @on-click="handleSearch"
-             @on-change="handleChange"
-             @on-enter="handleSearch"
-             icon="ios-search"
-             style="width:500px">
-      </Input>
-    </div>
+        <div class="datas-wrap">
+            <div class="datas-item" v-for="(item,index) in dataList" :key="index">
+                <p>{{item.name}}{{$t('totalAnalysis.text2')}}</p>
+                <div class="datas-val">
+                    <countTo :startVal='0' :endVal='item.count' :duration='3000'></countTo>
+                </div>
+            </div>
+        </div>
 
-    <Collapse>
-      <Panel name="1" hide-arrow>
-        <Icon type="ios-funnel" /> {{$t('totalAnalysis.text3')}}
-        <div class="el-filter-wrap" slot="content">
-          <div class="el-filter-item">
-            <span class="el-filter-title">{{$t('totalAnalysis.condition1')}}:</span>
-            <RadioGroup v-model="filterPeriod" type="button" @on-change="filterPeriodChange">
-              <Radio v-for="(item,index) in filterData.periodList" :label="item.name" :key="index">{{item.name}}</Radio>
-            </RadioGroup>
-          </div>
-          <div class="el-filter-item">
-            <span class="el-filter-title">{{$t('totalAnalysis.condition2')}}:</span>
-            <RadioGroup v-model="filterGrade" type="button" @on-change="filterGradeChange">
-              <Radio v-for="(item,index) in filterData.gradeList" :label="item.name" :key="index">{{item.name}}</Radio>
-            </RadioGroup>
-          </div>
-          <div class="el-filter-item">
-            <span class="el-filter-title">{{$t('totalAnalysis.condition3')}}:</span>
-            <RadioGroup v-model="filterTerm" type="button" @on-change="filterTermChange">
-              <Radio v-for="(item,index) in filterData.termList" :label="item.name" :key="index">{{item.name}}</Radio>
-            </RadioGroup>
-          </div>
-          <div class="el-filter-item">
-            <span class="el-filter-title">{{$t('totalAnalysis.condition4')}}:</span>
-            <RadioGroup v-model="filterType" type="button" @on-change="filterTypeChange">
-              <Radio v-for="(item,index) in filterData.typeList" :label="item.name" :key="index">{{item.name}}</Radio>
-            </RadioGroup>
-          </div>
-          <div class="el-filter-item">
-            <span class="el-filter-title">{{$t('totalAnalysis.condition5')}}:</span>
-            <RadioGroup v-model="filterArea" type="button" @on-change="filterAreaChange">
-              <Radio v-for="(item,index) in filterData.areaList" :label="item.name" :key="index">{{item.name}}</Radio>
-            </RadioGroup>
-          </div>
-          <div class="el-filter-item">
-            <span class="el-filter-title">{{$t('totalAnalysis.condition6')}}:</span>
-            <RadioGroup v-model="filterFeedback" type="button" @on-change="filterFeedbackChange">
-              <Radio v-for="(item,index) in filterData.feedbackList" :label="item.name" :key="index">{{item.name}}</Radio>
-            </RadioGroup>
-          </div>
-          <div class="el-filter-item">
-            <span class="el-filter-title">{{$t('totalAnalysis.condition7')}}:</span>
-            <RadioGroup v-model="filterSubject" type="button" @on-change="filterSubjectChange">
-              <Radio v-for="(item,index) in filterData.subjectList" :label="item.name" :key="index">{{item.name}}</Radio>
-            </RadioGroup>
-          </div>
+        <div class="el-search-wrap">
+            <Input v-model="searchValue"
+                   :placeholder="$t('totalAnalysis.text4')"
+                   @on-click="handleSearch"
+                   @on-change="handleChange"
+                   @on-enter="handleSearch"
+                   icon="ios-search"
+                   style="width:500px">
+            </Input>
         </div>
-      </Panel>
-    </Collapse>
-
-    <div class="el-bread">
-      <!--<Icon type="ios-arrow-forward" />-->
-      <span>{{$t('totalAnalysis.text5')}}:</span>
-      <span v-if="!hasCondition">{{$t('totalAnalysis.text9')}}</span>
-      <span v-for="(item,index) in filterList" :key="index" class="filter-item" v-if="item.val">{{item.val}} <Icon type="ios-close" @click="handleRemove(index,item.keyName)" /></span>
-      <span class="list-length">{{$t('totalAnalysis.text6')}} : {{examList.length}} </span>
-    </div>
 
-    <div class="el-list-wrap">
-      <div class="no-data-text" v-if="!examList.length">暂无数据</div>
-      <div class="el-item" v-else v-for="(item,index) in examList" @click="handleChooseExam(item,index)">
-        <div class="el-item-name">
-          <!--<span class="el-item-type">{{item.examType}}</span>-->
-          {{item.name}}
-          <span class="el-item-area">{{item.examArea}}</span>
-          <span class="el-item-subject" v-for="subject in item.subject.split(',')">{{subject}}</span>
+        <Collapse>
+            <Panel name="1" hide-arrow>
+                <Icon type="ios-funnel" /> {{$t('totalAnalysis.text3')}}
+                <div class="el-filter-wrap" slot="content">
+                    <div class="el-filter-item">
+                        <span class="el-filter-title">{{$t('totalAnalysis.condition1')}}:</span>
+                        <RadioGroup v-model="filterPeriod" type="button" @on-change="filterPeriodChange">
+                            <Radio v-for="(item,index) in filterData.periodList" :label="item.name" :key="index">{{item.name}}</Radio>
+                        </RadioGroup>
+                    </div>
+                    <div class="el-filter-item">
+                        <span class="el-filter-title">{{$t('totalAnalysis.condition2')}}:</span>
+                        <RadioGroup v-model="filterGrade" type="button" @on-change="filterGradeChange">
+                            <Radio v-for="(item,index) in filterData.gradeList" :label="item.name" :key="index">{{item.name}}</Radio>
+                        </RadioGroup>
+                    </div>
+                    <div class="el-filter-item">
+                        <span class="el-filter-title">{{$t('totalAnalysis.condition3')}}:</span>
+                        <RadioGroup v-model="filterTerm" type="button" @on-change="filterTermChange">
+                            <Radio v-for="(item,index) in filterData.termList" :label="item.name" :key="index">{{item.name}}</Radio>
+                        </RadioGroup>
+                    </div>
+                    <div class="el-filter-item">
+                        <span class="el-filter-title">{{$t('totalAnalysis.condition4')}}:</span>
+                        <RadioGroup v-model="filterType" type="button" @on-change="filterTypeChange">
+                            <Radio v-for="(item,index) in filterData.typeList" :label="item.name" :key="index">{{item.name}}</Radio>
+                        </RadioGroup>
+                    </div>
+                    <div class="el-filter-item">
+                        <span class="el-filter-title">{{$t('totalAnalysis.condition5')}}:</span>
+                        <RadioGroup v-model="filterArea" type="button" @on-change="filterAreaChange">
+                            <Radio v-for="(item,index) in filterData.areaList" :label="item.name" :key="index">{{item.name}}</Radio>
+                        </RadioGroup>
+                    </div>
+                    <div class="el-filter-item">
+                        <span class="el-filter-title">{{$t('totalAnalysis.condition6')}}:</span>
+                        <RadioGroup v-model="filterFeedback" type="button" @on-change="filterFeedbackChange">
+                            <Radio v-for="(item,index) in filterData.feedbackList" :label="item.name" :key="index">{{item.name}}</Radio>
+                        </RadioGroup>
+                    </div>
+                    <div class="el-filter-item">
+                        <span class="el-filter-title">{{$t('totalAnalysis.condition7')}}:</span>
+                        <RadioGroup v-model="filterSubject" type="button" @on-change="filterSubjectChange">
+                            <Radio v-for="(item,index) in filterData.subjectList" :label="item.name" :key="index">{{item.name}}</Radio>
+                        </RadioGroup>
+                    </div>
+                </div>
+            </Panel>
+        </Collapse>
+
+        <div class="el-bread">
+            <!--<Icon type="ios-arrow-forward" />-->
+            <span>{{$t('totalAnalysis.text5')}}:</span>
+            <span v-if="!hasCondition">{{$t('totalAnalysis.text9')}}</span>
+            <span v-for="(item,index) in filterList" :key="index" class="filter-item" v-if="item.val">{{item.val}} <Icon type="ios-close" @click="handleRemove(index,item.keyName)" /></span>
+            <span class="list-length">{{$t('totalAnalysis.text6')}} : {{examList.length}} </span>
         </div>
-        <div class="el-item-info">
-          <span><Icon type="md-people" />{{$t('totalAnalysis.text7')}}:{{item.joinNum}}</span>
-          <span><Icon type="md-time" />{{$t('totalAnalysis.text8')}}:{{item.date}} </span>
+
+        <div class="el-list-wrap">
+            <div class="no-data-text" v-if="!examList.length">暂无数据</div>
+            <div class="el-item" v-else v-for="(item,index) in examList" :key="index" @click="handleChooseExam(item,index)">
+                <div class="el-item-name">
+                    <!--<span class="el-item-type">{{item.examType}}</span>-->
+                    {{item.name}}
+                    <span class="el-item-area">{{item.examArea}}</span>
+                    <span class="el-item-subject" v-for="(subject,index) in item.subject.split(',')" :key="index">{{subject}}</span>
+                </div>
+                <div class="el-item-info">
+                    <span><Icon type="md-people" />{{$t('totalAnalysis.text7')}}:{{item.joinNum}}</span>
+                    <span><Icon type="md-time" />{{$t('totalAnalysis.text8')}}:{{item.date}} </span>
+                </div>
+            </div>
         </div>
-      </div>
-    </div>
 
-  </div>
+    </div>
 </template>
 
 <script>
-  import countTo from 'vue-count-to'
-  export default {
-    components: {
-      // BaseTestScatter, BaseTable, BaseLineBar
-    },
-    data() {
-      return {
-        contentLoading: false,
-        questionList: [],
-        dataList: [...new Array(6).keys()],
-        hasCondition: false,
-        examList: [],
-        filterList: [],
-        filterConditions: {}, // 筛选条件
-        filterData: {},
-        searchValue: '',
-        searchList: [],
-        filterPeriod: '全部',
-        filterGrade: '全部',
-        filterTerm: '全部',
-        filterType: '全部',
-        filterArea: '全部',
-        filterFeedback: '全部',
-        filterSubject: '全部'
-      }
-    },
-    components: { countTo },
-    created() {
-      let classList = this.$store.state.totalAnalysis.classList
-      let examList = this.$store.state.totalAnalysis.examList
-      this.filterData = this.$store.state.totalAnalysis.filterData
-      this.examList = examList
-      this.rightTableData = classList
-      this.dataList = this.filterData.typeList.slice(1, 7)
-      this.dataList.forEach(item => {
-        item.count = Math.floor(Math.random() * 10)
-      })
-
-      this.searchList = examList.map(item => item.name)
-
-      // this.examList = this.examList.filter(item => item.period == '初中' && item.grade == '初一');
-    },
-
-    methods: {
-      handleSearch() {
-        let that = this
-        this.contentLoading = true
-        let value = this.searchValue
-        let examList = this.$store.state.totalAnalysis.examList
-        this.examList = examList.filter(item => item.name.indexOf(value) !== -1)
-        setTimeout(function() {
-          that.contentLoading = false
-        }, 500)
-      },
-      handleChange() {
-        let that = this
-        let value = this.searchValue
-        let examList = this.$store.state.totalAnalysis.examList
-        this.examList = examList.filter(item => item.name.indexOf(value) !== -1)
-      },
-      handleAutoSelect(val) {
-        let examList = this.$store.state.totalAnalysis.examList
-        this.examList = examList.filter(item => item.name == val)
-      },
-      // handleFilter(type, val) {
-
-      // },
-
-      handleRemove(index, name) {
-        this.filterList.splice(index, 1)
-        switch (name) {
-          case 'period':
-            this.filterPeriod = '全部'
-            this.filterConditions.period = null
-            break
-          case 'grade':
-            this.filterGrade = '全部'
-            this.filterConditions.grade = null
-            break
-          case 'term':
-            this.filterTerm = '全部'
-            this.filterConditions.term = null
-            break
-          case 'type':
-            this.filterType = '全部'
-            this.filterConditions.type = null
-            break
-          case 'area':
-            this.filterArea = '全部'
-            this.filterConditions.area = null
-            break
-          case 'feedback':
-            this.filterFeedback = '全部'
-            this.filterConditions.feedback = null
-            break
-          case 'subject':
-            this.filterSubject = '全部'
-            this.filterConditions.subject = null
-            break
-          default:
-            break
+    import countTo from 'vue-count-to'
+    export default {
+        components: {
+            // BaseTestScatter, BaseTable, BaseLineBar
+        },
+        data() {
+            return {
+                contentLoading: false,
+                questionList: [],
+                dataList: [...new Array(6).keys()],
+                hasCondition: false,
+                examList: [],
+                filterList: [],
+                filterConditions: {}, // 筛选条件
+                filterData: {},
+                searchValue: '',
+                searchList: [],
+                filterPeriod: '全部',
+                filterGrade: '全部',
+                filterTerm: '全部',
+                filterType: '全部',
+                filterArea: '全部',
+                filterFeedback: '全部',
+                filterSubject: '全部'
+            }
+        },
+        components: {
+            countTo
+        },
+        created() {
+            let classList = this.$store.state.totalAnalysis.classList
+            let examList = this.$store.state.totalAnalysis.examList
+            this.filterData = this.$store.state.totalAnalysis.filterData
+            this.examList = examList
+            this.rightTableData = classList
+            this.dataList = this.filterData.typeList.slice(1, 7)
+            this.dataList.forEach(item => {
+                item.count = Math.floor(Math.random() * 10)
+            })
+
+            this.searchList = examList.map(item => item.name)
+            // this.examList = this.examList.filter(item => item.period == '初中' && item.grade == '初一');
+        },
+
+        methods: {
+            handleSearch() {
+                let that = this
+                this.contentLoading = true
+                let value = this.searchValue
+                let examList = this.$store.state.totalAnalysis.examList
+                this.examList = examList.filter(item => item.name.indexOf(value) !== -1)
+                setTimeout(function() {
+                    that.contentLoading = false
+                }, 500)
+            },
+            handleChange() {
+                let value = this.searchValue
+                let examList = this.$store.state.totalAnalysis.examList
+                this.examList = examList.filter(item => item.name.indexOf(value) !== -1)
+            },
+            handleAutoSelect(val) {
+                let examList = this.$store.state.totalAnalysis.examList
+                this.examList = examList.filter(item => item.name === val)
+            },
+            // handleFilter(type, val) {
+
+            // },
+
+            handleRemove(index, name) {
+                this.filterList.splice(index, 1)
+                switch (name) {
+                    case 'period':
+                        this.filterPeriod = '全部'
+                        this.filterConditions.period = null
+                        break
+                    case 'grade':
+                        this.filterGrade = '全部'
+                        this.filterConditions.grade = null
+                        break
+                    case 'term':
+                        this.filterTerm = '全部'
+                        this.filterConditions.term = null
+                        break
+                    case 'type':
+                        this.filterType = '全部'
+                        this.filterConditions.type = null
+                        break
+                    case 'area':
+                        this.filterArea = '全部'
+                        this.filterConditions.area = null
+                        break
+                    case 'feedback':
+                        this.filterFeedback = '全部'
+                        this.filterConditions.feedback = null
+                        break
+                    case 'subject':
+                        this.filterSubject = '全部'
+                        this.filterConditions.subject = null
+                        break
+                    default:
+                        break
+                }
+
+                // console.log(this.filterList);
+                this.doFilter()
+            },
+
+            filterPeriodChange() {
+                this.filterConditions.period = this.filterPeriod === '全部' ? null : this.filterPeriod
+                this.doFilter()
+            },
+            filterGradeChange() {
+                this.filterConditions.grade = this.filterGrade === '全部' ? null : this.filterGrade
+                this.doFilter()
+            },
+            filterTermChange() {
+                this.filterConditions.term = this.filterTerm === '全部' ? null : this.filterTerm
+                this.doFilter()
+            },
+            filterTypeChange() {
+                this.filterConditions.type = this.filterType === '全部' ? null : this.filterType
+                this.doFilter()
+            },
+            filterAreaChange() {
+                this.filterConditions.area = this.filterArea === '全部' ? null : this.filterArea
+                this.doFilter()
+            },
+            filterFeedbackChange() {
+                this.filterConditions.feedback = this.filterFeedback === '全部' ? null : this.filterFeedback
+                this.doFilter()
+            },
+            filterSubjectChange() {
+                this.filterConditions.subject = this.filterSubject === '全部' ? null : this.filterSubject
+                this.doFilter()
+            },
+
+            handleExportTables() {
+
+            },
+
+            doFilter() {
+                let examList = this.$store.state.totalAnalysis.examList
+                // 将条件转换成数组便于渲染
+                this.filterList = this.objToArr(this.filterConditions)
+                // 根据条件过滤所有的测验数据
+                this.examList = examList.filter(item => {
+                    return item.period.indexOf(this.filterConditions.period || '') > -1 &&
+                        item.grade.indexOf(this.filterConditions.grade || '') > -1 &&
+                        item.term.indexOf(this.filterConditions.term || '') > -1 &&
+                        item.examType.indexOf(this.filterConditions.type || '') > -1 &&
+                        item.examArea.indexOf(this.filterConditions.area || '') > -1 &&
+                        item.feedback.indexOf(this.filterConditions.feedback || '') > -1 &&
+                        item.subject.indexOf(this.filterConditions.subject || '') > -1
+                })
+            },
+
+            objToArr(obj) {
+                var arr = []
+                for (var key in obj) {
+                    arr.push({ keyName: key, val: obj[key] })
+                }
+                return arr
+            },
+
+            handleChooseExam(item, index) {
+                this.$router.push({ path: '/total', query: { index: index } })
+            }
+
+        },
+
+        mounted() {
+            // this.$refs.rightRateTable.$el.childNodes[0].style.borderRight = "0";
+        },
+        watch: {
+            filterList(val) {
+                let list = val.map(item => item.val)
+                this.hasCondition = list.filter(item => item !== null).length
+            }
         }
-
-        // console.log(this.filterList);
-        this.doFilter()
-      },
-
-      filterPeriodChange() {
-        this.filterConditions.period = this.filterPeriod == '全部' ? null : this.filterPeriod
-        this.doFilter()
-      },
-      filterGradeChange() {
-        this.filterConditions.grade = this.filterGrade == '全部' ? null : this.filterGrade
-        this.doFilter()
-      },
-      filterTermChange() {
-        this.filterConditions.term = this.filterTerm == '全部' ? null : this.filterTerm
-        this.doFilter()
-      },
-      filterTypeChange() {
-        this.filterConditions.type = this.filterType == '全部' ? null : this.filterType
-        this.doFilter()
-      },
-      filterAreaChange() {
-        this.filterConditions.area = this.filterArea == '全部' ? null : this.filterArea
-        this.doFilter()
-      },
-      filterFeedbackChange() {
-        this.filterConditions.feedback = this.filterFeedback == '全部' ? null : this.filterFeedback
-        this.doFilter()
-      },
-      filterSubjectChange() {
-        this.filterConditions.subject = this.filterSubject == '全部' ? null : this.filterSubject
-        this.doFilter()
-      },
-
-      handleExportTables() {
-
-      },
-
-      doFilter() {
-        let examList = this.$store.state.totalAnalysis.examList
-        // 将条件转换成数组便于渲染
-        this.filterList = this.objToArr(this.filterConditions)
-        // 根据条件过滤所有的测验数据
-        this.examList = examList.filter(item => {
-          return item.period.indexOf(this.filterConditions.period || '') > -1 &&
-            item.grade.indexOf(this.filterConditions.grade || '') > -1 &&
-            item.term.indexOf(this.filterConditions.term || '') > -1 &&
-            item.examType.indexOf(this.filterConditions.type || '') > -1 &&
-            item.examArea.indexOf(this.filterConditions.area || '') > -1 &&
-            item.feedback.indexOf(this.filterConditions.feedback || '') > -1 &&
-            item.subject.indexOf(this.filterConditions.subject || '') > -1
-        })
-      },
-
-      objToArr(obj) {
-        var arr = []
-        for (var key in obj) {
-          arr.push({ keyName: key, val: obj[key] })
-        }
-        return arr
-      },
-
-      handleChooseExam(item, index) {
-        this.$router.push({ path: '/total', query: { index: index } })
-      }
-
-    },
-
-    mounted() {
-      // this.$refs.rightRateTable.$el.childNodes[0].style.borderRight = "0";
-    },
-    watch: {
-      filterList(val) {
-        let list = val.map(item => item.val)
-        this.hasCondition = list.filter(item => item !== null).length
-      }
     }
-  }
 </script>
 
 <style src="./EvaluationList.css" scoped></style>
 
 <style>
 
-  .total-container .el-tools .ivu-input {
-    background: transparent;
-    border: 1px solid #a2a2a2;
-    height: 32px;
-    padding-left: 10px;
-    font-size: 14px;
-    font-weight: bold;
-    color: #a2a2a2;
-    box-shadow: none;
-    border-radius: 5px;
-    margin-bottom: 3px;
-  }
-
-    .total-container .el-tools .ivu-input::-webkit-input-placeholder {
-      color: #a2a2a2;
+    .total-container .el-tools .ivu-input {
+        background: transparent;
+        border: 1px solid #a2a2a2;
+        height: 32px;
+        padding-left: 10px;
+        font-size: 14px;
+        font-weight: bold;
+        color: #a2a2a2;
+        box-shadow: none;
+        border-radius: 5px;
+        margin-bottom: 3px;
+    }
+
+        .total-container .el-tools .ivu-input::-webkit-input-placeholder {
+            color: #a2a2a2;
+        }
+
+    .total-container .el-tools .basic-tool-export {
+        padding: 7px 15px;
+        background: #447a94;
+        border-radius: 5px;
+        cursor: pointer;
+        margin-left: 20px;
+        margin-top: 2px;
+        display: inline-block;
+    }
+
+    .total-content .el-tools .ivu-icon {
+        font-size: 18px;
+        vertical-align: sub;
+    }
+
+    .export-modal .ivu-modal-header {
+        display: none;
+    }
+
+    .evaluation-list-container .ivu-collapse {
+        width: 100%;
+        background: #404040;
+        border: 0;
+        padding-bottom: 18px;
+        margin-top: -70px;
+        border-radius: 5px;
+    }
+
+    .evaluation-list-container .ivu-collapse-item .ivu-collapse-header {
+        color: #e4eadb;
+        font-size: 14px;
+        margin-left: 530px;
+        display: inline-block;
     }
 
-  .total-container .el-tools .basic-tool-export {
-    padding: 7px 15px;
-    background: #447a94;
-    border-radius: 5px;
-    cursor: pointer;
-    margin-left: 20px;
-    margin-top: 2px;
-    display: inline-block;
-  }
-
-  .total-content .el-tools .ivu-icon {
-    font-size: 18px;
-    vertical-align: sub;
-  }
-
-  .export-modal .ivu-modal-header {
-    display: none;
-  }
-
-  .evaluation-list-container .ivu-collapse {
-    width:100%;
-    background:#404040;
-    border:0;
-    padding-bottom:18px;
-    margin-top:-70px;
-    border-radius: 5px;
-  }
-
-  .evaluation-list-container .ivu-collapse-item  .ivu-collapse-header{
-    color:#e4eadb;
-    font-size:14px;
-    margin-left:530px;
-    display: inline-block;
-  }
-
-   .evaluation-list-container .ivu-collapse-item  .ivu-collapse-header .ivu-icon{
-     margin-right:3px;
-     margin-bottom:3px;
-     transition:none;
-     transform:none;
-   }
-
-  .evaluation-list-container .ivu-collapse > .ivu-collapse-item.ivu-collapse-item-active > .ivu-collapse-header > i {
-    transform:none;
-  }
-
-  .evaluation-list-container .ivu-collapse-content{
-    background:#404040;
-  }
-
-  .evaluation-list-container .ivu-collapse > .ivu-collapse-item.ivu-collapse-item-active > .ivu-collapse-header {
-    border-bottom:none;
-  }
-
-  /*搜索框部分样式重写*/
-
-  .evaluation-list-container .el-search-wrap .ivu-input {
-    background: #404040;
-    height: 40px;
-    border-color: #6f6f6f;
-    color: #dcdcdc;
-    font-size: 14px;
-  }
-
-    .evaluation-list-container .el-search-wrap .ivu-input:focus {
-      border-color: #6f6f6f;
-      box-shadow: none;
+        .evaluation-list-container .ivu-collapse-item .ivu-collapse-header .ivu-icon {
+            margin-right: 3px;
+            margin-bottom: 3px;
+            transition: none;
+            transform: none;
+        }
+
+    .evaluation-list-container .ivu-collapse > .ivu-collapse-item.ivu-collapse-item-active > .ivu-collapse-header > i {
+        transform: none;
     }
 
-  .evaluation-list-container .el-search-wrap .ivu-input-icon {
-    line-height: 40px;
-  }
+    .evaluation-list-container .ivu-collapse-content {
+        background: #404040;
+    }
 
-  .evaluation-list-container .el-search-wrap .ivu-select-item {
-    padding: 15px;
-  }
+    .evaluation-list-container .ivu-collapse > .ivu-collapse-item.ivu-collapse-item-active > .ivu-collapse-header {
+        border-bottom: none;
+    }
+
+    /*搜索框部分样式重写*/
+
+    .evaluation-list-container .el-search-wrap .ivu-input {
+        background: #404040;
+        height: 40px;
+        border-color: #6f6f6f;
+        color: #dcdcdc;
+        font-size: 14px;
+    }
+
+        .evaluation-list-container .el-search-wrap .ivu-input:focus {
+            border-color: #6f6f6f;
+            box-shadow: none;
+        }
+
+    .evaluation-list-container .el-search-wrap .ivu-input-icon {
+        line-height: 40px;
+    }
+
+    .evaluation-list-container .el-search-wrap .ivu-select-item {
+        padding: 15px;
+    }
 
-      .evaluation-list-container .ivu-spin-dot {
+    .evaluation-list-container .ivu-spin-dot {
         width: 120px;
         height: 120px;
         background: #05c9da;

+ 6 - 5
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/KnowledgeAnalysis/KnowledgeAnalysis.vue

@@ -137,9 +137,9 @@
 
       this.isShowPie = !(this.knowledgeData.length > 10)
 
-      let knowList = ['方程与不等式', '图形的性质', '统计与概率', '函数', '图形的相似', '锐角三角函数', '几何图形初步', '投影与视图']
-      let levelList = ['知识', '理解', '评鉴', '综合', '分析', '应用']
-      let typeList = ['单选', '多选', '判断', '问答', '填空', '问答']
+      // 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)]
@@ -179,7 +179,7 @@
         let exerciseList = this.$store.state.totalAnalysis.exerciseList
         this.currentBlock = item.data.name
         let blockId = item.data.id
-        this.knowledgeData = exerciseList.filter(item => item.blockId == blockId)
+        this.knowledgeData = exerciseList.filter(item => item.blockId === blockId)
         this.$refs.detailsRef.knowledgeData = this.knowledgeData
       },
 
@@ -198,7 +198,8 @@
       getPointsData() {
         let list = this.$store.state.totalAnalysis.exerciseList
         this.knowledgeData = list
-        let a = list.map(item => item.y)
+            let a = list.map(item => item.y)
+            a = a
         return list
       }
     },

+ 0 - 2
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/KnowledgeAnalysis/ScoreDetails.vue

@@ -133,11 +133,9 @@
       }
     },
     created() {
-      let memberList = this.$store.state.totalAnalysis.memberList
       let scatter = this.$store.state.totalAnalysis.scatter
       let testScatter = this.$store.state.totalAnalysis.testScatter
       let knowledgeArr = testScatter.map(item => item.tableData)
-      // this.numData = knowledgeArr;
 
       this.tableData = Mock.mock({
         'list|60': [{

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

@@ -146,7 +146,7 @@ import { Set } from 'core-js'
       // 点击落点图某个点事件
       handleItemClick(item) {
         let memberId = item.data[item.data.length - 1]
-        let member = this.tableData.filter(item => item.id == memberId)[0]
+        let member = this.tableData.filter(item => item.id === memberId)[0]
               this.tableData.unshift(member)
       },
 

+ 25 - 27
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/TestAnalysis/QuestionList.vue

@@ -7,7 +7,7 @@
 
       <span class="btn-back" @click="handleBackTo" ref="btnBack"><Icon type="ios-arrow-back" />{{$t('totalAnalysis.ql_text13')}}</span>
 
-      <div class="ql-item" v-for="(question,index) in questionList">
+      <div class="ql-item" v-for="(question,index) in questionList" :key="index">
         <div>
           <div class="item-question">
             <p>
@@ -22,13 +22,13 @@
           </div>
         </div>
         <div class="item-option-wrap">
-          <div v-for="(option,optionIndex) in question.option" class="item-option">
+          <div v-for="(option,optionIndex) in question.option" :key="optionIndex" class="item-option">
             <p>{{String.fromCharCode(64 + parseInt(optionIndex+1))}} : <span v-html="option.value"></span></p>
           </div>
         </div>
 
         <!-- 如果是组合题 -->
-        <div v-for="(childQuestion,childIndex) in question.children" v-if="question.children.length">
+        <div v-for="(childQuestion,childIndex) in question.children" v-if="question.children.length" :key="childIndex">
           <div class="item-question" style="margin-top:20px;">
             <p>{{childIndex+1}} : <span v-html="childQuestion.question"></span></p>
           </div>
@@ -39,9 +39,9 @@
           </div>
           <div class="item-answer">
             <span class="item-header-title">【答案】:</span>
-            <span v-html="childQuestion.answer[0] || childQuestion.answer" v-if="childQuestion.type == 'Subjective'"></span>
-            <span :class="[ childQuestion.type == 'Complete' ? 'item-answer-item':'']" v-for="answer in childQuestion.answer" v-else-if="childQuestion.type == 'Complete'" v-html="answer"></span>
-            <span :class="[ childQuestion.type == 'Complete' ? 'item-answer-item':'']" v-for="answer in childQuestion.answer" v-else>{{answer}}</span>
+            <span v-html="childQuestion.answer[0] || childQuestion.answer" v-if="childQuestion.type === 'Subjective'"></span>
+            <span :class="[ childQuestion.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,answerIndex) in childQuestion.answer" :key="answerIndex" v-else-if="childQuestion.type == 'Complete'" v-html="answer"></span>
+            <span :class="[ childQuestion.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,answerIndex) in childQuestion.answer" :key="answerIndex" v-else>{{answer}}</span>
           </div>
           <div class="item-explain">
             <div class="item-header-title">【解析】:</div>
@@ -53,13 +53,13 @@
           <Panel :name="index+'answer'">
             <span>{{$t('totalAnalysis.ql_text9')}}</span>
             <div class="answerAndExplain" slot="content" style="margin-top:10px;margin-left: 25px;">
-              <div class="item-answer" v-show="question.type != 'Compose'">
+              <div class="item-answer" v-show="question.type !== 'Compose'">
                 <span class="item-header-title">【{{$t('totalAnalysis.ql_text11')}}】</span>
-                <span v-html="question.answer[0] || question.answer" v-if="question.type == 'Subjective'"></span>
-                <span :class="[ question.type == 'Complete' ? 'item-answer-item':'']" v-for="answer in question.answer" v-else-if="question.type == 'Complete'" v-html="answer"></span>
-                <span :class="[ question.type == 'Complete' ? 'item-answer-item':'']" v-for="answer in question.answer" v-else>{{answer}}</span>
+                <span v-html="question.answer[0] || question.answer" v-if="question.type === 'Subjective'"></span>
+                <span :class="[ question.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,answerIndex) in question.answer" :key="answerIndex" v-else-if="question.type == 'Complete'" v-html="answer"></span>
+                <span :class="[ question.type === 'Complete' ? 'item-answer-item':'']" v-for="(answer,answerIndex) in question.answer" :key="answerIndex" v-else>{{answer}}</span>
               </div>
-              <div class="item-explain" v-show="question.type != 'Compose'">
+              <div class="item-explain" v-show="question.type !== 'Compose'">
                 <div class="item-header-title">【{{$t('totalAnalysis.ql_text12')}}】</div>
                 <div v-html="question.explain"></div>
               </div>
@@ -68,7 +68,7 @@
           <Panel :name="index+''">
             <span>{{$t('totalAnalysis.ql_text10')}}</span>
             <div class="answerAndExplain" slot="content" style="margin-top:10px" v-if="collapseList.indexOf(index.toString()) > -1">
-              <Table :columns="dataColumns" :data="tableData.filter((item,index2) => index2 == index)"></Table>
+              <Table :columns="dataColumns" :data="tableData.filter((item,index2) => index2 === index)"></Table>
               <Table :columns="optionColumns" :data="optionsData" style="margin-top:20px"></Table>
               <!-- 每个题目的数据分析折线图 -->
               <div class="analysis-charts">
@@ -130,14 +130,12 @@
 </template>
 
 <script>
-  import BaseTestScatter from '@/components/student-analysis/total/BaseTestScatter.vue'
-  import BaseLineBar from '@/components/student-analysis/total/BaseLineBar.vue'
   import BaseLine from '@/components/student-analysis/total/BaseLine.vue'
   import BaseRateLine from '@/components/student-analysis/total/BaseRateLine.vue'
 import { setTimeout } from 'timers'
   export default {
     components: {
-      BaseTestScatter, BaseRateLine, BaseLineBar, BaseLine
+       BaseRateLine, BaseLine
     },
     data() {
       return {
@@ -288,15 +286,15 @@ import { setTimeout } from 'timers'
     created() {
       this.rightTableData = this.$store.state.totalAnalysis.classList
       this.questionList = this.$store.state.totalAnalysis.questions
-      this.SingleList = this.questionList.filter(item => item.type == 'Single')
-      this.MultipleList = this.questionList.filter(item => item.type == 'Multiple')
-      this.JudgeList = this.questionList.filter(item => item.type == 'Judge')
-      this.CompleteList = this.questionList.filter(item => item.type == 'Complete')
-      this.SubjectiveList = this.questionList.filter(item => item.type == 'Subjective')
-      this.ComposeList = this.questionList.filter(item => item.type == 'Compose')
+      this.SingleList = this.questionList.filter(item => item.type === 'Single')
+      this.MultipleList = this.questionList.filter(item => item.type === 'Multiple')
+      this.JudgeList = this.questionList.filter(item => item.type === 'Judge')
+      this.CompleteList = this.questionList.filter(item => item.type === 'Complete')
+      this.SubjectiveList = this.questionList.filter(item => item.type === 'Subjective')
+      this.ComposeList = this.questionList.filter(item => item.type === 'Compose')
 
       let testScatter = this.$store.state.totalAnalysis.testScatter
-      let list = testScatter.map(item => item.tableData)
+      // let list = testScatter.map(item => item.tableData)
 
       // list.forEach((item, index) => {
       //  item.type = questions[index].type;
@@ -395,11 +393,11 @@ import { setTimeout } from 'timers'
       // 折叠面板点击事件
       handleCollapseChange(val) {
         let questionIndex = val[0]
-        if (questionIndex == '999') return
-        if (questionIndex && this.collapseList.indexOf(questionIndex) == -1 && questionIndex != '999') {
+        if (questionIndex === '999') return
+        if (questionIndex && this.collapseList.indexOf(questionIndex) === -1 && questionIndex !== '999') {
           this.collapseList.push(questionIndex)
           this.activeCollapseIndex = questionIndex
-        } else if (questionIndex == 0) {
+        } else if (questionIndex === 0) {
           this.collapseList.push(questionIndex)
           this.activeCollapseIndex = questionIndex
         } else {
@@ -420,8 +418,8 @@ import { setTimeout } from 'timers'
       parentVm.isShowQuestions = true
       // this.isLoadingEcharts = true;
       let that = this
-      let box = this.$refs.rightBox
-      let btnBack = this.$refs.btnBack
+      // let box = this.$refs.rightBox
+      // let btnBack = this.$refs.btnBack
       // 页面滚动时 右侧题目序号以及返回按钮的滚动
       // this.$parent.$parent.$refs.scrollContent.addEventListener('scroll', () => {
       //  let isOverHeight = this.$parent.$refs.dataContainer.scrollTop >= 129; //判定右侧序号滚动距离是否到达临界值

+ 5 - 5
TEAMModelOS/ClientApp/src/view/student-analysis/total-analysis/TestAnalysis/TestAnalysis.vue

@@ -18,28 +18,28 @@
           <span>A</span>
           <span class="scatter-explain" :title="$t('totalAnalysis.ta_text6')">{{$t('totalAnalysis.ta_text6')}}</span>
           <span>{{A1List.length}}</span>
-          <div class="index-box"><span v-for="item in A1List" class="scatter-exercise-index" @click="handleIndexClick(item)">{{item > 9 ? item : '0' + item}}</span></div>
+          <div class="index-box"><span v-for="(item,index) in A1List" :key="index" class="scatter-exercise-index" @click="handleIndexClick(item)">{{item > 9 ? item : '0' + item}}</span></div>
         </div>
         <Divider />
         <div class="scatter-table-line">
           <span>A`</span>
           <span class="scatter-explain" :title="$t('totalAnalysis.ta_text7')">{{$t('totalAnalysis.ta_text7')}}</span>
           <span>{{A2List.length}}</span>
-          <div class="index-box"><span v-for="item in A2List" class="scatter-exercise-index" @click="handleIndexClick(item)">{{item > 9 ? item : '0' + item}}</span></div>
+          <div class="index-box"><span v-for="(item,index) in A2List" :key="index" class="scatter-exercise-index" @click="handleIndexClick(item)">{{item > 9 ? item : '0' + item}}</span></div>
         </div>
         <Divider />
         <div class="scatter-table-line">
           <span>B</span>
           <span class="scatter-explain" :title="$t('totalAnalysis.ta_text8')">{{$t('totalAnalysis.ta_text8')}}</span>
           <span>{{B1List.length}}</span>
-          <div class="index-box"><span v-for="item in B1List" class="scatter-exercise-index" @click="handleIndexClick(item)">{{item > 9 ? item : '0' + item}}</span></div>
+          <div class="index-box"><span v-for="(item,index) in B1List" :key="index" class="scatter-exercise-index" @click="handleIndexClick(item)">{{item > 9 ? item : '0' + item}}</span></div>
         </div>
         <Divider />
         <div class="scatter-table-line">
           <span>B`</span>
           <span class="scatter-explain" :title="$t('totalAnalysis.ta_text9')">{{$t('totalAnalysis.ta_text9')}}</span>
           <span>{{B2List.length}}</span>
-          <div class="index-box"><span v-for="item in B2List" class="scatter-exercise-index" @click="handleIndexClick(item)">{{item > 9 ? item : '0' + item}}</span></div>
+          <div class="index-box"><span v-for="(item,index) in B2List" :key="index" class="scatter-exercise-index" @click="handleIndexClick(item)">{{item > 9 ? item : '0' + item}}</span></div>
         </div>
       </div>
       </Col>
@@ -318,7 +318,7 @@
 
         // 题目编号联动
         let indexDomList = Array.prototype.slice.call(document.getElementsByClassName('scatter-exercise-index'))
-        let hignlightIndexDom = indexDomList.filter(item => item.innerText == this.currentExerciseIndex)
+        let hignlightIndexDom = indexDomList.filter(item => item.innerText === this.currentExerciseIndex)
         indexDomList.forEach(item => {
           item.style.background = 'transparent'
         })

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

@@ -65,11 +65,9 @@
   import '@/utils/chalk.js'
   import 'animate.css'
   import BaseHeader from '@/common/BaseHeader.vue'
-  import BaseExamList from '@/common/BaseExamList.vue'
-  import ExportTables from '@/components/student-analysis/total/ExportTables.vue'
   export default {
     components: {
-      BaseHeader, BaseExamList, ExportTables
+      BaseHeader
     },
     data() {
       return {

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

@@ -66,7 +66,7 @@
               <span class="info-type" :style="{color:colorTransfer[currentExamItem.examType] || 'red',borderColor:colorTransfer[currentExamItem.examType]|| 'red'}">{{currentExamItem.examType}}</span>
               <span class="info-name">{{currentExamItem.name}}</span>
               <span class="info-grade">{{currentExamItem.period + currentExamItem.grade}}</span>
-              <span class="info-subject" v-for="subject in subjectSplitList">{{subject.substr(0,1)}}</span>
+              <span class="info-subject" v-for="(subject,index) in subjectSplitList" :key="index">{{subject.substr(0,1)}}</span>
             </p>
             <p class="info-date-person">
               <span class="info-person">{{$t('totalAnalysis.text7')}}:<span style="color:#fff">{{currentExamItem.joinNum}}人</span></span>
@@ -83,7 +83,7 @@
               <span :class="this.$route.path.indexOf('/total/test') > -1 ? 'data-select-active' : ''" @click="handleDataSelect('2')">{{$t('totalAnalysis.module3')}}</span>
               <span :class="this.$route.path.indexOf('/total/knowledge') > -1 ? 'data-select-active' : ''" @click="handleDataSelect('3')">{{$t('totalAnalysis.module4')}}</span>
             </div>
-            <span style="float:right;margin-bottom:4px;" v-show="dataSelectIndex != 0">
+            <span style="float:right;margin-bottom:4px;" v-show="dataSelectIndex !== 0">
               <span class="select-title">{{$t('totalAnalysis.currentSubject')}}:</span>
               <Select v-model="subjectSelectVal" style="width:150px" @on-change="handleSubjectChange">
                 <Option v-for="(item,index) in getSubjectList" :value="index" :key="index" :label="item"></Option>
@@ -273,7 +273,7 @@
 
       // 切换科目时更换页面图表数据
       handleSubjectChange(val) {
-        if (val == 0 || val == 1) {
+        if (val === 0 || val === 1) {
           this.$store.commit('updateScatterData', this.$store.state.totalAnalysis.scatter)
           this.$store.commit('updateTestScatterData', this.$store.state.totalAnalysis.testScatter)
           this.$store.commit('updatePieData', val)
@@ -294,7 +294,7 @@
       let examIndex = this.$route.query.index
 
       // 如果路由跳转到成绩分析页面带有考试序号参数则跳转到当前考试
-      if (examIndex || examIndex == 0) {
+      if (examIndex || examIndex === 0) {
         this.currentExamItem = this.$refs.examListRef.examList[this.$route.query.index]
         this.$refs.examListRef.examIndex = this.$route.query.index
         let percentList = this.$store.state.totalAnalysis.subjectPercent
@@ -303,11 +303,11 @@
         this.$store.commit('updatePercent', percentList)
         this.$store.commit('updateBaseBarData')
         this.$store.commit('updateSubjectList', this.subjectSplitList)
-      } else if (!examIndex && examIndex != 0) { // 如果是首次进入则读取上次考试,如果没有上次考试则默认读取第一个
+      } else if (!examIndex && examIndex !== 0) { // 如果是首次进入则读取上次考试,如果没有上次考试则默认读取第一个
         let existExam = JSON.parse(sessionStorage.getItem('c_exam'))
         let list = this.$refs.examListRef.examList
         this.currentExamItem = existExam || this.$refs.examListRef.examList[0] // 如果没有上次考试则默认读取第一个
-        this.$refs.examListRef.examIndex = existExam ? list.indexOf(list.filter(item => item.id == existExam.id)[0]) : 0
+        this.$refs.examListRef.examIndex = existExam ? list.indexOf(list.filter(item => item.id === existExam.id)[0]) : 0
       }
 
       this.subjectSplitList = this.currentExamItem.subject.split(',')
@@ -319,7 +319,7 @@
       '$route'(to, from) {
         // this.scrollToTop(this.$refs.dataContainer, 0, 100);
         this.handleBackToTop()
-        if (to.path == '/total' && from.path == '/totalindex') {
+        if (to.path === '/total' && from.path === '/totalindex') {
           this.isShowEvaluations = false
           this.isShowQuestions = false
           this.$refs.examListRef.examIndex = to.query.index

+ 33 - 37
TEAMModelOS/ClientApp/src/view/syllabus/index/KnowPoint.vue

@@ -11,15 +11,15 @@
 
         </div>
         <div class="header-right">
-          <div class="header-right-item" @click="addPoint" v-show="listType == 2">
+          <div class="header-right-item" @click="addPoint" v-show="listType === 2">
             <Icon type="logo-buffer" size="18" />
             <span>新增知识点</span>
           </div>
-          <div class="header-right-item" @click="composeBlock" v-show="listType == 2">
+          <div class="header-right-item" @click="composeBlock" v-show="listType === 2">
             <Icon type="logo-buffer" size="18" />
             <span>组成知识块</span>
           </div>
-          <div class="header-right-item" @click="addBlock" v-show="listType==0">
+          <div class="header-right-item" @click="addBlock" v-show="listType===0">
             <Icon type="ios-browsers" size="18" />
             <span>新增知识块</span>
           </div>
@@ -31,12 +31,12 @@
       </div>
       <div class="sy-list-wrap">
         <!-- 知识块 -->
-        <div class="list-col" v-if="listType == 0">
+        <div class="list-col" v-if="listType === 0">
           <Spin fix v-show="blockLoading"></Spin>
           <!--<p style="font-size:20px;padding:10px 30px;font-weight:bold;border-bottom:1px solid #000">私有知识块仓库</p>-->
           <Collapse simple accordion @on-change="collapseChange" v-if="knowBlockList.length > 1">
             <Panel v-for="(item,index) in knowBlockList" class="know-block-item" :key="index" :name="item.period">
-              <Input v-if="item.knowledgeId==block_edit_id" :ref="'block'+item.knowledgeId" clearable type="text" v-model="item.alias"
+              <Input v-if="item.knowledgeId===block_edit_id" :ref="'block'+item.knowledgeId" clearable type="text" v-model="item.alias"
                      @on-blur="editKnowBlock(item)"
                      @keyup.enter.native="$event.target.blur"
                      @click.stop.native="inputFocus($event)" />
@@ -49,8 +49,8 @@
                 <Icon type="md-trash" @click="handleDeleteBlock(item)" title="删除" />
               </span>
               <div slot="content" class="knowpoints">
-                <div class="knowpoint-item" v-for="(point,index) in item.children" @mouseover="knowMouseover" @mouseout="knowMouseout">
-                  <Input v-if="point.rowKey==point_edit_id" :ref="'point'+point.rowKey" clearable type="text" v-model="point.alias"
+                <div class="knowpoint-item" v-for="(point,index) in item.children" :key="index" @mouseover="knowMouseover" @mouseout="knowMouseout">
+                  <Input v-if="point.rowKey===point_edit_id" :ref="'point'+point.rowKey" clearable type="text" v-model="point.alias"
                          @on-blur="editKnowPoint(point)"
                          @keyup.enter.native="$event.target.blur"
                          @click.stop.native="inputFocus($event)" />
@@ -67,7 +67,7 @@
         </div>
 
         <!-- 标准知识块 -->
-        <div class="list-col" v-else-if="listType == 1">
+        <div class="list-col" v-else-if="listType === 1">
           <Spin fix v-show="standardLoading"></Spin>
           <p style="font-size:20px;margin:20px 40px;font-weight:bold;">标准知识块数据</p>
           <KnowTree :treeDatas="treeData" v-if="treeData.length > 0"></KnowTree>
@@ -85,8 +85,8 @@
       <span :class="filter_index == 2 ? 'sort-active':''" @click="filterSort(2)">创建时间排序</span>
     </div>-->
           <div class="knowpoints">
-            <div v-for="(item,index) in knowPointList" :class="['knowpoint-item',pointCheckedList.indexOf(item) != -1?'knowpoint-item-active':'']" :title="item.description" @mouseover="knowMouseover" @mouseout="knowMouseout" @click="pointClick(item)">
-              <Input v-if="item.knowledgeId==point_edit_id" :ref="'point'+item.knowledgeId" clearable type="text" v-model="item.alias"
+            <div v-for="(item,index) in knowPointList" :key="index" :class="['knowpoint-item',pointCheckedList.indexOf(item) !== -1?'knowpoint-item-active':'']" :title="item.description" @mouseover="knowMouseover" @mouseout="knowMouseout" @click="pointClick(item)">
+              <Input v-if="item.knowledgeId===point_edit_id" :ref="'point'+item.knowledgeId" clearable type="text" v-model="item.alias"
                      @on-blur="editSchoolPoint(item)"
                      @keyup.enter.native="$event.target.blur"
                      @click.stop.native="inputFocus($event)" />
@@ -113,8 +113,7 @@
                width="520"
                ok-text="确认"
                cancel-text="取消"
-               @on-ok="handleAddBlock"
-               @on-cancel="">
+               @on-ok="handleAddBlock">
           <p class="modal-title">请输入知识块名称</p>
           <Input v-model="newBlockName" placeholder="知识块 名称" style="margin:5px;width:90%" />
         </Modal>
@@ -125,8 +124,7 @@
                width="520"
                ok-text="确认"
                cancel-text="取消"
-               @on-ok="handleAddPoint"
-               @on-cancel="">
+               @on-ok="handleAddPoint">
           <p class="modal-title">请输入知识点名称</p>
           <Input v-model="newPointName" placeholder="输入名称" style="margin:5px" />
         </Modal>
@@ -138,8 +136,7 @@
                ok-text="确认"
                cancel-text="取消"
                class-name="transferModal"
-               @on-ok="handleTransferBlock"
-               @on-cancel="">
+               @on-ok="handleTransferBlock">
           <Transfer :data="data3"
                     :target-keys="targetKeys"
                     :list-style="listStyle"
@@ -164,15 +161,14 @@
                width="400"
                ok-text="确认"
                cancel-text="取消"
-               @on-ok="handleComposeBlock"
-               @on-cancel="">
+               @on-ok="handleComposeBlock">
           <Tabs v-model="composeTabName" class="compose-block-tab">
             <TabPane label="建立新的知识块" name="newBlock">
               <p class="modal-title">请输入知识块名称</p>
               <Input v-model="newComposeName" placeholder="请输入" style="margin:5px" />
               <p class="modal-title">当前选中知识点</p>
               <div class="checked-points">
-                <div v-for="item in pointCheckedList" class="knowpoint-item knowpoint-item-active">{{item.name}}</div>
+                <div v-for="(item,index) in pointCheckedList" :key="index" class="knowpoint-item knowpoint-item-active">{{item.name}}</div>
               </div>
             </TabPane>
             <TabPane label="移动到现有知识块" name="moveToBlock">
@@ -237,7 +233,7 @@
       this.schoolInfo = JSON.parse(localStorage.getItem('c_role_info')).roleClaim[0] // 默认选中第一个学校
       let schoolClaims = this.schoolInfo.claim
       for (let i in schoolClaims) {
-        if (schoolClaims[i].claimType == 'SchoolCode') {
+        if (schoolClaims[i].claimType === 'SchoolCode') {
           this.schoolInfo = schoolClaims[i]
         }
       }
@@ -321,10 +317,10 @@
       // 知识点与知识块切换
       changeListType(status) {
         this.listType = status
-        this.isShowBlock = status == 0
-        if (status == 0) {
+        this.isShowBlock = status === 0
+        if (status === 0) {
           this.getSchoolBlocks()
-        } else if (status == 1) {
+        } else if (status === 1) {
           this.getStandardList()
         } else {
           this.getSchoolPoints()
@@ -345,7 +341,7 @@
         this.block_edit_id = null
           let list = document.getElementsByClassName('k-block-tools')
           for (let i = 0; i < list.length; i++) {
-            if (arr.indexOf(i.toString()) != -1) {
+            if (arr.indexOf(i.toString()) !== -1) {
               list[i].style.visibility = 'visible'
             } else {
               list[i].style.visibility = 'hidden'
@@ -369,7 +365,7 @@
       editKnowBlock(data) {
         delete data.rowKey
         this.$api.SaveOrUpdateSchoolBlock(data).then(res => {
-          if (res.result.message == 'Success') {
+          if (res.result.message === 'Success') {
             this.$Message.success('修改成功')
           }
         })
@@ -387,7 +383,7 @@
       // 编辑知识块包含的知识点input失焦
       editKnowPoint(data) {
         this.$api.SaveOrUpdateAllSchoolBlockPoint([data]).then(res => {
-          if (res.result.message == 'Success') {
+          if (res.result.message === 'Success') {
             this.$Message.success('修改成功')
           }
         })
@@ -397,7 +393,7 @@
       // 编辑学校知识点input失焦
       editSchoolPoint(data) {
         this.$api.SaveOrUpdateAllSchoolPoint(data).then(res => {
-          if (res.result.message == 'Success') {
+          if (res.result.message === 'Success') {
             this.$Message.success('修改成功')
           }
         })
@@ -416,7 +412,7 @@
 
        // request新增知识块
       handleAddBlock() {
-        if (this.newBlockName && this.newBlockName.replace(/\s*/g, '').length != 0) {
+        if (this.newBlockName && this.newBlockName.replace(/\s*/g, '').length !== 0) {
           let addBlockData = {
             schoolCode: this.schoolInfo.claimCode,
             subjectCode: 'Subject_Chinese',
@@ -463,7 +459,7 @@
 
       // request-新增知识点
       handleAddPoint() {
-        if (this.newPointName && this.newPointName.replace(/\s*/g, '').length != 0) {
+        if (this.newPointName && this.newPointName.replace(/\s*/g, '').length !== 0) {
         let addPointData = {
           schoolCode: this.schoolInfo.claimCode,
           subjectCode: 'Subject_Chinese',
@@ -493,7 +489,7 @@
       handleComposeBlock() {
         let datas = []
         let pointCheckedList = this.pointCheckedList
-        if (this.composeTabName == 'newBlock' && this.newComposeName && this.newComposeName.replace(/\s*/g, '').length != 0) {
+        if (this.composeTabName === 'newBlock' && this.newComposeName && this.newComposeName.replace(/\s*/g, '').length !== 0) {
           let addBlockData = {
             schoolCode: this.schoolInfo.claimCode,
             subjectCode: 'Subject_Chinese',
@@ -520,13 +516,13 @@
               datas.push(point)
             }
             this.$api.SaveOrUpdateAllSchoolBlockPoint(datas).then(res => {
-              if (res.result.message == 'Success') {
+              if (res.result.message === 'Success') {
                 this.$Message.success('添加成功')
                 this.changeListType(0)
               }
             })
           })
-        } else if (this.composeTabName == 'moveToBlock') {
+        } else if (this.composeTabName === 'moveToBlock') {
           for (let i in pointCheckedList) {
             let point = pointCheckedList[i]
             point.type = point.type || 1
@@ -540,12 +536,12 @@
             datas.push(point)
           }
           this.$api.SaveOrUpdateAllSchoolBlockPoint(datas).then(res => {
-            if (res.result.message == 'Success') {
+            if (res.result.message === 'Success') {
               this.$Message.success('添加成功')
               this.changeListType(0)
             }
           })
-        } else if (this.composeTabName == 'newBlock' && !this.newComposeName && this.newComposeName.replace(/\s*/g, '').length == 0) {
+        } else if (this.composeTabName === 'newBlock' && !this.newComposeName && this.newComposeName.replace(/\s*/g, '').length === 0) {
             this.$Message.warning('名称不能为空!')
         }
         this.newComposeName = ''
@@ -555,7 +551,7 @@
       pointClick(data) {
         // this.point_click_id = data.id;
         let list = this.pointCheckedList
-        if (list.indexOf(data) == -1) {
+        if (list.indexOf(data) === -1) {
           list.push(data)
         } else {
           list.splice(list.indexOf(data), 1)
@@ -662,7 +658,7 @@
            onOk: () => {
              data.status = 0
             this.$api.SaveOrUpdateSchoolBlock(data).then(res => {
-              if (res.result.message == 'Success') {
+              if (res.result.message === 'Success') {
                 this.$Message.success('修改成功')
                 this.getSchoolBlocks()
                 }
@@ -683,7 +679,7 @@
            onOk: () => {
              data.status = 0
             this.$api.SaveOrUpdateAllSchoolPoint(data).then(res => {
-              if (res.result.message == 'Success') {
+              if (res.result.message === 'Success') {
                 this.$Message.success('修改成功')
                 this.getSchoolPoints()
                 }

+ 21 - 26
TEAMModelOS/ClientApp/src/view/syllabus/index/Syllabus.vue

@@ -28,15 +28,15 @@
         <div class="list-col list-left">
           <Spin fix v-show="subjectLoading"></Spin>
           <template v-if="currentSubjectList.length > 0">
-            <div v-for="item in currentSubjectList" :class='["subject-item", item.rowKey==s_click_id ? "term-item-active" : ""]' @click="subjectClick(item)">
+            <div v-for="(item,index) in currentSubjectList" :key="index" :class='["subject-item", item.rowKey===s_click_id ? "term-item-active" : ""]' @click="subjectClick(item)">
               <span class="subject-name">
-                <Input v-if="item.rowKey==c_edit_id" clearable type="text" v-model="item.name"
+                <Input v-if="item.rowKey===c_edit_id" clearable type="text" v-model="item.name"
                        @on-blur="editSubject(item)"
                        @keyup.enter.native="$event.target.blur"
                        @click.stop.native="inputFocus($event)" />
                 <span v-else>{{item.name}}</span>
 
-                <span class="s-block-tools" v-show="item.rowKey==c_subject_id">
+                <span class="s-block-tools" v-show="item.rowKey===c_subject_id">
                   <Icon type="md-create" @click="handleEditSubject(item,$event)" />
                   <Icon type="md-trash" @click="handleDeleteSubject(item)" />
                 </span>
@@ -50,23 +50,23 @@
         <div class="list-col list-middle">
           <Spin fix v-show="volumesLoading"></Spin>
           <template v-if="volumesList.length > 0">
-            <div v-for="item in volumesList" :class='["subject-item", "term-item", item.rowKey==c_click_id ? "term-item-active" : ""]' @click="volumesClick(item)">
+            <div v-for="(item,index) in volumesList" :key="index" :class='["subject-item", "term-item", item.rowKey===c_click_id ? "term-item-active" : ""]' @click="volumesClick(item)">
               <span class="subject-name term-name">
-                <Input v-if="item.rowKey==t_edit_id" clearable type="text" v-model="item.name"
+                <Input v-if="item.rowKey===t_edit_id" clearable type="text" v-model="item.name"
                        @on-blur="editTerm(item)"
                        @keyup.enter.native="$event.target.blur"
                        @click.stop.native="inputFocus($event)" />
                 <span v-else class="term-name-title">{{item.name}} | {{item.termCode}}</span>
-                <span class="s-block-tools" v-show="item.rowKey==c_term_id">
+                <span class="s-block-tools" v-show="item.rowKey===c_term_id">
                   <Icon type="md-create" @click="handleEditTerm(item,$event)" />
                   <Icon type="md-trash" @click="handleDeleteVolumes(item)" />
                 </span>
               </span>
-              <span class="term-period">{{item.periodName}} | {{item.gradeName + item.termName}}  <Icon type="md-arrow-dropdown" v-show="item.rowKey==c_click_id" size="18" style="margin-bottom:3px" /></span>
+              <span class="term-period">{{item.periodName}} | {{item.gradeName + item.termName}}  <Icon type="md-arrow-dropdown" v-show="item.rowKey===c_click_id" size="18" style="margin-bottom:3px" /></span>
               <div class="term-userNum">
                 <span>共编使用者数 | {{item.termCode}} 名</span>
                 <Poptip content="content" placement="bottom-end" theme="dark">
-                  <span class="term-add-user" v-show="item.id==c_click_id">添加共编使用者</span>
+                  <span class="term-add-user" v-show="item.id===c_click_id">添加共编使用者</span>
                   <div class="pop-content" slot="content" style="padding-bottom:10px;">
                     <Tabs value="filter" :animated="false">
                       <TabPane label="选择老师" name="filter">
@@ -88,8 +88,8 @@
               </div>
               <!-- 使用者列表 -->
               <transition enter-active-class="animated slideInDown" leave-active-class="d-none">
-                <div class="term-users" v-show="item.id==c_click_id">
-                  <div class="term-user-item center" v-for="user in userList">
+                <div class="term-users" v-show="item.id===c_click_id">
+                  <div class="term-user-item center" v-for="(user,index) in userList" :key="index">
                     <img class="term-user-img" :src="user.headImg" />
                     <span class="term-user-name">{{user.name}} {{user.role}}</span>
                   </div>
@@ -113,8 +113,7 @@
              class-name="subject-modal"
              ok-text="确认"
              cancel-text="取消"
-             @on-ok="handleAddSubject"
-             @on-cancel="">
+             @on-ok="handleAddSubject">
         <p class="modal-title" v-show="currentSubjectList.length > 0">当前已选科目</p>
         <CheckboxGroup v-model="currentSubjectList" v-show="currentSubjectList.length > 0">
           <Checkbox v-for="(item,index) in currentSubjectList" :label="index" :key="index" disabled>{{item.name}}</Checkbox>
@@ -132,8 +131,7 @@
              class-name="subject-modal"
              ok-text="确认"
              cancel-text="取消"
-             @on-ok="handleAddTerm"
-             @on-cancel="">
+             @on-ok="handleAddTerm">
         <p class="modal-title">当前科目:{{subjectInfo.name}}</p>
         <p class="modal-title">请选择学段:</p>
         <Select v-model="periodSelect" style="width:200px" @on-change="periodChange" label-in-value>
@@ -157,8 +155,7 @@
              class-name="subject-modal"
              ok-text="确认"
              cancel-text="取消"
-             @on-ok="handleAddSyllabus"
-             @on-cancel="">
+             @on-ok="handleAddSyllabus">
         <p class="modal-title">当前科目:{{subjectInfo.name}}</p>
         <p class="modal-title">当前册别:{{volumesInfo.name}}</p>
         <p class="modal-title">请输入课纲名称:</p>
@@ -170,8 +167,6 @@
 
 <script>
   import Tree from '@/components/syllabus/Tree.vue'
-import { all } from 'q'
-import { setTimeout } from 'core-js'
   export default {
     name: 'Syllabus',
     components: {
@@ -225,7 +220,7 @@ import { setTimeout } from 'core-js'
       this.schoolInfo = JSON.parse(localStorage.getItem('c_role_info')).roleClaim[0] // 默认选中第一个学校
       let schoolClaims = this.schoolInfo.claim
       for (let i in schoolClaims) {
-        if (schoolClaims[i].claimType == 'SchoolCode') {
+        if (schoolClaims[i].claimType === 'SchoolCode') {
           this.schoolInfo = schoolClaims[i]
         }
       }
@@ -303,7 +298,7 @@ import { setTimeout } from 'core-js'
       // 编辑科目input失焦
       editSubject(data) {
         this.$api.SaveOrUpdateSchoolSubject(data).then(res => {
-            if (res.result.message == 'Success') {
+            if (res.result.message === 'Success') {
               this.$Message.success('修改成功')
             }
           })
@@ -312,7 +307,7 @@ import { setTimeout } from 'core-js'
       // 编辑册别input失焦
       editTerm(data) {
           this.$api.SaveOrUpdateSchoolVolume(data).then(res => {
-            if (res.result.message == 'Success') {
+            if (res.result.message === 'Success') {
               this.$Message.success('修改成功')
             }
           })
@@ -331,7 +326,7 @@ import { setTimeout } from 'core-js'
           if (currentList.length > 0) {
             for (let i in tempList) {
               for (let j in currentList) {
-                if (tempList[i].rowKey == currentList[j].code) {
+                if (tempList[i].rowKey === currentList[j].code) {
                   this.subjectList.splice(this.subjectList.indexOf(tempList[i]), 1)
                 }
               }
@@ -402,7 +397,7 @@ import { setTimeout } from 'core-js'
       // 发送请求添加课纲
       handleAddSyllabus() {
         let that = this
-        if (that.addSyllabusData.title && this.addSyllabusData.title.replace(/\s*/g, '').length != 0) {
+        if (that.addSyllabusData.title && this.addSyllabusData.title.replace(/\s*/g, '').length !== 0) {
           this.$api.SaveOrUpdateSingleNode(this.addSyllabusData).then(res => {
             that.$Message.success('添加成功')
             that.$api.FindSyllabusByVolumeCode({ VolumeCode: that.volumesInfo.rowKey, Status: 1 }).then(res => {
@@ -416,7 +411,7 @@ import { setTimeout } from 'core-js'
 
       // 发送请求添加册别
       handleAddTerm() {
-        if (this.addVolumesData.name && this.addVolumesData.name.replace(/\s*/g, '').length != 0) {
+        if (this.addVolumesData.name && this.addVolumesData.name.replace(/\s*/g, '').length !== 0) {
           // 查询是否已存在此类册别
           this.$api.FindSchoolVolumesByDict({
             SchoolCode: this.addVolumesData.schoolCode,
@@ -439,7 +434,7 @@ import { setTimeout } from 'core-js'
                     this.c_term_id = res.result.data.rowKey
                     this.c_click_id = res.result.data.rowKey
                     for (let i in this.volumesList) {
-                      if (this.volumesList[i].rowKey == res.result.data.rowKey) {
+                      if (this.volumesList[i].rowKey === res.result.data.rowKey) {
                         this.volumesList[i].name = res.result.data.name
                       }
                     }
@@ -475,7 +470,7 @@ import { setTimeout } from 'core-js'
               this.currentSubjectList.splice(data, 1)
               this.subjectList.push(data)
               this.findSchoolSubjectsByDict()
-              if (this.currentSubjectList.length == 0) {
+              if (this.currentSubjectList.length === 0) {
                 this.volumesList = []
                 this.treeData = []
               }

+ 3 - 3
TEAMModelOS/ClientApp/src/view/syllabus/index/index.vue

@@ -22,13 +22,13 @@
 <script>
   import Headers from '@/common/headers.vue'
   import Syllabus from './Syllabus.vue'
-  import KnowPoint from './KnowPoint.vue'
+  // import KnowPoint from './KnowPoint.vue'
   export default {
     name: 'app',
     components: {
       Headers: Headers,
-      Syllabus: Syllabus,
-      KnowPoint: KnowPoint
+      Syllabus: Syllabus
+      // KnowPoint: KnowPoint
     },
     data() {
       return {