Explorar o código

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

李思淳 %!s(int64=5) %!d(string=hai) anos
pai
achega
4fc1fa44f8
Modificáronse 36 ficheiros con 2524 adicións e 2984 borrados
  1. 0 10
      TEAMModelOS.GRPC/appsettings.Development.json
  2. 0 58
      TEAMModelOS.GRPC/appsettings.json
  3. 103 0
      TEAMModelOS/ClientApp/src/common/CollapseMenuLayout.less
  4. 309 0
      TEAMModelOS/ClientApp/src/common/CollapseMenuLayout.vue
  5. 68 66
      TEAMModelOS/ClientApp/src/components/learnactivity/QuestionList.less
  6. 5 5
      TEAMModelOS/ClientApp/src/components/learnactivity/QuestionList.vue
  7. 23 0
      TEAMModelOS/ClientApp/src/utils/public.js
  8. 44 281
      TEAMModelOS/ClientApp/src/view/Home.vue
  9. 0 638
      TEAMModelOS/ClientApp/src/view/evaluation/bank/ExerciseList.less
  10. 1 1
      TEAMModelOS/ClientApp/src/view/evaluation/bank/ExerciseList.vue
  11. 7 0
      TEAMModelOS/ClientApp/src/view/evaluation/bank/index.vue
  12. 9 1
      TEAMModelOS/ClientApp/src/view/evaluation/components/BaseEditExercise.vue
  13. 35 10
      TEAMModelOS/ClientApp/src/view/evaluation/components/BasePoints.vue
  14. 1 1
      TEAMModelOS/ClientApp/src/view/evaluation/index/CreateExercises.css
  15. 9 1
      TEAMModelOS/ClientApp/src/view/evaluation/index/CreateExercises.vue
  16. 8 1
      TEAMModelOS/ClientApp/src/view/evaluation/index/PickExercise.vue
  17. 1 1
      TEAMModelOS/ClientApp/src/view/evaluation/index/TestPaper.vue
  18. 8 7
      TEAMModelOS/ClientApp/src/view/evaluation/index/index.vue
  19. 2 1
      TEAMModelOS/ClientApp/src/view/evaluation/types/BaseCompletion.vue
  20. 3 1
      TEAMModelOS/ClientApp/src/view/evaluation/types/BaseJudge.vue
  21. 2 1
      TEAMModelOS/ClientApp/src/view/evaluation/types/BaseMultiple.vue
  22. 2 1
      TEAMModelOS/ClientApp/src/view/evaluation/types/BaseSingle.vue
  23. 2 1
      TEAMModelOS/ClientApp/src/view/evaluation/types/BaseSubjective.vue
  24. 1 3
      TEAMModelOS/ClientApp/src/view/knowledge-point/index/operation/AddBlock.vue
  25. 1 3
      TEAMModelOS/ClientApp/src/view/knowledge-point/index/operation/AddPoint.vue
  26. 8 0
      TEAMModelOS/ClientApp/src/view/learnactivity/ManageEvaluation.less
  27. 7 1
      TEAMModelOS/ClientApp/src/view/learnactivity/ManageEvaluation.vue
  28. 32 81
      TEAMModelOS/ClientApp/src/view/school-mgmt/ClassroomSetting/ClassroomSetting.less
  29. 796 795
      TEAMModelOS/ClientApp/src/view/school-mgmt/ClassroomSetting/ClassroomSetting.vue
  30. 5 3
      TEAMModelOS/ClientApp/src/view/school-mgmt/SystemSetting/SystemSetting.less
  31. 8 0
      TEAMModelOS/ClientApp/src/view/selflearning/ManageOrderLearn.less
  32. 9 1
      TEAMModelOS/ClientApp/src/view/selflearning/ManageOrderLearn.vue
  33. 424 423
      TEAMModelOS/ClientApp/src/view/student-account/Index.vue
  34. 2 2
      TEAMModelOS/ClientApp/src/view/syllabus/newSyllabus/Index.vue
  35. 584 580
      TEAMModelOS/ClientApp/src/view/teachcontent/index.vue
  36. 5 6
      TEAMModelOS/Controllers/Analysis/AchievementController.cs

+ 0 - 10
TEAMModelOS.GRPC/appsettings.Development.json

@@ -1,10 +0,0 @@
-{
-  "Logging": {
-    "LogLevel": {
-      "Default": "Debug",
-      "System": "Information",
-      "Grpc": "Information",
-      "Microsoft": "Information"
-    }
-  }
-}

+ 0 - 58
TEAMModelOS.GRPC/appsettings.json

@@ -1,58 +0,0 @@
-{
-  "Logging": {
-    "LogLevel": {
-      "Default": "Information",
-      "Microsoft": "Warning",
-      "Microsoft.Hosting.Lifetime": "Information"
-    }
-  },
-  "urls": "https://*:5000",
-  "GrpcServer": {
-    //用于grpc启动后注册到服务发现的ip地址段
-    "ServiceAddress": "192.168.*.*:",
-    //是否启用服务注册和服务发现,默认是true
-    "EnableDiscovery": false,
-    //服务发现服务器地址
-    "DiscoveryUrl": "http://106.12.23.251:8500",
-    //注册到服务发现的服务名称
-    "DiscoveryServiceName": "TMDOSgRPC",
-    //服务发现主动TTL的时间(秒)
-    "DiscoveryTTLInterval": 10,
-    //注册到服务发现的服务Tag
-    "DiscoveryServiceTags": "v-1.0.0.1",
-    //默认错误码
-    "DefaultErrorCode": 4300000,
-    //Jaeger配制(OpenTracing)
-    "Jaeger": {
-      //是否启用Jaeger,默认false
-      "Enable": false,
-      "AgentIp": "192.168.8.11",
-      "AgentPort": 5775
-    }
-  },
-  "Azure": {
-    "Table": {
-      "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodelostest;AccountKey=QB/zYHHCAtZfl9tf4emL1Y9ZXGc6fqZ+nNbCxIHM70HnziC8dMdEAu7+Pa4mbKLlbswV90wWHAF3nMjrKB54Lw==;EndpointSuffix=core.chinacloudapi.cn"
-    },
-    "Blob": {
-      "ConnectionString": "DefaultEndpointsProtocol=https;AccountName=teammodelstorage;AccountKey=Yq7D4dE6cFuer2d2UZIccTA/i0c3sJ/6ITc8tNOyW+K5f+/lWw9GCos3Mxhj47PyWQgDL8YbVD63B9XcGtrMxQ==;EndpointSuffix=core.chinacloudapi.cn",
-      "Container": "teammodelos"
-    },
-    "CosmosDB": {
-      "ConnectionString": "https://192.168.8.128:8081",
-      "ConnectionKey": "ddwAeGSf8Lsf1kxPXmdqnyzzi3CkJ0KW2BTPZ7Zq1N7qbJic5j7AaQ+WbF86F3rnzuDgGM1yg8O7BUFo93iA8w==",
-      "Database": "TEAMModelOS",
-      "CollectionThroughput": 400,
-      "ScanModel": [ "TEAMModelOS.Service" ]
-    },
-    "Redis": {
-      "ConnectionString": "106.12.23.251:6379,password=habook,ssl=false,abortConnect=False,defaultDatabase=13,writeBuffer=10240,poolsize=50,prefix=habook:"
-    }
-  },
-  "AllowedHosts": "*",
-  "Kestrel": {
-    "EndpointDefaults": {
-      "Protocols": "Http2"
-    }
-  }
-}

+ 103 - 0
TEAMModelOS/ClientApp/src/common/CollapseMenuLayout.less

@@ -0,0 +1,103 @@
+#app {
+    font-family: "Avenir", Helvetica, Arial, sans-serif;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    color: #2c3e50;
+    height: 100%;
+}
+
+.layout {
+    background: #f5f7f9;
+    height: 100%;
+    overflow: hidden;
+
+    .header {
+        position: fixed;
+        top: 0px;
+        right: 0px;
+        z-index: 999;
+        width: ~"calc(100% - 240px)";
+        height: 83px;
+        background: #000;
+        transition: width 0.5s;
+    }
+
+    .biz-menu {
+        height: 100%;
+        position: absolute;
+        top: 0px;
+        left: 0px;
+        z-index: 999;
+        background:#000;
+    }
+
+    .content-wrap {
+        position: absolute;
+        left: 0px;
+        top: 83px;
+        bottom: 0px;
+        width: 100%;
+        padding-left: 240px;
+        overflow-y: auto;
+        background:#191919;
+    }
+
+    .collapsed-padding {
+        padding-left: 78px;
+    }
+}
+
+.unit-logo-box {
+    /*margin-bottom: 10px;*/
+    height: 83px;
+    line-height: 55px;
+}
+
+.collapsed-header-width {
+    width: ~"calc(100% - 78px)" !important;
+    transition: width 0.2s !important;
+}
+
+.collapsed-logo-width {
+    height: 40px !important;
+    width: 40px !important;
+    transition: width 0.2s, height 0.2s;
+}
+
+.logo-wrap {
+    display: flex;
+    align-items: center;
+    margin-left: -5px;
+
+    .unit-logo {
+        height: 30px;
+    }
+
+    .unit-name {
+        color: #D0B772;
+        display: inline-block;
+        margin-left: 15px;
+        font-family: cursive;
+        font-size: 24px;
+        font-weight: 800;
+    }
+}
+
+
+.rotate-icon {
+    transform: rotate(-90deg);
+    transition: transform 0.2s ease;
+}
+.menu-icon {
+    float: left;
+    line-height: 83px;
+    margin-left: 30px;
+    cursor: pointer;
+    color:white;
+    font-size:24px;
+}
+.collapse-icon-size {
+    font-size: 26px !important;
+    margin-left: -4px;
+    margin-top:15px;
+}

+ 309 - 0
TEAMModelOS/ClientApp/src/common/CollapseMenuLayout.vue

@@ -0,0 +1,309 @@
+<template>
+    <div class="layout">
+        <!-- 头部菜单栏 -->
+        <Header :class="isCollapsed ?'collapsed-header-width header':'header'">
+            <Icon :class="rotateIcon"
+                  type="md-menu"
+                  @click="changeMenuStatus" />
+            <slot name="header-content"></slot>
+        </Header>
+        <!-- 侧边菜单栏 -->
+        <Sider class="biz-menu"
+               ref="side1"
+               hide-trigger
+               collapsible
+               width="248"
+               :collapsed-width="78"
+               v-model="isCollapsed">
+            <Menu width="auto" accordion :class="menuitemClasses">
+                <Submenu name="unit-logo-box" class="unit-logo-box">
+                    <template slot="title">
+                        <div class="logo-wrap">
+                            <img src="../assets/tmd_logo.png"
+                                 :class="isCollapsed ? 'collapsed-logo-width unit-logo':'unit-logo'" />
+                            <span class="unit-name">醍摩豆云平台</span>
+                        </div>
+                    </template>
+                </Submenu>
+                <Submenu :name="index" v-for="(item,index) in menuTree">
+                    <template slot="title">
+                        <Poptip trigger="hover"
+                                placement="right-start"
+                                width="160"
+                                transfer
+                                popper-class="poptip-style"
+                                padding="0px 0px">
+                            <Icon :type="item.icon" :class="isCollapsed ? 'collapse-icon-size':''" size="20" />
+                            <span>{{item.name}}</span>
+                            <div slot="content" v-if="isCollapsed" class="poptop-content-radius">
+                                <Menu theme="dark" width="120" v-for="(menuItem,i) in item.child">
+                                    <MenuItem :name="menuItem.router" :to="menuItem.router">{{menuItem.name}}</MenuItem>
+                                </Menu>
+                            </div>
+                        </Poptip>
+                    </template>
+                    <MenuItem :name="menuItem.router" :to="menuItem.router" v-for="(menuItem,i) in item.child" @click.native="closeCollapse">
+                        <span>
+                            {{menuItem.name}}
+                            <label style="color:aqua;margin-left:2px;">
+                                {{menuItem.tag}}
+                            </label>
+                        </span>
+                        
+                    </MenuItem>
+                </Submenu>
+            </Menu>
+        </Sider>
+        <!-- Body内容部分 -->
+        <Layout :class="isCollapsed ?'collapsed-padding content-wrap':'content-wrap'">
+            <slot name="content"></slot>
+        </Layout>
+    </div>
+</template>
+<script>
+    export default {
+        //props:['menuTree'],
+        data() {
+            return {
+                isCollapsed: false,
+                menuTree: [
+                    {
+                        icon: 'ios-stats',
+                        name: '学情分析系统',
+                        router: '',
+                        child: [
+                            {
+                                icon: '',
+                                name: '学情分析仪表盘',
+                                router: '/home',
+                                tag:'T/M'
+                            }
+                        ]
+                    },
+                    {
+                        icon: 'ios-school',
+                        name: '智慧校园管理',
+                        router: '',
+                        child: [
+                            {
+                                icon: '',
+                                name: '校园基础数据',
+                                router: '/home/system',
+                                tag:'M'
+                            },
+                            {
+                                icon: '',
+                                name: '班级教室管理',
+                                router: '/home/classroom',
+                                tag:'M'
+                            },
+                            {
+                                icon: '',
+                                name: '学生账号管理',
+                                router: '/home/studentAccount',
+                                tag:'M'
+                            },
+                            {
+                                icon: '',
+                                name: '教师账号管理',
+                                router: '/home/404',
+                                tag:'×'
+                            },
+                            {
+                                icon: '',
+                                name: '软件授权管理',
+                                router: '/home/404',
+                                tag:'×'
+                            }
+                        ]
+                    },
+                    {
+                        icon: 'ios-people',
+                        name: '课程管理',
+                        router: '',
+                        child: [
+                            {
+                                icon: '',
+                                name: '课程管理',
+                                router: '/home/courseManage',
+                                tag:'T'
+                            }
+                        ]
+                    },
+                    {
+                        icon: 'ios-paper',
+                        name: '教材内容管理',
+                        router: '',
+                        child: [
+                            {
+                                icon: '',
+                                name: '课纲管理',
+                                router: '/home/syllabus',
+                                tag:'T'
+                            },
+                            {
+                                icon: '',
+                                name: '内容管理',
+                                router: '/home/teachcontent',
+                                tag:'T'
+                            },
+                            {
+                                icon: '',
+                                name: '题目/库管理',
+                                router: '/home/testPaperList',
+                                tag:'T'
+                            },
+                            {
+                                icon: '',
+                                name: '知识点管理',
+                                router: '/home/knowledge',
+                                tag:'T'
+                            }
+                        ]
+                    },
+                    {
+                        icon: 'ios-star',
+                        name: '活动管理',
+                        router: '',
+                        child: [
+                            {
+                                icon: '',
+                                name: '评测活动',
+                                router: '/home/manageEvaluation',
+                                tag:'T'
+                            },
+                            {
+                                icon: '',
+                                name: '自主学习活动',
+                                router: '/home/manageOrderLearn',
+                                tag:'T'
+                            }
+                        ]
+                    }
+                ]
+            }
+        },
+        methods: {
+            closeCollapse() {
+                this.isCollapsed = !this.isCollapsed
+            },
+            changeMenuStatus() {
+                this.$refs.side1.toggleCollapse()
+            }
+        },
+        computed: {
+            rotateIcon() {
+                return ["menu-icon", this.isCollapsed ? "rotate-icon" : ""]
+            },
+            menuitemClasses() {
+                return ["menu-item", this.isCollapsed ? "collapsed-menu" : ""]
+            }
+        }
+    };
+</script>
+<style lang="less" scoped>
+    @import "./CollapseMenuLayout.less";
+</style>
+<style lang="less">
+   
+    .layout .ivu-layout-header {
+        padding: 0px;
+    }
+
+    .biz-menu .ivu-menu-light {
+        background: #000;
+        color: #CCCCCC;
+    }
+
+    .biz-menu .ivu-menu-vertical.ivu-menu-light:after {
+        width: 0px;
+    }
+
+    .biz-menu
+    .ivu-menu-light.ivu-menu-vertical
+    .ivu-menu-item-active:not(.ivu-menu-submenu) {
+        background: #101117;
+        z-index: 2;
+    }
+
+    .menu-item {
+        color:red;
+    }
+    .menu-item span {
+        display: inline-block;
+        overflow: hidden;
+        margin-left: 11px;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        font-size:16px;
+        
+        vertical-align: middle;
+        transition: width 0.2s ease 0.2s;
+        font-family: Roboto,-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft JhengHei !important;
+    }
+
+    .menu-item i {
+        transform: translateX(0px);
+        transition: font-size 0.2s ease, transform 0.2s ease;
+        vertical-align: middle;
+        font-size: 16px;
+    }
+    .menu-item a.ivu-menu-item {
+        color:#CCCCCC;
+    }
+
+    .collapsed-menu span {
+        width: 0px;
+        transition: width 0.2s ease;
+    }
+
+    .collapsed-menu i {
+        transform: translateX(5px);
+        transition: font-size 0.2s ease 0.2s, transform 0.2s ease 0.2s;
+        vertical-align: middle;
+        font-size: 22px;
+    }
+
+    .collapsed-menu .ivu-icon-ios-arrow-down:before {
+        display: none;
+    }
+
+    .unit-logo-box .ivu-icon-ios-arrow-down:before {
+        display: none;
+    }
+
+    .collapsed-menu .ivu-menu-submenu .ivu-menu {
+        display: none;
+    }
+
+    .poptip-style {
+        left: 80px !important;
+        background: #515a6e;
+    }
+
+        .poptip-style .ivu-iocn {
+            color:#CCCCCC;
+        }
+        .poptip-style .ivu-poptip-arrow,
+        .poptip-style .ivu-poptip-arrow:after {
+            display: none;
+        }
+
+        .poptip-style .ivu-poptip-inner {
+            border-radius: 8px;
+        }
+
+    .ivu-poptip-popper {
+        padding: 0px !important;
+        border-radius: 8px;
+    }
+    .poptop-content-radius .ivu-menu:first-child,.poptop-content-radius .ivu-menu:first-child .ivu-menu-item{
+        border-top-left-radius: 5px;
+        border-top-right-radius: 5px;
+    }
+
+    .poptop-content-radius .ivu-menu:last-child, .poptop-content-radius .ivu-menu:last-child .ivu-menu-item{
+        border-bottom-left-radius: 5px;
+        border-bottom-right-radius: 5px;
+    }
+</style>

