Browse Source

侧边栏课纲

psycho 6 năm trước cách đây
mục cha
commit
3b640ce579

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 1 - 0
TEAMModelOS/ClientApp/assets/icon/no_data.svg


+ 8 - 10
TEAMModelOS/ClientApp/common/loading.vue

@@ -1,17 +1,19 @@
 <template>
   <div class="loading-container">
-    <div id="loadingBox"></div>
+    <div id="loadingBox" :style="{'margin-top':top+'px','border-width': borderWidth + 'px'}"></div>
   </div>
 </template>
 
 <script>
     export default {
     name: "loadingBox",
+    props: ["top","borderColor","color","borderWidth"],
     data() {
       return {
       }
     },
     created() {
+      console.log(this.top);
     },
     methods: {
       
@@ -20,25 +22,21 @@
 </script>
 <style>
   .loading-container {
-    position:relative;
+    position:absolute;
     width:100%;
     height:100%;
-    background:#3cefff;
     display:flex;
     flex-direction:row;
     justify-content:center;
-    align-items:center;
   }
 
   #loadingBox {
-    position:absolute;
-    top:500px;
-    left:46%;
-    border: 6px solid hsla(185, 100%, 62%, 0.2);
+    margin-top:200px;
+    border: 3px solid hsla(185, 100%, 62%, 0.2);
     border-top-color: #4c9cff;
     border-radius: 50%;
-    width: 60px;
-    height: 60px;
+    width: 40px;
+    height: 40px;
     animation: spin .7s linear infinite;
   }
 

+ 147 - 0
TEAMModelOS/ClientApp/components/evaluation/SyllabusTree.vue

@@ -0,0 +1,147 @@
+<template>
+  <div class="tree-main">
+    <Tree :data="treeData" :render="renderContent" ref="tree" show-checkbox empty-text="暂无课纲内容"></Tree>
+  </div>
+</template>
+<script>
+  export default {
+    props: ["treeDatas"],
+    data() {
+      return {
+        treeData: []
+      };
+    },
+    created() {
+      this.treeData = this.treeDatas;
+    },
+
+    //监听树形数据源变化
+    watch: {
+      treeDatas: {
+        handler(newValue) {
+          this.treeData = newValue;
+        },
+        deep: true
+      }
+    },
+    methods: {
+      //自定义渲染树形工具
+       renderContent(h, { root, node, data }) {
+        return h(
+          "span",
+          {
+            domProps: {
+              className: "singleClass"
+            },
+            on: {
+              click: () => {
+                this.titleClick(root, node, data, event);
+              },
+            }
+          },
+          [
+            h("span", [
+              h("span", {
+                domProps: {
+                  className: "syllabus-name"
+                },
+              }, data.title)
+            ])
+          ]
+        );
+      },
+      // 标题点击收缩展开
+      titleClick(root, node, data, event) {
+        data.expand = !data.expand;
+      },
+      // 根目录点击事件
+      rootClick(data) {
+        data.expand = !data.expand;
+      }
+    },
+  };
+</script>
+<style scoped>
+  .tree-main {
+    margin-left: 5%;
+    width: 90%;
+  }
+
+  .ivu-tree .ivu-tree-arrow {
+    width: 2%;
+  }
+
+  .ivu-input-wrapper {
+    width: 80% !important;
+  }
+
+  .modelRow {
+    margin: 20px;
+    font-size: 14px;
+  }
+
+  .animated {
+    animation-duration: 0.5s;
+  }
+
+  @-webkit-keyframes slideInDown {
+    from {
+      -webkit-transform: translate3d(0,-10%, 0);
+      transform: translate3d(0, -10%, 0) !important;
+      visibility: visible;
+    }
+
+    to {
+      -webkit-transform: translate3d(0, 0%, 0);
+      transform: translate3d(0, 0%, 0);
+    }
+  }
+
+  @keyframes slideInDown {
+    from {
+      -webkit-transform: translate3d(0, -10%, 0);
+      transform: translate3d(0, -10%, 0) !important;
+      visibility: visible;
+    }
+
+    to {
+      -webkit-transform: translate3d(0, 0%, 0);
+      transform: translate3d(0, 0%, 0);
+    }
+  }
+
+  .slideInDown {
+    -webkit-animation-name: slideInDown;
+    animation-name: slideInDown;
+  }
+  .tree-main /deep/ .singleClass {
+     margin:0;
+  }
+
+
+  .tree-main /deep/ .singleClass .syllabus-name{
+    width:100px;    
+    overflow: hidden;    
+    text-overflow:ellipsis;    
+    white-space: nowrap;
+    display:inline-block;
+    vertical-align:middle;
+  }
+  .tree-main /deep/ .ivu-tree-empty{
+    width:100%;
+    height:60px;
+    line-height:60px;
+    text-align:center;
+    font-size:14px;
+  }
+
+  .btn-addClass {
+    width: 16%;
+    padding: 10px 6px !important;
+  }
+
+  .ivu-tabs-nav-scroll {
+    display: flex;
+    justify-content: center;
+  }
+</style>

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

@@ -73,7 +73,7 @@
       return {
         isEdit: false,
         editInfo: {},
-        exersicesType: 'single',
+        exersicesType: 'Single',
         exersicesDiff: "0",
         analysisContent: "",
         stemContent: "",

+ 2 - 2
TEAMModelOS/ClientApp/view/evaluation/index/CreateTest.vue

@@ -16,7 +16,7 @@
         </div>
         <div class="exersices-attr-diff my-radio-style test-type">
           <IconText :text="'测试类型'" :color="'red'" :icon="'ios-settings'"></IconText>
-          <RadioGroup v-model="testBasicAttr.testTpye" type="button">
+          <RadioGroup v-model="testBasicAttr.testType" type="button">
             <Radio label="formal">正式成绩</Radio>
             <Radio label="practice">练习成绩</Radio>
             <Radio label="statistics">统计(问卷)</Radio>
@@ -385,7 +385,7 @@
         exersicesDiff:'',
         testBasicAttr: {
           testScene: 'simulation',
-          testTpye: 'formal',
+          testType: 'formal',
           testTarget: 'class',
           testMode: 'auto'
         },

+ 23 - 0
TEAMModelOS/ClientApp/view/evaluation/index/ExercisesList.css

@@ -1,5 +1,6 @@
 .ev-list-container {
     user-select:none !important;
+    position:relative;
 }
     .ev-list-container .ev-header {
         background:#fff;
@@ -25,6 +26,18 @@
         margin:15px 0;
     }
 
+.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 {
     position:relative;
     width: 100%;
@@ -167,6 +180,7 @@
             background: none;
         }
 .content-wrap {
+    position:relative;
     width:100%;
     height:auto;
     display:flex;
@@ -332,6 +346,15 @@
 
     .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;
     }
 
 

+ 75 - 51
TEAMModelOS/ClientApp/view/evaluation/index/ExercisesList.vue

@@ -1,6 +1,5 @@
 <template>
   <div class="ev-list-container">
-    <Loading v-show="importLoading"></Loading>
 
     <div class="ev-header">
       <Icon type="md-bookmarks" size="30" color="rgb(16, 171, 231)" />
@@ -56,7 +55,7 @@
       </span>
       <div class="operation-cart">
         <Poptip trigger="hover" title="我的试题篮" placement="bottom">
-          <Badge :count="basketCount" show-zero>
+          <Badge :count="basketCount" show-zero type="success">
             <img src="../../../assets/icon/icon_cart.png" />
           </Badge>
           <div class="basket-content" slot="content">
@@ -97,65 +96,96 @@
               <p @click="handleSubmitPaper">进入组卷中心</p>
             </div>
           </div>
-
         </Poptip>
       </div>
     </div>
+    <!-- 筛选部分结束 -->
+
+
     <!-- 题目列表部分 -->
-    <div v-if="list.length == 0">暂无数据</div>
+    <div v-if="list.length == 0" class="no-data-text">
+      <img src="../../../assets/icon/no_data.svg" width="120"/>
+      <span style="margin-top:15px;color:#808080">暂无数据</span>
+    </div>
     <div class="content-wrap" v-else>
+      <Loading v-show="importLoading"></Loading>
+
       <div class="exercise-item" v-for="(item,index) of list">
-        <div>
+        <!-- 题目难度类型以及绑定知识点 -->
+        <div class="item-types">
           <span class="item-difficulty" :style="{backgroundColor:diffColors[item.difficulty || 3]}">{{exersicesDiff[item.difficulty || 3]}}</span>
           <span class="item-type">{{exersicesType[item.type]}}</span>
           <span class="item-relevant-points">
             <span class="item-tools-bind">
               <span class="item-tools-tool">
-                <span class="item-bind-point">已关联知识点:</span>
-                <span class="item-bind-point">字音辨析</span>
-                <span class="item-bind-point">字音辨析</span>
-                <span class="item-bind-point">字音辨析</span>
-                <span class="item-bind-point">字音辨析</span>
+                <span class="item-bind-point">已关联知识点:</span>
+                <span class="item-bind-point" v-for="concept in item.concept" v-show="item.concept"><Tag color="success">{{concept.name}}</Tag></span>
+                <span class="item-bind-point"  v-show="!item.concept">暂未关联</span>
                 <Icon type="md-link" size="20" />
-                <span @click="handleBindPoint">绑定知识点</span>
+                <span @click="handleBindPoint(item.concept || [])">绑定知识点</span>
               </span>
             </span>
           </span>
         </div>
+        <!-- 题干部分 --> 
         <div class="item-question">
           <p>{{index+1}} : <span v-html="item.question"></span></p>
         </div>
+        <!-- 选项部分 -->
         <div v-for="(option,optionIndex) in item.option">
           <p>{{String.fromCharCode(64 + parseInt(optionIndex+1))}} : <span v-html="option.value"></span></p>
         </div>
-        <div class="item-answer">
+
+        <!-- 如果是组合题 -->
+        <div v-for="(childQuestion,childIndex) in item.children" v-if="item.children.length">
+          <div class="item-question">
+            <p>{{childIndex+1}} : <span v-html="childQuestion.question"></span></p>
+          </div>
+          <div v-for="(childOption,childOptionIndex) in childQuestion.option">
+            <p>{{String.fromCharCode(64 + parseInt(childOptionIndex+1))}} : <span v-html="childOption.value"></span></p>
+          </div>
+          <div class="item-answer" v-show="isShowAnswer">
+            <span style="color:#01b4ef">【答案】:</span>
+            <span v-html="childQuestion.answer[0] || childQuestion.answer" v-if="childQuestion.type == 'Subjective'"></span>
+            <span :class="[ childQuestion.type == 'Complete' ? 'item-answer-item':'']" v-for="answer in childQuestion.answer" v-else-if="childQuestion.type == 'Complete'" v-html="answer"></span>
+            <span :class="[ childQuestion.type == 'Complete' ? 'item-answer-item':'']" v-for="answer in childQuestion.answer" v-else>{{answer}}</span>
+          </div>
+          <div class="item-explain" v-show="isShowAnswer">
+            <span style="color:#01b4ef">【解析】:</span>
+            <span v-html="childQuestion.explain"></span>
+          </div>
+        </div>
+        <!-- 组合题结束 -->
+        <!-- 答案展示部分 -->
+        <div class="item-answer" v-show="item.type != 'Compose'">
           <span class="answer-title-line"></span>
           <span class="answer-title" @click="showAnswer($event,'answer')">答案:点击展开答案详情</span>
           <div class="item-answer-details">
             <span v-html="item.answer" v-if="item.type == 'Subjective'"></span>
             <span :class="[ item.type == 'Complete' ? 'item-answer-item':'']" v-for="answer in item.answer" v-else-if="item.type == 'Complete'" v-html="answer"></span>
             <span :class="[ item.type == 'Complete' ? 'item-answer-item':'']" v-for="answer in item.answer" v-else>{{answer}}</span>
-
           </div>
         </div>
-        <div class="item-explain">
+        <!-- 解析部分 -->
+        <div class="item-explain" v-show="item.type != 'Compose'">
           <span class="explain-title-line"></span>
           <span class="explain-title" @click="showAnswer($event,'explain')">解析:点击展开解析详情</span>
           <div class="item-explain-details">
             <span v-html="item.explain"></span>
           </div>
         </div>
+        <!-- 底部题目操作栏 -->
         <div class="item-tools">
-
           <span class="item-tools-info">来源:浙江省温州市2019年中考数学试卷</span>
           <span class="item-tools-info">使用次数:98 次</span>
           <span class="item-tools-info" style="border:0">更新时间:2019-07-01</span>
-
           <Button type="info" @click="handleChoose(item)">{{basketList.all.indexOf(item) > -1 ? '已选入' : '选题'}}</Button>
           <Button type="primary" @click="handleEdit(item)" style="margin-right:10px">编辑题目</Button>
         </div>
       </div>
     </div>
+
+    <!-- 底部分页区域 -->
     <Page :total="totalNum"
           show-sizer
           @on-page-size-change="pageSizeChange"
@@ -164,7 +194,7 @@
     <Button type="success" @click="backToAdd" style="margin:10px;">返回</Button>
     <Button type="success" @click="backToPaper" style="margin:10px;">试卷</Button>
 
-    <!-- 绑定知识点弹窗 Transfer -->
+    <!-- 绑定知识点弹窗开始 -->
     <Modal v-model="bindPointModal"
            title="绑定知识点"
            width="500"
@@ -176,20 +206,20 @@
         <Input search placeholder="搜索知识点..." v-model="searchWord" @on-change="filterChange" />
         <Tabs v-model="tabSelectVal">
           <TabPane label="校本知识点" name="school">
-            <Tree :data="knowPointList" ref="pointTree" :render="renderContent" @on-check-change="pointTreeCheck" check-strictly></Tree>
+            <Tree :data="knowPointList" ref="pointTree" :render="renderContent" check-strictly></Tree>
           </TabPane>
           <TabPane label="标准知识点" name="all">
-            <Tree :data="allPointList" ref="pointTree" :render="renderContent" @on-check-change="pointTreeCheck" check-strictly></Tree>
+            <Tree :data="allPointList" ref="pointTree" :render="renderContent" check-strictly></Tree>
           </TabPane>
         </Tabs>
         <Spin fix v-show="pointListLoading"></Spin>
       </div>
-
       <div class="selected-point-list">
         <p class="bind-title">已选知识点<span style="font-weight:500;font-size:12px"> (最多绑定5个知识点,颜色代表不同来源)</span><span class="btn-clear" @click="handleClearChecked">清空</span></p>
         <span class="checked-point" :style="{background:item.origin=='school'?'#10abe7':'#12b9ab'}" v-for="item in checkedPointList">{{item.name}}<Icon type="md-close" color="#fff" style="margin-left:5px;cursor:pointer" @click="deleteCheckedPoint(item)" /></span>
       </div>
     </Modal>
+    <!-- 绑定知识点弹窗结束 -->
   </div>
 </template>
 <script>
@@ -330,6 +360,8 @@ import { setTimeout } from 'core-js';
 
       //编辑习题
       handleEdit(item) {
+        item.options = item.option;
+        item.difficulty = item.difficulty || 2;
         this.$router.push({
             name: 'createExercises',
             params:{
@@ -385,10 +417,11 @@ import { setTimeout } from 'core-js';
       },
 
       //绑定知识点操作
-      handleBindPoint() {
+      handleBindPoint(concepts) {
         this.bindPointModal = true;
-        this.checkedPointList = [];
+        this.checkedPointList = concepts;
         this.knowPointList = this.schoolPointList;
+        console.log(concepts);
       },
 
       //获取标准知识块数据
@@ -406,19 +439,6 @@ import { setTimeout } from 'core-js';
         })
       },
 
-      //获取标准知识点仓库数据
-      getAllPoints() {
-         let data = {
-          pointParams: {
-              SubjectCode: "Subject_Chinese",
-              PartitionKey: "zh-CN",
-            }
-        }
-        this.$api.FindKnowledgePointByDict(data).then(res => {
-          this.pointListLoading = false;
-        })
-      },
-
        //获取学校知识块仓库数据
       getSchoolPoints() {
         let data = {
@@ -445,16 +465,16 @@ import { setTimeout } from 'core-js';
       },
 
       //知识点绑定选中事件
-      pointTreeCheck(val, data) {
-        let points = val.filter(item => item.children.length == 0);
-        if (points.length > 5) {
-          this.checkedPointList = points.slice(0, 5);
-          this.$Message.warning("最多绑定5个知识点!");
-        } else {
-          this.checkedPointList = points;
-        }
-        console.log(val, data);
-      },
+      //pointTreeCheck(val, data) {
+      //  let points = val.filter(item => item.children.length == 0);
+      //  if (points.length > 5) {
+      //    this.checkedPointList = points.slice(0, 5);
+      //    this.$Message.warning("最多绑定5个知识点!");
+      //  } else {
+      //    this.checkedPointList = points;
+      //  }
+      //  console.log(val, data);
+      //},
 
       //知识点树形结构渲染
        renderContent(h, { root, node, data }) {
@@ -485,7 +505,7 @@ import { setTimeout } from 'core-js';
               h("span", data.name),
               h('span',{
                 domProps: {
-                  className: this.checkedPointList.indexOf(data) > -1 ? "point-checkbox point-checked" : "point-checkbox point-unchecked"
+                  className: this.checkedPointList.map(item => item.knowledgeId).indexOf(data.knowledgeId || data.rowKey) > -1 ? "point-checkbox point-checked" : "point-checkbox point-unchecked"
                 },
                 style: {
                   display: data.children && data.children.length > 0
@@ -494,15 +514,19 @@ import { setTimeout } from 'core-js';
                 },
                 on: {
                   click: () => {
-                    if (this.checkedPointList.indexOf(data) == -1) {
+                    let conceptData = {};
+                    if (this.checkedPointList.map(item => item.knowledgeId).indexOf(data.knowledgeId || data.rowKey) == -1) {
                       if (this.checkedPointList.length < 5) {
-                        data.origin = this.tabSelectVal;
-                        this.checkedPointList.push(data);
+                        conceptData.origin = this.tabSelectVal;
+                        conceptData.knowledgeId = data.knowledgeId || data.rowKey;
+                        conceptData.name = data.name;
+                        conceptData.subjectCode = data.subjectCode;
+                        this.checkedPointList.push(conceptData);
                       } else {
                         this.$Message.warning("最多绑定5个知识点!");
                       }
                     } else {
-                      this.checkedPointList.splice(this.checkedPointList.indexOf(data), 1);
+                      this.checkedPointList.splice(this.checkedPointList.map(item => item.knowledgeId).indexOf(data.knowledgeId || data.rowKey), 1);
                     }
 
                     console.log(this.checkedPointList);
@@ -566,7 +590,7 @@ import { setTimeout } from 'core-js';
     mounted() {
         this.getStandardList();
         this.getSchoolPoints();
-        this.getAllPoints();
+        //this.getAllPoints();
     },
     computed: {
       headers(){

+ 3 - 3
TEAMModelOS/ClientApp/view/evaluation/index/TestPaper.vue

@@ -155,12 +155,12 @@
         pageSize: 5,
         pageNum: 1,
         totalNum: 100,
-        allList: questions.list,
+        allList: questions.result.data,
         isShowAnswer: false
       }
     },
     created() {
-      this.list = questions.list;
+      this.list = questions.result.data;
       this.paperInfo = paper;
       let flag = this.$route.params.flag;
       if (flag == 1) {
@@ -200,7 +200,7 @@
       pageChange(page) {
         let start = this.pageSize * (page - 1);
         let end = this.pageSize * page;
-        let list = questions.list;
+        let list = questions.result.data;
         this.list = list.slice(start, end);
         window.scroll(0, 0);
       },

+ 9 - 9
TEAMModelOS/ClientApp/view/evaluation/index/TestPaperList.vue

@@ -55,7 +55,7 @@
       <div class="exercise-item" v-for="(item,index) of list">
         <img class="icon-paper" src="../../../assets/icon/icon_paper.png" />
         <div class="paper-content">
-          <p class="paper-title" v-html="item.explain"></p>
+          <p class="paper-title" v-html="item.type"></p>
           <p class="paper-info">
             <span style="margin-left:0"><Icon type="md-clock" />修改时间:2019-06-26</span>
             <span><Icon type="md-eye" />使用次数:8</span>
@@ -115,7 +115,7 @@ import { setTimeout } from 'core-js';
         pageSize: 5,
         pageNum: 1,
         totalNum: 100,
-        allList: questions.list,
+        allList: questions.result.data,
         knowPointList: [],
         schoolPointList: [],
         allPointList:[],
@@ -124,8 +124,8 @@ import { setTimeout } from 'core-js';
     },
     created() {
       this.schoolInfo = JSON.parse(localStorage.getItem('c_role_info')).roleClaim[0];
-      this.list = questions.list.concat(questions.list);
-      this.totalNum = questions.list.length;
+      this.list = questions.result.data;
+      this.totalNum = questions.result.data.length;
       if (this.$route.params.exerciseItem) {
         this.list.unshift(this.$route.params.exerciseItem);
       }
@@ -135,18 +135,18 @@ import { setTimeout } from 'core-js';
       //筛选题型
       filterTypeChange(val) {
         if (val == "all") {
-          this.list = questions.list;
+          this.list = questions.result.data;
         } else {
-          this.list = questions.list.filter(item => item.type == val);
+          this.list = questions.result.data.filter(item => item.type == val);
         }
       },
 
       //筛选难度
       filterDiffChange(val) {
          if (val == "all") {
-          this.list = questions.list;
+          this.list = questions.result.data;
          } else {
-           this.list = questions.list.filter(item => item.difficulty == val);
+           this.list = questions.result.data.filter(item => item.difficulty == val);
         }
       },
 
@@ -187,7 +187,7 @@ import { setTimeout } from 'core-js';
       pageChange(page) {
         let start = this.pageSize * (page - 1);
         let end = this.pageSize * page;
-        let list = questions.list;
+        let list = questions.result.data;
         this.list = list.slice(start, end);
         window.scroll(0, 0);
       },

+ 180 - 24
TEAMModelOS/ClientApp/view/evaluation/index/index.vue

@@ -4,7 +4,31 @@
       <Header :parentToChild="syllabusTitle" :identityselect="identitydata"></Header>
     </div>
     <div class="ev-body">
-      <div class="ev-slide"></div>
+      <div class="ev-slide">
+        <div class="ev-slide-school"><Icon type="ios-school" size="26" color="#10abe7" style="vertical-align:sub"/> {{schoolInfo.claimName}}</div>
+        <div class="ev-slide-header">选择学段及科目</div>
+        <div class="ev-slide-select">
+          <!-- 学段选择部分 -->
+          <Select v-model="evPeriodSelect" @on-change="periodChange" label-in-value>
+            <Option v-for="item in evPeriodsList" :value="item.code" :key="item.rowKey">{{ item.name }}</Option>
+          </Select>
+
+          <!-- 科目选择部分 -->
+          <Select v-model="evSubjectSelect" @on-change="subjectChange" label-in-value>
+            <Option v-for="item in evSubjectList" :value="item.code" :key="item.rowKey">{{ item.name }}</Option>
+          </Select>
+        </div>
+        <div class="ev-slide-header ev-slide-select-volumes" style="position:relative">
+          <Loading :top="150" :borderWidth="4" v-show="!isLoadingFinish"></Loading>
+          <!--<Loading v-show="!isLoadingFinish"></Loading>-->
+
+          <!-- 册别选择部分 -->
+          <Select v-model="evVolumeSelect" @on-change="volumeChange" label-in-value placeholder="请选择册别">
+            <Option v-for="item in evVolumesList" :value="item.rowKey" :key="item.rowKey">{{ item.gradeName + '' + item.termName }}</Option>
+          </Select>
+        </div>
+        <SyllabusTree :treeDatas="treeData"></SyllabusTree>
+      </div>
       <div class="ev-content">
         <router-view />
       </div>
@@ -24,10 +48,15 @@
 </template>
 <script>
   import Header from '@/common/headers.vue'
+  import SyllabusTree from '@/components/evaluation/SyllabusTree.vue'
+  import Loading from '@/common/Loading.vue'
+import { setTimeout } from 'core-js';
 
   export default {
     components: {
-      Header
+      Header,
+      SyllabusTree,
+      Loading
     },
     data() {
       return {
@@ -36,15 +65,95 @@
           { "id": 1, "name": '成都紫藤小学', "rolename": '管理员', status: '1' },
           { "id": 2, "name": '成都七中小学', "rolename": '班主任', status: '2' }
         ],
+        treeData: [],
+        schoolInfo: {},
+        evSubjectList: [],
+        evPeriodsList: [],
+        evVolumesList: [],
+        evSubjectSelect:"",
+        evPeriodSelect: "",
+        evVolumeSelect:"",
+        isLoadingFinish:false
       }
     },
+    created() {
+      this.schoolInfo = JSON.parse(localStorage.getItem('c_role_info')).roleClaim[0].claim[0]; //默认选中第一个学校
+      this.findSchoolPeriodsByDict();
+
+    },
     methods: {
       goRouter(name) {
         this.$router.push({
           name:name
         })
+      },
+
+      //获取当前学校全部学段
+      findSchoolPeriodsByDict() {
+        this.$api.FindSchoolPeriodsByDict({SchoolCode: this.schoolInfo.claimCode}).then(res => {
+          this.evPeriodsList = res.result.data;
+          this.evPeriodSelect = res.result.data[0].code;
+          this.findSchoolSubjectsByDict();
+        })
+      },
+
+      //查找当前学校已有科目
+      findSchoolSubjectsByDict() {
+        this.$api.FindSchoolSubjectsByDict({ SchoolCode: this.schoolInfo.claimCode,Status:1 }).then(res => {
+          this.evSubjectList = res.result.data;
+          this.evSubjectSelect = res.result.data[0].code;
+          this.findVolumesBySubjectAndPeriod(this.evPeriodSelect, this.evSubjectSelect);
+        })
+      },
+
+      //根据当前选择的科目及学段获取所有册别
+      findVolumesBySubjectAndPeriod(periodCode,subjectCode) {
+        let defaultData = {
+          SchoolCode: this.schoolInfo.claimCode,
+          SubjectCode: subjectCode,
+          PeriodCode: periodCode,
+          Status:1
+        }
+        this.$api.FindSchoolVolumesByDict(defaultData).then(res => {
+          this.evVolumesList = res.result.data;
+          if (res.result.data.length) {
+            this.evVolumeSelect = res.result.data[0].rowKey;
+            this.findSyllabusByVolumeCode(res.result.data[0].rowKey);
+          } else {
+            this.evVolumeSelect = "";
+          }
+         })
+      },
+
+      //根据册别来获取课纲树形结构
+      findSyllabusByVolumeCode(volumeCode) {
+        this.isLoadingFinish = false;
+        this.$api.FindSyllabusByVolumeCode({ VolumeCode: volumeCode, Status: 1 }).then(res => {
+          let list = res.result.data;
+          list.forEach(item => { item.expand = false });
+          this.treeData = list;
+          this.isLoadingFinish = true;
+        })
+      },
+
+      //选择科目变化
+      subjectChange(val) {
+        this.findVolumesBySubjectAndPeriod(this.evPeriodSelect, val.value);
+      },
+
+      //选择学段变化
+      periodChange(val) {
+        this.findVolumesBySubjectAndPeriod(val.value, this.evSubjectSelect);
+      },
+
+      //选择册别变化
+      volumeChange(val) {
+        this.findSyllabusByVolumeCode(val.value);
       }
+    },
+    mounted() {
     }
+
   }
 </script>
 <style scoped>
@@ -67,14 +176,78 @@
   }
     .ev-body .ev-slide {
       width:20%;
-      height:1200px;
-      background:#e1e1e1;
+      height:auto;
+      padding:0;
+      background:#fff;
+      border-radius:5px 5px 0 0;
     }
 
-    .ev-body .ev-content {
-       width:79%;
+    .ev-body .ev-slide .ev-slide-header{
+      width:104%;
+      height:45px;
+      background:#10abe7;
+      text-align:center;
+      line-height:45px;
+      color:white;
+      font-size:16px;
+      border-radius:5px;
+      margin:20px -5px;
+      box-shadow: 0px 1px 8px 5px #dedede;
     }
 
+      .ev-body .ev-slide .ev-slide-select {
+        padding:0 10px;
+        /*background:#10abe7;*/
+      }
+
+      .ev-body .ev-slide .ev-slide-school {
+          height:40px;
+          line-height:40px;
+          text-align:center;
+          padding-top:10px;
+          font-size:14px;
+          font-weight:bold;
+          padding-right:5px;
+      }
+
+      .ev-slide /deep/ .ev-slide-select .ivu-select-selection {
+        margin-top:8px;
+        height:40px;
+      }
+
+      .ev-slide /deep/ .ev-slide-select .ivu-select-selected-value {
+        line-height:40px;
+      }
+
+      .ev-slide .ev-slide-select-volumes /deep/ .ivu-select-selection {
+          background:transparent;
+          border:none;
+          color:#fff;
+          width:140px;
+          margin:0 auto;
+          padding-right:10px;
+          font-size:14px;
+      }
+      .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-placeholder {
+          color:#fff;
+          font-size:14px;
+      }
+      .ev-slide .ev-slide-select-volumes /deep/ .ivu-select-selected-value {
+          color:#fff;
+          font-size:14px;
+      }
+
+  .ev-body .ev-content {
+      width:79%;
+  }
+
 
   .slide-menu {
     width:150px;
@@ -116,23 +289,6 @@
       font-size:44px;
     }
 
-
-      /*.slide-menu ul li::after {
-        content: '';
-        z-index: -1;
-        background-color: hsla(0, 0%, 100%, 0.2);
-        position: absolute;
-        top: -50%;
-        bottom: -50%;
-        width: 2.25em;
-        transform: translate3d(-525%, 0, 0) rotate(35deg);
-      }
-
-      .slide-menu ul li:hover::after {
-        transition: transform 0.45s ease-in-out;
-        transform: translate3d(200%, 0, 0) rotate(35deg);
-      }*/
-
       .slide-menu ul li::before {
           content: '';
           z-index: -1;
@@ -158,6 +314,6 @@
           transform: translate3d(120%, 50%, 0) scale3d(25, 15, 15);
         }
 
-  
+
 
 </style>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 168 - 0
TEAMModelOS/ClientApp/view/evaluation/index/list.json


+ 1 - 0
TEAMModelOS/ClientApp/view/syllabus/index/Syllabus.vue

@@ -242,6 +242,7 @@ import { setTimeout } from 'core-js';
       },
       //查找当前学校已有科目
       findSchoolSubjectsByDict() {
+        console.log(this.schoolInfo);
         this.$api.FindSchoolSubjectsByDict({ SchoolCode: this.schoolInfo.claimCode,Status:1 }).then(res => {
           this.currentSubjectList = res.result.data;
           if (res.result.data.length > 0) {

+ 1 - 1
TEAMModelOS/Views/Shared/_Layout.cshtml

@@ -16,7 +16,7 @@
 <body>
     @RenderBody()
     <script src="~/dist/vendor.js" asp-append-version="true"></script>
-    <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML" asp-append-version="true"></script>
+    @*<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML" asp-append-version="true"></script>*@
 
     @RenderSection("scripts", required: false)
 </body>