+ 68 - 66
TEAMModelOS/ClientApp/src/components/learnactivity/QuestionList.less

@@ -6,91 +6,93 @@
 @second-fontSize: 16px;
 @second-fontSize: 16px;
 
 
 .question-item-wrap {
 .question-item-wrap {
-  background-color: #505050;
-  margin-bottom: 3px;
-  padding: 10px 30px 10px 10px;
-  /*max-height: 400px;
-  transition: max-height ease 5.5s;*/
-  position:relative;
-  .toggle-detail-icon {
-    position:absolute;
-    right: 20px;
-    top:10px;
-    cursor: pointer;
-  }
-
-  .toggle-detail-icon-up {
-    transform: rotate(180deg);
-    transition: transform ease 0.5s;
-  }
+    background-color: #505050;
+    margin-bottom: 3px;
+    padding: 10px 30px 10px 10px;
+    position: relative;
+    border-radius:4px;
+    .toggle-detail-icon {
+        position: absolute;
+        right: 20px;
+        top: 10px;
+        cursor: pointer;
+    }
 
 
-  .toggle-detail-icon-down {
-    transform: rotate(0deg);
-    transition: transform ease 0.5s;
-  }
+    .toggle-detail-icon-up {
+        transform: rotate(180deg);
+        transition: transform ease 0.5s;
+    }
 
 
-  .question-content {
-    color: white;
-    padding-right:80px;
-    .question-order {
-      margin-right: 5px;
+    .toggle-detail-icon-down {
+        transform: rotate(0deg);
+        transition: transform ease 0.5s;
     }
     }
-  }
 
 
+    .question-content {
+        cursor: pointer;
+        color: white;
+        padding-right: 80px;
 
 
+        .question-order {
+            margin-right: 5px;
+        }
+    }
 
 
-  .option-item {
-    margin-top: 10px;
-    color: white;
+    .option-item {
+        margin-top: 10px;
+        color: white;
 
 
-    .option-order {
-      margin-right: 15px;
+        .option-order {
+            margin-right: 15px;
+        }
     }
     }
-  }
 }
 }
 
 
 .question-item-wrap-detail {
 .question-item-wrap-detail {
-  /*max-height: 500px;*/
+    /*max-height: 500px;*/
 }
 }
 
 
 .question-detail {
 .question-detail {
-  padding-left: 15px;
-  color: white;
-
-  .answer-label {
-    color: rgb(16, 171, 231);
-    font-weight: 600;
-    border-left: 3px solid rgb(16, 171, 231);
-    padding-left: 8px;
-    line-height: 12px;
-    margin-top: 10px;
-  }
-
-  .answer-detail {
-    padding-left: 12px;
-    margin-top: 5px;
-  }
+    padding-left: 15px;
+    color: white;
+
+    .answer-label {
+        color: rgb(16, 171, 231);
+        font-weight: 600;
+        border-left: 3px solid rgb(16, 171, 231);
+        padding-left: 8px;
+        line-height: 12px;
+        margin-top: 10px;
+    }
+
+    .answer-detail {
+        padding-left: 12px;
+        margin-top: 5px;
+    }
 }
 }
+
 .choose-question-btn {
 .choose-question-btn {
-  position: absolute;
-  right: 60px;
-  top: 10px;
-  cursor: pointer;
+    position: absolute;
+    right: 60px;
+    top: 10px;
+    cursor: pointer;
 }
 }
+
 .choose-question-btn:hover {
 .choose-question-btn:hover {
-  color: cyan;
+    color: cyan;
 }
 }
+
 .question-control-wrap {
 .question-control-wrap {
-  width: 100%;
-  margin: 15px 0px;
-  text-align: right;
+    width: 100%;
+    margin: 15px 0px;
+    text-align: right;
 
 
-  .question-control-btn {
-    margin-left: 30px;
-    cursor: pointer;
-  }
+    .question-control-btn {
+        margin-left: 30px;
+        cursor: pointer;
+    }
 
 
-  .question-control-btn:hover{
-    color:aqua;
-  }
-}
+    .question-control-btn:hover {
+        color: aqua;
+    }
+}

+ 5 - 5
TEAMModelOS/ClientApp/src/components/learnactivity/QuestionList.vue

@@ -1,14 +1,14 @@
 <template>
 <template>
     <div>
     <div>
         <div :class="index == openIndex ? 'question-item-wrap-detail question-item-wrap':'question-item-wrap'" v-for="(item,index) in questions">
         <div :class="index == openIndex ? 'question-item-wrap-detail question-item-wrap':'question-item-wrap'" v-for="(item,index) in questions">
-            <p class="question-content">
+            <div class="question-content" @click="toglleQuestionDetail(index)">
 
 
                 <span class="question-order">{{index+1+'.'}}</span>
                 <span class="question-order">{{index+1+'.'}}</span>
-                <span class="question-text" v-html='item.question'></span>
+                <span class="question-text" v-html='item.question' ></span>
                 <!--<slot name="score"></slot>-->
                 <!--<slot name="score"></slot>-->
-                <Icon v-if="config.showSelect" type="ios-cart" title="选题" class="choose-question-btn" size="25" @click="selectQuestion(item)" :color="selectedId.indexOf(item.id) == -1 ? 'white':'aqua'"/>
-                <Icon type="ios-arrow-dropdown" :color="index == openIndex? 'cyan':'white'" size="25" @click="toglleQuestionDetail(index)" :class="index == openIndex ? 'toggle-detail-icon toggle-detail-icon-up':'toggle-detail-icon toggle-detail-icon-down'" :title="openIndex == index ? '收起':'查看详情'" />
-            </p>
+                <Icon v-if="config.showSelect" type="ios-cart" title="选题" class="choose-question-btn" size="25" @click.stop="selectQuestion(item)" :color="selectedId.indexOf(item.id) == -1 ? 'white':'aqua'"/>
+                <Icon type="ios-arrow-dropdown" :color="index == openIndex? 'cyan':'white'" size="25" @click.stop="toglleQuestionDetail(index)" :class="index == openIndex ? 'toggle-detail-icon toggle-detail-icon-up':'toggle-detail-icon toggle-detail-icon-down'" :title="openIndex == index ? '收起':'查看详情'" />
+            </div>
             <div v-show="index == openIndex" :class="index == openIndex ? 'question-detail animated  fadeIn':'question-detail animated  fadeOut'">
             <div v-show="index == openIndex" :class="index == openIndex ? 'question-detail animated  fadeIn':'question-detail animated  fadeOut'">
                 <p class="option-item" v-for="(optionItem,index) in item.option">
                 <p class="option-item" v-for="(optionItem,index) in item.option">
                     <span class="option-order">{{optionItem.code+'.'}}</span>
                     <span class="option-order">{{optionItem.code+'.'}}</span>

+ 23 - 0
TEAMModelOS/ClientApp/src/utils/public.js

@@ -121,6 +121,29 @@ export default {
         mousedownStep: 30
         mousedownStep: 30
       }
       }
     },
     },
+
+    // wangEditor菜单配置
+    wangEditorMenu: [
+        'head',  // 标题
+        'bold',  // 粗体
+        'fontSize',  // 字号
+        'fontName',  // 字体
+        'italic',  // 斜体
+        'underline',  // 下划线
+        'strikeThrough',  // 删除线
+        'foreColor',  // 文字颜色
+        'backColor',  // 背景颜色
+        'link',  // 插入链接
+        'list',  // 列表
+        'justify',  // 对齐方式
+        'quote',  // 引用
+        'emoticon',  // 表情
+        'image',  // 插入图片
+        'table',  // 表格
+        'code',  // 插入代码
+        'undo',  // 撤销
+        'redo'  // 重复
+    ],
     // 生成随机UUID工具
     // 生成随机UUID工具
     randomId: function() {
     randomId: function() {
         return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
         return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)

+ 44 - 281
TEAMModelOS/ClientApp/src/view/Home.vue

@@ -1,13 +1,8 @@
 <template>
 <template>
     <div id="main">
     <div id="main">
-        <div class="header-container">
-            <!-- 头部左侧按钮及LOGO -->
-            <div class="header-left-box fl-around">
-                <Icon type="md-menu" class="header-btn-menu" @click="isOpenDrawer = true" />
-                <img src="../assets/mark.svg" />
-            </div>
+        <CollapseMenuLayout>
             <!-- 头部右侧个人中心部分 -->
             <!-- 头部右侧个人中心部分 -->
-            <div class="header-right-box fl-around">
+            <div class="header-right-box fl-around" slot="header-content">
                 <Icon type="md-help-circle" />
                 <Icon type="md-help-circle" />
                 <Icon type="ios-settings" />
                 <Icon type="ios-settings" />
                 <Icon type="ios-bug" />
                 <Icon type="ios-bug" />
@@ -24,104 +19,21 @@
                     </DropdownMenu>
                     </DropdownMenu>
                 </Dropdown>
                 </Dropdown>
             </div>
             </div>
-
-            <!-- 全局抽屉部分 -->
-            <Drawer placement="left" :closable="false" v-model="isOpenDrawer" class-name="drawer-container" :width="270">
-                <div class="drawer-header fl-center" slot="header">
-                    <Icon type="md-menu" class="header-btn-menu" @click="isOpenDrawer = true" />
-                    <img src="../assets/mark.svg" />
-                </div>
-
-                <!-- 抽屉菜单栏 -->
-                <Menu theme="dark" :open-names="['0']" accordion style="width:100%;padding-left:30px;margin-top:20px;" @on-select="closeMenu">
-                    <Submenu name="0">
-                        <template slot="title">
-                            <Icon type="ios-paper" size="18" />
-                            <span class="first-menu">学情分析系统</span>
-                        </template>
-                        <MenuItem name="0-1" to="/home">学情分析仪表盘<span style="color:aqua;margin-left:5px;">√</span></MenuItem>
-                    </Submenu>
-                    <Submenu name="1">
-                        <template slot="title">
-                            <Icon type="ios-paper" size="18" />
-                            <span class="first-menu">智慧校园管理</span>
-                        </template>
-                        <MenuItem name="1-1" to="/home/system">校园基础数据<span style="color:aqua;margin-left:5px;">√</span></MenuItem>
-                        <MenuItem name="1-4" to="/home/classroom">班级教室管理<span style="color:aqua;margin-left:5px;">√</span></MenuItem>
-                        <MenuItem name="1-2" to="/home/studentAccount">学生账号管理<span style="color:aqua;margin-left:5px;">√</span></MenuItem>
-                        <MenuItem name="1-3" to="/home/404">教师账号管理</MenuItem>
-                        <MenuItem name="1-5" to="/home/404">软件及授权管理</MenuItem>
-                    </Submenu>
-                    <Submenu name="2">
-                        <template slot="title">
-                            <Icon type="ios-people" size="18" />
-                            <span class="first-menu">课程管理</span>
-                        </template>
-                        <MenuItem name="2-2" to="/home/courseManage">课程管理<span style="color:aqua;margin-left:5px;">√</span></MenuItem>
-
-                    </Submenu>
-                    <Submenu name="3">
-                        <template slot="title">
-                            <Icon type="ios-folder" size="18" />
-                            <span class="first-menu">教材内容管理</span>
-                        </template>
-                        <MenuItem name="3-1" to="/home/syllabus">课纲管理<span style="color:aqua;margin-left:5px;">√</span></MenuItem>
-                        <MenuItem name="3-3" to="/home/teachcontent">内容管理<span style="color:aqua;margin-left:5px;">√</span></MenuItem>
-                        <MenuItem name="3-4" to="/home/evaluation/testPaperList">题目/库管理<span style="color:aqua;margin-left:5px;">√</span></MenuItem>
-                        <MenuItem name="3-5" to="/home/knowledge">知识点管理<span style="color:aqua;margin-left:5px;">√</span></MenuItem>
-                    </Submenu>
-                    <Submenu name="learnActivity">
-                        <template slot="title">
-                            <Icon type="md-bug" size="18" />
-                            <span class="first-menu">学习活动服务</span>
-                        </template>
-                        <Submenu name="create">
-                            <template slot="title">
-                                <span class="first-menu">创建学习活动</span>
-                            </template>
-                            <MenuItem name="createEvaluation" to="/home/createEvaluation">评测活动</MenuItem>
-                            <MenuItem name="createUnit" to="/home/createLearnUnit">最小单元</MenuItem>
-                            <MenuItem name="createOrder" to="/home/createOrderLearn">编序式活动</MenuItem>
-                            <MenuItem name="createPreview" to="/404">课前预习</MenuItem>
-                            <MenuItem name="createHomework" to="/404">作业活动</MenuItem>
-                        </Submenu>
-                        <Submenu name="manage">
-                            <template slot="title">
-                                <span class="first-menu">管理学习活动</span>
-                            </template>
-                            <MenuItem name="manageEvaluation" to="/home/manageEvaluation">评测活动</MenuItem>
-                            <MenuItem name="manageLearn" to="/home/manageUnit">最小自学单元</MenuItem>
-                            <MenuItem name="manageOrder" to="/home/manageOrderLearn">编序式活动</MenuItem>
-                        </Submenu>
-                        <MenuItem name="activityReport" to="/home/activityReport">
-                            <span style="font-size:16px;">学习活动仪表</span>
-                        </MenuItem>
-                    </Submenu>
-                    <!--<Submenu name="5">
-                      <template slot="title">
-                        <Icon type="ios-stats" size="18" />
-                        <span class="first-menu">班级智慧服务</span>
-                      </template>
-                      <MenuItem name="5-1">区班校活动记录簿</MenuItem>
-                      <MenuItem name="5-3">操行成绩管理</MenuItem>
-                      <MenuItem name="5-4">成绩总览与登录</MenuItem>
-                      <MenuItem name="5-5" to="/totalIndex">学情仪表盘</MenuItem>
-                    </Submenu>-->
-                </Menu>
-
-            </Drawer>
-
-        </div>
-        <div id="content">
-            <router-view></router-view>
-        </div>
+            <div id="content" slot="content">
+                <router-view></router-view>
+            </div>
+        </CollapseMenuLayout>
     </div>
     </div>
 </template>
 </template>
 
 
 <script>
 <script>
+    import CollapseMenuLayout from '@/common/CollapseMenuLayout.vue'
     export default {
     export default {
         name: 'headers',
         name: 'headers',
         props: ['parentToChild', 'identityselect'],
         props: ['parentToChild', 'identityselect'],
+        components: {
+            CollapseMenuLayout
+        },
         data() {
         data() {
             return {
             return {
                 isOpenDrawer: false
                 isOpenDrawer: false
@@ -164,38 +76,12 @@
 </script>
 </script>
 
 
 <style scoped>
 <style scoped>
-    .header-container {
-        width: 100%;
-        height: 83px;
-        background: #191919;
-        display: flex;
-        flex-direction: row;
-        justify-content: space-between;
-        border-bottom: 1px solid rgba(128,128,128,.3);
-        position: fixed;
-        z-index: 999;
-    }
-
-    .header-left-box {
-        width: 220px;
-        height: 100%;
-    }
-
-        .header-left-box .header-btn-menu {
-            color: #fff;
-            font-size: 24px;
-            margin-right: 20px;
-            cursor: pointer;
-        }
-
-        .header-left-box img {
-            width: 140px;
-        }
-
     .header-right-box {
     .header-right-box {
         width: 270px;
         width: 270px;
         border-left: 2px solid #595959;
         border-left: 2px solid #595959;
         margin: 20px;
         margin: 20px;
+        line-height: 1.5;
+        float: right;
     }
     }
 
 
         .header-right-box .ivu-icon {
         .header-right-box .ivu-icon {
@@ -210,82 +96,6 @@
             border: 2px solid #595959;
             border: 2px solid #595959;
         }
         }
 
 
-    .drawer-header {
-        height: 83px;
-        width: 100%;
-        background: #000;
-    }
-
-        .drawer-header .header-btn-menu {
-            color: #fff;
-            font-size: 22px;
-            margin-right: 20px;
-            cursor: pointer;
-            background: #afafaf;
-            border-radius: 50%;
-            padding: 5px;
-        }
-
-        .drawer-header img {
-            width: 140px;
-            margin-top: 4px;
-            margin-right: 3px;
-        }
-
-    .drawer-body {
-        margin-top: 50px;
-    }
-
-        .drawer-body .drawer-menu-item {
-            width: 100%;
-        }
-
-            .drawer-body .drawer-menu-item .drawer-menu-top {
-                width: 100%;
-                height: 10px;
-            }
-
-                .drawer-body .drawer-menu-item .drawer-menu-top img {
-                    width: 20px;
-                }
-
-            .drawer-body .drawer-menu-item .drawer-menu-name {
-                color: #b5b5b5;
-                font-size: 16px;
-                font-weight: bolder;
-                margin-left: 20px;
-                margin-top: 7px;
-                letter-spacing: 1px;
-            }
-
-        .drawer-body .drawer-menu-bottom {
-            width: 100%;
-            padding: 20px 10px;
-            margin: 20px 0;
-            background-image: linear-gradient(90deg, rgba(30,30,30,0) 0%, rgba(110,110,110,.2) 50%, rgba(110,110,110,.4) 100%);
-        }
-
-            .drawer-body .drawer-menu-bottom ul {
-                list-style: none;
-                width: 100%;
-                padding-left: 80px;
-            }
-
-                .drawer-body .drawer-menu-bottom ul li {
-                    padding: 8px 0;
-                    width: 100%;
-                    font-size: 14px;
-                    font-weight: bold;
-                    color: #8a8a8a;
-                    cursor: pointer;
-                }
-
-    .fl-center {
-        display: flex;
-        align-items: center;
-        justify-content: center;
-    }
-
     .fl-around {
     .fl-around {
         display: flex;
         display: flex;
         align-items: center;
         align-items: center;
@@ -294,93 +104,46 @@
 </style>
 </style>
 
 
 <style>
 <style>
-      html, body {
-          height: 100%;
-          margin: 0px;
-          padding: 0px;
-      }
-
-      #main {
-          width: 100%;
-          height: 100%;
-      }
-
-      #content {
-          width: 100%;
-          position: absolute;
-          top: 83px;
-          left: 0px;
-          bottom: 0px;
-          overflow-y: auto;
-          background: #212121;
-      }
-      /*修改iview抽屉样式*/
-      .drawer-container .ivu-drawer-left {
-          background: #000;
-          font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI','Microsoft JhengHei' !important;
-      }
 
 
-      .drawer-container .ivu-drawer-header {
-          padding: 0;
-          border: none;
-      }
-
-      .drawer-container .ivu-drawer-content {
-          background: #000;
-      }
-      /*.drawer-container .ivu-drawer-wrap {
-      z-index:9999;
-    }*/
-      .drawer-container .ivu-drawer-body {
-          padding: 0;
-      }
-
-      /*重绘滚动条样式*/
-      .scrollstyle::-webkit-scrollbar {
-          width: 5px;
-      }
-
-      .ivu-drawer-body::-webkit-scrollbar-track {
-          display: none;
-      }
-
-      .scrollstyle::-webkit-scrollbar-thumb {
-          border-radius: 10px;
-          background: #94998a;
-      }
+    html, body {
+        height: 100%;
+        width:100%;
+        margin: 0px;
+        padding: 0px;
+    }
 
 
-          .scrollstyle::-webkit-scrollbar-thumb:hover {
-              /*background: #555;*/
-          }
+    #main {
+        width: 100%;
+        height: 100%;
+    }
 
 
-      .scrollstyle::-webkit-scrollbar-button {
-          display: none;
-      }
+        #main .layout {
+            border: none;
+            border-radius: 0px;
+        }
 
 
-      .drawer-container .ivu-menu-dark {
-          background: black;
-      }
+    #content {
+        height: 100%;
+        background: #191919;
+    }
 
 
-          .drawer-container .ivu-menu-dark.ivu-menu-vertical .ivu-menu-opened .ivu-menu-submenu-title {
-              background: black;
-          }
+    /*重绘滚动条样式*/
+    .scrollstyle::-webkit-scrollbar {
+        width: 5px;
+    }
 
 
-      .drawer-container .ivu-menu-opened .ivu-menu {
-          background-image: linear-gradient(to right, black, #2C2C2C);
-      }
+    .ivu-drawer-body::-webkit-scrollbar-track {
+        display: none;
+    }
 
 
-      .drawer-container .first-menu {
-          color: #b5b5b5;
-          font-size: 16px;
-          font-weight: bolder;
-          /*margin-left: 20px;*/
-          margin-top: 7px;
-          letter-spacing: 1px;
-      }
+    .scrollstyle::-webkit-scrollbar-thumb {
+        border-radius: 10px;
+        background: #94998a;
+    }
 
 
-      .drawer-container .ivu-menu-dark.ivu-menu-vertical .ivu-menu-item:hover, .drawer-container .ivu-menu-dark.ivu-menu-vertical .ivu-menu-submenu-title:hover {
-          background: black;
-      }
+    .scrollstyle::-webkit-scrollbar-button {
+        display: none;
+    }
 </style>
 </style>
 
 
 <style lang="less">
 <style lang="less">

+ 0 - 638
TEAMModelOS/ClientApp/src/view/evaluation/bank/ExerciseList.less

@@ -1,638 +0,0 @@
-.ev-list-container {
-    user-select: none !important;
-    position: relative;
-    font-family: '微軟正黑體', 'Heiti TC' !important;
-}
-
-.ev-list-container .ev-header {
-    background: #fff;
-    padding: 10px;
-    display: flex;
-    align-items: center;
-}
-
-.ev-list-container .ev-title {
-    font-size: 20px;
-    font-weight: bold;
-    margin-left: 5px;
-    vertical-align: middle;
-}
-
-.ev-list-container .ev-length {
-    font-size: 12px;
-    font-weight: bold;
-    margin-left: 30px;
-    display: inline-block;
-    margin-top: 5px;
-    vertical-align: text-top;
-}
-
-.ev-list-container .ivu-divider-horizontal {
-    margin: 15px 0;
-}
-
-.ev-list-container .no-data-text {
-    width: 100%;
-    padding: 30px;
-    background: #fff;
-    display: flex;
-    flex-direction: column;
-    justify-content: center;
-    align-items: center;
-    margin-top: 10px;
-    font-size: 16px;
-}
-
-.ev-list-operation {
-    width: 100%;
-    height: 60px;
-    background: #fff;
-    padding: 10px;
-    /*border-top:1px dashed rgba(128, 128, 128,0.4);*/
-    margin-top: 10px;
-    display: flex;
-    flex-direction: row;
-    align-items: center;
-    justify-content: space-between;
-}
-
-.ev-list-operation .ivu-checkbox-wrapper {
-    font-size: 14px;
-}
-
-.ev-list-operation .ivu-checkbox {
-    margin: 10px;
-}
-
-.ev-list-operation .import-exercise {
-    font-weight: bold;
-    color: rgb(16, 171, 231);
-    font-size: 16px;
-    display: flex;
-}
-
-.ev-list-operation .import-exercise .ivu-btn {
-    margin-right: 10px;
-}
-
-.ev-list-operation .ivu-icon {
-    font-size: 16px;
-    margin-right: 6px;
-    cursor: pointer;
-    vertical-align: initial;
-}
-
-.ev-list-operation .ivu-checkbox-checked .ivu-checkbox-inner {
-    background: #01b4ef;
-    border-color: #01b4ef;
-}
-
-.ev-list-operation .operation-cart {
-    position: fixed;
-    right: 70px;
-    bottom: -10px;
-    height: 100px;
-    width: 100px;
-    padding: 0 10px;
-    display: flex;
-    flex-direction: row;
-    justify-content: center;
-    align-items: center;
-    z-index: 999;
-}
-
-.ev-list-operation .operation-cart img {
-    width: 60px;
-    height: 50px;
-    cursor: pointer;
-}
-
-.ev-list-operation .operation-cart span {
-    cursor: pointer;
-    font-size: 16px;
-    font-weight: bold;
-    margin-right: 10px;
-}
-
-.ev-list-operation .ivu-poptip-title {
-    display: none;
-}
-
-.ev-list-operation .ivu-poptip-body {
-    padding: 0;
-}
-
-.ev-list-operation .ivu-poptip-popper[x-placement^=top] .ivu-poptip-arrow::after {
-    border-top-color: rgb(16, 171, 231);
-}
-
-.basket-content {
-    width: 300px;
-}
-
-.basket-content .basket-title {
-    height: 40px;
-    font-size: 16px;
-    text-align: center;
-    line-height: 40px;
-    color: #fff;
-    background: rgb(16, 171, 231);
-}
-
-.basket-content .basket-body {
-    width: 100%;
-    padding: 20px;
-}
-
-.basket-content .basket-body .ivu-progress {
-    width: 45%;
-}
-
-.basket-content .basket-body .ivu-progress-inner {
-    vertical-align: unset;
-}
-
-.basket-content .basket-body .basket-item {
-    margin-top: 15px;
-}
-
-.basket-content .basket-body .basket-delete {
-    font-size: 14px;
-    margin-left: 5px;
-    color: #01b4ef;
-}
-
-.basket-content .basket-footer {
-    height: 40px;
-    font-size: 16px;
-    text-align: center;
-    line-height: 40px;
-    margin-top: 20px;
-    color: #fff;
-    background: rgb(16, 171, 231);
-    cursor: pointer;
-}
-
-.basket-content .basket-footer-no {
-    height: 40px;
-    font-size: 16px;
-    text-align: center;
-    line-height: 40px;
-    margin-top: 20px;
-    color: #fff;
-    background: #ccc;
-    cursor: pointer;
-}
-
-
-
-.ev-content {
-    background: none;
-}
-
-.content-wrap {
-    position: relative;
-    width: 100%;
-    height: auto;
-    display: flex;
-    flex-direction: column;
-}
-
-.content-wrap .exercise-item {
-    width: 100%;
-    height: auto;
-    padding: 10px 20px 10px 20px;
-    margin-top: 10px;
-    font-size: 16px;
-    font-weight: 600;
-    background: #fff;
-    cursor: pointer;
-    /*box-shadow: 6px 5px 5px 2px rgb(214, 214, 214);*/
-}
-
-.content-wrap .exercise-item table, .content-wrap .exercise-item td {
-    border: 1px solid rgb(128, 128, 128);
-    border-collapse: collapse;
-    text-align: center;
-    padding: 5px 10px;
-}
-
-.content-wrap .exercise-item:hover {
-    box-shadow: 0px 0px 20px 2px rgb(228, 224, 224);
-}
-
-.content-wrap .exercise-item:hover .item-tools-bind {
-    display: unset;
-}
-
-.content-wrap .exercise-item p {
-    /*margin: 10px 0;*/
-    display: inline-block;
-    word-break: break-all;
-}
-
-.complete-line {
-    margin: 0 5px;
-    padding: 0 45px;
-    border-bottom: 2px solid rgb(128, 128, 128);
-}
-
-.exercise-item .item-question {
-    /*display: inline-block;*/
-    /*margin-top:20px;*/
-    position: relative;
-    cursor: pointer;
-}
-
-.exercise-item .item-question .item-btn-toggle {
-    position: absolute;
-    right: 0;
-    top: 0;
-}
-
-.exercise-item .item-question .item-btn-toggle .ivu-icon {
-    font-size: 22px;
-    cursor: pointer;
-}
-
-.exercise-item .item-difficulty {
-    display: inline-block;
-    padding: 2px 10px;
-    background: rgb(16, 171, 231);
-    border-radius: 5px;
-    color: #fff;
-    font-size: 12px;
-}
-
-.exercise-item .item-type {
-    display: inline-block;
-    padding: 1px 9px;
-    border-radius: 5px;
-    color: #fff;
-    font-size: 12px;
-    margin-left: 5px;
-    background: rgb(16, 171, 231);
-}
-
-.exercise-item .item-relevant-points {
-    display: inline-block;
-    padding: 1px 9px;
-    font-size: 13px;
-}
-
-.exercise-item .item-options {
-    margin-top: 10px;
-}
-
-.exercise-item .item-options .item-option-content {
-    margin: 7px 0;
-}
-
-.exercise-item .toggle-area {
-    border-top: 1px #c3c3c34d dashed;
-    padding-top: 10px;
-    margin-top: 10px;
-}
-
-.exercise-item .item-answer {
-    display: inline-block;
-    cursor: pointer;
-    margin-top: 12px;
-    font-size: 14px;
-}
-
-.exercise-item .item-answer-item {
-    margin-left: 25px;
-    padding: 0 25px;
-    border-bottom: 2px solid rgb(128, 128, 128);
-}
-
-.exercise-item .item-answer-details {
-    margin: 10px 20px;
-}
-
-.exercise-item .item-answer .answer-title-line {
-    background: rgb(0, 173, 37);
-    padding: 0 3px;
-    border-radius: 5px;
-}
-
-.exercise-item .item-answer .answer-title {
-    margin-left: 10px;
-    color: rgb(0, 173, 37);
-}
-
-.exercise-item .item-explain {
-    display: table;
-    margin-top: 10px;
-    margin-left: -10px;
-    cursor: pointer;
-    font-size: 14px;
-}
-
-.exercise-item .item-explain-item {
-    margin-left: 25px;
-    padding: 0 25px;
-    border-bottom: 2px solid rgb(128, 128, 128);
-}
-
-.exercise-item .item-explain-details {
-    margin: 10px;
-    display: inline-block;
-}
-
-.exercise-item .item-explain .explain-title-line {
-    background: rgb(16, 171, 231);
-    padding: 0 3px;
-    border-radius: 5px;
-}
-
-.exercise-item .item-explain .explain-title {
-    margin-left: 10px;
-    color: rgb(16, 171, 231);
-}
-
-.exercise-item .item-tools {
-    width: 100%;
-    padding: 10px 0;
-    margin-top: 20px;
-    font-size: 14px;
-    border-top: 1px #c3c3c34d dashed;
-}
-
-.exercise-item .item-tools .item-tools-action {
-    float: right;
-    color: #01b4ef;
-    margin: 0 20px;
-    margin-top: 8px;
-    font-size: 14px;
-    display: flex;
-    align-items: center;
-    cursor: pointer;
-}
-
-.exercise-item .item-tools .item-tools-action .ivu-icon {
-    font-size: 18px;
-}
-
-.exercise-item .item-tools .ivu-icon {
-    font-size: 16px;
-    margin-right: 5px;
-    font-weight: bold;
-}
-
-.exercise-item .item-tools .ivu-btn {
-    float: right;
-    border-color: transparent;
-    box-shadow: none;
-}
-
-.exercise-item .item-tools-tool {
-    margin-left: 10px;
-    font-weight: bold;
-    cursor: pointer;
-    color: rgb(16, 171, 231);
-    font-size: 14px;
-}
-
-.exercise-item .item-tools-tool .ivu-icon {
-    margin-left: 15px;
-    vertical-align: top;
-}
-
-.exercise-item .item-tools-tool .item-bind-point {
-    color: rgb(128, 128, 128);
-    margin-left: 5px;
-}
-
-.exercise-item .item-tools-tool .ivu-tag {
-    margin-top: -2px;
-}
-
-.exercise-item .item-tools-tool .ivu-tag-border {
-    line-height: 22px;
-}
-
-
-.exercise-item .item-tools .item-tools-info {
-    vertical-align: sub;
-    color: #868686;
-    border-right: 2px solid #d2d2d2;
-    font-size: 12px;
-    padding: 0 10px;
-}
-
-.exercise-item .item-tools .item-tools-info:first-child {
-    padding-left: 0;
-}
-
-.exercise-item .item-tools .item-tools-info:last-child {
-    border:none;
-}
-
-
-.ev-list-container h1, h2, h3, h4, h5, h6 {
-    display: inline-block;
-}
-
-.filter-wrap {
-    width: 100%;
-    padding: 20px;
-    background: #fff;
-}
-
-.filter-wrap .filter-item:first-child {
-    margin-top: 0px;
-}
-
-.filter-wrap .filter-item {
-    margin-top: 10px;
-}
-
-.filter-wrap .filter-title {
-    font-size: 16px;
-    font-weight: bold;
-    margin-right: 10px;
-}
-
-.filter-wrap .ivu-radio-group {
-    padding-bottom: 4px;
-}
-
-.filter-wrap .ivu-radio-wrapper {
-    padding: 0 10px;
-    margin-left: 15px;
-    height: 28px;
-    line-height: 28px;
-    box-shadow: none !important;
-    border: none !important;
-    font-size: 14px;
-    border-radius: 0 !important;
-}
-
-.filter-wrap .ivu-radio-wrapper .ivu-icon {
-    margin-bottom: 2px;
-}
-
-.filter-wrap .ivu-radio-wrapper:after, .ivu-radio-group-button .ivu-radio-wrapper:before {
-    content: none;
-}
-
-.filter-wrap .ivu-radio-group-item {
-    border-radius: 5px !important;
-}
-
-.filter-wrap .ivu-radio-wrapper-checked {
-    background: rgb(16, 171, 231);
-    box-shadow: none !important;
-    color: white;
-}
-
-.filter-wrap .ivu-radio-group-button .ivu-radio-wrapper-checked:hover {
-    color: #fff !important;
-}
-
-
-
-.filter-wrap .ivu-checkbox-group {
-    padding-bottom: 4px;
-    display: inline-block;
-}
-
-.filter-wrap .ivu-checkbox-inner,
-.filter-wrap .ivu-checkbox-checked,
-.filter-wrap .ivu-checkbox {
-    display: none;
-}
-
-.filter-wrap .ivu-checkbox-wrapper {
-    padding: 0 10px;
-    margin-left: 15px;
-    height: 28px;
-    line-height: 28px;
-    box-shadow: none !important;
-    border: none !important;
-    font-size: 14px;
-    border-radius: 0 !important;
-}
-
-.filter-wrap .ivu-checkbox-wrapper .ivu-icon {
-    margin-bottom: 2px;
-}
-
-.filter-wrap .ivu-checkbox-wrapper:after, .ivu-checkbox-group-button .ivu-checkbox-wrapper:before {
-    content: none;
-}
-
-.filter-wrap .ivu-checkbox-group-item {
-    border-radius: 5px !important;
-}
-
-.filter-wrap .ivu-checkbox-wrapper-checked {
-    background: rgb(16, 171, 231);
-    box-shadow: none !important;
-    color: white;
-}
-
-.filter-wrap .ivu-checkbox-group-button .ivu-checkbox-wrapper-checked:hover {
-    color: #fff !important;
-}
-
-
-.ev-list-container .ivu-page {
-    display: flex;
-    flex-direction: row;
-    justify-content: center;
-    margin: 20px 0;
-}
-
-/*绑定知识点部分树形结构样式*/
-
-.singleClass {
-    cursor: pointer;
-    font-size: 14px;
-    margin: 10px;
-}
-
-.transferModal {
-    overflow: hidden;
-}
-
-.transferModal .point-list {
-    max-height: 400px;
-    overflow: auto;
-}
-
-.transferModal .point-list .ivu-input-wrapper {
-    width: 90%;
-    margin-bottom: 10px;
-}
-
-.transferModal .selected-point-list {
-    padding: 10px;
-    width: 100%;
-    border-top: 1px solid rgba(128, 128, 128,.3);
-    margin-top: 15px;
-}
-
-.transferModal .bind-title {
-    margin: 10px 0;
-    font-weight: bold;
-    font-size: 14px;
-}
-
-.transferModal .checked-point {
-    margin: 5px 10px;
-    background: rgb(16, 171, 231);
-    padding: 5px 10px;
-    color: #fff;
-    border-radius: 5px;
-    display: inline-block;
-}
-
-.transferModal .ivu-checkbox-checked .ivu-checkbox-inner {
-    background: rgb(16, 171, 231);
-    border-color: rgb(16, 171, 231);
-}
-
-.transferModal .ivu-icon {
-    color: rgb(16, 171, 231);
-}
-
-.transferModal .btn-clear {
-    float: right;
-    font-weight: 500;
-    font-size: 12px;
-    color: rgb(16, 171, 231);
-    cursor: pointer;
-    letter-spacing: 1px;
-}
-
-.transferModal .point-checkbox {
-    margin-left: 10px;
-    border-radius: 2px;
-    width: 15px;
-    height: 15px;
-    padding: 2px;
-    vertical-align: middle;
-    box-sizing: border-box;
-    border: 1px solid #dcdee2;
-}
-
-.transferModal .point-checked {
-    background: rgb(16, 171, 231);
-    background-clip: content-box;
-}
-
-.transferModal .ivu-tabs-nav-scroll {
-    display: flex;
-    flex-direction: row;
-    justify-content: center;
-}
-
-.transferModal .ivu-tree-empty {
-    text-align: center;
-    margin: 15px;
-    color: rgb(128, 128, 128);
-}
-

+ 1 - 1
TEAMModelOS/ClientApp/src/view/evaluation/bank/ExerciseList.vue

@@ -1,5 +1,5 @@
 <template>
 <template>
-    <div class="ev-list-container">
+    <div class="ev-list-container" style="width:98%;margin:0 auto">
         <!-- 筛选部分 -->
         <!-- 筛选部分 -->
         <Loading :top="100" v-show="importLoading" type="1"></Loading>
         <Loading :top="100" v-show="importLoading" type="1"></Loading>
         <div class="filter-wrap">
         <div class="filter-wrap">

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

@@ -27,6 +27,13 @@
 
 
         },
         },
         mounted() {
         mounted() {
+            let parentVm = this.$parent.$parent.$parent
+            parentVm.$refs['evScroll'].scrollTo(
+                    {
+                        y: 0
+                    },
+                    500, 'easeInQuad'
+                )
             if (this.$route.params.tabName) this.tabName = this.$route.params.tabName
             if (this.$route.params.tabName) this.tabName = this.$route.params.tabName
         }
         }
     }
     }

+ 9 - 1
TEAMModelOS/ClientApp/src/view/evaluation/components/BaseEditExercise.vue

@@ -39,7 +39,7 @@
                     <div v-else style="margin-top:10px">
                     <div v-else style="margin-top:10px">
                         <span v-for="(item,index) in exercisePoints" :key="index" class="exercise-item-point">
                         <span v-for="(item,index) in exercisePoints" :key="index" class="exercise-item-point">
                             {{item.name}}
                             {{item.name}}
-                            <span class="exercise-item-point-close"><Icon type="md-close" @click="onDeletePoint(index)" style="display:none" /></span>
+                            <span class="exercise-item-point-close"><Icon type="md-close" @click="onDeletePoint(index)" /></span>
                         </span>
                         </span>
                         <span class="exercise-item-point-modify" @click="selectPointsModal = true">修改</span>
                         <span class="exercise-item-point-modify" @click="selectPointsModal = true">修改</span>
                     </div>
                     </div>
@@ -98,6 +98,7 @@
 
 
         <Modal v-model="selectPointsModal"
         <Modal v-model="selectPointsModal"
                title="选择知识点"
                title="选择知识点"
+               ref="editPointRef"
                width="600px"
                width="600px"
                style="z-index:99999">
                style="z-index:99999">
             <BasePoints period="6f705b1b-8221-5307-18da-13da05adf91e" subject="Subject_Chinese" @onCheckChange="onCheckChange"></BasePoints>
             <BasePoints period="6f705b1b-8221-5307-18da-13da05adf91e" subject="Subject_Chinese" @onCheckChange="onCheckChange"></BasePoints>
@@ -252,8 +253,13 @@
                 
                 
             },
             },
 
 
+            /**
+             * 删除选好的关联知识点
+             * @param index
+             */
             onDeletePoint(index) {
             onDeletePoint(index) {
                 this.exercisePoints.splice(index, 1)
                 this.exercisePoints.splice(index, 1)
+                this.$refs.editPointRef.$children[1].onDeletePoint(index)
             },
             },
 
 
             // 题目类型转换
             // 题目类型转换
@@ -396,6 +402,7 @@
             },
             },
                 analysisEditor.customConfig.uploadImgServer = '/api/file/uploadWangEditor'
                 analysisEditor.customConfig.uploadImgServer = '/api/file/uploadWangEditor'
             analysisEditor.customConfig.showLinkImg = false
             analysisEditor.customConfig.showLinkImg = false
+            analysisEditor.customConfig.menus  = this.$tools.wangEditorMenu
             analysisEditor.customConfig.uploadFileName = 'files'
             analysisEditor.customConfig.uploadFileName = 'files'
             analysisEditor.create()
             analysisEditor.create()
             this.analysisEditor = analysisEditor
             this.analysisEditor = analysisEditor
@@ -407,6 +414,7 @@
             },
             },
                 repairEditor.customConfig.uploadImgServer = '/api/file/uploadWangEditor'
                 repairEditor.customConfig.uploadImgServer = '/api/file/uploadWangEditor'
             repairEditor.customConfig.showLinkImg = false
             repairEditor.customConfig.showLinkImg = false
+            repairEditor.customConfig.menus  = this.$tools.wangEditorMenu
             repairEditor.customConfig.uploadFileName = 'files'
             repairEditor.customConfig.uploadFileName = 'files'
             repairEditor.create()
             repairEditor.create()
             this.repairEditor = repairEditor
             this.repairEditor = repairEditor

+ 35 - 10
TEAMModelOS/ClientApp/src/view/evaluation/components/BasePoints.vue

@@ -1,12 +1,16 @@
 <template>
 <template>
     <div class="points-container">
     <div class="points-container">
-        <Tabs name="pointTab">
+        <Tabs name="pointTab" @on-click="getPoints">
             <TabPane label="私有知识点" tab="pointTab">
             <TabPane label="私有知识点" tab="pointTab">
                 <CheckboxGroup v-model="checkedList" @on-change="onCheckChange">
                 <CheckboxGroup v-model="checkedList" @on-change="onCheckChange">
-                    <Checkbox v-for="(item,index) in pointList" :label="item.id" :key="index">{{ item.name }}</Checkbox>
+                    <Checkbox v-for="(item,index) in pointList" :label="item.id" :key="item.id">{{ item.name }}</Checkbox>
+                </CheckboxGroup>
+            </TabPane>
+            <TabPane label="校本知识点" tab="pointTab">
+                <CheckboxGroup v-model="checkedList" @on-change="onCheckChange">
+                    <Checkbox v-for="(item,index) in schoolPointList" :label="item.id" :key="item.id">{{ item.name }}</Checkbox>
                 </CheckboxGroup>
                 </CheckboxGroup>
             </TabPane>
             </TabPane>
-            <TabPane label="校本知识点" tab="pointTab">标签二的内容</TabPane>
         </Tabs>
         </Tabs>
 
 
         <div class="points-checked-wrap">
         <div class="points-checked-wrap">
@@ -23,10 +27,11 @@
         data() {
         data() {
             return {
             return {
                 pointList: [],
                 pointList: [],
+                schoolPointList:[],
                 checkedList: [],
                 checkedList: [],
                 originPointList: [],
                 originPointList: [],
                 defaultParams: {
                 defaultParams: {
-                    scopeCode: 'HBCN',
+                    scopeCode: '',
                     period: null,
                     period: null,
                     subjectCode: null,
                     subjectCode: null,
                     type: 1
                     type: 1
@@ -34,19 +39,30 @@
             }
             }
         },
         },
         created() {
         created() {
-            this.getPoints()
+            this.getPoints(0)
         },
         },
         methods: {
         methods: {
+
+            onTabChange(val) {
+                    this.getPoints(val)
+            },
+
             /**
             /**
              * 获取知识点仓库数据
              * 获取知识点仓库数据
              */
              */
-            getPoints() {
+            getPoints(type) {
+                if (this.pointList.length && this.schoolPointList.length) return
+                this.defaultParams.scopeCode = type === 0 ? 'habook#0001' : 'HBCN'
                 this.defaultParams.period = this.period
                 this.defaultParams.period = this.period
                 this.defaultParams.subjectCode = this.subject
                 this.defaultParams.subjectCode = this.subject
                 this.$api.knowledge.GetSchoolPoints(this.defaultParams).then(res => {
                 this.$api.knowledge.GetSchoolPoints(this.defaultParams).then(res => {
                     if (!res.error && res.result.data) {
                     if (!res.error && res.result.data) {
-                        this.pointList = res.result.data
-                        this.originPointList = res.result.data
+                        if (type) {
+                            this.schoolPointList = res.result.data
+                        } else {
+                            this.pointList = res.result.data
+                        }
+                        this.originPointList = this.originPointList.concat(res.result.data)
                     } else {
                     } else {
                         this.$Message.warning('获取数据失败')
                         this.$Message.warning('获取数据失败')
                     }
                     }
@@ -54,7 +70,7 @@
             },
             },
 
 
             showName(id) {
             showName(id) {
-                return this.pointList.filter(item => item.id === id)[0].name
+                return this.originPointList.filter(item => item.id === id)[0].name
             },
             },
 
 
             onCheckChange(val) {
             onCheckChange(val) {
@@ -62,8 +78,12 @@
                     this.$Message.warning('最多绑定5个知识点')
                     this.$Message.warning('最多绑定5个知识点')
                     this.checkedList.splice(this.checkedList.length - 1, 1)
                     this.checkedList.splice(this.checkedList.length - 1, 1)
                 } else {
                 } else {
-                    this.$emit('onCheckChange', val, this.pointList)
+                    this.$emit('onCheckChange', val, this.originPointList)
                 }
                 }
+            },
+
+            onDeletePoint(index) {
+                this.checkedList.splice(index, 1)
             }
             }
         },
         },
 
 
@@ -75,6 +95,11 @@
 </script>
 </script>
 
 
 <style scoped>
 <style scoped>
+    .points-container {
+        font-family: '微軟正黑體', 'Heiti TC' !important;
+    }
+
+
     .points-container .ivu-checkbox-group-item {
     .points-container .ivu-checkbox-group-item {
         display:block;
         display:block;
         margin:10px;
         margin:10px;

+ 1 - 1
TEAMModelOS/ClientApp/src/view/evaluation/index/CreateExercises.css

@@ -270,7 +270,7 @@ exersices-attr-diff {
 
 
 .ev-container .btn-upload {
 .ev-container .btn-upload {
     position:absolute;
     position:absolute;
-    left:94%;
+    left:92%;
     top:0px;
     top:0px;
 }
 }
 
 

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

@@ -41,7 +41,7 @@
                 <div v-else style="margin-top:10px">
                 <div v-else style="margin-top:10px">
                     <span v-for="(item,index) in exercisePoints" :key="index" class="exercise-item-point">
                     <span v-for="(item,index) in exercisePoints" :key="index" class="exercise-item-point">
                     {{item.name}}
                     {{item.name}}
-                        <span class="exercise-item-point-close"><Icon type="md-close" @click="onDeletePoint(index)" style="display:none"/></span>
+                        <span class="exercise-item-point-close"><Icon type="md-close" @click="onDeletePoint(index)"/></span>
                     </span>
                     </span>
                     <span class="exercise-item-point-modify" @click="selectPointsModal = true">修改</span>
                     <span class="exercise-item-point-modify" @click="selectPointsModal = true">修改</span>
                 </div>
                 </div>
@@ -108,6 +108,7 @@
 
 
         <Modal v-model="selectPointsModal"
         <Modal v-model="selectPointsModal"
                title="选择知识点"
                title="选择知识点"
+               ref="pointRef"
                width="600px"
                width="600px"
                style="z-index:99999">
                style="z-index:99999">
             <BasePoints period="6f705b1b-8221-5307-18da-13da05adf91e" subject="Subject_Chinese" @onCheckChange="onCheckChange"></BasePoints>
             <BasePoints period="6f705b1b-8221-5307-18da-13da05adf91e" subject="Subject_Chinese" @onCheckChange="onCheckChange"></BasePoints>
@@ -294,8 +295,13 @@
                 })
                 })
             },
             },
 
 
+            /**
+             * 移除指定知识点
+             * @param index
+             */
             onDeletePoint(index) {
             onDeletePoint(index) {
                 this.exercisePoints.splice(index, 1)
                 this.exercisePoints.splice(index, 1)
+                this.$refs.pointRef.$children[1].onDeletePoint(index)
             },
             },
 
 
             // 题目类型转换
             // 题目类型转换
@@ -389,6 +395,7 @@
             },
             },
                 analysisEditor.customConfig.uploadImgServer = '/api/file/uploadWangEditor'
                 analysisEditor.customConfig.uploadImgServer = '/api/file/uploadWangEditor'
             analysisEditor.customConfig.showLinkImg = false
             analysisEditor.customConfig.showLinkImg = false
+            analysisEditor.customConfig.menus  = this.$tools.wangEditorMenu
             analysisEditor.customConfig.uploadFileName = 'files'
             analysisEditor.customConfig.uploadFileName = 'files'
             analysisEditor.create()
             analysisEditor.create()
             this.analysisEditor = analysisEditor
             this.analysisEditor = analysisEditor
@@ -399,6 +406,7 @@
             },
             },
                 repairEditor.customConfig.uploadImgServer = '/api/file/uploadWangEditor'
                 repairEditor.customConfig.uploadImgServer = '/api/file/uploadWangEditor'
             repairEditor.customConfig.showLinkImg = false
             repairEditor.customConfig.showLinkImg = false
+            repairEditor.customConfig.menus  = this.$tools.wangEditorMenu
             repairEditor.customConfig.uploadFileName = 'files'
             repairEditor.customConfig.uploadFileName = 'files'
             repairEditor.create()
             repairEditor.create()
             this.repairEditor = repairEditor
             this.repairEditor = repairEditor

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

@@ -83,6 +83,7 @@
                 <span class="exercise-backet-item">综合题:<span class="exercise-backet-num">{{ basketList.filter(item => item.type === 'Compose').length }}</span> 道</span>
                 <span class="exercise-backet-item">综合题:<span class="exercise-backet-num">{{ basketList.filter(item => item.type === 'Compose').length }}</span> 道</span>
             </div>
             </div>
             <span class="import-exercise">
             <span class="import-exercise">
+                <Button type="info" @click="goToBank">试题/试卷库</Button>
                 <Badge :count="basketList.length" show-zero>
                 <Badge :count="basketList.length" show-zero>
                     <Button type="info" @click="onSetPaperInfo" class="exercise-backet" :style="{background: basketList.length ? '#0AAEE7' : '#acaaaa'}">进入组卷中心</Button>
                     <Button type="info" @click="onSetPaperInfo" class="exercise-backet" :style="{background: basketList.length ? '#0AAEE7' : '#acaaaa'}">进入组卷中心</Button>
                 </Badge>
                 </Badge>
@@ -169,7 +170,7 @@
                     <!--<Button type="info" :style="{backgroundColor:basketList.all.indexOf(item) > -1 ? '#bbbbbb' : ''}" @click="handleChoose(item)">{{basketList.all.indexOf(item) > -1 ? '已选入' : '选题'}} </Button>-->
                     <!--<Button type="info" :style="{backgroundColor:basketList.all.indexOf(item) > -1 ? '#bbbbbb' : ''}" @click="handleChoose(item)">{{basketList.all.indexOf(item) > -1 ? '已选入' : '选题'}} </Button>-->
 
 
                 <Button type="info" :style="{background: basketList.map(item => item.id).indexOf(item.id) > -1 ? '#acaaaa' : '#14B6EF'}" @click.stop="selectExercise(item)" style="margin-right:10px">{{ basketList.map(item => item.id).indexOf(item.id) > -1 ? '移除' : '选题' }}</Button>
                 <Button type="info" :style="{background: basketList.map(item => item.id).indexOf(item.id) > -1 ? '#acaaaa' : '#14B6EF'}" @click.stop="selectExercise(item)" style="margin-right:10px">{{ basketList.map(item => item.id).indexOf(item.id) > -1 ? '移除' : '选题' }}</Button>
-                    <Button type="info" @click.stop="handleEdit(item)" style="margin-right:10px">编辑</Button>
+                   <!-- <Button type="info" @click.stop="handleEdit(item)" style="margin-right:10px">编辑</Button>-->
                 </div>
                 </div>
             </div>
             </div>
         </div>
         </div>
@@ -456,6 +457,12 @@
                 })
                 })
             },
             },
 
 
+            goToBank() {
+                this.$router.push({
+                    name: 'testPaperList'
+                })
+            },
+
             /**
             /**
              * 切换页码操作
              * 切换页码操作
              * @param page
              * @param page

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

@@ -133,7 +133,7 @@
                 if (hasSurplus) {
                 if (hasSurplus) {
                     if (!noScoreList.length) {
                     if (!noScoreList.length) {
                         this.paperInfo.item.forEach(i => {
                         this.paperInfo.item.forEach(i => {
-                            if (i.points.length && typeof (i.points[1]) !== 'string') {
+                            if (i.points.length && typeof (i.points[1]) !== 'string' && i.points[0]) {
                                 i.points = i.points.map(j => j.id)
                                 i.points = i.points.map(j => j.id)
                             }
                             }
                         })
                         })

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

@@ -11,7 +11,7 @@
                 </div>
                 </div>
             </div>
             </div>
         </vuescroll>
         </vuescroll>
-        <div class="slide-menu animated">
+        <div class="slide-menu animated" style="display:none">
             <ul>
             <ul>
                 <li @click="goRouter('createExercises')">创建习题</li>
                 <li @click="goRouter('createExercises')">创建习题</li>
                 <li @click="goRouter('exercisesList')">组卷中心</li>
                 <li @click="goRouter('exercisesList')">组卷中心</li>
@@ -77,6 +77,7 @@
     overflow:hidden;
     overflow:hidden;
     font-family: '微軟正黑體', 'Heiti TC' !important;
     font-family: '微軟正黑體', 'Heiti TC' !important;
   }
   }
+
   .ev-body {
   .ev-body {
     width:98%;
     width:98%;
     min-width:1200px;
     min-width:1200px;
@@ -143,13 +144,13 @@
           padding-right:10px;
           padding-right:10px;
           font-size:14px;
           font-size:14px;
       }
       }
-      .ev-slide .ev-slide-select-volumes /deep/ .ivu-select-arrow {
-          color:#fff;
-      }
+    .ev-slide .ev-slide-select-volumes /deep/ .ivu-select-arrow {
+        color: #fff;
+    }
 
 
-      .ev-slide .ev-slide-select-volumes /deep/ .ivu-select-dropdown {
-          left:unset !important;
-      }
+    .ev-slide .ev-slide-select-volumes /deep/ .ivu-select-dropdown {
+        left: unset !important;
+    }
       .ev-slide .ev-slide-select-volumes /deep/ .ivu-select-placeholder {
       .ev-slide .ev-slide-select-volumes /deep/ .ivu-select-placeholder {
           color:#fff;
           color:#fff;
           font-size:14px;
           font-size:14px;

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

@@ -42,7 +42,8 @@
                 defaultConfig: {
                 defaultConfig: {
                     uploadImgServer: '/api/file/uploadWangEditor', // 图片上传地址
                     uploadImgServer: '/api/file/uploadWangEditor', // 图片上传地址
                     showLinkImg: false, // 是否展示网络图片链接上传
                     showLinkImg: false, // 是否展示网络图片链接上传
-                    uploadFileName: 'files' // 上传图片后台获取的文件名
+                    uploadFileName: 'files', // 上传图片后台获取的文件名
+                    menus:this.$tools.wangEditorMenu
                 }
                 }
             }
             }
         },
         },

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

@@ -29,7 +29,9 @@
         defaultConfig: {
         defaultConfig: {
           uploadImgServer: '/api/file/uploadWangEditor', // 图片上传地址
           uploadImgServer: '/api/file/uploadWangEditor', // 图片上传地址
           showLinkImg: false, // 是否展示网络图片链接上传
           showLinkImg: false, // 是否展示网络图片链接上传
-          uploadFileName: 'files' // 上传图片后台获取的文件名
+            uploadFileName: 'files', // 上传图片后台获取的文件名
+          menus:this.$tools.wangEditorMenu
+
         },
         },
         stemContent: '',
         stemContent: '',
         stemEditor: null
         stemEditor: null

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

@@ -40,7 +40,8 @@
         defaultConfig: {
         defaultConfig: {
           uploadImgServer: '/api/file/uploadWangEditor', // 图片上传地址
           uploadImgServer: '/api/file/uploadWangEditor', // 图片上传地址
           showLinkImg: false, // 是否展示网络图片链接上传
           showLinkImg: false, // 是否展示网络图片链接上传
-          uploadFileName: 'files' // 上传图片后台获取的文件名
+          uploadFileName: 'files', // 上传图片后台获取的文件名
+          menus:this.$tools.wangEditorMenu
         }
         }
       }
       }
     },
     },

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

@@ -39,7 +39,8 @@
                 defaultConfig: {
                 defaultConfig: {
                     uploadImgServer: '/api/file/uploadWangEditor', // 图片上传地址
                     uploadImgServer: '/api/file/uploadWangEditor', // 图片上传地址
                     showLinkImg: false, // 是否展示网络图片链接上传
                     showLinkImg: false, // 是否展示网络图片链接上传
-                    uploadFileName: 'files' // 上传图片后台获取的文件名
+                    uploadFileName: 'files', // 上传图片后台获取的文件名
+          menus:this.$tools.wangEditorMenu
                 }
                 }
             }
             }
         },
         },

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

@@ -27,7 +27,8 @@
         defaultConfig: {
         defaultConfig: {
           uploadImgServer: '/api/file/uploadWangEditor', // 图片上传地址
           uploadImgServer: '/api/file/uploadWangEditor', // 图片上传地址
           showLinkImg: false, // 是否展示网络图片链接上传
           showLinkImg: false, // 是否展示网络图片链接上传
-          uploadFileName: 'files' // 上传图片后台获取的文件名
+          uploadFileName: 'files', // 上传图片后台获取的文件名
+          menus:this.$tools.wangEditorMenu
         },
         },
         stemContent: '',
         stemContent: '',
         stemEditor: null,
         stemEditor: null,

+ 1 - 3
TEAMModelOS/ClientApp/src/view/knowledge-point/index/operation/AddBlock.vue

@@ -55,14 +55,12 @@
                         name: this.formTop.name,
                         name: this.formTop.name,
                         alias: this.formTop.name,
                         alias: this.formTop.name,
                         subjectCode: this.formTop.subject,
                         subjectCode: this.formTop.subject,
-                        partitionKey: this.addPointType === 'school' ? this.originDatas.schoolCode : 'personal',
+                        scopeCode: this.addPointType === 'school' ? this.originDatas.schoolCode : 'habook#0001',
                         order: 706,
                         order: 706,
                         status: 1,
                         status: 1,
                         knowledgeId: this.uuid,
                         knowledgeId: this.uuid,
                         period: this.currentPeriod.periodCode,
                         period: this.currentPeriod.periodCode,
                         points: [],
                         points: [],
-                        scope: 'school',
-                        TEAMModelId: 'habook#001',
                         source: 1
                         source: 1
                     }
                     }
                     if (this.editItem) {
                     if (this.editItem) {

+ 1 - 3
TEAMModelOS/ClientApp/src/view/knowledge-point/index/operation/AddPoint.vue

@@ -54,14 +54,12 @@
                         name: newName,
                         name: newName,
                         alias: newName,
                         alias: newName,
                         subjectCode: editPointItem ? editPointItem.subjectCode : this.schoolInfos.subjectCode,
                         subjectCode: editPointItem ? editPointItem.subjectCode : this.schoolInfos.subjectCode,
-                        partitionKey: this.addPointType === 'school' ? this.schoolInfos.schoolCode : 'personal', // //判断当前添加为校本或者私有知识点
+                        scopeCode: this.addPointType === 'school' ? this.schoolInfos.schoolCode : 'habook#0001', // //判断当前添加为校本或者私有知识点
                         order: 706,
                         order: 706,
                         status: 1,
                         status: 1,
                         knowledgeId: editPointItem ? editPointItem.knowledgeId : this.uuid,
                         knowledgeId: editPointItem ? editPointItem.knowledgeId : this.uuid,
                         period: editPointItem ? editPointItem.period : this.schoolInfos.period,
                         period: editPointItem ? editPointItem.period : this.schoolInfos.period,
                         source: 1,
                         source: 1,
-                        scope: this.addPointType,
-                        TEAMModelId: 'habook#001',
                         points: this.blockDatas ? [this.blockDatas.id] : [],
                         points: this.blockDatas ? [this.blockDatas.id] : [],
                         id: null
                         id: null
                     }
                     }

+ 8 - 0
TEAMModelOS/ClientApp/src/view/learnactivity/ManageEvaluation.less

@@ -175,3 +175,11 @@
     margin-top: 15px;
     margin-top: 15px;
     margin-bottom: 5px;
     margin-bottom: 5px;
 }
 }
+.to-create-icon {
+    float: right;
+    margin-right: 20px;
+    margin-top: 12px;
+    cursor: pointer;
+    color: white;
+    font-size: 18px;
+}

+ 7 - 1
TEAMModelOS/ClientApp/src/view/learnactivity/ManageEvaluation.vue

@@ -2,7 +2,8 @@
     <div class="manage-evaluation-container">
     <div class="manage-evaluation-container">
         <div class="evaluation-list-wrap">
         <div class="evaluation-list-wrap">
             <div class="evaluation-list-title">
             <div class="evaluation-list-title">
-                评测列表
+                <span>评测列表</span>
+                <Icon type="md-add" class="to-create-icon" @click="goToCreate"/>
             </div>
             </div>
             <div class="evaluation-list-main">
             <div class="evaluation-list-main">
                 <vuescroll>
                 <vuescroll>
@@ -221,6 +222,11 @@
             }
             }
         },
         },
         methods: {
         methods: {
+            goToCreate() {
+                this.$router.push({
+                    name: 'createEvaluation'
+                })
+            },
             drawPie(flag) {
             drawPie(flag) {
                 if (flag) {
                 if (flag) {
                     this.$refs.examPaperAnalysis.drawDiffChart()
                     this.$refs.examPaperAnalysis.drawDiffChart()

+ 32 - 81
TEAMModelOS/ClientApp/src/view/school-mgmt/ClassroomSetting/ClassroomSetting.less

@@ -9,6 +9,9 @@
 @large-fontSize: 20px;
 @large-fontSize: 20px;
 .container-box{
 .container-box{
     height:100%;
     height:100%;
+    width:100%;
+    display:flex;
+    flex-direction:row;
 }
 }
 .position-full-height(@top:0px) {
 .position-full-height(@top:0px) {
     position: absolute;
     position: absolute;
@@ -29,14 +32,12 @@
 }
 }
 .container-left {
 .container-left {
     width: 59%;
     width: 59%;
+    height:100%;
     .border(right);
     .border(right);
-    .position-full-height;
 
 
     &-title {
     &-title {
-        -moz-width: ~"calc(100%-30px)";
-        -webkit-width: ~"calc(100%-30px)";
-        width: ~"calc(100%-30px)";
-        margin-left: 30px;
+        width: 100%;
+        padding-left: 15px;
         height: 50px;
         height: 50px;
         .border(bottom);
         .border(bottom);
         line-height: 50px;
         line-height: 50px;
@@ -45,14 +46,10 @@
 }
 }
 .container-right {
 .container-right {
     width: 41%;
     width: 41%;
-    .position-full-height;
-    left: 59%;
+    height:100%;
 
 
     &-title {
     &-title {
-        -moz-width: ~"calc(100%-30px)";
-        -webkit-width: ~"calc(100%-30px)";
-        width: ~"calc(100%-30px)";
-        margin-left: 30px;
+        width: 100%;
         height: 50px;
         height: 50px;
         line-height: 50px;
         line-height: 50px;
         .border(bottom);
         .border(bottom);
@@ -75,9 +72,7 @@
 }
 }
 
 
 .school-plan-wrap {
 .school-plan-wrap {
-    position: absolute;
-    top: 50px;
-    bottom: 0px;
+    height: ~"calc(100% - 50px)";
     width: 100%;
     width: 100%;
     display: flex;
     display: flex;
     flex-flow: row;
     flex-flow: row;
@@ -99,79 +94,57 @@
 }
 }
 .container-left-wrap{
 .container-left-wrap{
     width:100%;
     width:100%;
+    height:~"calc(100% - 50px)";
+    display:flex;
+    flex-direction:row;
 }
 }
 .container-left-box {
 .container-left-box {
     width: 38%;
     width: 38%;
+    height: 100%;
     .border(right);
     .border(right);
-    .position-full-height(50px);
-
+    
     .list-order {
     .list-order {
-        padding: 5px 0px 5px 40px;
+        padding: 5px 0px 5px 15px;
         color: white;
         color: white;
-        .label-icon{
-            margin-right:10px;
+
+        .label-icon {
+            margin-right: 10px;
         }
         }
     }
     }
 }
 }
 .container-right-box {
 .container-right-box {
     width: 62%;
     width: 62%;
-    position: absolute;
-    left: 38%;
-    top: 50px;
-    height: ~"calc(100% - 50px)";
-    -moz-height: ~"calc(100% - 50px)";
-    -webkit-height: ~"calc(100% - 50px)";
+    height: 100%;
+    padding-left:15px;
 }
 }
 .class-search-input{
 .class-search-input{
-    width:~"calc(100% - 40px)";
-    -moz-width:~"calc(100% - 40px)";
-    -webkit-width:~"calc(100% - 40px)";
-    height:30px;
-    margin-left:40px;
+    width:~"calc(100% - 15px)";
+    margin-left:15px;
     .border(bottom);
     .border(bottom);
 }
 }
 .class-list {
 .class-list {
     width: 100%;
     width: 100%;
+    height:~"calc(100% - 62px)";
     .border(top);
     .border(top);
-    padding-left: 40px;
-    overflow: auto;
-    position:absolute;
-    top:68px;
-    bottom:0px;
-    &::-webkit-scrollbar { /*滚动条整体样式*/
-        width: 5px; /*高宽分别对应横竖滚动条的尺寸*/
-        height: 1px;
-    }
-
-    &::-webkit-scrollbar-thumb { /*滚动条里面小方块*/
-        -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
-        background: rgb(124,124,124);
-    }
-
-    &::-webkit-scrollbar-track { /*滚动条里面轨道*/
-        -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
-        background: rgba(68,68,68,.5);
-    }
+    padding-left: 15px;
+    
 }
 }
 .active-item-bg {
 .active-item-bg {
-    background-image: -webkit-linear-gradient(90deg, rgba(30,30,30,0) 0%, rgba(110,110,110,.2) 50%, rgba(110,110,110,.4) 100%);
-    background-image: -o-linear-gradient(90deg, rgba(30,30,30,0) 0%, rgba(110,110,110,.2) 50%, rgba(110,110,110,.4) 100%);
-    background-image: -moz-linear-gradient(90deg, rgba(30,30,30,0) 0%, rgba(110,110,110,.2) 50%, rgba(110,110,110,.4) 100%);
     background-image: linear-gradient(90deg, rgba(30,30,30,0) 0%, rgba(110,110,110,.2) 50%, rgba(110,110,110,.4) 100%);
     background-image: linear-gradient(90deg, rgba(30,30,30,0) 0%, rgba(110,110,110,.2) 50%, rgba(110,110,110,.4) 100%);
 }
 }
 .class-list-item {
 .class-list-item {
     padding: 8px 0px;
     padding: 8px 0px;
-    position: relative;
     .border(bottom);
     .border(bottom);
     cursor:pointer;
     cursor:pointer;
+    position:relative;
     &:hover {
     &:hover {
-        .active-item-bg;
+        .active-item-bg,
         .period-btn-edit {
         .period-btn-edit {
             display: inline-block;
             display: inline-block;
         }
         }
 
 
         .class-list-item-tool {
         .class-list-item-tool {
-            display: unset;
+            display: inline-block;
         }
         }
     }
     }
 }
 }
@@ -217,12 +190,8 @@
 }
 }
 .class-attr-wrap{
 .class-attr-wrap{
     width:47%;
     width:47%;
-    position:absolute;
-    top:50px;
-    bottom:0px;
-    left:0px;
+    height:100%;
     .border(right);
     .border(right);
-    padding-left:30px;
     &-label{
     &-label{
         display:block;
         display:block;
         color:@second-textColor;
         color:@second-textColor;
@@ -233,15 +202,9 @@
 }
 }
 .hiteach-code-wrap {
 .hiteach-code-wrap {
     width: 53%;
     width: 53%;
-    position: absolute;
-    top: 50px;
-    bottom: 0px;
-    left: 47%;
-
+    height: 100%;
     &-header {
     &-header {
         width: ~"calc(100% - 30px)";
         width: ~"calc(100% - 30px)";
-        -moz-width: ~"calc(100% - 30px)";
-        -webkit-width: ~"calc(100% - 30px)";
         margin-left: 20px;
         margin-left: 20px;
 
 
         p {
         p {
@@ -253,14 +216,9 @@
 
 
     &-list {
     &-list {
         .border(top);
         .border(top);
-        position: absolute;
-        left: 0px;
-        top: 70px;
-        bottom: 0px;
         width: 100%;
         width: 100%;
-        /*display:flex;
-        justify-content:center;
-        align-items:center;*/
+        height: ~"calc(100% - 72px)";
+
         h1 {
         h1 {
             margin-top: -120px;
             margin-top: -120px;
         }
         }
@@ -276,8 +234,6 @@
                     overflow: hidden;
                     overflow: hidden;
                     white-space: nowrap;
                     white-space: nowrap;
                     display: inline-block;
                     display: inline-block;
-                    width: -moz-calc(100% - 50px);
-                    width: -webkit-calc(100% - 50px);
                     width: calc(100% - 50px);
                     width: calc(100% - 50px);
                 }
                 }
 
 
@@ -308,8 +264,6 @@
 }
 }
 #school-plan {
 #school-plan {
     background: none;
     background: none;
-    /*max-width: 100%;*/
-    /*border: 1px solid white;*/
 }
 }
 .school-plan-zoom {
 .school-plan-zoom {
     position: absolute;
     position: absolute;
@@ -334,9 +288,6 @@
     }
     }
 }
 }
 .school-plan-box {
 .school-plan-box {
-    /*position: absolute;
-    top: 50px;
-    left: 30px;*/
     width: -moz-calc(100% - 60px);
     width: -moz-calc(100% - 60px);
     width: -webkit-calc(100% - 60px);
     width: -webkit-calc(100% - 60px);
     width: calc(100% - 60px);
     width: calc(100% - 60px);

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 796 - 795
TEAMModelOS/ClientApp/src/view/school-mgmt/ClassroomSetting/ClassroomSetting.vue


+ 5 - 3
TEAMModelOS/ClientApp/src/view/school-mgmt/SystemSetting/SystemSetting.less

@@ -7,6 +7,10 @@
 @second-fontSize: 16px;
 @second-fontSize: 16px;
 @large-fontSize: 20px;
 @large-fontSize: 20px;
 
 
+.sm-system{
+    width:100%;
+    height:100%;
+}
 .sm {
 .sm {
     &-school-name {
     &-school-name {
         height: 60px;
         height: 60px;
@@ -45,9 +49,7 @@
 .sm-system {
 .sm-system {
     &-body {
     &-body {
         .fl-row-center;
         .fl-row-center;
-        position: absolute;
-        top: 60px;
-        bottom: 0;
+        height:~"calc(100% - 60px)";
         width: 100%;
         width: 100%;
         user-select: none !important;
         user-select: none !important;
     }
     }

+ 8 - 0
TEAMModelOS/ClientApp/src/view/selflearning/ManageOrderLearn.less

@@ -184,4 +184,12 @@
             }
             }
         }
         }
     }
     }
+}
+.to-create-icon {
+    float: right;
+    margin-right: 20px;
+    margin-top: 12px;
+    cursor: pointer;
+    color: white;
+    font-size: 18px;
 }
 }

+ 9 - 1
TEAMModelOS/ClientApp/src/view/selflearning/ManageOrderLearn.vue

@@ -3,7 +3,10 @@
         <div class="order-learn-list-box">
         <div class="order-learn-list-box">
             <vuescroll>
             <vuescroll>
                 <div class="order-learn-list-label">
                 <div class="order-learn-list-label">
-                    学习活动列表
+                    <span>
+                        学习活动列表
+                    </span>
+                    <Icon type="md-add" class="to-create-icon" @click="goToCreate"/>
                 </div>
                 </div>
                 <div :class="currentLearnIndex == index ? 'order-learn-item order-learn-item-active':'order-learn-item' " v-for="(item,index) in orderLearnList" @click="selectOrderLearn(index)">
                 <div :class="currentLearnIndex == index ? 'order-learn-item order-learn-item-active':'order-learn-item' " v-for="(item,index) in orderLearnList" @click="selectOrderLearn(index)">
                     <p class="order-learn-name">{{item.name}}</p>
                     <p class="order-learn-name">{{item.name}}</p>
@@ -191,6 +194,11 @@
             }
             }
         },
         },
         methods: {
         methods: {
+            goToCreate() {
+                this.$router.push({
+                    name: 'createOrderLearn'
+                })
+            },
             downloadFile(item) {
             downloadFile(item) {
                 window.location.href = item.blobUrl + this.sasString
                 window.location.href = item.blobUrl + this.sasString
             },
             },

+ 424 - 423
TEAMModelOS/ClientApp/src/view/student-account/Index.vue

@@ -1,441 +1,442 @@
 <style lang="less" scoped>
 <style lang="less" scoped>
-  @import './Index.less';
+    @import './Index.less';
 </style>
 </style>
 <style lang="less">
 <style lang="less">
-  @import './IndexIview.less';
+    @import './IndexIview.less';
 </style>
 </style>
 
 
 <template>
 <template>
-  <div class="sc-container">
-    <div class="sc-menu">
-      <div class="sc-menu-left dark-iview-select">
-        <Input v-model="searchText" clearable :placeholder="$t('stuAccount.searchHolder')" style="width: 28%;margin-left:20px;" :search="true" @on-enter="searchData" @on-change="searchData" @on-clear="searchData">
-        </Input>
-        <Select v-model="searchPeriod" style="width:20%;margin-left:5%;" :placeholder="$t('stuAccount.periodHolder')" clearable @on-change="filterStudentInfo">
-          <Option v-for="(item,index) in schoolData.period" :value="item.periodCode" :key="index" @click.native="getGradeList(index)">{{ item.periodName }}</Option>
-        </Select>
-        <Select v-model="searchGrade" style="width:20%;margin-left:1%;" :placeholder="$t('stuAccount.gradeHolder')" clearable @on-change="filterStudentInfo">
-          <!--<Option v-for="(item,index) in gradeList" :value="item.gradeCode" :key="index" @click.native="getClassroomList(index)">{{ item.gradeName }}</Option>-->
-          <Option v-for="(item,index) in fn.getPeriod($store.state.schoolBaseInfo.schoolBaseInfo,searchPeriod).grades" :value="item.gradeCode" :key="index">{{ item.gradeName }}</Option>
-        </Select>
-        <Select v-model="searchClassroom" ref="classroom" style="width:20%;margin-left:1%;" :placeholder="$t('stuAccount.classroomHolder')" clearable @on-change="filterStudentInfo">
-          <Option v-for="(item,index) in classroomShowList" :value="item.classroomCode" :key="index">{{ item.classroomName }}</Option>
-        </Select>
-      </div>
-      <div class="sc-menu-right sc-text-no-select">
-        <ul>
-          <li @click="delStudent(-1)" :class=" selections.length > 0 ? '':'sc-disable-cursor' ">
-            <Icon type="md-trash" :color="selections.length > 0 ? 'white':'#606060'" size="18" />
-            <span>{{ $t('stuAccount.delStu') }}</span>
-          </li>
-          <li @click="editStudent()" :class=" selections.length > 0 ? '':'sc-disable-cursor' ">
-            <Icon type="md-create" :color="selections.length > 0 ? 'white':'#606060'" size="18" />
-            <span>{{ $t('stuAccount.editInfo') }}</span>
-          </li>
-          <li @click="addStudent()">
-            <Icon type="md-person-add" color="white" size="18" />
-            <span>{{ $t('stuAccount.addStu') }}</span>
-          </li>
-          <li @click="importStudent()">
-            <Icon type="md-arrow-round-up" color="white" size="18" />
-            <span>{{ $t('stuAccount.importStu') }}</span>
-          </li>
-          <li @click="showAuthorization()">
-            <Icon type="ios-cog-outline" color="white" size="18" />
-            <span>{{$t('stuAccount.menuAuth') }}</span>
-          </li>
-        </ul>
-      </div>
-    </div>
-    <div class="sc-content" style="position:relative">
-        <Table ref="selection" :columns="tableColumns" :data="tablePageData" height="730" :loading="tableLoading" @on-select="getSelectInfo" @on-select-cancel="getSelectInfo" @on-select-all="getSelectInfo" @on-select-all-cancel="cancelAll">
-            <template slot-scope="{ row,index }" slot="status">
-                <Icon v-if="index%3 == 1" type="md-checkmark-circle-outline" size="18" color="#1CD0A1" />
-                <span v-else>—</span>
-            </template>
-            <template slot-scope="{ row,index }" slot="classroomName">
-                <span>{{row.classroom.classroomName}}</span>
-            </template>
-            <template slot-scope="{ row,index }" slot="classroomCode">
-                <span>{{row.classroom.classroomCode}}</span>
-            </template>
-            <template slot-scope="{ row,index }" slot="periodName">
-                <span>{{row.classroom.periodName}}</span>
-            </template>
-            <template slot-scope="{ row,index }" slot="gradeName">
-                <span>{{row.classroom.gradeName}}</span>
-            </template>
-            <template slot-scope="{ row,index }" slot="action">
-                <div class="item-tools">
-                    <Icon type="md-create" size="18" color="white" @click="editStudent(index)" />
-                    <Icon type="md-trash" size="18" color="white" @click="delStudent(index)" />
-                </div>
-            </template>
-        </Table>
-      <Page :total="tableShowData.length" size="small" :page-size="pageSize" show-total style="margin-top:15px;float:right;color:white;margin-right:20px;" :current.sync="currentPage" @on-change="getPageData" />
-      <authorization :isShow="authorizationStatus" @closeAuth="closeAuth"></authorization>
-    </div>
+    <div class="sc-container">
+        <div class="sc-menu">
+            <div class="sc-menu-left dark-iview-select">
+                <Input v-model="searchText" clearable :placeholder="$t('stuAccount.searchHolder')" style="width: 28%;margin-left:20px;" :search="true" @on-enter="searchData" @on-change="searchData" @on-clear="searchData">
+                </Input>
+                <Select v-model="searchPeriod" style="width:20%;margin-left:5%;" :placeholder="$t('stuAccount.periodHolder')" clearable @on-change="filterStudentInfo">
+                    <Option v-for="(item,index) in schoolData.period" :value="item.periodCode" :key="index" @click.native="getGradeList(index)">{{ item.periodName }}</Option>
+                </Select>
+                <Select v-model="searchGrade" style="width:20%;margin-left:1%;" :placeholder="$t('stuAccount.gradeHolder')" clearable @on-change="filterStudentInfo">
+                    <!--<Option v-for="(item,index) in gradeList" :value="item.gradeCode" :key="index" @click.native="getClassroomList(index)">{{ item.gradeName }}</Option>-->
+                    <Option v-for="(item,index) in fn.getPeriod($store.state.schoolBaseInfo.schoolBaseInfo,searchPeriod).grades" :value="item.gradeCode" :key="index">{{ item.gradeName }}</Option>
+                </Select>
+                <Select v-model="searchClassroom" ref="classroom" style="width:20%;margin-left:1%;" :placeholder="$t('stuAccount.classroomHolder')" clearable @on-change="filterStudentInfo">
+                    <Option v-for="(item,index) in classroomShowList" :value="item.classroomCode" :key="index">{{ item.classroomName }}</Option>
+                </Select>
+            </div>
+            <div class="sc-menu-right sc-text-no-select">
+                <ul>
+                    <li @click="delStudent(-1)" :class=" selections.length > 0 ? '':'sc-disable-cursor' ">
+                        <Icon type="md-trash" :color="selections.length > 0 ? 'white':'#606060'" size="18" />
+                        <span>{{ $t('stuAccount.delStu') }}</span>
+                    </li>
+                    <li @click="editStudent()" :class=" selections.length > 0 ? '':'sc-disable-cursor' ">
+                        <Icon type="md-create" :color="selections.length > 0 ? 'white':'#606060'" size="18" />
+                        <span>{{ $t('stuAccount.editInfo') }}</span>
+                    </li>
+                    <li @click="addStudent()">
+                        <Icon type="md-person-add" color="white" size="18" />
+                        <span>{{ $t('stuAccount.addStu') }}</span>
+                    </li>
+                    <li @click="importStudent()">
+                        <Icon type="md-arrow-round-up" color="white" size="18" />
+                        <span>{{ $t('stuAccount.importStu') }}</span>
+                    </li>
+                    <li @click="showAuthorization()">
+                        <Icon type="ios-cog-outline" color="white" size="18" />
+                        <span>{{$t('stuAccount.menuAuth') }}</span>
+                    </li>
+                </ul>
+            </div>
+        </div>
+        <div class="sc-content" style="position:relative">
+            <Table ref="selection" :columns="tableColumns" :data="tablePageData" height="730" :loading="tableLoading" @on-select="getSelectInfo" @on-select-cancel="getSelectInfo" @on-select-all="getSelectInfo" @on-select-all-cancel="cancelAll">
+                <template slot-scope="{ row,index }" slot="status">
+                    <Icon v-if="index%3 == 1" type="md-checkmark-circle-outline" size="18" color="#1CD0A1" />
+                    <span v-else>—</span>
+                </template>
+                <template slot-scope="{ row,index }" slot="classroomName">
+                    <span>{{row.classroomName}}</span>
+                </template>
+                <template slot-scope="{ row,index }" slot="classroomCode">
+                    <span>{{row.classroomCode}}</span>
+                </template>
+                <template slot-scope="{ row,index }" slot="periodName">
+                    <span>{{row.periodName}}</span>
+                </template>
+                <template slot-scope="{ row,index }" slot="gradeName">
+                    <span>{{row.gradeName}}</span>
+                </template>
+                <template slot-scope="{ row,index }" slot="action">
+                    <div class="item-tools">
+                        <Icon type="md-create" size="18" color="white" @click="editStudent(index)" />
+                        <Icon type="md-trash" size="18" color="white" @click="delStudent(index)" />
+                    </div>
+                </template>
+            </Table>
+            <Page :total="tableShowData.length" size="small" :page-size="pageSize" show-total style="margin-top:15px;float:right;color:white;margin-right:20px;" :current.sync="currentPage" @on-change="getPageData" />
+            <authorization :isShow="authorizationStatus" @closeAuth="closeAuth"></authorization>
+        </div>
 
 
-    <Modal v-model="addStudentStatus" width="520" class="add-student" :mask-closable="false" @on-cancel="cancel">
-      <div slot="header"></div>
-      <add-student v-if="addStudentStatus" :schoolCode="demoLoginInfo.schoolCode" :isShow="addStudentStatus" :editStudentInfo="editStudentInfo" @saveStudentInfo="closeAddStudent" :bizType="bizType"></add-student>
-      <div slot="footer">
-      </div>
-    </Modal>
-    <Modal v-model="importStudentStatus" width="70%" class="import-student" :mask-closable="false" @on-cancel="cancel">
-      <div slot="header">
-        <span class="import-model-title">{{$t('stuAccount.importTitle')}}</span>
-      </div>
-      <import-student v-if="importStudentStatus" :schoolCode="demoLoginInfo.schoolCode" :isShow="importStudentStatus" @importStudentInfo="closeImportStudent"></import-student>
-      <div slot="footer"></div>
-    </Modal>
-  </div>
+        <Modal v-model="addStudentStatus" width="520" class="add-student" :mask-closable="false" @on-cancel="cancel">
+            <div slot="header"></div>
+            <add-student v-if="addStudentStatus" :schoolCode="demoLoginInfo.schoolCode" :isShow="addStudentStatus" :editStudentInfo="editStudentInfo" @saveStudentInfo="closeAddStudent" :bizType="bizType"></add-student>
+            <div slot="footer">
+            </div>
+        </Modal>
+        <Modal v-model="importStudentStatus" width="70%" class="import-student" :mask-closable="false" @on-cancel="cancel">
+            <div slot="header">
+                <span class="import-model-title">{{$t('stuAccount.importTitle')}}</span>
+            </div>
+            <import-student v-if="importStudentStatus" :schoolCode="demoLoginInfo.schoolCode" :isShow="importStudentStatus" @importStudentInfo="closeImportStudent"></import-student>
+            <div slot="footer"></div>
+        </Modal>
+    </div>
 </template>
 </template>
 
 
 <script>
 <script>
-  import fn from '@/utils/js-fn.js'
-  import AddStudent from './add-student/AddStudent'
-  import ImportStudent from './add-student/ImportStudent'
-  import Authorization from './add-student/Authorization'
-  export default {
-    components: {
-      AddStudent,
-      ImportStudent,
-      Authorization
-    },
-    data() {
-      return {
-        fn,
-        classroomList: [],
-        classroomShowList: [],
-        gradeList: [],
-        searchPeriod: '',
-        searchGrade: '',
-        searchClassroom: '',
-        schoolData: {},
-        tableLoading: false,
-        searchText: '',
-        currentPage: 1,
-        pageSize: 30,
-        bizType: 0, // 0:新增 1:修改
-        editStudentInfo: [],
-        selections: [],
-        selectRow: {},
-        addStudentStatus: false,
-        importStudentStatus: false,
-        authorizationStatus: false,
-        demoLoginInfo: {
-          user: 'admin',
-          TEAMModelId: 'habook#0001',
-          school: '醍摩豆书院',
-          schoolCode: 'HBCN'
+    import fn from '@/utils/js-fn.js'
+    import AddStudent from './add-student/AddStudent'
+    import ImportStudent from './add-student/ImportStudent'
+    import Authorization from './add-student/Authorization'
+    export default {
+        components: {
+            AddStudent,
+            ImportStudent,
+            Authorization
         },
         },
-        tableData: [],
-        tableShowData: [],
-        tablePageData: [],
-        tableColumns: []
-      }
-    },
-    methods: {
-      cancel() {
-        console.log(this)
-      },
-      getGradeList(index) {
-        this.gradeList = this.schoolData.period[index].grade
-        this.classroomShowList = this.classroomList.filter((item) => { return item.period == this.schoolData.period[index].code })
-        if (this.classroomShowList.length == 0) {
-          this.$refs.classroom.clearSingleSelect()
-        }
-      },
-      getClassroomList(index) {
-        this.classroomShowList = this.classroomList.filter((item) => { return item.grade == this.gradeList[index].code })
-        if (this.classroomShowList.length == 0) {
-          this.$refs.classroom.clearSingleSelect()
-        }
-      },
-      getPageData() {
-        let start = ((this.currentPage - 1) * this.pageSize)
-        let end = 0
-        if (this.tableShowData.length < this.currentPage * this.pageSize) {
-          end = this.tableShowData.length
-        } else {
-          end = this.currentPage * this.pageSize
-        }
-        this.tablePageData = this.tableShowData.slice(start, end)
-      },
-      searchData() {
-        this.tableLoading = true
-        this.tableShowData = this.tableData.filter(item => JSON.stringify(item).indexOf(this.searchText) != -1)
-        this.currentPage = 1
-        this.getPageData()
-        this.tableLoading = false
-      },
-      filterStudentInfo() {
-        let grade = ''
-        if (this.searchPeriod == undefined) {
-          this.searchPeriod = ''
-        }
-        if (this.searchGrade == undefined || this.searchGrade == '') {
-          this.grade = ''
-        } else {
-          grade = '"gradeCode":' + '"' + this.searchGrade + '"'
-        }
-        console.log(JSON.stringify(this.tableData[0]))
-        if (this.searchClassroom == undefined) {
-          this.searchClassroom = ''
-        }
-        this.tableLoading = true
-        this.tableShowData = this.tableData.filter(
-          item => {
-            return JSON.stringify(item).indexOf(this.searchPeriod) !== -1 && JSON.stringify(item).indexOf(grade) !== -1 && JSON.stringify(item).indexOf(this.searchClassroom) !== -1
-          }
-        )
-        this.currentPage = 1
-        this.getPageData()
-        this.tableLoading = false
-      },
-      cancelAll() {
-        this.selections = []
-      },
-      getIndex(_arr, _obj) {
-        var len = _arr.length
-        for (let i = 0; i < len; i++) {
-          if (this.isObjEqual(_arr[i], _obj)) {
-            return parseInt(i)
-          }
-        }
-        return -1
-      },
-      isObjEqual(o1, o2) {
-        var props1 = Object.keys(o1)
-        var props2 = Object.keys(o2)
-        if (props1.length != props2.length) {
-          return false
-        }
-        for (var i = 0, max = props1.length; i < max; i++) {
-          var propName = props1[i]
-          if (o1[propName] !== o2[propName]) {
-            return false
-          }
-        }
-        return true
-      },
-      getSelectInfo(selction, row) {
-        this.selections = selction
-        this.selectRow = row
-      },
-      closeAddStudent(data) {
-        if (data.action == 1) {
-          let infoString = JSON.stringify(data.studentInfo)
-          let info = JSON.parse(infoString)
-          this.tableData.unshift(info);
-          [...this.tableShowData] = this.tableData
-          this.getPageData()
-        } else {
-          this.findStudentInfo()
-        }
-        this.addStudentStatus = false
-      },
-      closeImportStudent(data) {
-        this.findStudentInfo()
-        this.importStudentStatus = false
-      },
-      closeAuth() {
-        this.authorizationStatus = false
-      },
-      addStudent() {
-        this.bizType = 1
-        this.$refs.selection.clearCurrentRow()
-        this.addStudentStatus = true
-      },
-      importStudent() {
-        this.importStudentStatus = true
-      },
-      showAuthorization() {
-        this.authorizationStatus = true
-      },
-      editStudent(index) {
-        this.bizType = 2
-        if (index != undefined) {
-          this.editStudentInfo = []
-          let objStr = JSON.stringify(this.tableData[index])
-          this.editStudentInfo.push(JSON.parse(objStr))
-          this.tableShowData[index]._checked = true
-          this.tablePageData[index]._checked = true
-          this.$forceUpdate()
-          this.addStudentStatus = true
-        } else {
-          if (this.selections.length > 0) {
-            this.editStudentInfo = [];
-            [...this.editStudentInfo] = this.selections
-            this.addStudentStatus = true
-          } else {
-            this.$Message.error(this.$t('stuAccount.tips1'))
-          }
-        }
-      },
-      delStudent(index, row) {
-        if (index >= 0) {
-          let showIndex = index + (this.currentPage - 1) * this.pageSize
-          let originIndex = this.getIndex(this.tableData, this.tablePageData[index])
-          this.$Modal.confirm({
-            title: this.$t('stuAccount.tips2Title'),
-            content: '<p>' + this.$t('stuAccount.tips2Content1') + " <strong style='color:red;'>" + this.tableShowData[showIndex].name + '</strong></p>',
-            onOk: () => {
-              this.$api.stuAccount.deleteStudentInfo(this.tablePageData[index]).then(
-                (res) => {
-                  if (res.error == null) {
-                    this.tableData.splice(originIndex, 1)
-                    this.tablePageData.splice(index, 1)
-                    this.tableShowData.splice(showIndex, 1)
-                  }
+        data() {
+            return {
+                fn,
+                classroomList: [],
+                classroomShowList: [],
+                gradeList: [],
+                searchPeriod: '',
+                searchGrade: '',
+                searchClassroom: '',
+                schoolData: {},
+                tableLoading: false,
+                searchText: '',
+                currentPage: 1,
+                pageSize: 30,
+                bizType: 0, // 0:新增 1:修改
+                editStudentInfo: [],
+                selections: [],
+                selectRow: {},
+                addStudentStatus: false,
+                importStudentStatus: false,
+                authorizationStatus: false,
+                demoLoginInfo: {
+                    user: 'admin',
+                    TEAMModelId: 'habook#0001',
+                    school: '醍摩豆书院',
+                    schoolCode: 'HBCN'
                 },
                 },
-                (err) => {
-                  alert('API error!')
+                tableData: [],
+                tableShowData: [],
+                tablePageData: [],
+                tableColumns: []
+            }
+        },
+        methods: {
+            cancel() {
+                console.log(this)
+            },
+            getGradeList(index) {
+                this.gradeList = this.schoolData.period[index].grade
+                this.classroomShowList = this.classroomList.filter((item) => { return item.period == this.schoolData.period[index].code })
+                if (this.classroomShowList.length == 0) {
+                    this.$refs.classroom.clearSingleSelect()
                 }
                 }
-              )
             },
             },
-            onCancel: () => {
-            }
-          })
-        } else {
-          let i = this.getIndex(this.tableData, row)
-          if (i >= 0) {
-            this.tableData.splice(i, 1)
-          } else {
-             this.$Message.error(this.$t('stuAccount.tips3'))
-          }
-        }
-      },
-      getSchoolData() {
-        this.$api.schoolSetting.findSchoolSystem({
-          schoolCode: this.demoLoginInfo.schoolCode
-        }).then(res => {
-          if (res.error == null) {
-            if (res.result.data.length > 0) {
-              this.schoolData = res.result.data[0]
-              this.$store.commit('schoolBaseInfo/setSchoolInfo', this.schoolData)
-              this.getClassroom()
-            }
-          }
-        }
-        )
-      },
-      getClassroom() {
-        this.$api.schoolSetting.findClassInfo({
-          // schoolCode: this.demoLoginInfo.schoolCode,
-          // scope:'school'
-          scopeCode: this.demoLoginInfo.schoolCode
-        }).then(res => {
-          if (res.error == null) {
-            if (res.result.data.length > 0) {
-              this.classroomList = res.result.data;
-              [...this.classroomShowList] = this.classroomList
-              this.$store.commit('schoolBaseInfo/setClassroomList', this.classroomList)
-              this.findStudentInfo()
-            }
-          }
-        })
-      },
-      initData() {
-        this.tableColumns = [
-          {
-            type: 'selection',
-            width: 80,
-            align: 'center'
-          },
-          {
-            key: 'seatNo',
-            title: this.$t('stuAccount.seatNo'),
-            align: 'center',
-            width: 80
-          },
-          {
-            key: 'studentId',
-            title: this.$t('stuAccount.account'),
-            align: 'center'
-          },
-          {
-            key: 'name',
-            title: this.$t('stuAccount.stuName'),
-            align: 'center'
-          },
-          {
-            slot: 'classroomName',
-            title: this.$t('stuAccount.classroomName'),
-            align: 'center'
-          },
-          {
-            slot: 'classroomCode',
-            title: this.$t('stuAccount.classroomCode'),
-            align: 'center'
-          },
-          {
-            slot: 'periodName',
-            title: this.$t('stuAccount.period'),
-            align: 'center'
-          },
-          {
-            slot: 'gradeName',
-            title: this.$t('stuAccount.grade'),
-            align: 'center'
-          },
-          {
-            slot: 'status',
-            title: this.$t('stuAccount.authStatus'),
-            align: 'center'
-          },
-          {
-            slot: 'action',
-            title: ' ',
-            width: 100,
-            align: 'center'
-          }
-        ]
-      },
-      findStudentInfo() {
-        this.tableLoading = true
-        let params = {
-          schoolCode: this.demoLoginInfo.schoolCode
-        }
-        this.$api.stuAccount.findStudent(params).then(
-          (res) => {
-            if (res.error == null) {
-              this.tableData = res.result.data
-              for (let item of this.tableData) {
-                let currentSchoolInfo = this.$JSONPath.query(this.$store.state.schoolBaseInfo.schoolBaseInfo, "$..period[?(@.periodCode=='" + item.classroom.periodCode + "')]")
-                let currentClassroomlInfo = this.$JSONPath.query(this.$store.state.schoolBaseInfo.classroomList, "$..[?(@.classroomCode=='" + item.classroom.classroomCode + "')]")
-
-                if (currentSchoolInfo.length > 0) {
-                  item.classroom.periodName = currentSchoolInfo[0].periodName
-                  item.classroom.gradeName = this.$JSONPath.query(currentSchoolInfo, "$..grades[?(@.gradeCode=='" + item.classroom.gradeCode + "')]")[0].gradeName
-                  item.classroom.classroomName = currentClassroomlInfo[0].classroomName
+            getClassroomList(index) {
+                this.classroomShowList = this.classroomList.filter((item) => { return item.grade == this.gradeList[index].code })
+                if (this.classroomShowList.length == 0) {
+                    this.$refs.classroom.clearSingleSelect()
+                }
+            },
+            getPageData() {
+                let start = ((this.currentPage - 1) * this.pageSize)
+                let end = 0
+                if (this.tableShowData.length < this.currentPage * this.pageSize) {
+                    end = this.tableShowData.length
+                } else {
+                    end = this.currentPage * this.pageSize
+                }
+                this.tablePageData = this.tableShowData.slice(start, end)
+            },
+            searchData() {
+                this.tableLoading = true
+                this.tableShowData = this.tableData.filter(item => JSON.stringify(item).indexOf(this.searchText) != -1)
+                this.currentPage = 1
+                this.getPageData()
+                this.tableLoading = false
+            },
+            filterStudentInfo() {
+                let grade = ''
+                if (this.searchPeriod == undefined) {
+                    this.searchPeriod = ''
+                }
+                if (this.searchGrade == undefined || this.searchGrade == '') {
+                    this.grade = ''
+                } else {
+                    grade = '"gradeCode":' + '"' + this.searchGrade + '"'
                 }
                 }
-              }
-              [...this.tableShowData] = this.tableData
-              this.getPageData()
-              this.$forceUpdate()
-              this.tableLoading = false
-            } else {
-              alert('API error!')
-              this.tableLoading = false
+                if (this.searchClassroom == undefined) {
+                    this.searchClassroom = ''
+                }
+                this.tableLoading = true
+                this.tableShowData = this.tableData.filter(
+                    item => {
+                        return JSON.stringify(item).indexOf(this.searchPeriod) !== -1 && JSON.stringify(item).indexOf(grade) !== -1 && JSON.stringify(item).indexOf(this.searchClassroom) !== -1
+                    }
+                )
+                this.currentPage = 1
+                this.getPageData()
+                this.tableLoading = false
+            },
+            cancelAll() {
+                this.selections = []
+            },
+            getIndex(_arr, _obj) {
+                var len = _arr.length
+                for (let i = 0; i < len; i++) {
+                    if (this.isObjEqual(_arr[i], _obj)) {
+                        return parseInt(i)
+                    }
+                }
+                return -1
+            },
+            isObjEqual(o1, o2) {
+                var props1 = Object.keys(o1)
+                var props2 = Object.keys(o2)
+                if (props1.length != props2.length) {
+                    return false
+                }
+                for (var i = 0, max = props1.length; i < max; i++) {
+                    var propName = props1[i]
+                    if (o1[propName] !== o2[propName]) {
+                        return false
+                    }
+                }
+                return true
+            },
+            getSelectInfo(selction, row) {
+                this.selections = selction
+                this.selectRow = row
+            },
+            closeAddStudent(data) {
+                if (data.action == 1) {
+                    let infoString = JSON.stringify(data.studentInfo)
+                    let info = JSON.parse(infoString)
+                    this.tableData.unshift(info);
+                    [...this.tableShowData] = this.tableData
+                    this.getPageData()
+                } else {
+                    this.findStudentInfo()
+                }
+                this.addStudentStatus = false
+            },
+            closeImportStudent(data) {
+                this.findStudentInfo()
+                this.importStudentStatus = false
+            },
+            closeAuth() {
+                this.authorizationStatus = false
+            },
+            addStudent() {
+                this.bizType = 1
+                this.$refs.selection.clearCurrentRow()
+                this.addStudentStatus = true
+            },
+            importStudent() {
+                this.importStudentStatus = true
+            },
+            showAuthorization() {
+                this.authorizationStatus = true
+            },
+            editStudent(index) {
+                this.bizType = 2
+                if (index != undefined) {
+                    this.editStudentInfo = []
+                    let objStr = JSON.stringify(this.tableData[index])
+                    this.editStudentInfo.push(JSON.parse(objStr))
+                    this.tableShowData[index]._checked = true
+                    this.tablePageData[index]._checked = true
+                    this.$forceUpdate()
+                    this.addStudentStatus = true
+                } else {
+                    if (this.selections.length > 0) {
+                        this.editStudentInfo = [];
+                        [...this.editStudentInfo] = this.selections
+                        this.addStudentStatus = true
+                    } else {
+                        this.$Message.error(this.$t('stuAccount.tips1'))
+                    }
+                }
+            },
+            delStudent(index, row) {
+                if (index >= 0) {
+                    let showIndex = index + (this.currentPage - 1) * this.pageSize
+                    let originIndex = this.getIndex(this.tableData, this.tablePageData[index])
+                    this.$Modal.confirm({
+                        title: this.$t('stuAccount.tips2Title'),
+                        content: '<p>' + this.$t('stuAccount.tips2Content1') + " <strong style='color:red;'>" + this.tableShowData[showIndex].name + '</strong></p>',
+                        onOk: () => {
+                            this.$api.stuAccount.deleteStudentInfo(this.tablePageData[index]).then(
+                                (res) => {
+                                    if (res.error == null) {
+                                        this.tableData.splice(originIndex, 1)
+                                        this.tablePageData.splice(index, 1)
+                                        this.tableShowData.splice(showIndex, 1)
+                                    }
+                                },
+                                (err) => {
+                                    alert('API error!')
+                                }
+                            )
+                        },
+                        onCancel: () => {
+                        }
+                    })
+                } else {
+                    let i = this.getIndex(this.tableData, row)
+                    if (i >= 0) {
+                        this.tableData.splice(i, 1)
+                    } else {
+                        this.$Message.error(this.$t('stuAccount.tips3'))
+                    }
+                }
+            },
+            getSchoolData() {
+                this.$api.schoolSetting.findSchoolSystem({
+                    schoolCode: this.demoLoginInfo.schoolCode
+                }).then(res => {
+                    if (res.error == null) {
+                        if (res.result.data.length > 0) {
+                            this.schoolData = res.result.data[0]
+                            this.$store.commit('schoolBaseInfo/setSchoolInfo', this.schoolData)
+                            this.getClassroom()
+                        }
+                    }
+                }
+                )
+            },
+            getClassroom() {
+                this.$api.schoolSetting.findClassInfo({
+                    // schoolCode: this.demoLoginInfo.schoolCode,
+                    // scope:'school'
+                    scopeCode: this.demoLoginInfo.schoolCode
+                }).then(res => {
+                    if (res.error == null) {
+                        if (res.result.data.length > 0) {
+                            this.classroomList = res.result.data;
+                            [...this.classroomShowList] = this.classroomList
+                            this.$store.commit('schoolBaseInfo/setClassroomList', this.classroomList)
+                            this.findStudentInfo()
+                        }
+                    }
+                })
+            },
+            initData() {
+                this.tableColumns = [
+                    {
+                        type: 'selection',
+                        width: 80,
+                        align: 'center'
+                    },
+                    {
+                        key: 'seatNo',
+                        title: this.$t('stuAccount.seatNo'),
+                        align: 'center',
+                        width: 80
+                    },
+                    {
+                        key: 'studentId',
+                        title: this.$t('stuAccount.account'),
+                        align: 'center'
+                    },
+                    {
+                        key: 'name',
+                        title: this.$t('stuAccount.stuName'),
+                        align: 'center'
+                    },
+                    {
+                        slot: 'classroomName',
+                        title: this.$t('stuAccount.classroomName'),
+                        align: 'center'
+                    },
+                    {
+                        slot: 'classroomCode',
+                        title: this.$t('stuAccount.classroomCode'),
+                        align: 'center'
+                    },
+                    {
+                        slot: 'periodName',
+                        title: this.$t('stuAccount.period'),
+                        align: 'center'
+                    },
+                    {
+                        slot: 'gradeName',
+                        title: this.$t('stuAccount.grade'),
+                        align: 'center'
+                    },
+                    {
+                        slot: 'status',
+                        title: this.$t('stuAccount.authStatus'),
+                        align: 'center'
+                    },
+                    {
+                        slot: 'action',
+                        title: ' ',
+                        width: 100,
+                        align: 'center'
+                    }
+                ]
+            },
+            findStudentInfo() {
+                this.tableLoading = true
+                let params = {
+                    schoolCode: this.demoLoginInfo.schoolCode
+                }
+                this.$api.stuAccount.findStudent(params).then(
+                    (res) => {
+                        if (res.error == null) {
+                            this.tableData = res.result.data
+                            for (let item of this.tableData) {
+                                let currentClassroomlInfo = this.$JSONPath.query(this.$store.state.schoolBaseInfo.classroomList, "$..[?(@.classroomCode=='" + item.classroomCode + "')]")
+                                
+                                if (currentClassroomlInfo.length > 0) {
+                                    let currentSchoolInfo = this.$JSONPath.query(this.$store.state.schoolBaseInfo.schoolBaseInfo, "$..period[?(@.periodCode=='" + currentClassroomlInfo[0].periodCode + "')]")
+                                    item.periodName = currentSchoolInfo[0].periodName
+                                    item.periodCode = currentSchoolInfo[0].periodCode
+                                    item.gradeName = this.$JSONPath.query(currentSchoolInfo, "$..grades[?(@.gradeCode=='" + currentClassroomlInfo[0].gradeCode + "')]")[0].gradeName
+                                    item.gradeCode = this.$JSONPath.query(currentSchoolInfo, "$..grades[?(@.gradeCode=='" + currentClassroomlInfo[0].gradeCode + "')]")[0].gradeCode
+                                    item.classroomName = currentClassroomlInfo[0].classroomName
+                                }
+                            }
+                            [...this.tableShowData] = this.tableData
+                            this.getPageData()
+                            this.$forceUpdate()
+                            this.tableLoading = false
+                        } else {
+                            alert('API error!')
+                            this.tableLoading = false
+                        }
+                    },
+                    (err) => {
+                        this.tableLoading = false
+                    }
+                )
             }
             }
-          },
-          (err) => {
-            this.tableLoading = false
-          }
-        )
-      }
-    },
-    created() {
-      this.initData()
-      this.getSchoolData()
-      // this.getClassroom();
-      // this.findStudentInfo();
-    },
-    computed: {
-    },
-    mounted() {
+        },
+        created() {
+            this.initData()
+            this.getSchoolData()
+            // this.getClassroom();
+            // this.findStudentInfo();
+        },
+        computed: {
+        },
+        mounted() {
+        }
     }
     }
-  }
 </script>
 </script>

+ 2 - 2
TEAMModelOS/ClientApp/src/view/syllabus/newSyllabus/Index.vue

@@ -183,7 +183,7 @@
                     areaCode: '86'
                     areaCode: '86'
                 },
                 },
                 currentParams: { // 默认API传递参数
                 currentParams: { // 默认API传递参数
-                    schoolCode: '',
+                    scopeCode: '',
                     periodCode: '',
                     periodCode: '',
                     subjectCode: '',
                     subjectCode: '',
                     type: 0,
                     type: 0,
@@ -238,7 +238,7 @@
                         this.originSchoolData = res.result.data[0] // 默认选择第一个
                         this.originSchoolData = res.result.data[0] // 默认选择第一个
                         this.originData = res.result.data[0] // 默认选择第一个
                         this.originData = res.result.data[0] // 默认选择第一个
                         this.periodList = this.originData.period
                         this.periodList = this.originData.period
-                        this.currentParams.schoolCode = this.originData.schoolCode
+                        this.currentParams.scopeCode = this.originData.schoolCode
                         this.currentParams.periodCode = this.originData.period[0].periodCode
                         this.currentParams.periodCode = this.originData.period[0].periodCode
                         this.currentPeriodIndex = 0 // 默认选择第一个学段
                         this.currentPeriodIndex = 0 // 默认选择第一个学段
                         this.onPeriodChange(0)
                         this.onPeriodChange(0)

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 584 - 580
TEAMModelOS/ClientApp/src/view/teachcontent/index.vue


+ 5 - 6
TEAMModelOS/Controllers/Analysis/AchievementController.cs

@@ -588,7 +588,7 @@ namespace TEAMModelOS.Controllers.Analysis
             Dictionary<string, object> scatterAnalysis = new Dictionary<string, object>();
             Dictionary<string, object> scatterAnalysis = new Dictionary<string, object>();
             request.@params.TryGetValue("subjectCode", out object subjectCode);
             request.@params.TryGetValue("subjectCode", out object subjectCode);
             request.@params.TryGetValue("schoolCode", out object schoolCode);
             request.@params.TryGetValue("schoolCode", out object schoolCode);
-            request.@params.TryGetValue("examCode", out object examCode);
+            //request.@params.TryGetValue("examCode", out object examCode);
             request.@params.TryGetValue("scopeCode", out object scopeCode);
             request.@params.TryGetValue("scopeCode", out object scopeCode);
             Dictionary<string, object> sub = new Dictionary<string, object>
             Dictionary<string, object> sub = new Dictionary<string, object>
             {
             {
@@ -598,7 +598,7 @@ namespace TEAMModelOS.Controllers.Analysis
             Dictionary<string, object> examMap = new Dictionary<string, object>
             Dictionary<string, object> examMap = new Dictionary<string, object>
             {
             {
                 { "subjectCode", subjectCode.ToString()},
                 { "subjectCode", subjectCode.ToString()},
-                { "examCode", scopeCode.ToString()},
+                { "scopeCode", scopeCode.ToString()},
                 { "schoolCode", schoolCode.ToString()}
                 { "schoolCode", schoolCode.ToString()}
             };
             };
             List<ExamResult> exams = await azureCosmosDBRepository.FindByDict<ExamResult>(examMap);
             List<ExamResult> exams = await azureCosmosDBRepository.FindByDict<ExamResult>(examMap);
@@ -787,7 +787,6 @@ namespace TEAMModelOS.Controllers.Analysis
                     catch (Exception ex)
                     catch (Exception ex)
                     {
                     {
                         builder.Data(exams);
                         builder.Data(exams);
-                        Console.WriteLine("---------------------" + ex.Message + "--------------------------");
                     }
                     }
 
 
                 });
                 });
@@ -803,7 +802,7 @@ namespace TEAMModelOS.Controllers.Analysis
             JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
             JsonRPCResponseBuilder builder = JsonRPCResponseBuilder.custom();
             request.@params.TryGetValue("subjectCode", out object subjectCode);
             request.@params.TryGetValue("subjectCode", out object subjectCode);
             request.@params.TryGetValue("schoolCode", out object schoolCode);
             request.@params.TryGetValue("schoolCode", out object schoolCode);
-            request.@params.TryGetValue("examCode", out object examCode);
+            //request.@params.TryGetValue("examCode", out object examCode);
             request.@params.TryGetValue("scopeCode", out object scopeCode);
             request.@params.TryGetValue("scopeCode", out object scopeCode);
             Dictionary<string, object> sub = new Dictionary<string, object>
             Dictionary<string, object> sub = new Dictionary<string, object>
             {
             {
@@ -814,7 +813,7 @@ namespace TEAMModelOS.Controllers.Analysis
             Dictionary<string, object> examMap = new Dictionary<string, object>
             Dictionary<string, object> examMap = new Dictionary<string, object>
             {
             {
                 { "schoolCode", schoolCode.ToString()},
                 { "schoolCode", schoolCode.ToString()},
-                { "examCode", examCode.ToString()},
+                { "scopeCode", scopeCode.ToString()},
                 { "subjectCode",  subjectCode.ToString()}
                 { "subjectCode",  subjectCode.ToString()}
 
 
 
 
@@ -1302,7 +1301,7 @@ namespace TEAMModelOS.Controllers.Analysis
                 {
                 {
                     Dictionary<string, object> sub = new Dictionary<string, object>
                     Dictionary<string, object> sub = new Dictionary<string, object>
                     {
                     {
-                        { "examCode",  e.id}
+                        { "scopeCode",  e.id}
                     };
                     };
                     Period = e.conditions.period;
                     Period = e.conditions.period;
                     Grade = e.conditions.grade;
                     Grade = e.conditions.grade;