Quellcode durchsuchen

完成自主学习数据统计,整体代码

liqk vor 4 Jahren
Ursprung
Commit
0d293f6001
48 geänderte Dateien mit 942 neuen und 6942 gelöschten Zeilen
  1. 2 2
      TEAMModelOS.Service/Models/SchoolInfo/Inner/Semester.cs
  2. 2 4
      TEAMModelOS.Service/Models/StudentInfo/LearnRecord.cs
  3. 4 0
      TEAMModelOS.Service/Models/TeacherInfo/LearnTask.cs
  4. 5 5
      TEAMModelOS.Service/TEAMModelOS.Model.xml
  5. 4 0
      TEAMModelOS/ClientApp/src/api/courseMgmt.js
  6. 8 9
      TEAMModelOS/ClientApp/src/common/BaseMock.vue
  7. 20 7
      TEAMModelOS/ClientApp/src/components/learnactivity/ChooseContent.vue
  8. 29 7
      TEAMModelOS/ClientApp/src/css/disabled-iview-form.less
  9. 20 25
      TEAMModelOS/ClientApp/src/router/routes.js
  10. 1 1
      TEAMModelOS/ClientApp/src/utils/js-fn.js
  11. 0 0
      TEAMModelOS/ClientApp/src/view/coursemgmt/AdminCourse.less
  12. 0 394
      TEAMModelOS/ClientApp/src/view/coursemgmt/AdminCourse.vue
  13. 0 333
      TEAMModelOS/ClientApp/src/view/coursemgmt/AdminCourseClassroom.less
  14. 0 1011
      TEAMModelOS/ClientApp/src/view/coursemgmt/AdminCourseClassroom.vue
  15. 0 275
      TEAMModelOS/ClientApp/src/view/coursemgmt/CourseBaseSetting.less
  16. 0 538
      TEAMModelOS/ClientApp/src/view/coursemgmt/CourseBaseSetting.vue
  17. 0 333
      TEAMModelOS/ClientApp/src/view/coursemgmt/CourseClassroom.less
  18. 0 903
      TEAMModelOS/ClientApp/src/view/coursemgmt/CourseClassroom.vue
  19. 0 151
      TEAMModelOS/ClientApp/src/view/coursemgmt/CourseManage.less
  20. 0 383
      TEAMModelOS/ClientApp/src/view/coursemgmt/CourseManage.vue
  21. 0 70
      TEAMModelOS/ClientApp/src/view/coursemgmt/CourseSyllabus.less
  22. 0 214
      TEAMModelOS/ClientApp/src/view/coursemgmt/CourseSyllabus.vue
  23. 3 0
      TEAMModelOS/ClientApp/src/view/newcourse/CourseClassroom.vue
  24. 9 0
      TEAMModelOS/ClientApp/src/view/newcourse/CoursePlan.less
  25. 94 44
      TEAMModelOS/ClientApp/src/view/newcourse/CoursePlan.vue
  26. 6 2
      TEAMModelOS/ClientApp/src/view/school-mgmt/SystemSetting/SystemSetting.less
  27. 46 90
      TEAMModelOS/ClientApp/src/view/school-mgmt/SystemSetting/SystemSetting.vue
  28. 0 1
      TEAMModelOS/ClientApp/src/view/selflearning/ActivityReport.less
  29. 0 20
      TEAMModelOS/ClientApp/src/view/selflearning/ActivityReport.vue
  30. 0 67
      TEAMModelOS/ClientApp/src/view/selflearning/CreateHomeWork.less
  31. 0 43
      TEAMModelOS/ClientApp/src/view/selflearning/CreateHomeWork.vue
  32. 0 137
      TEAMModelOS/ClientApp/src/view/selflearning/CreateSelfLearn.less
  33. 0 500
      TEAMModelOS/ClientApp/src/view/selflearning/CreateSelfLearn.vue
  34. 0 111
      TEAMModelOS/ClientApp/src/view/selflearning/LearnProgress.less
  35. 0 240
      TEAMModelOS/ClientApp/src/view/selflearning/LearnProgress.vue
  36. 0 188
      TEAMModelOS/ClientApp/src/view/selflearning/ManageSelfLearn.less
  37. 0 255
      TEAMModelOS/ClientApp/src/view/selflearning/ManageSelfLearn.vue
  38. 1 1
      TEAMModelOS/ClientApp/src/view/selfstudy/ActivityInfo.less
  39. 139 35
      TEAMModelOS/ClientApp/src/view/selfstudy/ActivityInfo.vue
  40. 0 99
      TEAMModelOS/ClientApp/src/view/selfstudy/AnswerDetail.less
  41. 0 315
      TEAMModelOS/ClientApp/src/view/selfstudy/AnswerDetail.vue
  42. 33 21
      TEAMModelOS/ClientApp/src/view/selfstudy/AnswerRecord.vue
  43. 182 106
      TEAMModelOS/ClientApp/src/view/selfstudy/PassBar.vue
  44. 2 1
      TEAMModelOS/ClientApp/src/view/selfstudy/ProgressBar.vue
  45. 92 0
      TEAMModelOS/ClientApp/src/view/selfstudy/QuestionInfo.less
  46. 125 0
      TEAMModelOS/ClientApp/src/view/selfstudy/QuestionInfo.vue
  47. 114 0
      TEAMModelOS/ClientApp/src/view/selfstudy/StudyDetail.vue
  48. 1 1
      TEAMModelOS/Controllers/School/CourseController.cs

+ 2 - 2
TEAMModelOS.Service/Models/SchoolInfo/Inner/Semester.cs

@@ -8,8 +8,8 @@ namespace TEAMModelOS.Service.Models
     {
         public string semesterName { get; set; }
         public string count { get; set; }
-        public string month { get; set; }
-        public string day { get; set; }
+        public int month { get; set; }
+        public int day { get; set; }
         public string semesterCode { get; set; }
     }
 }

+ 2 - 4
TEAMModelOS.Service/Models/StudentInfo/LearnRecord.cs

@@ -35,6 +35,8 @@ namespace TEAMModelOS.Service.Models
     public class RecordStep {
 
         public int index { get; set; }
+        public int count { get; set; }
+        public int score { get; set; }
         public RecordStep() {
             resource = new List<RecordRes>();
         }
@@ -69,9 +71,5 @@ namespace TEAMModelOS.Service.Models
         /// 作答时长
         /// </summary>
         public int costTime { get; set; } = 0;
-        /// <summary>
-        /// 作答次数
-        /// </summary>
-        public int count { get; set; } = 0;
     }
 }

+ 4 - 0
TEAMModelOS.Service/Models/TeacherInfo/LearnTask.cs

@@ -52,5 +52,9 @@ namespace TEAMModelOS.Service.Models
         /// 是否闯关模式 0不闯关,1 闯关
         /// </summary>
         public int stage { get; set; }
+        /// <summary>
+        /// 闯关模式的通关分数
+        /// </summary>
+        public int passScore { get; set; }
     }
 }

+ 5 - 5
TEAMModelOS.Service/TEAMModelOS.Model.xml

@@ -964,11 +964,6 @@
             作答时长
             </summary>
         </member>
-        <member name="P:TEAMModelOS.Service.Models.RecordAns.count">
-            <summary>
-            作答次数
-            </summary>
-        </member>
         <member name="P:TEAMModelOS.Service.Models.Student.type">
             <summary>
             0 动态id  透過第三方申請,未認證手機號,TEAMModelId暫時為virtualId但是不顯示在介面上,當使用者驗證手機號後TEAMModelId會變為手機號。
@@ -1206,6 +1201,11 @@
             是否闯关模式 0不闯关,1 闯关
             </summary>
         </member>
+        <member name="P:TEAMModelOS.Service.Models.LearnTask.passScore">
+            <summary>
+            闯关模式的通关分数
+            </summary>
+        </member>
         <member name="T:TEAMModelOS.Service.Models.LearnUnit">
             <summary>
             学习单元

+ 4 - 0
TEAMModelOS/ClientApp/src/api/courseMgmt.js

@@ -29,6 +29,10 @@ export default {
     deletePlan: function (data) {
         return post('/api/Course/deletePlan', data)
     },
+    //删除一节课的安排
+    deleteTime: function (data) {
+        return post('/api/Course/deleteTime', data)
+    },
     //获取教室关联的学生
     getClassroomStudent: function (data) {
         return post('/api/ClassStudent/find', data)

+ 8 - 9
TEAMModelOS/ClientApp/src/common/BaseMock.vue

@@ -30,8 +30,8 @@
 				isLoading: false,
 				acType: 0,
                 acId: '5ed79799-4e2d-471e-a484-deedb81a8ad7',
-                orderLearnId: 'b910aed3-c981-40c7-9753-edebb803999e',
-				unitId:'c223e06a-7ee7-4d09-b5b9-d8c7debdcf26'
+    //            orderLearnId: 'b910aed3-c981-40c7-9753-edebb803999e',
+				//unitId:'c223e06a-7ee7-4d09-b5b9-d8c7debdcf26'
 			};
 		}, 
 		created() {},
@@ -53,11 +53,9 @@
 							this.doMockEvaluation(this.acId)
 							break
                         case 4:
-                            this.acId = this.orderLearnId
 							this.doMockSelfLearning(this.acId)
                             break	
                         case 5:
-                            this.acId = this.unitId
 							this.doMockSelfLearning(this.acId)
 							break	
 						default:
@@ -176,16 +174,19 @@
                                 code: item.code,
                                 steps: []
                             }
-                            for (let index in acInfo[0].steps) {
+                            let compSteps = this.$jsFn.getBtwRandom(0, (acInfo[0].steps.length + 1))
+                            for (let index = 0; index < compSteps; index++) {
                                 let aswItem = {
                                     index: parseInt(index),
+									count:this.$jsFn.getBtwRandom(1,4),
+									score:this.$jsFn.getBtwRandom(50,100),
                                     answer: []
                                 }
                                 acInfo[0].steps[index].item.forEach((question, i) => {
                                     let stItem = {
                                         index: i,
                                         ans: this.randomAnswer(question),
-										count: this.$jsFn.getBtwRandom(0,5)
+										//count: this.$jsFn.getBtwRandom(0,5)
                                     }
                                     aswItem.answer.push(stItem)
                                 })
@@ -193,7 +194,6 @@
                             }
                             result.push(rdItem)
                         }
-						console.log(result)
                         this.$api.learnActivity.upsertRecord(result).then(
                             (res) => {
                                 if (!res.error && res.result.data) {
@@ -217,7 +217,6 @@
                     let students = await this.getStudentList(classes)
                     for (let item of students) {
                         let radom = this.$jsFn.getBtwRandom(0, 2)
-                        console.log('random:' + radom)
                         if (radom) {
                             let rdItem = {
                                 id: this.acId,
@@ -503,7 +502,7 @@
 			},
 			
 			/* 根据题型生成随机答案 */
-			randomAnswer(item) {
+            randomAnswer(item) {
 				switch (item.type) {
 					case 'Single':
 						return [item.option[Math.floor(Math.random() * item.option.length)].code]

+ 20 - 7
TEAMModelOS/ClientApp/src/components/learnactivity/ChooseContent.vue

@@ -1,8 +1,8 @@
 <template>
     <div class="choose-content">
-        <Tabs type="card" name="chooseContent">
+        <Tabs type="card" name="chooseContent" @on-click="checkCurTab">
             <!-- 选择课纲内容 -->
-            <TabPane label="课纲" v-if="showSyllabus"  tab="chooseContent">
+            <TabPane label="课纲" name="syllabus" v-if="showSyllabus"  tab="chooseContent">
                 <div class="tab-wrap">
                     <div class="content-filter-wrap">
                         <div class="content-filter-item">
@@ -54,7 +54,7 @@
                 </div>
             </TabPane>
             <!-- 选择资源文件 -->
-            <TabPane label="内容" v-if="showContent" tab="chooseContent">
+            <TabPane label="内容" name="content" v-if="showContent" tab="chooseContent">
                 <div class="tab-wrap">
                     <div class="content-filter-wrap">
                         <div class="content-filter-item">
@@ -103,7 +103,7 @@
                 </div>
             </TabPane>
             <!-- 选择题库 -->
-            <TabPane label="题目" v-if="showQuestion" tab="chooseContent">
+            <TabPane label="题目" name="question" v-if="showQuestion" tab="chooseContent">
                 <div class="tab-wrap">
                     <vuescroll>
                         <Row class="question-filter-wrap">
@@ -179,7 +179,7 @@
                 </div>
             </TabPane>
             <!-- 补充内容 -->
-            <TabPane label="补充内容" v-if="showOther"  tab="chooseContent">
+            <TabPane label="补充内容" name="other" v-if="showOther"  tab="chooseContent">
                 <div class="tab-wrap dark-wang-editor dark-iview-input" style="padding:10px;">
                     <p class="label-name" style="margin-top:0px;">文字描述:</p>
                     <div ref="courseNotice"></div>
@@ -301,6 +301,20 @@
             }
         },
         methods: {
+            checkCurTab(name) {
+                switch (name) {
+                    case 'question':
+                        this.getResultCount()
+                        this.queryQuestionByPage()
+                        break
+                    default:
+                        break
+                }
+            },
+            //getQuestions() {
+            //    this.getResultCount()
+            //    this.queryQuestionByPage()
+            //},
             /**
              * 初始化富文本编辑器
              * */
@@ -719,8 +733,7 @@
             Date.prototype.toLocaleString = function () {
                 return this.getFullYear() + "/" + (this.getMonth() + 1) + "/" + this.getDate();
             }
-            this.getResultCount()
-            this.queryQuestionByPage()
+            
         }
     }
 </script>

+ 29 - 7
TEAMModelOS/ClientApp/src/css/disabled-iview-form.less

@@ -26,19 +26,41 @@
         color: white;
     }
 
-    .ivu-select-multiple .ivu-tag{
-        background:#606060;
-        border:none;
+    .ivu-select-multiple .ivu-tag {
+        background: #606060;
+        border: none;
     }
-}
-.disabled-iview-select {
+
     .ivu-input[disabled] {
         border: none;
         background: none !important;
         font-size: 16px !important;
     }
 
-    .ivu-select-disabled .ivu-select-selection{
-        background:none;
+    .ivu-select-disabled .ivu-select-selection {
+        background: none;
     }
 }
+.disabled-iview-input {
+    .ivu-input-disabled {
+        border: none;
+        background: none !important;
+        font-size: 16px !important;
+    }
+
+    .ivu-disabled .ivu-selection {
+        background: none;
+    }
+}
+
+
+.disabled-iview-inputnumber {
+    .ivu-input-number-disabled .ivu-input-number-input {
+        text-align: center;
+        color:white;
+    }
+
+    .ivu-input-number-disabled {
+        border: none;
+    }
+} 

+ 20 - 25
TEAMModelOS/ClientApp/src/router/routes.js

@@ -187,11 +187,11 @@ export const routes = [
                 ]
             },
             //个人课程管理(废弃)
-            {
-                path: 'courseManage',
-                name: 'courseManage',
-                component: resolve => require(['@/view/coursemgmt/CourseManage.vue'], resolve)
-            },
+            //{
+            //    path: 'courseManage',
+            //    name: 'courseManage',
+            //    component: resolve => require(['@/view/coursemgmt/CourseManage.vue'], resolve)
+            //},
             {
                 path: 'myCourse',
                 name: 'myCourse',
@@ -259,22 +259,22 @@ export const routes = [
                 component: resolve => require(['@/view/teachcontent/CreateLearnUnit.vue'], resolve)
             },
             //创建作业活动
-            {
-                path: 'createHomeWork',
-                name: 'createHomeWork',
-                component: resolve => require(['@/view/selflearning/CreateHomeWork.vue'], resolve)
-            },
+            //{
+            //    path: 'createHomeWork',
+            //    name: 'createHomeWork',
+            //    component: resolve => require(['@/view/selflearning/CreateHomeWork.vue'], resolve)
+            //},
             //创建编序式学习
             {
                 path: 'createOrderLearn',
                 name: 'createOrderLearn',
                 component: resolve => require(['@/view/teachcontent/CreateOrderLearn.vue'], resolve)
             },
-            {
-                path: 'createSelfLearn',
-                name: 'createSelfLearn',
-                component: resolve => require(['@/view/selflearning/CreateSelfLearn.vue'], resolve)
-            },
+            //{
+            //    path: 'createSelfLearn',
+            //    name: 'createSelfLearn',
+            //    component: resolve => require(['@/view/selflearning/CreateSelfLearn.vue'], resolve)
+            //},
             //管理评测页面
             {
                 path: 'manageEvaluation',
@@ -300,11 +300,11 @@ export const routes = [
                 component: resolve => require(['@/view/teachcontent/ManageOrderLearn.vue'], resolve)
             },
             //废弃自主学习活动
-            {
-                path: 'manageSelfLearn',
-                name: 'manageSelfLearn',
-                component: resolve => require(['@/view/selflearning/ManageSelfLearn.vue'], resolve)
-            },
+            //{
+            //    path: 'manageSelfLearn',
+            //    name: 'manageSelfLearn',
+            //    component: resolve => require(['@/view/selflearning/ManageSelfLearn.vue'], resolve)
+            //},
             //新版自主学习
             {
                 path: 'SelfLearn',
@@ -320,11 +320,6 @@ export const routes = [
                 path: 'manageVote',
                 name: 'manageVote',
                 component: resolve => require(['@/view/vote/ManageVote.vue'], resolve)
-            },
-            {
-                path: 'activityReport',
-                name: 'activityReport',
-                component: resolve => require(['@/view/selflearning/ActivityReport.vue'], resolve)
             }
         ]
     }

+ 1 - 1
TEAMModelOS/ClientApp/src/utils/js-fn.js

@@ -46,7 +46,7 @@ function getIndex(_arr, _obj) {
  * 产生某个范围的随机数
  */
 function getBtwRandom(start, end) {
-    return Math.floor(Math.random() * end) + start
+    return Math.floor(Math.random() * (end - start)) + start
 }
 /*
  * 根据学段编码获取对应学段信息

+ 0 - 0
TEAMModelOS/ClientApp/src/view/coursemgmt/AdminCourse.less


+ 0 - 394
TEAMModelOS/ClientApp/src/view/coursemgmt/AdminCourse.vue

@@ -1,394 +0,0 @@
-<template>
-    <div class="course-mgmt-content">
-        <!--课程列表-->
-        <div class="course-list">
-            <!--列表头部-->
-            <div class="course-list-header">
-                <div v-if="!isSearch">
-                    <span class="list-label">{{$t('courseManage.courseList')}}</span>
-                    <Icon type="ios-search" color="white" size="18" class="add-icon" @click="toggleSearch" />
-                    <Icon type="md-trash" color="white" size="18" class="add-icon" @click="showComfirmDelete" />
-                    <Icon type="md-add" color="white" size="18" class="add-icon" :title="$t('courseManage.addCourse')" @click="addCourse" />
-                </div>
-                <div v-else class="dark-iview-input">
-                    <Input icon="ios-close"
-                           v-model="keyWord"
-                           placeholder="关键字搜索..."
-                           autofocus
-                           style="width:calc(100% - 15px)"
-                           @on-click="toggleSearch"
-                           @on-change="onSearchSubjectChange"
-                           @on-enter="onSearchSubjectChange" />
-                </div>
-            </div>
-            <!--列表内容-->
-            <div class="course-list-content">
-                <!--<span class="show-course-label">{{$t('courseManage.courseShow')}}<Icon type="ios-arrow-down" size="16" /></span>-->
-                <div v-if="$store.state.courseMgmt.courseList.length > 0" :class="index === $store.state.courseMgmt.currentCourseIndex ? 'course-list-item block-bg block-bg-active':'course-list-item block-bg'" v-for="(item,index) in $store.state.courseMgmt.courseList" :key="index" @click="selectCourse(index)">
-                    <p class="course-code">
-                        <Icon :type="item.scope === 'school' ? 'ios-barcode-outline' : 'md-person'" color="#AAAAAA" />
-                        {{item.baseInfo.courseCode}}
-                    </p>
-                    <p class="course-name">
-                        {{item.baseInfo.courseName}}
-                    </p>
-                    <Breadcrumb>
-                        <!--<BreadcrumbItem><Icon type="md-pricetag" style="margin-right:5px;" />{{fn.getPeriod($store.state.schoolBaseInfo.schoolBaseInfo,item.baseInfo.periodCode).periodName}}</BreadcrumbItem>-->
-                        <!--<BreadcrumbItem>{{fn.getGradeName($store.state.schoolBaseInfo.schoolBaseInfo,item.baseInfo.gradeCode)}}</BreadcrumbItem>-->
-                        <BreadcrumbItem><Icon type="md-pricetag" style="margin-right:5px;" />{{fn.getSubjectName($store.state.schoolBaseInfo.schoolBaseInfo,item.baseInfo.subjectCode)}}</BreadcrumbItem>
-                    </Breadcrumb>
-                    <Icon type="ios-browsers" title="复制" color="#EEEEEE" class="course-item-tool" size="30" />
-                </div>
-                <div v-if="$store.state.courseMgmt.courseList.length == 0" style="width:100%;text-align:center;padding-top:180px;">
-                    <EmptyData :textContent="$t('courseManage.noData1')"></EmptyData>
-                </div>
-            </div>
-        </div>
-        <!--课程详细内容-->
-        <div class="course-detail">
-            <div class="course-detail-header">
-                <span class="setting-label">{{$t('courseManage.classroomSetting')}}</span>
-            </div>
-            <AdminCourseClassroom type="admin"></AdminCourseClassroom>
-            <div v-if="$store.state.courseMgmt.courseList.length == 0" style="width:100%;text-align:center;margin-top:180px;">
-                <EmptyData></EmptyData>
-            </div>
-        </div>
-        <Modal v-model="deleteCourseStatus"
-               title="删除课程"
-               @on-ok="delCourse">
-            <p v-if="$store.state.courseMgmt.courseList.length > 0">确认删除{{$store.state.courseMgmt.courseList[$store.state.courseMgmt.currentCourseIndex].baseInfo.courseName}}?</p>
-        </Modal>
-        <Modal v-model="addCourseStatus"
-               title="新增课程"
-               @on-ok="delCourse">
-            <p v-if="$store.state.courseMgmt.courseList.length > 0">确认删除{{$store.state.courseMgmt.courseList[$store.state.courseMgmt.currentCourseIndex].baseInfo.courseName}}?</p>
-        </Modal>
-    </div>
-</template>
-<script>
-    import fn from '@/utils/js-fn.js'
-    import '@/utils/Math.uuid'
-    
-    import CourseBaseSetting from './CourseBaseSetting.vue'
-    import AdminCourseClassroom from './AdminCourseClassroom.vue'
-    import Loading from '@/common/Loading.vue'
-    import CourseSyllabus from './CourseSyllabus.vue'
-    export default {
-        components: {
-            CourseBaseSetting,
-            AdminCourseClassroom,
-            CourseSyllabus,
-            
-            Loading
-        },
-        data() {
-            return {
-                fn,
-                deleteCourseStatus: false,
-                addCourseStatus: false,
-                keyWord: '',
-                isSearch: false,
-                courseListShow: [],
-                currentSettingIndex: 0,
-                addCourseStatus: false,
-                demoLoginInfo: {
-                    user: 'admin',
-                    TEAMModelId: this.$store.state.userInfo.TEAMModelId,
-                    school: '醍摩豆书院',
-                    schoolCode: 'HBCN'
-                }
-            }
-        },
-        methods: {
-            /**切换搜索状态 */
-            toggleSearch() {
-                this.isSearch = !this.isSearch
-            },
-            getSchoolBaseInfo() {
-                this.$store.dispatch('schoolBaseInfo/getSchoolBaseData').then(
-                    (res) => {
-                        if (res.code == 2) {
-                            alert('数据为空!')
-                        }
-                        this.isLoaded = true
-                    },
-                    (err) => {
-                        alert('API error!')
-                        this.isLoaded = true
-                    }
-                )
-            },
-            getClassroom() {
-                this.$store.dispatch('schoolBaseInfo/getClassroom').then(
-                    (res) => {
-                        if (res.code == 2) {
-                            alert('数据为空!')
-                        }
-                    },
-                    (err) => {
-                        alert('API error!')
-                    }
-                )
-            },
-            selectSetting(index) {
-                this.currentSettingIndex = index
-            },
-            selectCourse(index) {
-                this.$store.commit('courseMgmt/setCurrentCourseIndex', index)
-
-                this.$nextTick(() => {
-                    // 此时已经渲染完成
-                    if (this.$refs.courseBaseSetting != undefined) {
-                        this.$refs.courseBaseSetting.setNoticeContent()
-                    }
-                })
-            },
-            showComfirmDelete() {
-                this.deleteCourseStatus = true
-            },
-            /**删除课程 */
-            delCourse() {
-                let requestData = {
-                    id: this.$store.state.courseMgmt.courseList[this.$store.state.courseMgmt.currentCourseIndex].id
-                }
-                this.$api.courseMgmt.deleteCourse(requestData).then(
-                    res => {
-                        if (res.error == null) {
-                            let test = this.$store.state.courseMgmt.courseList
-                            let index = this.$store.state.courseMgmt.currentCourseIndex
-                            this.$store.commit('courseMgmt/setCurrentCourseIndex', 0)
-                            test.splice(index, 1)
-                            this.$store.commit('courseMgmt/setCourseList', test)
-                            this.$Message.success('删除成功!')
-                        } else {
-                            this.$Message.error('删除失败!')
-                        }
-                    },
-                    err => {
-                        this.$Message.error('删除失败!')
-                    }
-                )
-            },
-            showAddCourse() {
-                this.addCourseStatus = true
-            },
-            /**新增课程 */
-            addCourse() {
-                this.addCourseStatus = true
-                let item = {
-                    id: Math.uuid(),
-                    code: this.$store.state.userInfo.TEAMModelId,
-                    baseInfo: {
-                        courseCode: 'T968475',
-                        courseName: '未命名课程' + (this.$store.state.courseMgmt.courseList.length + 1),
-                        periodCode: '',
-                        gradeCode: '',
-                        subjectCode: '',
-                        notice: ''// 课程公告
-                    },
-                    assistTeacher: [], // 协同教师
-                    courseTime: [], // 上课时间表
-                    classroom: [], // 课程“教室”
-                    syllabus: []// 关联课纲
-                }
-                let test = this.$store.state.courseMgmt.courseList
-                test.push(item)
-                this.$store.commit('courseMgmt/setCourseList', test)
-                this.$store.commit('courseMgmt/setCurrentCourseIndex', this.$store.state.courseMgmt.courseList.length - 1)
-                setTimeout(() => {
-                    this.$refs.courseBaseSetting.setNoticeContent()
-                }, 500)
-                console.log(this.$refs.courseBaseSetting)
-                this.$refs.courseBaseSetting.baseEditStatus = false
-            },
-            getCourseInfo() {
-                this.$store.dispatch('courseMgmt/getCourseList').then(
-                    (res) => {
-                        console.log(res)
-                        if (res.code == 1 || res.code == 3) {
-                            this.schoolSetting = this.$store.state.schoolBaseInfo.schoolBaseInfo
-                        } else {
-                            // this.getDefaultData()
-                        }
-                        console.log(this.$store.state.courseMgmt.courseList)
-                    },
-                    (err) => {
-                        console.log(err)
-                    }
-                )
-            }
-        },
-        created() {
-            this.getCourseInfo()
-            this.getSchoolBaseInfo()
-            this.getClassroom()
-        }
-
-    }
-</script>
-<style lang="less" scoped>
-    @import './CourseManage.less';
-</style>
-<style lang="less">
-    .search-course .ivu-input {
-        background: none;
-        border-color: #424242;
-        border-radius: 8px;
-    }
-
-    .course-list-item .ivu-breadcrumb > span:last-child {
-        font-weight: 400;
-        color: #999;
-    }
-
-    .ivu-table-overflowY {
-        &::-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);
-    }
-
-    }
-
-    .course-base-info-content .ivu-input {
-        background: none;
-        border: none;
-        border-bottom: 1px solid #828282;
-        border-radius: 0px;
-        color: white;
-        font-size: 16px;
-    }
-
-    .course-base-info-content .ivu-form-item-label {
-        color: #929292;
-    }
-
-    .course-base-info-content .ivu-form-item-required .ivu-form-item-label:before {
-        color: #6DE2C4;
-    }
-
-    .course-base-info-content .ivu-form-item-error .ivu-input:focus {
-        border: none;
-    }
-
-    .course-base-info-content .ivu-input-group-prepend {
-        border: none;
-        background: none;
-        color: white;
-        font-size: 14px;
-    }
-
-    .course-base-info-content .ivu-checkbox-wrapper {
-        float: right;
-        color: #929292;
-    }
-
-    .course-base-info-content .ivu-checkbox-inner {
-        background: none;
-        border-color: #6DE2C4;
-    }
-
-    .course-base-info-content .ivu-checkbox-checked .ivu-checkbox-inner:after {
-        border-color: #6DE2C4;
-    }
-
-    .course-base-info-content .ivu-select-selection {
-        border-color: #828282;
-        background: none;
-    }
-
-        .course-base-info-content .ivu-select-selection:hover {
-            border-color: #57a3f3;
-        }
-
-    .course-base-info-content .ivu-select-input {
-        color: white;
-        font-size: 16px;
-    }
-
-    .course-base-info-content .w-e-toolbar {
-        background: #383838 !important;
-        border-radius: 5px 5px 0px 0px;
-        border-color: #383838 !important;
-    }
-
-    .course-base-info-content .w-e-text-container {
-        border-color: #383838 !important;
-        border-radius: 0px 0px 5px 5px;
-        overflow-y: auto !important;
-        height: 220px !important;
-        z-index: 99 !important;
-    }
-
-    .course-base-info-content .w-e-text {
-        overflow-y: auto;
-        color: white;
-        &::-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);
-    }
-
-    }
-
-    /*对话框样式修改*/
-    .add-course-modal .ivu-modal-content {
-        background-color: #383838 !important;
-        height: 700px;
-    }
-
-    .add-course-modal .ivu-modal-header {
-        border-color: #454545;
-        background-color: #383838;
-        border-top-left-radius: 6px;
-        border-top-right-radius: 6px;
-    }
-
-    .add-course-modal .ivu-modal-mask {
-        background-color: rgba(20,20,20,.7);
-    }
-
-    .add-course-modal .ivu-input {
-        background: none;
-        border: none;
-        border-bottom: 1px solid #828282;
-        border-radius: 0px;
-        color: white;
-        font-size: 16px;
-    }
-
-    .add-course-modal .ivu-form-item-label {
-        color: #929292;
-    }
-
-    .add-course-modal .ivu-modal-body {
-        padding: 16px 30px;
-    }
-
-    .course-list-header .ivu-input {
-        color: white;
-    }
-</style>

+ 0 - 333
TEAMModelOS/ClientApp/src/view/coursemgmt/AdminCourseClassroom.less

@@ -1,333 +0,0 @@
-@first-bgColor: #141414;
-@second-bgColor: #1b1b1b;
-@third-bgColor: #222222;
-@borderColor: #424242;
-@primary-textColor: #fff; //文本主颜色
-@second-textColor: #a5a5a5; //文本副级颜色
-@primary-fontSize: 14px;
-@second-fontSize: 16px;
-
-.course-classroom-box {
-    width: 100%;
-    height: ~"calc(100% - 45px)";
-    display: flex;
-    flex-direction: row;
-
-    .course-classroom-list {
-        width: 350px;
-        height: 100%;
-        border-right: 1px solid @borderColor;
-
-        .course-classroom-list-header {
-            width: 100%;
-            height: 40px;
-            line-height: 40px;
-            border-bottom: 1px solid @borderColor;
-
-            .add-classroom-icon {
-                float: right;
-                line-height: 38px;
-                margin-right: 20px;
-                cursor: pointer;
-            }
-
-            .course-classroom-label {
-                margin-left: 10px;
-                color: @second-textColor;
-            }
-        }
-
-        .course-classroom-list-content {
-            width: 100%;
-            height: ~"calc(100% - 40px)";
-
-            .course-classroom-item {
-                padding: 10px 0px 10px 10px;
-                width: 100%;
-                cursor: pointer;
-                border-bottom: 1px solid @borderColor;
-                color: @second-textColor;
-
-                .classroom-name {
-                    font-size: 24px;
-                    color: white;
-                    font-weight: 500;
-                    margin: 5px 0px;
-                }
-
-                .classroom-info-value {
-                    color: white;
-                    margin-right: 15px;
-                }
-            }
-
-            .course-classroom-item-active {
-                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%);
-            }
-        }
-    }
-
-    .course-classroom-info {
-        width: ~"calc(100% - 351px)";
-        height: 100%;
-        padding-left: 10px;
-
-        .course-classroom-info-header {
-            width: 100%;
-            height: 40px;
-            line-height: 40px;
-            border-bottom: 1px solid @borderColor;
-
-            .course-classroom-label {
-                margin-left: 10px;
-                color: @second-textColor;
-            }
-        }
-
-        .course-classroom-info-content {
-            width: 100%;
-            height: ~"calc(100% - 40px)";
-        }
-    }
-}
-.system-classroom-box {
-    width: 100%;
-    height: 100%;
-    padding-right:30px;
-    .system-classroom-label {
-        margin-left: 10px;
-        color: @primary-textColor;
-        font-size: 20px;
-        font-weight:600;
-        padding-top: 20px;
-        margin-bottom: 15px;
-    }
-
-    .system-classroom-table{
-        margin-top:20px;
-        margin-left:10px;
-        border-top:1px solid @borderColor;
-    }
-}
-.classroom-box {
-    width: 100%;
-    height: 100%;
-
-    &-header {
-        width: 100%;
-        height: 40px;
-        border-bottom: 1px solid @borderColor;
-        line-height: 40px;
-
-        .setting-label {
-            color: @second-textColor;
-            margin-right: 50px;
-            margin-left: 10px;
-            cursor: pointer;
-        }
-
-        .setting-label-active {
-            color: white;
-            font-weight: 600;
-            border-bottom: 2px solid white;
-        }
-    }
-
-    &-content {
-        width: 100%;
-        height: ~"calc(100% - 40px)";
-        display: flex;
-        flex-direction: row;
-
-        .classroom-base-set {
-            width: 100%;
-            height: 100%;
-            /*display: flex;
-            flex-direction: row;*/
-
-            .class-qrcode-box {
-                width: 400px;
-                height: 100%;
-                padding-left: 10px;
-
-                .qrcode-label {
-                    color: @second-textColor;
-                    margin-top: 40px;
-                    text-align: center;
-                    margin-bottom: 20px;
-                    font-size:15px;
-                }
-            }
-
-            .classroom-base-info {
-                width: 100%;
-                height: 100%;
-                padding-left: 12px;
-                overflow-y: auto;
-
-                .classroom-info-item {
-                    width: 100%;
-                    margin-top: 20px;
-
-                    .classroom-attr-label {
-                        color: @second-textColor;
-                        font-size: 14px;
-                    }
-
-                    .classroom-attr-value {
-                        color: @primary-textColor;
-                        font-size: 18px;
-                        margin-top: 5px;
-                    }
-                }
-            }
-        }
-
-        .classroom-student {
-            width: 100%;
-            height: 100%;
-            overflow-y:auto;
-            .classroom-student-menu {
-                width:100%;
-                height:45px;
-                border-bottom:1px solid @borderColor;
-                line-height:45px;
-                padding-left:10px;
-                color:@primary-textColor;
-            }
-        }
-    }
-}
-.item-tools{
-    opacity:0;
-}
-.close-btn {
-  cursor: pointer;
-  float: right;
-  transform: rotate(0deg);
-  transition: transform 1s;
-}
-.close-btn:hover {
-  transform: rotate(270deg);
-  transition: transform 1s;
-}
-.add-learn-step-icon{
-
-}
-
-/*.course-time-info {
-    height: 100%;
-    width: 34%;
-    display: inline-block;
-    padding-left: 15px;*/
-
-
-.course-time-info-content {
-    width: 100%;
-    height: 100%;
-
-    .course-time-item {
-        width: 100%;
-        padding: 15px 0px 15px 15px;
-        border-bottom: 1px solid @borderColor;
-        display: flex;
-        flex-direction: row;
-        cursor: pointer;
-
-        .item-order {
-            font-size: 60px;
-            font-weight: 600;
-            width: 75px;
-            padding: 0 30px 0 10px;
-            display: flex;
-            flex-direction: row;
-            align-items: center;
-            justify-content: center;
-
-            .edit-time {
-                display: none;
-            }
-        }
-
-        &:hover .item-order .edit-time {
-            display: inline-block;
-        }
-
-        &:hover .item-order .item-order-index {
-            display: none;
-        }
-
-        .course-time-detail {
-            width: ~"calc(100% - 75px)";
-
-            .course-frequently {
-                /*position: relative;*/
-                width: 100%;
-                overflow: auto;
-
-                .course-date {
-                    float: right;
-                    margin-right: 50px;
-                    width: 127px;
-                    /*margin-left: 15px;*/
-                }
-
-                .course-week {
-                    width: 180px;
-                }
-            }
-
-            .course-time {
-                margin-top: 10px;
-                position: relative;
-                text-align: center;
-                width: 100%;
-                height: 40px;
-
-                .course-time-start {
-                    position: absolute;
-                    left: 0;
-                }
-
-                .course-time-end {
-                    position: absolute;
-                    right: 50px;
-                }
-            }
-
-            .course-classroom {
-                margin-top: 10px;
-            }
-
-            .course-time-action {
-                width: ~"calc(100% - 50px)";
-                display: flex;
-                flex-direction: row;
-                justify-content: space-between;
-                margin-top: 10px;
-
-                .smarll-confirm-btn {
-                    width: 45%;
-                    text-align: center;
-                    background-color: #4f4f4f;
-                    color: #A1A1A1;
-                    font-weight: 600;
-                    letter-spacing: 2px;
-                    cursor: pointer;
-                    user-select: none;
-                    border-radius: 5px;
-                    padding: 2px 0px;
-                }
-
-                .smarll-confirm-btn-active {
-                    background-color: #6DE2C4;
-                    color: white;
-                }
-            }
-        }
-    }
-}
-/*}*/

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 1011
TEAMModelOS/ClientApp/src/view/coursemgmt/AdminCourseClassroom.vue


+ 0 - 275
TEAMModelOS/ClientApp/src/view/coursemgmt/CourseBaseSetting.less

@@ -1,275 +0,0 @@
-@first-bgColor: #141414;
-@second-bgColor: #1b1b1b;
-@third-bgColor: #222222;
-@borderColor: #424242;
-@primary-textColor: #fff; //文本主颜色
-@second-textColor: #a5a5a5; //文本副级颜色
-@primary-fontSize: 14px;
-@second-fontSize: 16px;
-
-.common-header {
-    height: 45px;
-    width: 100%;
-    border-bottom: 1px solid @borderColor;
-    color: @second-textColor;
-    line-height: 45px;
-    padding-left: 10px;
-}
-
-.course-detail-content {
-    width: 100%;
-    height: ~"calc(100% - 49px)";
-    display: flex;
-    flex-direction: row;
-
-    .course-base-info {
-        height: 100%;
-        width: 33%;
-        border-right: 1px solid @borderColor;
-        display: inline-block;
-
-        .course-base-info-header {
-            .common-header
-        }
-
-        .course-base-info-content {
-            width: 100%;
-            height: ~"calc(100% - 45px)";
-            overflow-y: auto;
-            padding: 30px 20px 0px 10px;
-
-            &::-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);
-            }
-        }
-    }
-
-    .course-teacher-info {
-        padding-left: 15px;
-        height: 100%;
-        width: 33%;
-        border-right: 1px solid @borderColor;
-        display: inline-block;
-
-        .course-teacher-info-header {
-            .common-header
-        }
-
-        .course-teacher-info-content {
-            width: 100%;
-            height: ~"calc(100% - 45px)";
-            overflow-y: auto;
-
-            &::-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);
-            }
-
-            .course-teacher-item {
-                display: block;
-                padding: 10px 0px 10px 10px;
-                color: @second-textColor;
-                width: 100%;
-                border-bottom: 1px solid @borderColor;
-                font-size: 16px;
-            }
-
-            .course-teacher-search-box {
-                width: 100%;
-                height: 40px;
-                border-bottom: 1px solid @borderColor;
-                padding-left: 10px;
-                line-height: 40px;
-                color: white;
-
-                .search-course-teacher {
-                    float: right;
-                    width: 150px;
-                    margin-right: 28px;
-                    line-height: 40px;
-                }
-            }
-        }
-    }
-
-    .course-time-info {
-        height: 100%;
-        width: 34%;
-        display: inline-block;
-        padding-left: 15px;
-
-        .course-time-info-header {
-            .common-header
-        }
-
-        .course-time-info-content {
-            width: 100%;
-            height: ~"calc(100% - 45px)";
-            overflow-y: auto;
-
-            &::-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);
-            }
-
-            .course-time-item {
-                width: 100%;
-                padding: 15px 0px 15px 15px;
-                border-bottom: 1px solid @borderColor;
-                display: flex;
-                flex-direction: row;
-                cursor: pointer;
-
-                .item-order {
-                    font-size: 60px;
-                    font-weight: 600;
-                    width: 75px;
-                    padding: 0 30px 0 10px;
-                    display: flex;
-                    flex-direction: row;
-                    align-items: center;
-                    justify-content: center;
-
-                    .edit-time {
-                        display: none;
-                    }
-                }
-
-                &:hover .item-order .edit-time {
-                    display: inline-block;
-                }
-
-                &:hover .item-order .item-order-index {
-                    display: none;
-                }
-
-                .course-time-detail {
-                    width: ~"calc(100% - 75px)";
-
-                    .course-frequently {
-                        /*position: relative;*/
-                        width: 100%;
-                        overflow: auto;
-
-                        .course-date {
-                            float: right;
-                            margin-right: 50px;
-                            width: 127px;
-                            /*margin-left: 15px;*/
-                        }
-
-                        .course-week {
-                            width: 180px;
-                        }
-                    }
-
-                    .course-time {
-                        margin-top: 10px;
-                        position: relative;
-                        text-align: center;
-                        width: 100%;
-                        height: 40px;
-
-                        .course-time-start {
-                            position: absolute;
-                            left: 0;
-                        }
-
-                        .course-time-end {
-                            position: absolute;
-                            right: 50px;
-                        }
-                    }
-
-                    .course-classroom {
-                        margin-top: 10px;
-                    }
-
-                    .course-time-action {
-                        width: ~"calc(100% - 50px)";
-                        display: flex;
-                        flex-direction: row;
-                        justify-content: space-between;
-                        margin-top: 10px;
-
-                        .smarll-confirm-btn {
-                            width: 45%;
-                            text-align: center;
-                            background-color: #4f4f4f;
-                            color: #A1A1A1;
-                            font-weight: 600;
-                            letter-spacing: 2px;
-                            cursor: pointer;
-                            user-select: none;
-                            border-radius: 5px;
-                            padding: 2px 0px;
-                        }
-
-                        .smarll-confirm-btn-active {
-                            background-color: #6DE2C4;
-                            color: white;
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
-
-.confirm-btn {
-    width: 100%;
-    height: 40px;
-    line-height: 40px;
-    text-align: center;
-    background-color: #4f4f4f;
-    margin: auto;
-    color: #A1A1A1;
-    font-size: 18px;
-    font-weight: 600;
-    letter-spacing: 2px;
-    cursor: pointer;
-    user-select: none;
-}
-
-.confirm-btn-active {
-    background-color: #6DE2C4;
-    color: white;
-}
-
-.search-btn-icon {
-    float: right;
-    margin-right: 30px;
-    margin-top: 10px;
-    cursor:pointer;
-}

+ 0 - 538
TEAMModelOS/ClientApp/src/view/coursemgmt/CourseBaseSetting.vue

@@ -1,538 +0,0 @@
-<template>
-    <div class="course-detail-content">
-        <div class="course-base-info">
-            <div class="course-base-info-header">
-                <p>{{$t('courseManage.base.baseTag')}}</p>
-            </div>
-            <!--基础信息-->
-            <div class="course-base-info-content">
-                <Form ref="courseBaseInfo" :model="courseInfo.baseInfo" label-position="top" :rules="ruleValidate">
-                    <FormItem :label="$t('courseManage.base.courseName')" prop="courseName">
-                        <Input :class="baseEditStatus ? 'disabled-style':''" :disabled="baseEditStatus" v-model="courseInfo.baseInfo.courseName" placeholder="请输入课程名称..."></Input>
-                    </FormItem>
-                    <FormItem :label="$t('courseManage.base.coursePeriod')" v-if="isLoaded" prop="periodCode" :class="baseEditStatus ? 'disabled-style':''">
-                        <Select v-model="courseInfo.baseInfo.periodCode" :disabled="baseEditStatus" filterable style="width:100%" placeholder="请选择学制" :clearable="true">
-                            <Option v-for="(item,index) in $store.state.schoolBaseInfo.schoolBaseInfo.period" :value="item.periodCode" :key="index">{{ item.periodName }}</Option>
-                        </Select>
-                    </FormItem>
-                    <FormItem :label="$t('courseManage.base.courseGrade')" prop="gradeCode" :class="baseEditStatus ? 'disabled-style':''">
-                        <Select v-model="courseInfo.baseInfo.gradeCode" :disabled="baseEditStatus" filterable style="width:100%" placeholder="请选择年级" :clearable="true">
-                            <Option v-for="(item,index) in fn.getPeriod($store.state.schoolBaseInfo.schoolBaseInfo,courseInfo.baseInfo.periodCode).grades" :value="item.gradeCode" :key="index">{{ item.gradeName }}</Option>
-                        </Select>
-                    </FormItem>
-                    <FormItem :label="$t('courseManage.base.courseSubject')" prop="subjectCode" :class="baseEditStatus ? 'disabled-style':''">
-                        <Select v-model="courseInfo.baseInfo.subjectCode" :disabled="baseEditStatus" filterable style="width:100%" placeholder="请选择科目" :clearable="true">
-                            <Option v-for="(item,index) in fn.getPeriod($store.state.schoolBaseInfo.schoolBaseInfo,courseInfo.baseInfo.periodCode).subjects" :value="item.subjectCode" :key="index">{{ item.subjectName }}</Option>
-                        </Select>
-                    </FormItem>
-                    <FormItem :label="$t('courseManage.base.courseNotice')" prop="notice">
-                        <div ref="courseNotice" v-show="!baseEditStatus"></div>
-                        <div v-show="baseEditStatus" style="height:260px;overflow-y:auto;color:white;font-size:16px;padding-left:10px;">
-                            <vuescroll>
-                                <div v-html="courseInfo.baseInfo.notice"></div>
-                            </vuescroll>
-                        </div>
-                        <Input v-model="courseInfo.baseInfo.notice" type="textarea" :autosize="{minRows: 2,maxRows: 5}" style="display:none"></Input>
-                    </FormItem>
-                </Form>
-                <Button type="text" width="100%" :class="isFull &&  !baseEditStatus? 'confirm-btn confirm-btn-active':'confirm-btn'" @click="submit('baseInfo')" :loading="isLoading">
-                    {{baseEditStatus ? $t('courseManage.btnEdit'):$t('courseManage.btnSave')}}
-                </Button>
-            </div>
-        </div>
-        <!--协同/任课教师-->
-        <div class="course-teacher-info">
-            <div class="course-teacher-info-header">
-                {{type == 'teacher' ? $t('courseManage.base.teachers') : $t('courseManage.base.teachers1')}}
-                <Checkbox v-model="scope" style="float:right;margin-right:25px;">{{$t('courseManage.base.addTeacher')}}</Checkbox>
-            </div>
-            <div class="course-teacher-info-content">
-                <div class="course-teacher-search-box" v-if="searchTeacherStatus">
-                    <Icon type="ios-search" color="white" size="18" class="search-btn-icon" @click="toggleSearch" />
-                </div>
-                <div v-else class="course-teacher-search-box dark-iview-input">
-                    <Input v-model="keyWord"
-                           search
-                           :placeholder="$t('courseManage.base.searchHolder')"
-                           style="width:calc(100% - 25px)"
-                           @on-click="toggleSearch"
-                           @on-search="getSchoolTeacher"/>
-                </div>
-                <CheckboxGroup v-model="courseInfo.assistTeacher" @on-change="saveChange">
-                    <Checkbox :label="item.TEAMModelId" :disabled="!baseEditStatus" class="course-teacher-item" v-for="(item,index) in teacherList" @click.native="checkStatus">{{item.name}}</Checkbox>
-                </CheckboxGroup>
-            </div>
-        </div>
-        <!--课程时段-->
-        <div class="course-time-info">
-            <div class="course-time-info-header">
-                <span>{{$t('courseManage.base.courseTime')}}</span>
-                <Icon type="md-add" color="white" size="18" @click="addCourseTime" style="float:right;margin-top:13px;margin-right:30px;cursor:pointer;" />
-            </div>
-            <div class="course-time-info-content">
-                <div v-if="courseInfo.courseTime.length > 0" class="course-time-item" v-for="(item,index) in courseInfo.courseTime" :key="index">
-                    <div class="item-order">
-                        <span class="item-order-index">{{index + 1}}</span>
-                        <Icon type="md-create" color="white" class="edit-time" size="50" :title="$t('courseManage.tips1')" @click="editCourseTime(index)" />
-                    </div>
-                    <div class="course-time-detail">
-                        <div class="course-frequently">
-                            <Select v-model="item.frequencyCode" :disabled="editTimeIndex !== index" size="small" style="width:112px" @on-change="selectFrequencyCode">
-                                <Option v-for="item in frequencyList" :value="item.value" :key="item.value">{{ item.label }}</Option>
-                            </Select>
-                            <Select v-if="item.frequencyCode === 'week'" v-model="item.frequencyName" class="course-date course-week" :disabled="editTimeIndex !== index" size="small">
-                                <Option v-for="item in weekList" :value="item.value" :key="item.value">{{ item.label }}</Option>
-                            </Select>
-                            <DatePicker v-if="item.frequencyCode === 'temporary' || item.frequency === 'month'" v-model="item.frequencyName" :disabled="editTimeIndex !== index" class="course-date" type="date" placeholder="选择日期" size="small" style="" format="yyyy-MM-dd"></DatePicker>
-                        </div>
-                        <div class="course-time">
-                            <TimePicker v-model="item.beginTime" :disabled="editTimeIndex !== index" format="HH:mm" :placeholder="$t('courseManage.base.start')" size="large" class="course-time-start" style="width: 112px;font-size:18px;"></TimePicker>
-                            <span style="margin-left: -50px;margin-top:10px;display:inline-block; color:#eeeeee;">{{$t('courseManage.base.text')}}</span>
-                            <TimePicker v-model="item.endTime" :disabled="editTimeIndex !== index" format="HH:mm" :placeholder="$t('courseManage.base.end')" size="large" class="course-time-end" style="width: 112px;font-size:18px;"></TimePicker>
-                        </div>
-                        <div class="course-classroom">
-                            <Select v-model="item.classroomCode" v-if="editTimeIndex === index" :placeholder="$t('courseManage.base.selectClassroomHolder')" size="small" style="width:calc(100% - 50px);">
-                                <Option v-for="item in $store.state.schoolBaseInfo.classroomList" :value="item.classroomCode" :key="item.classroomCode">{{ item.classroomName }}</Option>
-                            </Select>
-                            <p v-if="editTimeIndex !== index" style="color:white;padding-left:10px;"><span>{{$t('courseManage.base.courseClassroom')}}</span><span>{{getClassroomName(item.classroomCode)}}</span></p>
-                        </div>
-                        <div class="course-time-action" v-if="editTimeIndex === index">
-                            <div class="smarll-confirm-btn smarll-confirm-btn-active" @click="cancelEditTime(index)">{{$t('courseManage.btnCancel')}}</div>
-                            <div class="smarll-confirm-btn smarll-confirm-btn-active" style="margin:0px 15px;" @click="showDeleteTime(index)">{{$t('courseManage.btnDel')}}</div>
-                            <div class="smarll-confirm-btn smarll-confirm-btn-active" @click="submit('courseTime')">{{$t('courseManage.btnSave')}}</div>
-                        </div>
-                    </div>
-                </div>
-                <EmptyData v-if="courseInfo.courseTime.length == 0" style="margin-top:120px;"></EmptyData>
-            </div>
-        </div>
-        <Modal v-model="delTimeStatus"
-               title="删除时段"
-               @on-ok="deleteTime(editTimeIndex)">
-            <p>确定删除课程时段吗?</p>
-        </Modal>
-        
-    </div>
-</template>
-<script>
-    import fn from '@/utils/js-fn.js'
-    import E from 'wangeditor'
-    import { String } from 'core-js'
-    export default {
-        props: {
-            type: {
-                type: String,
-                default:'admin'
-            }
-        },
-        data() {
-            return {
-                fn,
-                delTimeStatus: false,
-                keyWord:'',
-                searchTeacherStatus: false,
-                isLoading: false,
-                baseEditStatus: true,
-                recordEdit: {},
-                scope: false,
-                isLoaded: false,
-                classroomList: [],
-                periodList: [],
-                gradeList: [],
-                subjectList: [],
-                teacherList: [],
-                noticeEditor: undefined,
-                editTimeIndex: -1,
-                isFull: false,
-                weekList: [
-                    {
-                        label: '星期一',
-                        value: 'MON'
-                    },
-                    {
-                        label: '星期二',
-                        value: 'TUE'
-                    },
-                    {
-                        label: '星期三',
-                        value: 'WED'
-                    },
-                    {
-                        label: '星期四',
-                        value: 'THU'
-                    },
-                    {
-                        label: '星期五',
-                        value: 'FRI'
-                    },
-                    {
-                        label: '星期六',
-                        value: 'SAT'
-                    },
-                    {
-                        label: '星期日',
-                        value: 'SUN'
-                    }
-                ],
-                frequencyList: [
-                    {
-                        label: '每日课程',
-                        value: 'day'
-                    },
-                    {
-                        label: '每周课程',
-                        value: 'week'
-                    },
-                    {
-                        label: '临时课程',
-                        value: 'temporary'
-                    }
-                ],
-                ruleValidate: {
-                    courseName: [
-                        { required: true, message: '课程名称不能为空', trigger: 'change' }
-                    ],
-                    periodCode: [
-                        { required: true, message: '学段信息不能为空', trigger: 'change' }
-                    ],
-                    gradeCode: [
-                        { required: true, message: '年级信息不能为空', trigger: 'change' }
-                    ],
-                    subjectCode: [
-                        { required: true, message: '科目信息不能为空', trigger: 'change' }
-                    ],
-                    notice: [
-                        { required: true, message: '课程公告不能为空', trigger: 'change' }
-                    ]
-                }
-            }
-        },
-        methods: {
-            //获取教师列表
-            getSchoolTeacher() {
-                let filterData = {
-                    '$.name': this.keyWord
-                }
-
-                if (!this.scope) {
-                    filterData.schoolCode = this.$store.state.userInfo.schoolCode
-                } else if (this.scope && this.keyWord == '') {
-                    this.$Message.warning('请输入id或者姓名搜索校外教师')
-                    return
-                }
-                this.$api.courseMgmt.getSchoolTeacher(filterData).then(
-                    (res) => {
-                        console.log(res)
-                        this.teacherList = res.result.data
-                    },
-                    (err) => {
-                        console.log(err)
-                    }
-                )
-            },
-            //选择课程频率
-            selectFrequencyCode(code) {
-                if (code == 'day') {
-                    this.courseInfo.courseTime[this.editTimeIndex].frequencyName = []
-                }
-            },
-            /**切换搜索状态 */
-            toggleSearch() {
-                //this.searchTeacherStatus = !this.searchTeacherStatus
-            },
-            validateForm() {
-                this.$refs['courseBaseInfo'].validate((valid) => {
-                    if (valid) {
-                        if (this.courseInfo.baseInfo.notice !== '' && this.courseInfo.baseInfo.notice !== '<p><br></p>') {
-                            this.isFull = true
-                        } else {
-                            this.courseInfo.baseInfo.notice = ''
-                            this.isFull = false
-                        }
-                    } else {
-                        this.isFull = false
-                    }
-                })
-            },
-            setNoticeContent() {
-                if (this.noticeEditor != undefined) {
-                    this.noticeEditor.txt.html(this.courseInfo.baseInfo.notice)
-                    setTimeout(() => {
-                        this.validateForm()
-                    }, 500)
-                }
-            },
-            editCourseTime(index) {
-                this.editTimeIndex = index
-                Object.assign(this.recordEdit, this.courseInfo.courseTime[index])
-            },
-            getClassroomName(code) {
-                let c = []
-                if (this.$store.state.schoolBaseInfo.classroomList !== undefined) {
-                    c = this.$store.state.schoolBaseInfo.classroomList.filter(
-                        (item) => {
-                            return item.classroomCode == code
-                        }
-                    )
-                }
-                return c.length > 0 ? c[0].classroomName : '暂未选择教室'
-            },
-            addCourseTime() {
-                this.courseInfo.courseTime.push(
-                    {
-                        frequencyCode: 'day', // 上课频率 每日、每周、每月、临时课程
-                        beginTime: '', // 课程开始时间
-                        endTime: '', // 课程结束时间
-                        classroomCode: '', // 上课班级/教室
-                        frequencyName: []// 临时课程
-                    }
-                )
-                this.editTimeIndex = this.courseInfo.courseTime.length - 1
-                this.recordEdit = {}
-            },
-            getSchoolBaseInfo() {
-                this.$store.dispatch('schoolBaseInfo/getSchoolBaseData').then(
-                    (res) => {
-                        if (res.code == 2) {
-                            alert('数据为空!')
-                        }
-                        this.isLoaded = true
-                    },
-                    (err) => {
-                        alert('API error!')
-                        this.isLoaded = true
-                    }
-                )
-            },
-            getClassroom() {
-                this.$store.dispatch('schoolBaseInfo/getClassroom').then(
-                    (res) => {
-                        if (res.code == 2) {
-                            alert('数据为空!')
-                        }
-                    },
-                    (err) => {
-                        alert('API error!')
-                    }
-                )
-            },
-            initEditor() {
-                let noticeEditor = new E(this.$refs.courseNotice)
-                noticeEditor.customConfig.onchange = (html) => {
-                    this.courseInfo.notice = html
-                }
-                noticeEditor.customConfig.menus = [
-                    'bold', // 粗体
-                    'italic', // 斜体
-                    'underline', // 下划线
-                    'list', // 列表
-                    'link', // 插入链接
-                    'image' // 插入图片
-                ],
-                noticeEditor.customConfig.showLinkImg = false
-                noticeEditor.customConfig.uploadFileName = 'files'
-                noticeEditor.create()
-                noticeEditor.txt.html(this.courseInfo.baseInfo.notice)
-                this.noticeEditor = noticeEditor
-            },
-            checkStatus() {
-                if (!this.baseEditStatus) {
-                    this.$Message.warning('请先保存基础信息!')
-                }
-            },
-            submit(model) {
-                if (model == 'baseInfo') {
-                    if (this.baseEditStatus) {
-                        this.baseEditStatus = false
-                        this.validateForm()
-                    } else {
-                        this.validateForm()
-                        if (this.isFull) {
-                            this.isLoading = true
-                            this.$api.courseMgmt.saveOrUpdateCourse([this.courseInfo]).then(
-                                res => {
-                                    if (res.error == null) {
-                                        this.$Message.success('保存成功!')
-                                    } else {
-                                        this.$Message.error('保存失败,API Error!')
-                                    }
-                                    this.baseEditStatus = true
-                                    this.isFull = false
-                                    this.isLoading = false
-                                },
-                                err => {
-                                    this.$Message.error('保存失败,API Error!')
-                                    this.baseEditStatus = true
-                                    this.isFull = false
-                                    setTimeout(() => {
-                                        this.isLoading = false
-                                    },1000)
-                                }
-                            )
-                        } else {
-                            this.$Message.error('请完善信息在保存!')
-                        }
-                    }
-                } else if (model == 'courseTime') {
-                    this.$api.courseMgmt.saveOrUpdateCourse([this.courseInfo]).then(
-                        res => {
-                            if (res.error == null) {
-                                this.$Message.success('保存成功!')
-                                this.editTimeIndex = -1
-                                this.recordEdit = {}
-                            } else {
-                                this.$Message.error('保存失败,API Error!')
-                            }
-                        },
-                        err => {
-                            this.$Message.error('保存失败,API Error!')
-                        }
-                    )
-                }
-            },
-            saveChange() {
-                if (this.baseEditStatus) {
-                    this.$api.courseMgmt.saveOrUpdateCourse([this.courseInfo]).then(
-                        res => {
-                            if (res.error == null) {
-                                this.$Message.success('保存成功!')
-                            } else {
-                                this.$Message.error('保存失败,API Error!')
-                            }
-                        },
-                        err => {
-                            this.$Message.error('保存失败,API Error!')
-                        }
-                    )
-                } else {
-                    this.$Message.error('请先保存课程基础信息!')
-                }
-            },
-            deleteTime(index) {
-                this.courseInfo.courseTime.splice(index, 1)
-                this.editTimeIndex = -1
-                this.$api.courseMgmt.saveOrUpdateCourse([this.courseInfo]).then(
-                    res => {
-                        if (res.error == null) {
-                            this.$Message.success('修改成功!')
-                            this.editTimeIndex = -1
-                            this.recordEdit = {}
-                        } else {
-                            this.$Message.error('修改失败,API Error!')
-                        }
-                    },
-                    err => {
-                        this.$Message.error('修改失败,API Error!')
-                    }
-                )
-            },
-            showDeleteTime() {
-                this.delTimeStatus = true
-            },
-            cancelEditTime(index) {
-                if (JSON.stringify(this.recordEdit) !== '{}') {
-                    Object.assign(this.courseInfo.courseTime[index], this.recordEdit)
-                } else {
-                    this.courseInfo.courseTime.splice(index, 1)
-                }
-                this.editTimeIndex = -1
-                this.recordEdit = {}
-            }
-        },
-        mounted() {
-            this.initEditor()
-        },
-        created() {
-            this.getSchoolBaseInfo()
-            this.getClassroom()
-            this.getSchoolTeacher()
-        },
-        computed: {
-            courseInfo: {
-                get() {
-                    return this.$store.getters['courseMgmt/courseInfo']
-                },
-                set(newVal) {
-                    console.log(newVal)
-                }
-            }
-        },
-        watch: {
-            'courseInfo.baseInfo': {
-                handler(val, oldVal) {
-                    this.$refs['courseBaseInfo'].validate((valid) => {
-                        if (valid) {
-                            if (this.courseInfo.baseInfo.notice !== '' && this.courseInfo.baseInfo.notice !== '<p><br></p>') {
-                                this.isFull = true
-                            } else {
-                                this.courseInfo.baseInfo.notice = ''
-                                this.isFull = false
-                            }
-                        } else {
-                            this.isFull = false
-                        }
-                    })
-                },
-                deep: true // true 深度监听
-            }
-        }
-    }
-</script>
-<style lang="less" scoped>
-    @import './CourseBaseSetting.less';
-</style>
-<style>
-    .course-base-info-content .w-e-menu {
-        z-index: 9 !important;
-    }
-
-    .course-teacher-item .ivu-checkbox {
-        float: right;
-        margin-right: 30px;
-    }
-
-    .course-teacher-item .ivu-checkbox-inner, .course-teacher-search-box .ivu-checkbox-inner {
-        background: none;
-    }
-
-    .search-course-teacher .ivu-input {
-        background: none;
-        border-color: #424242;
-        border-radius: 8px;
-    }
-
-    .course-base-info-content .w-e-toolbar .w-e-menu:hover i {
-        color: white !important;
-    }
-
-    .course-time-item .ivu-select-selection, .course-time-item .ivu-input {
-        background: none;
-        color: white;
-    }
-
-        .course-time-item .ivu-select-disabled .ivu-select-selection, .course-time-item .ivu-input[disabled] {
-            border: none;
-        }
-
-    .course-time-item .course-time .ivu-input[disabled] {
-        font-size: 30px;
-    }
-
-    .course-time-item .ivu-select-disabled .ivu-select-selection .ivu-select-arrow {
-        display: none;
-    }
-
-    .disabled-style .ivu-select-disabled .ivu-select-selection .ivu-select-arrow {
-        display: none;
-    }
-
-    .disabled-style .ivu-select-disabled .ivu-select-selection, .disabled-style .ivu-input[disabled] {
-        border: none;
-        font-size: 18px !important;
-    }
-
-    .disabled-style .ivu-select-input[disabled] {
-        -webkit-text-fill-color: white;
-        font-size: 18px;
-    }
-</style>

+ 0 - 333
TEAMModelOS/ClientApp/src/view/coursemgmt/CourseClassroom.less

@@ -1,333 +0,0 @@
-@first-bgColor: #141414;
-@second-bgColor: #1b1b1b;
-@third-bgColor: #222222;
-@borderColor: #424242;
-@primary-textColor: #fff; //文本主颜色
-@second-textColor: #a5a5a5; //文本副级颜色
-@primary-fontSize: 14px;
-@second-fontSize: 16px;
-
-.course-classroom-box {
-    width: 100%;
-    height: ~"calc(100% - 45px)";
-    display: flex;
-    flex-direction: row;
-
-    .course-classroom-list {
-        width: 350px;
-        height: 100%;
-        border-right: 1px solid @borderColor;
-
-        .course-classroom-list-header {
-            width: 100%;
-            height: 40px;
-            line-height: 40px;
-            border-bottom: 1px solid @borderColor;
-
-            .add-classroom-icon {
-                float: right;
-                line-height: 38px;
-                margin-right: 20px;
-                cursor: pointer;
-            }
-
-            .course-classroom-label {
-                margin-left: 10px;
-                color: @second-textColor;
-            }
-        }
-
-        .course-classroom-list-content {
-            width: 100%;
-            height: ~"calc(100% - 40px)";
-
-            .course-classroom-item {
-                padding: 10px 0px 10px 10px;
-                width: 100%;
-                cursor: pointer;
-                border-bottom: 1px solid @borderColor;
-                color: @second-textColor;
-
-                .classroom-name {
-                    font-size: 24px;
-                    color: white;
-                    font-weight: 500;
-                    margin: 5px 0px;
-                }
-
-                .classroom-info-value {
-                    color: white;
-                    margin-right: 15px;
-                }
-            }
-
-            .course-classroom-item-active {
-                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%);
-            }
-        }
-    }
-
-    .course-classroom-info {
-        width: ~"calc(100% - 351px)";
-        height: 100%;
-        padding-left: 10px;
-
-        .course-classroom-info-header {
-            width: 100%;
-            height: 40px;
-            line-height: 40px;
-            border-bottom: 1px solid @borderColor;
-
-            .course-classroom-label {
-                margin-left: 10px;
-                color: @second-textColor;
-            }
-        }
-
-        .course-classroom-info-content {
-            width: 100%;
-            height: ~"calc(100% - 40px)";
-        }
-    }
-}
-.system-classroom-box {
-    width: 100%;
-    height: 100%;
-    padding-right:30px;
-    .system-classroom-label {
-        margin-left: 10px;
-        color: @primary-textColor;
-        font-size: 20px;
-        font-weight:600;
-        padding-top: 20px;
-        margin-bottom: 15px;
-    }
-
-    .system-classroom-table{
-        margin-top:20px;
-        margin-left:10px;
-        border-top:1px solid @borderColor;
-    }
-}
-.classroom-box {
-    width: 100%;
-    height: 100%;
-
-    &-header {
-        width: 100%;
-        height: 40px;
-        border-bottom: 1px solid @borderColor;
-        line-height: 40px;
-
-        .setting-label {
-            color: @second-textColor;
-            margin-right: 50px;
-            margin-left: 10px;
-            cursor: pointer;
-        }
-
-        .setting-label-active {
-            color: white;
-            font-weight: 600;
-            border-bottom: 2px solid white;
-        }
-    }
-
-    &-content {
-        width: 100%;
-        height: ~"calc(100% - 40px)";
-        display: flex;
-        flex-direction: row;
-
-        .classroom-base-set {
-            width: 100%;
-            height: 100%;
-            /*display: flex;
-            flex-direction: row;*/
-
-            .class-qrcode-box {
-                width: 400px;
-                height: 100%;
-                padding-left: 10px;
-
-                .qrcode-label {
-                    color: @second-textColor;
-                    margin-top: 40px;
-                    text-align: center;
-                    margin-bottom: 20px;
-                    font-size:15px;
-                }
-            }
-
-            .classroom-base-info {
-                width: ~"calc(100% - 400px)";
-                height: 100%;
-                padding-left: 12px;
-                overflow-y: auto;
-
-                .classroom-info-item {
-                    width: 100%;
-                    margin-top: 20px;
-
-                    .classroom-attr-label {
-                        color: @second-textColor;
-                        font-size: 14px;
-                    }
-
-                    .classroom-attr-value {
-                        color: @primary-textColor;
-                        font-size: 18px;
-                        margin-top: 5px;
-                    }
-                }
-            }
-        }
-
-        .classroom-student {
-            width: 100%;
-            height: 100%;
-            overflow-y:auto;
-            .classroom-student-menu {
-                width:100%;
-                height:45px;
-                border-bottom:1px solid @borderColor;
-                line-height:45px;
-                padding-left:10px;
-                color:@primary-textColor;
-            }
-        }
-    }
-}
-.item-tools{
-    opacity:0;
-}
-.close-btn {
-  cursor: pointer;
-  float: right;
-  transform: rotate(0deg);
-  transition: transform 1s;
-}
-.close-btn:hover {
-  transform: rotate(270deg);
-  transition: transform 1s;
-}
-.add-learn-step-icon{
-
-}
-
-/*.course-time-info {
-    height: 100%;
-    width: 34%;
-    display: inline-block;
-    padding-left: 15px;*/
-
-
-.course-time-info-content {
-    width: 100%;
-    height: 100%;
-
-    .course-time-item {
-        width: 100%;
-        padding: 15px 0px 15px 15px;
-        border-bottom: 1px solid @borderColor;
-        display: flex;
-        flex-direction: row;
-        cursor: pointer;
-
-        .item-order {
-            font-size: 60px;
-            font-weight: 600;
-            width: 75px;
-            padding: 0 30px 0 10px;
-            display: flex;
-            flex-direction: row;
-            align-items: center;
-            justify-content: center;
-
-            .edit-time {
-                display: none;
-            }
-        }
-
-        &:hover .item-order .edit-time {
-            display: inline-block;
-        }
-
-        &:hover .item-order .item-order-index {
-            display: none;
-        }
-
-        .course-time-detail {
-            width: ~"calc(100% - 75px)";
-
-            .course-frequently {
-                /*position: relative;*/
-                width: 100%;
-                overflow: auto;
-
-                .course-date {
-                    float: right;
-                    margin-right: 50px;
-                    width: 127px;
-                    /*margin-left: 15px;*/
-                }
-
-                .course-week {
-                    width: 180px;
-                }
-            }
-
-            .course-time {
-                margin-top: 10px;
-                position: relative;
-                text-align: center;
-                width: 100%;
-                height: 40px;
-
-                .course-time-start {
-                    position: absolute;
-                    left: 0;
-                }
-
-                .course-time-end {
-                    position: absolute;
-                    right: 50px;
-                }
-            }
-
-            .course-classroom {
-                margin-top: 10px;
-            }
-
-            .course-time-action {
-                width: ~"calc(100% - 50px)";
-                display: flex;
-                flex-direction: row;
-                justify-content: space-between;
-                margin-top: 10px;
-
-                .smarll-confirm-btn {
-                    width: 45%;
-                    text-align: center;
-                    background-color: #4f4f4f;
-                    color: #A1A1A1;
-                    font-weight: 600;
-                    letter-spacing: 2px;
-                    cursor: pointer;
-                    user-select: none;
-                    border-radius: 5px;
-                    padding: 2px 0px;
-                }
-
-                .smarll-confirm-btn-active {
-                    background-color: #6DE2C4;
-                    color: white;
-                }
-            }
-        }
-    }
-}
-/*}*/

+ 0 - 903
TEAMModelOS/ClientApp/src/view/coursemgmt/CourseClassroom.vue

@@ -1,903 +0,0 @@
-<template>
-    <div class="course-classroom-box">
-        <!--课程教室列表-->
-        <div class="course-classroom-list">
-            <div class="course-classroom-list-header">
-                <span class="course-classroom-label">{{$t('courseManage.classroom.classroomList')}}</span>
-                <Poptip trigger="hover" placement="left-start" class="add-classroom-icon" v-if="type == teacher">
-                    <Icon type="md-add" color="white" size="18" />
-                    <div slot="content">
-                        <p @click="addClassroom(1)"><Icon type="ios-barcode-outline" color="white" size="18" style="margin-right:8px;" />{{$t('courseManage.classroom.addClassroomProp1')}}</p>
-                        <p @click="addClassroom(0)" style="margin-top:10px;"><Icon type="md-person" color="white" size="18" style="margin-right:8px;" />{{$t('courseManage.classroom.addClassroomProp2')}}</p>
-                    </div>
-                </Poptip>
-                <Icon v-else type="md-add" color="white" size="18" style="float:right;margin-right:15px;margin-top:10px;cursor:pointer;" @click="addClassroom(1)"/>
-            </div>
-            <div class="course-classroom-list-content">
-                <div v-if="courseInfo.classroom.length > 0" v-for="(item,index) in courseClassroomList" :key="index" @click="changeClassroom(index)" :class="currentClassroomIndex === index ? 'course-classroom-item block-bg block-bg-active':'course-classroom-item block-bg'">
-                    <p class="classroom-code"><Icon :type="item.scope === 'school' ? 'ios-barcode-outline' : 'md-person'" color="white" size="18" style="margin-right:8px;" />{{item.classroomCode}}</p>
-                    <p class="classroom-name">{{item.classroomName}}</p>
-                    <p class="classroom-info ">
-                        <span class="classroom-info-label">{{$t('courseManage.classroom.studentCount')}}</span>
-                        <span class="classroom-info-value">{{item.studentCount}}</span>
-                        <span class="classroom-info-label">{{$t('courseManage.classroom.headmaster')}}</span>
-                        <span class="classroom-info-value">{{item.headMaster}}</span>
-                    </p>
-                </div>
-                <EmptyData v-if="courseInfo.classroom.length == 0" style="padding-top:100px;"></EmptyData>
-            </div>
-        </div>
-
-        <div class="course-classroom-info">
-            <div class="course-classroom-info-header">
-                <span class="course-classroom-label">{{$t('courseManage.classroom.classroomManage')}}</span>
-            </div>
-
-            <div class="course-classroom-info-content">
-                <EmptyData v-if="selectSystemStatus == 0 && courseInfo.classroom.length == 0" style="padding-top:100px;"></EmptyData>
-                <!--选择系统教室block-->
-                <div :class="selectSystemStatus == 1 ? 'system-classroom-box animated fadeIn': ''" v-if="selectSystemStatus == 1">
-                    <p class="system-classroom-label">
-                        <span>{{$t('courseManage.classroom.chooseClassroom')}}</span>
-                        <Icon type="md-close" color="white" size="24" :title="$t('courseManage.classroom.closeChoose')" class="close-btn" @click="closeSelectClassroom" />
-                    </p>
-                    <div class="system-classroom-filter">
-                        <Input v-model="searchText" clearable :placeholder="$t('courseManage.classroom.searchHolder1')" style="width: 200px;margin-left:10px;">
-                        <Icon type="ios-search" slot="prefix" />
-                        </Input>
-                        <Select v-model="searchPeriod" style="width:20%;margin-left:5%;" :placeholder="$t('stuAccount.periodHolder')" clearable>
-                            <Option v-for="(item,index) in periodList" :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>
-                            <Option v-for="(item,index) in gradeList" :value="item.gradeCode" :key="index">{{ item.gradeName }}</Option>
-                        </Select>
-                    </div>
-                    <Table :columns="systemColumns" height="600" :data="systemClassroomList" class="system-classroom-table">
-                        <template slot-scope="{ row ,index}" slot="action">
-                            <Button class="item-tools" type="success" size="small" @click="selectClassroom(index)">{{$t('courseManage.classroom.btnChoose')}}</Button>
-                        </template>
-                    </Table>
-                </div>
-
-                <!--教室基础信息和学生名单管理-->
-                <div class="classroom-box" v-if="selectSystemStatus == 0 && courseInfo.classroom.length > 0">
-                    <!--header选项卡-->
-                    <div class="classroom-box-header">
-                        <span :class="currentSetIndex === 0 ? 'setting-label setting-label-active':'setting-label'" @click="selectSetIndex(0)">{{$t('courseManage.classroom.baseSetting')}}</span>
-                        <span :class="currentSetIndex === 1 ? 'setting-label setting-label-active':'setting-label'" @click="selectSetIndex(1)">{{$t('courseManage.classroom.studentList')}}</span>
-                    </div>
-
-                    <div class="classroom-box-content" v-if="courseClassroomList.length > 0">
-                        <!--教室基础信息-->
-                        <div v-show="currentSetIndex === 0" :class="currentSetIndex === 0 ? 'classroom-base-set animated fadeIn':'classroom-base-set animated fadeOut'">
-                            <div :class="courseClassroomList[currentClassroomIndex].scope == 'personal' ? 'class-qrcode-box animated fadeIn':'class-qrcode-box'" style="border-right: 1px solid #424242;" v-if="courseClassroomList[currentClassroomIndex].code == $store.state.userInfo.TEAMModelId">
-                                <p class="qrcode-label">{{$t('courseManage.classroom.joinCode')}}</p>
-                                <div id="qrcode" ref="qrcode" style="padding:30px;background-color:white;width:260px;margin:auto;"></div>
-                            </div>
-                            <div class="classroom-base-info">
-                                <div class="classroom-info-item">
-                                    <p class="classroom-attr-label">{{$t('courseManage.classroom.classroomCode')}}</p>
-                                    <p class="classroom-attr-value">{{courseClassroomList[currentClassroomIndex].classroomCode}}</p>
-                                </div>
-                                <div class="classroom-info-item">
-                                    <p class="classroom-attr-label">{{$t('courseManage.classroom.classroomName')}}</p>
-                                    <p class="classroom-attr-value">{{courseClassroomList[currentClassroomIndex].classroomName}}</p>
-                                </div>
-                                <div class="classroom-info-item" v-show="courseClassroomList[currentClassroomIndex].scope == 'school'">
-                                    <p class="classroom-attr-label">{{$t('courseManage.classroom.classroomAttr')}}</p>
-                                    <p class="classroom-attr-value">
-                                        {{fn.getPeriod($store.state.schoolBaseInfo.schoolBaseInfo,courseClassroomList[currentClassroomIndex].periodCode).periodName }} / {{fn.getGradeName($store.state.schoolBaseInfo.schoolBaseInfo,courseClassroomList[currentClassroomIndex].gradeCode)}}
-                                    </p>
-                                </div>
-                                <!--班主任-->
-                                <!--<div class="classroom-info-item">
-                                    <p class="classroom-attr-label">{{$t('courseManage.classroom.classroomTeacher')}}</p>
-                                    <p class="classroom-attr-value">{{courseClassroomList[currentClassroomIndex].headMaster}}</p>
-                                </div>-->
-                                <!--授课老师-->
-                                <div class="classroom-info-item dark-iview-select">
-                                    <p class="classroom-attr-label">{{$t('courseManage.classroom.classroomTeacher1')}}</p>
-                                    <Select v-model="model1" style="width:240px">
-                                        <Option v-for="item in teacherList" :value="item.value" :key="item.value">{{ item.label }}</Option>
-                                    </Select>
-
-                                </div>
-                                <div class="classroom-info-item">
-                                    <p class="classroom-attr-label">{{$t('courseManage.classroom.classroomNotice')}}</p>
-                                    <div ref="classroomNotice" style="width:90%;margin-top:10px;"></div>
-                                </div>
-                            </div>
-                            <div :class="courseClassroomList[currentClassroomIndex].scope == 'personal' ? 'class-qrcode-box animated fadeIn':'class-qrcode-box'" style="border-left: 1px solid #424242;" v-show="courseClassroomList[currentClassroomIndex].scope == 'school'">
-                                <EmptyData style="margin-top:220px;" :textContent="$t('courseManage.classroom.schoolPlan')"></EmptyData>
-                            </div>
-                        </div>
-
-                        <!--学生名单-->
-                        <div v-show="currentSetIndex === 1" class="classroom-student">
-                            <vuescroll>
-                                <div class="classroom-student-menu">
-                                    <Button type="primary" size="small" style="float:right;margin-right:60px;margin-top:10px;" @click="customGroup">{{$t('courseManage.classroom.autoGroupBtn')}}</Button>
-                                    <div style="float:right;margin-right:30px;" v-show="courseClassroomList[currentClassroomIndex].code == $store.state.userInfo.TEAMModelId">
-                                        <Button type="info" size="small" style="">{{$t('courseManage.classroom.deleteStuBtn')}}</Button>
-                                    </div>
-                                    <div style="float:right;margin-right:30px;" v-show="courseClassroomList[currentClassroomIndex].code == $store.state.userInfo.TEAMModelId" @click="showStudentList">
-                                        <Button type="info" size="small" style="">{{$t('courseManage.classroom.addStuBtn')}}</Button>
-                                    </div>
-                                    <div style="float:right;margin-right:40px;">
-                                        <span style="margin-right:5px;">{{$t('courseManage.classroom.removeStudent1')}}</span>
-                                        <Select v-model="currentGroup" style="width:80px" size="small">
-                                            <Option v-for="(item,index) in groupList" :value="index" :key="index" @click.native="setGroup">{{ item.group+ '('+item.groupName+')' }}</Option>
-                                        </Select>
-                                        <span style="margin-right:10px;margin-left:5px;">{{$t('courseManage.classroom.removeStudent2')}}</span>
-                                    </div>
-
-                                </div>
-                                <Table :columns="studentColumn" :data="courseClassroomList[currentClassroomIndex].students" class="system-classroom-table" :loading="studentTabelLoading" height="600" @on-selection-change="getSelections" no-data-text="暂无学生">
-                                    <Loading slot="loading"></Loading>
-                                    <template slot-scope="{ row ,index}" slot="action">
-                                        <strong></strong>
-                                    </template>
-                                </Table>
-
-                            </vuescroll>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <Modal v-model="customGroupStatus"
-               :title="$t('courseManage.classroom.autoGroupBtn')"
-               @on-ok="comfirmCustomRules" class="custom-group">
-            <Form :label-width="80" :label-colon="true">
-                <FormItem :label="$t('courseManage.classroom.studentCountLabel')">
-                    <span>{{classroomStudent.length}}人</span>
-                </FormItem>
-                <FormItem :label="$t('courseManage.classroom.groupCountLabel')">
-                    <InputNumber :max="10" :min="1" v-model="groupNum"></InputNumber>
-                </FormItem>
-                <FormItem :label="$t('courseManage.classroom.groupTypeLabel')">
-                    <RadioGroup v-model="groupType">
-                        <Radio label="1">
-                            <span>{{$t('courseManage.classroom.groupType1')}}</span>
-                        </Radio>
-                        <Radio label="2">
-                            <span>{{$t('courseManage.classroom.groupType2')}}</span>
-                        </Radio>
-                        <Radio label="3">
-                            <span>{{$t('courseManage.classroom.groupType3')}}</span>
-                        </Radio>
-                    </RadioGroup>
-                </FormItem>
-            </Form>
-        </Modal>
-        <Modal v-model="newPersonalStatus"
-               :title="$t('courseManage.classroom.personalClassroomTitle')"
-               @on-ok="confirmNewClassroom" class="custom-group">
-            <Form ref="personalClassroom" :model="personalClassroom" label-position="top" label-colon>
-                <FormItem :label="$t('courseManage.classroom.invitationCode')" prop="classroomCode">
-                    <span style="font-size:18px;">{{personalClassroom.classroomCode}}</span>
-                </FormItem>
-                <FormItem :label="$t('courseManage.classroom.classroomName')" prop="classroomName">
-                    <Input v-model="personalClassroom.classroomName" :placeholder="$t('courseManage.classroom.classroomName')">
-                    </Input>
-                </FormItem>
-            </Form>
-        </Modal>
-        <Modal v-model="addStudentStatus"
-               title="添加学生"
-               width="1000"
-               class-name="dark-iview-modal"
-               @on-ok="confirmAddStudent">
-            <StudentList @selectedStudent="handleSelectStudent"></StudentList>
-        </Modal>
-    </div>
-</template>
-<script>
-    import QRCode from 'qrcodejs2'
-    import E from 'wangeditor'
-    import fn from '@/utils/js-fn.js'
-    
-    import StudentList from '@/components/coursemgmt/StudentList.vue'
-    import '@/utils/Math.uuid'
-    import Loading from '@/common/Loading.vue'
-    export default {
-        components: {
-             Loading, StudentList
-        },
-        props: {
-            type: {
-                type: String,
-                default: 'admin'
-            }
-        },
-        data() {
-            return {
-                fn,
-                model1:'',
-                selectedStudent:[],
-                addStudentStatus: false,
-                studentTabelLoading: false,
-                joinQRcode: undefined,
-                personalClassroom: {
-                    classroomCode: '',
-                    classroomName: '',
-                    notice: ''
-                },
-                teacherList:[],
-                newPersonalStatus: false,
-                groupNum: 2,
-                groupType: '1',
-                selections: [],
-                customGroupStatus: false,
-                currentGroup: '',
-                groupList: [
-                    {
-                        group: 'A',
-                        groupName: '组别别名A'
-                    },
-                    {
-                        group: 'B',
-                        groupName: '组别别名B'
-                    },
-                    {
-                        group: 'C',
-                        groupName: '组别别名C'
-                    },
-                    {
-                        group: 'D',
-                        groupName: '组别别名D'
-                    },
-                    {
-                        group: 'E',
-                        groupName: '组别别名E'
-                    }
-                ],
-                selectSystemStatus: 0,
-                classroomEditor: undefined,
-                test: '',
-                searchText: '',
-                searchPeriod: '',
-                searchGrade: '',
-                gradeList: [],
-                periodList: [],
-                currentSetIndex: 0,
-                systemClassroomList: [],//系统教室列表
-                classroomList:[],//系统教室和个人教室列表
-                systemColumns: [
-                    {
-                        title: '教室编码',
-                        key: 'classroomCode'
-                    },
-                    {
-                        title: '教室名称',
-                        key: 'classroomName'
-                    },
-                    {
-                        title: '学制',
-                        key: 'periodName'
-                    },
-                    {
-                        title: '年级',
-                        key: 'gradeName'
-                    },
-                    {
-                        title: '学生数',
-                        key: 'studentCount',
-                        align: 'center',
-                        width: 100
-                    },
-                    {
-                        title: ' ',
-                        slot: 'action',
-                        width: 120
-                    }
-                ],
-                currentClassroomIndex: 0,
-                classroomStudent: [
-                    {
-                        seatNo: 1,
-                        name: '学生姓名',
-                        period: '高中',
-                        grade: '三年级',
-                        group: 'A',
-                        groupName: '组别A'
-                    },
-                    {
-                        seatNo: 2,
-                        name: '学生姓名',
-                        period: '高中',
-                        grade: '三年级',
-                        group: 'A',
-                        groupName: '组别A'
-                    }, {
-                        seatNo: 3,
-                        name: '学生姓名',
-                        period: '高中',
-                        grade: '三年级',
-                        group: 'A',
-                        groupName: '组别A'
-                    }
-                ],
-                studentColumn: []
-            }
-        },
-        methods: {
-            //确认添加学生
-            confirmAddStudent() {
-                let requestData = {
-                    id: this.courseClassroomList[this.currentClassroomIndex].classroomCode,
-                    code: this.$store.state.userInfo.schoolCode,
-                    studentId: this.selectedStudent.map((item) => {
-                        return item.studentId
-                    })
-                }
-                this.$api.courseMgmt.addClassroom([requestData]).then(
-                    (res) => {
-                        this.$Message.success('添加成功!')
-                    },
-                    (err) => {
-                        this.$Message.error('添加失败!')
-                    }
-                )
-            },
-            
-            //处理选择学生事件
-            handleSelectStudent(students) {
-                console.log(students)
-                this.selectedStudent = students
-            },
-            showStudentList() {
-                this.addStudentStatus = true
-            },
-            
-            //获取教室关联的学生
-            getClassroomStudent() {
-                this.studentTabelLoading = true
-                this.$api.courseMgmt.getClassroomStudent(
-                    {
-                        classroomCode: this.courseClassroomList[this.currentClassroomIndex].classroomCode,
-                        code: this.courseClassroomList[this.currentClassroomIndex].code
-                    }
-                ).then(
-                    (res) => {
-                        this.courseClassroomList[this.currentClassroomIndex].getStatus = true
-                        let students = res.result.extend.students
-                        for (let index in students) {
-                            let currentClassroomlInfo = this.$JSONPath.query(this.$store.state.schoolBaseInfo.classroomList, "$..[?(@.classroomCode=='" + students[index].classroomCode + "')]")
-                            if (currentClassroomlInfo.length > 0) {
-                                let currentSchoolInfo = this.$JSONPath.query(this.$store.state.schoolBaseInfo.schoolBaseInfo, "$..period[?(@.periodCode=='" + currentClassroomlInfo[0].periodCode + "')]")
-                                students[index].periodName = currentSchoolInfo[0].periodName
-                                students[index].periodCode = currentSchoolInfo[0].periodCode
-                                students[index].gradeName = this.$JSONPath.query(currentSchoolInfo, "$..grades[?(@.gradeCode=='" + currentClassroomlInfo[0].gradeCode + "')]")[0].gradeName
-                                students[index].gradeCode = currentClassroomlInfo[0].gradeCode
-                                students[index].classroomName = currentClassroomlInfo[0].classroomName
-                                students[index].groupName = '组别A'
-                                students[index].group = 'A'
-
-                            }
-                        }
-                        this.$set(this.courseClassroomList[this.currentClassroomIndex], 'students', students)
-                        this.studentTabelLoading = false
-                    },
-                    (err) => {
-                        this.studentTabelLoading = false
-                    }
-                )
-            },
-            initData() {
-                this.studentColumn = [
-                    {
-                        title: ' ',
-                        type: 'selection',
-                        width: 80
-                    },
-                    {
-                        title: this.$t('courseManage.classroom.studentTableC1'),
-                        key: 'seatNo',
-                        width: 140,
-                        align: 'center',
-                        sortable: true
-                    },
-                    {
-                        title: this.$t('courseManage.classroom.studentTableC2'),
-                        key: 'name',
-                        align: 'left '
-                    },
-                    {
-                        title: this.$t('courseManage.classroom.studentTableC3'),
-                        key: 'periodName',
-                        width: 150,
-                        align: 'center'
-                    },
-                    {
-                        title: this.$t('courseManage.classroom.studentTableC4'),
-                        key: 'gradeName',
-                        width: 150,
-                        align: 'center',
-                        sortable: true
-                    },
-                    {
-                        title: this.$t('courseManage.classroom.studentTableC5'),
-                        key: 'group',
-                        width: 150,
-                        align: 'center',
-                        sortable: true
-                    },
-                    {
-                        title: this.$t('courseManage.classroom.studentTableC6'),
-                        key: 'groupName',
-                        width: 150,
-                        align: 'center'
-                    }
-                ]
-            },
-            changeClassroom(index) {
-                this.currentClassroomIndex = index
-                this.selectSystemStatus = 0
-                if (this.courseClassroomList[this.currentClassroomIndex].code == this.$store.state.userInfo.TEAMModelId) {
-                    if (this.joinQRcode == undefined) {
-                        this.createQRCode('https://account.habookaclass.biz/')
-                    } else {
-                        this.joinQRcode.clear()
-                        this.joinQRcode.makeCode('http://www.baidu.com')
-                    }
-                } else {
-                    this.joinQRcode = undefined
-                }
-                this.initEditor()
-                if (!this.courseClassroomList[this.currentClassroomIndex].getStatus && this.currentSetIndex == 1) {
-                    this.getClassroomStudent()
-                }
-            },
-            selectClassroom(index) {
-                this.selectSystemStatus = 0
-                this.courseInfo.classroom.push(this.systemClassroomList[index].classroomCode)
-                this.$api.courseMgmt.saveOrUpdateCourse([this.courseInfo]).then(
-                    res => {
-                        if (res.error == null) {
-                            this.$Message.success('保存成功!')
-                        } else {
-                            this.$Message.error('保存失败,API Error!')
-                        }
-                        this.baseEditStatus = true
-                        this.isFull = false
-                    },
-                    err => {
-                        this.$Message.error('保存失败,API Error!')
-                        this.baseEditStatus = true
-                        this.isFull = false
-                    }
-                )
-            },
-            confirmNewClassroom() {
-                this.personalClassroom['scope'] = 'personal'
-                this.personalClassroom['code'] = this.$store.state.userInfo.TEAMModelId
-                this.personalClassroom['headMaster'] = 'HABOOK(测试名字)'
-                this.personalClassroom['id'] = Math.uuid()
-                this.$api.schoolSetting.classroomSettingSaveOrUpdate(this.personalClassroom).then(
-                    (res) => {
-                        if (res.error == null) {
-                            let resData = res.result.data
-                            let [...classrooms] = this.$store.state.schoolBaseInfo.classroomList
-                            classrooms.push(resData)
-                            this.classroomList.push(resData)
-                            this.$store.commit('schoolBaseInfo/setClassroomList', classrooms)
-                            this.courseInfo.classroom.push(resData.classroomCode)
-                            this.$api.courseMgmt.saveOrUpdateCourse([this.courseInfo]).then(
-                                (res) => {
-                                    if (res.error == null) {
-                                        this.$Message.success('个人教室添加成功!')
-                                    } else {
-                                        this.$Message.error('个人教室添加失败!')
-                                    }
-                                },
-                                (err) => {
-                                    this.$Message.error('个人教室添加失败!')
-                                }
-                            )
-                        }
-                    },
-                    (err) => {
-                        this.$Message.error('个人教室添加失败!')
-                    }
-                )
-            },
-            closeSelectClassroom() {
-                this.selectSystemStatus = 0
-            },
-            comfirmCustomRules() {
-                if (this.groupNum === 0) {
-                    this.$Message.warning('分组数量不能为0')
-                } else if (this.groupType == 0) {
-                    this.$Message.warning('请设置分组方式')
-                } else {
-                    switch (this.groupType) {
-                        case '1':
-                            this.randomGroup()
-                            break
-                        case '2':
-                            this.orderGroup()
-                            break
-                        case '3':
-                            this.orderGroupS()
-                            break
-                        default:
-                            break
-                    }
-                }
-            },
-            orderGroupS() {
-                let surplus = this.classroomStudent.length % this.groupNum// 余数
-                let maxCount = surplus == 0 ? this.classroomStudent.length / this.groupNum : Math.ceil(this.classroomStudent.length / this.groupNum)// 每组最大人数
-                this.classroomStudent = this.classroomStudent.sort((a, b) => {
-                    a.seatNo > b.seatNo
-                })
-                for (let i = 0; i < maxCount; i++) {
-                    for (let j = 0; j < this.groupNum; j++) {
-                        let startIndex = this.groupNum * i
-                        if (startIndex + j < this.classroomStudent.length) {
-                            this.classroomStudent[startIndex + j].group = j + 1
-                            this.classroomStudent[startIndex + j].groupName = '组别别名' + (j + 1)
-                        } else {
-                            break
-                        }
-                    }
-                }
-            },
-            orderGroup() {
-                let surplus = this.classroomStudent.length % this.groupNum// 余数
-                let maxCount = surplus == 0 ? this.classroomStudent.length / this.groupNum : Math.ceil(this.classroomStudent.length / this.groupNum)// 每组最大人数
-                this.classroomStudent = this.classroomStudent.sort((a, b) => {
-                    a.seatNo > b.seatNo
-                })
-                let flag = 0
-                let startIndex = 0
-                for (let i = 0; i < this.groupNum; i++) {
-                    for (let j = 0; j < maxCount; j++) {
-                        if (startIndex + j < this.classroomStudent.length) {
-                            this.classroomStudent[startIndex + j].group = i + 1
-                            this.classroomStudent[startIndex + j].groupName = '组别别名' + (i + 1)
-                        } else {
-                            break
-                        }
-                    }
-                    startIndex += maxCount
-                    flag++
-                    if (flag == surplus) {
-                        maxCount--
-                    }
-                }
-            },
-            randomGroup() {
-                let surplus = this.classroomStudent.length % this.groupNum// 余数
-                let surplusCount = surplus// 余数
-                let maxCount = surplus == 0 ? this.classroomStudent.length / this.groupNum : Math.ceil(this.classroomStudent.length / this.groupNum)// 每组最大人数
-                let record = {}// 记录每个组已经分配的人数
-                for (let i = 1; i <= this.groupNum; i++) {
-                    record[i] = 0
-                }
-                let flag = true
-                for (let index in this.classroomStudent) {
-                    let groupIndex = fn.getBtwRandom(1, this.groupNum)
-                    if (record[groupIndex] < maxCount) {
-                        record[groupIndex] = record[groupIndex] + 1
-                    } else {
-                        for (let key in record) {
-                            if (record[key] < maxCount) {
-                                record[key] = record[key] + 1
-                                groupIndex = key
-                                break
-                            }
-                        }
-                    }
-                    this.classroomStudent[index].group = groupIndex
-                    this.classroomStudent[index].groupName = '组别别名' + groupIndex
-                    if (record[groupIndex] == maxCount) {
-                        surplusCount--
-                    }
-                    if (surplusCount <= 0 && surplus > 0 && flag) {
-                        maxCount--
-                        flag = false
-                    }
-                }
-            },
-            getSelections(selection) {
-                this.selections = selection
-                console.log(selection)
-            },
-            setGroup() {
-                if (this.currentGroup == '') {
-                    this.$Message.warning('请设置组别')
-                    return
-                }
-                if (this.selections.length == 0) {
-                    this.$Message.warning('请选择需要设置组别的学生')
-                    return
-                }
-                let groupInfo = this.groupList[this.currentGroup]
-                for (let item of this.selections) {
-                    let index = fn.getIndex(this.classroomStudent, item)
-                    if (index !== -1) {
-                        this.classroomStudent[index].group = groupInfo.group
-                        this.classroomStudent[index].groupName = groupInfo.groupName
-                    } else {
-                        this.$Message.error('error!')
-                    }
-                }
-            },
-            customGroup() {
-                this.customGroupStatus = true
-            },
-            getClassroomList() {
-                this.$store.dispatch('schoolBaseInfo/getClassroom').then(
-                    (res) => {
-                        if (res.code == 1 || res.code == 3) {
-                            this.systemClassroomList.push(...this.$store.state.schoolBaseInfo.classroomList)
-                            this.classroomList.push(...this.$store.state.schoolBaseInfo.classroomList)
-                        }
-                    },
-                    (err) => {
-                        console.log(err)
-                    }
-                )
-            },
-            getPersonalClassroom() {
-                let requestData = {
-                    code: this.$store.state.userInfo.TEAMModelId
-                }
-                this.$api.schoolSetting.findClassInfo(requestData).then(
-                    res => {
-                        if (res.error == null) {
-                            this.classroomList.push(...res.result.data)
-                        } else {
-                            alert('API error!')
-                        }
-                    },
-                    err => {
-                        alert('API error!')
-                    }
-                )
-            },
-            addClassroom(value) {
-                if (value == 1) {
-                    this.selectSystemStatus = value
-                } else if (value == 0) {
-                    let randomCode = 'P'
-                    for (let i = 0; i < 8; i++) {
-                        randomCode += fn.getBtwRandom(0, 9)
-                    }
-                    this.personalClassroom.classroomCode = randomCode
-                    this.newPersonalStatus = true
-                }
-            },
-
-            selectSetIndex(index) {
-                this.currentSetIndex = index
-                if (this.courseClassroomList[this.currentClassroomIndex].scope == 'personal') {
-                    if (this.joinQRcode == undefined) {
-                        this.createQRCode('https://account.habookaclass.biz/')
-                    } else {
-                        this.joinQRcode.clear()
-                        this.joinQRcode.makeCode('http://www.baidu.com')
-                    }
-                } else {
-                    this.joinQRcode = undefined
-                }
-                if (!this.courseClassroomList[this.currentClassroomIndex].getStatus) {
-                    this.getClassroomStudent()
-                }
-            },
-            initEditor() {
-                if (this.classroomEditor == undefined) {
-                    let noticeEditor = new E(this.$refs.classroomNotice)
-                    noticeEditor.customConfig.onchange = (html) => {
-                        this.test = html
-                    }
-                    noticeEditor.customConfig.menus = [
-                        'bold', // 粗体
-                        'italic', // 斜体
-                        'underline', // 下划线
-                        'list', // 列表
-                        'link', // 插入链接
-                        'image' // 插入图片
-                    ],
-                        noticeEditor.customConfig.showLinkImg = false
-                    noticeEditor.customConfig.uploadFileName = 'files'
-                    noticeEditor.create()
-                    this.classroomEditor = noticeEditor
-                } else {
-                    this.classroomEditor.txt.html('')
-                }
-            },
-            createQRCode(url) {
-                this.$nextTick(() => {
-                    // 此时已经渲染完成
-                    let qrcode = new QRCode('qrcode', {
-                        width: 200, // 设置宽度,单位像素
-                        height: 200, // 设置高度,单位像素
-                        text: url // 设置二维码内容或跳转地址
-                    })
-                    this.joinQRcode = qrcode
-                })
-            }
-        },
-        mounted() {
-            this.initEditor()
-            
-        },
-        created() {
-            this.initData()
-            this.getClassroomList()
-            this.getPersonalClassroom()
-        },
-        computed: {
-            courseInfo: {
-                get() {
-                    return this.$store.getters['courseMgmt/courseInfo']
-                },
-                set(newVal) {
-                }
-            },
-            courseClassroomList() {
-                let a = []
-                a = this.classroomList.filter((item, index) => {
-                    return this.courseInfo.classroom.indexOf(item.classroomCode) != -1
-                })
-                return a
-            }
-        }
-    }
-</script>
-<style scoped lang="less">
-    @import './CourseClassroom.less';
-</style>
-
-<style>
-    .classroom-student #loadingBox {
-        margin-top:0px !important;
-    }
-    .classroom-student .ivu-spin-fix {
-        background:rgba(103, 103, 103, 0.27);
-    }
-    .add-classroom-icon .ivu-poptip-inner {
-        background-color: #404040;
-        color: white;
-    }
-
-    .add-classroom-icon .ivu-poptip-arrow::after {
-        display: none;
-    }
-
-    .add-classroom-icon .ivu-poptip-title:after, .add-classroom-icon .ivu-poptip-title {
-        display: none;
-    }
-
-    .system-classroom-box .ivu-input, .system-classroom-box .ivu-select-selection {
-        background: none;
-        border-color: #424242;
-    }
-
-        .system-classroom-box .ivu-input:focus, .system-classroom-box .ivu-input:hover {
-            border-color: #57A3F3 !important;
-        }
-
-        .system-classroom-box .ivu-select-selection:focus, .system-classroom-box .ivu-select-selection:hover {
-            border-color: #57A3F3 !important;
-        }
-
-    .system-classroom-table .ivu-table, .system-classroom-table .ivu-table td, .system-classroom-table .ivu-table th, .system-classroom-table .ivu-table:before {
-        background: none;
-        color: white;
-        border-color: #424242;
-    }
-
-    .system-classroom-table .ivu-table-row-hover .item-tools {
-        opacity: 1;
-        transition: opacity 1s;
-    }
-
-    .system-classroom-table .ivu-table-row-hover {
-        background: #303030;
-    }
-
-    .sc-container .ivu-input, .sc-container .ivu-select-selection {
-        background: none;
-        color: white;
-    }
-
-    .classroom-base-info .w-e-toolbar {
-        background: #383838 !important;
-        border-radius: 5px 5px 0px 0px;
-        border-color: #383838 !important;
-    }
-
-    .classroom-base-info .w-e-text-container {
-        border-color: #383838 !important;
-        border-radius: 0px 0px 5px 5px;
-        overflow-y: auto !important;
-        height: 220px !important;
-    }
-
-    .classroom-base-info .w-e-text {
-        overflow-y: auto;
-        color: white;
-        &::-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);
-    }
-
-    }
-
-    .classroom-base-info .w-e-toolbar .w-e-menu:hover i {
-        color: white !important;
-    }
-
-    .ivu-table-row-hover .item-tools {
-        opacity: 1;
-        transition: opacity .2s;
-    }
-
-    /*对话框样式修改*/
-    .custom-group .ivu-modal-content {
-        background-color: #383838 !important;
-        color: white;
-    }
-
-    .custom-group .ivu-modal-header {
-        border-color: #454545;
-        color: white;
-        background-color: #383838;
-        border-top-left-radius: 6px;
-        border-top-right-radius: 6px;
-    }
-
-    .custom-group .ivu-modal-mask {
-        background-color: rgba(20,20,20,.7);
-    }
-
-    .custom-group .ivu-input {
-        background: none;
-        border: none;
-        border-bottom: 1px solid #828282;
-        border-radius: 0px;
-        color: white;
-        font-size: 16px;
-    }
-
-    .custom-group .ivu-form-item-label {
-        color: #929292;
-    }
-
-    .custom-group .ivu-modal-body {
-        padding: 16px 30px;
-    }
-
-    .custom-group .ivu-modal-footer {
-        border-color: #454545;
-    }
-
-    .custom-group .ivu-modal-header p, .custom-group .ivu-modal-header-inner {
-        color: white;
-        font-weight: 600;
-    }
-
-    .custom-group .ivu-btn-text {
-        color: white;
-    }
-
-        .custom-group .ivu-btn-text:hover {
-            color: black;
-        }
-</style>

+ 0 - 151
TEAMModelOS/ClientApp/src/view/coursemgmt/CourseManage.less

@@ -1,151 +0,0 @@
-@first-bgColor: #141414;
-@second-bgColor: #1b1b1b;
-@third-bgColor: #222222;
-@borderColor: #424242;
-@primary-textColor: #fff; //文本主颜色
-@second-textColor: #a5a5a5; //文本副级颜色
-@primary-fontSize: 14px;
-@second-fontSize: 16px;
-
-
-
-.course-mgmt-content {
-    width: 100%;
-    height: 100%;
-    background-color: @first-bgColor;
-
-    .course-list {
-        width: 26%;
-        height: 100%;
-        float: left;
-        padding-left: 15px;
-    }
-
-    .course-detail {
-        width: 74%;
-        height: 100%;
-        float: right;
-        padding-left: 15px;
-    }
-}
-.select-class-label {
-    color: white;
-    margin-right: 15px;
-    margin-left: 22px;
-}
-
-.course-list {
-    border-right: 1px solid @borderColor;
-
-    .course-list-header {
-        width: 100%;
-        height: 45px;
-        position: relative;
-        border-bottom: 1px solid @borderColor;
-        line-height: 45px;
-
-        .list-label {
-            font-size: 16px;
-            color: @second-textColor;
-        }
-
-        .search-course {
-            display: inline-block;
-            position: absolute;
-            left: 10px;
-            right: 10px;
-            top: 16px;
-        }
-
-        .add-icon {
-            float: right;
-            margin-right: 20px;
-            margin-top: 12px;
-            cursor: pointer;
-        }
-    }
-
-    .course-list-content {
-        width: 100%;
-        height: ~"calc(100% - 45px)";
-
-        .show-course-label {
-            font-size: 10px;
-            color: @second-textColor;
-            display: block;
-            padding: 4px 0px 4px 15px;
-            border-bottom: 1px solid @borderColor;
-            font-weight: 800;
-        }
-
-        .course-list-item {
-            width: 100%;
-            padding: 12px 0px 12px 15px;
-            color: @second-textColor;
-            border-bottom: 1px solid @borderColor;
-            position: relative;
-            cursor: pointer;
-
-            .course-code {
-            }
-
-            .course-name {
-                font-size: 20px;
-                color: white;
-                font-weight: 600;
-                margin: 5px 0px;
-            }
-
-            .course-item-tool {
-                position: absolute;
-                right: 50px;
-                top: 35px;
-                display: none;
-            }
-        }
-
-        .course-list-item-active {
-            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%);
-
-            .course-item-tool {
-                display: inline-block;
-            }
-        }
-    }
-}
-
-.course-detail {
-
-    .course-detail-header {
-        width: 100%;
-        height: 45px;
-        line-height: 45px;
-        border-bottom: 1px solid @borderColor;
-        padding-left: 10px;
-
-        .setting-label {
-            color: @second-textColor;
-            margin-right: 60px;
-            cursor: pointer;
-        }
-
-        .setting-label-active {
-            color: white;
-            font-weight: 600;
-            border-bottom: 2px solid white;
-        }
-    }
-
-    
-}
-.modal-title {
-    color: #7F7F7F;
-    font-size: 18px;
-    font-weight: 800;
-    display: inline-block;
-    width: 100%;
-    text-align: center;
-}

+ 0 - 383
TEAMModelOS/ClientApp/src/view/coursemgmt/CourseManage.vue

@@ -1,383 +0,0 @@
-<template>
-    <div class="course-mgmt-content">
-        <!--课程列表-->
-        <div class="course-list">
-            <!--列表头部-->
-            <div class="course-list-header">
-                <div v-if="!isSearch">
-                    <span class="list-label">{{$t('courseManage.courseList1')}}</span>
-                    <Icon type="ios-search" color="white" size="18" class="add-icon" @click="toggleSearch" />
-                    <Icon type="md-trash" color="white" size="18" class="add-icon" @click="showComfirmDelete" />
-                    <Icon type="md-add" color="white" size="18" class="add-icon" :title="$t('courseManage.addCourse')" @click="addCourse" />
-                </div>
-                <div v-else class="dark-iview-input">
-                    <Input icon="ios-close"
-                           v-model="keyWord"
-                           placeholder="关键字搜索..."
-                           autofocus
-                           style="width:calc(100% - 15px)"
-                           @on-click="toggleSearch"
-                           @on-change="onSearchSubjectChange"
-                           @on-enter="onSearchSubjectChange" />
-                </div>
-            </div>
-            <!--列表内容-->
-            <div class="course-list-content">
-                <!--<span class="show-course-label">{{$t('courseManage.courseShow')}}<Icon type="ios-arrow-down" size="16" /></span>-->
-                <div v-if="$store.state.courseMgmt.courseList.length > 0" :class="index === $store.state.courseMgmt.currentCourseIndex ? 'course-list-item block-bg block-bg-active':'course-list-item block-bg'" v-for="(item,index) in $store.state.courseMgmt.courseList" :key="index" @click="selectCourse(index)">
-                    <p class="course-code">
-                        <Icon :type="item.scope === 'school' ? 'ios-barcode-outline' : 'md-person'" color="#AAAAAA" />
-                        {{item.baseInfo.courseCode}}
-                    </p>
-                    <p class="course-name">
-                        {{item.baseInfo.courseName}}
-                    </p>
-                    <Breadcrumb>
-                        <BreadcrumbItem><Icon type="md-pricetag" style="margin-right:5px;" />{{fn.getPeriod($store.state.schoolBaseInfo.schoolBaseInfo,item.baseInfo.periodCode).periodName}}</BreadcrumbItem>
-                        <BreadcrumbItem>{{fn.getGradeName($store.state.schoolBaseInfo.schoolBaseInfo,item.baseInfo.gradeCode)}}</BreadcrumbItem>
-                        <BreadcrumbItem>{{fn.getSubjectName($store.state.schoolBaseInfo.schoolBaseInfo,item.baseInfo.subjectCode)}}</BreadcrumbItem>
-                    </Breadcrumb>
-                    <Icon type="ios-browsers" title="复制" color="#EEEEEE" class="course-item-tool" size="30" />
-                </div>
-                <div v-if="$store.state.courseMgmt.courseList.length == 0" style="width:100%;text-align:center;padding-top:180px;">
-                    <EmptyData :textContent="$t('courseManage.noData1')"></EmptyData>
-                </div>
-            </div>
-        </div>
-        <!--课程详细内容-->
-        <div class="course-detail">
-            <div class="course-detail-header">
-                <span :class="currentSettingIndex === 0 ? 'setting-label line-bottom line-bottom-active':'setting-label line-bottom'" @click="selectSetting(0)">{{$t('courseManage.baseSetting')}}</span>
-                <span :class="currentSettingIndex === 1 ? 'setting-label line-bottom line-bottom-active':'setting-label line-bottom'" @click="selectSetting(1)">{{$t('courseManage.syllabusSetting')}}</span>
-                <span :class="currentSettingIndex === 2 ? 'setting-label line-bottom line-bottom-active':'setting-label line-bottom'" @click="selectSetting(2)">{{$t('courseManage.classroomSetting')}}</span>
-            </div>
-            <CourseBaseSetting type="teacher" ref="courseBaseSetting" v-if="currentSettingIndex === 0 && $store.state.courseMgmt.courseList.length > 0" :class="currentSettingIndex === 0 ? 'animated fadeIn':'animated fadeOut'"></CourseBaseSetting>
-            <CourseSyllabus v-if="currentSettingIndex === 1 && $store.state.courseMgmt.courseList.length > 0" :class="currentSettingIndex === 1 ? 'animated fadeIn':'animated fadeOut'"></CourseSyllabus>
-            <CourseClassroom type="teacher" v-if="currentSettingIndex === 2 && $store.state.courseMgmt.courseList.length > 0" :class="currentSettingIndex === 2 ? 'animated fadeIn':'animated fadeOut'"></CourseClassroom>
-            <div v-if="$store.state.courseMgmt.courseList.length == 0" style="width:100%;text-align:center;margin-top:180px;">
-                <EmptyData></EmptyData>
-            </div>
-        </div>
-        <Modal v-model="deleteCourseStatus"
-               title="删除课程"
-               @on-ok="delCourse">
-            <p v-if="$store.state.courseMgmt.courseList.length > 0">确认删除{{$store.state.courseMgmt.courseList[$store.state.courseMgmt.currentCourseIndex].baseInfo.courseName}}?</p>
-        </Modal>
-    </div>
-</template>
-<script>
-    import fn from '@/utils/js-fn.js'
-    import '@/utils/Math.uuid'
-    
-    import CourseBaseSetting from './CourseBaseSetting.vue'
-    import CourseClassroom from './CourseClassroom.vue'
-    import Loading from '@/common/Loading.vue'
-    import CourseSyllabus from './CourseSyllabus.vue'
-    export default {
-        components: {
-            CourseBaseSetting,
-            CourseClassroom,
-            CourseSyllabus,
-            
-            Loading
-        },
-        data() {
-            return {
-                fn,
-                deleteCourseStatus: false,
-                keyWord:'',
-                isSearch: false,
-                courseListShow: [],
-                currentSettingIndex: 0,
-                addCourseStatus: false
-            }
-        },
-        methods: {
-            /**切换搜索状态 */
-            toggleSearch() {
-                this.isSearch = !this.isSearch
-            },
-            getSchoolBaseInfo() {
-                this.$store.dispatch('schoolBaseInfo/getSchoolBaseData').then(
-                    (res) => {
-                        if (res.code == 2) {
-                            alert('数据为空!')
-                        }
-                        this.isLoaded = true
-                    },
-                    (err) => {
-                        alert('API error!')
-                        this.isLoaded = true
-                    }
-                )
-            },
-            getClassroom() {
-                this.$store.dispatch('schoolBaseInfo/getClassroom').then(
-                    (res) => {
-                        if (res.code == 2) {
-                            alert('数据为空!')
-                        }
-                    },
-                    (err) => {
-                        alert('API error!')
-                    }
-                )
-            },
-            selectSetting(index) {
-                this.currentSettingIndex = index
-            },
-            selectCourse(index) {
-                this.$store.commit('courseMgmt/setCurrentCourseIndex', index)
-                
-                this.$nextTick(() => {
-                    // 此时已经渲染完成
-                    if (this.$refs.courseBaseSetting != undefined) {
-                        this.$refs.courseBaseSetting.setNoticeContent()
-                    }
-                })
-            },
-            showComfirmDelete() {
-                this.deleteCourseStatus = true
-            },
-            /**删除课程 */
-            delCourse() {
-                let requestData = {
-                    id:this.$store.state.courseMgmt.courseList[this.$store.state.courseMgmt.currentCourseIndex].id
-                }
-                this.$api.courseMgmt.deleteCourse(requestData).then(
-                    res => {
-                        if (res.error == null) {
-                            let test = this.$store.state.courseMgmt.courseList
-                            let index = this.$store.state.courseMgmt.currentCourseIndex
-                            this.$store.commit('courseMgmt/setCurrentCourseIndex', 0)
-                            test.splice(index, 1)
-                            this.$store.commit('courseMgmt/setCourseList', test)
-                            this.$Message.success('删除成功!')
-                        } else {
-                            this.$Message.error('删除失败!')
-                        }
-                    },
-                    err => {
-                        this.$Message.error('删除失败!')
-                    }
-                )
-            },
-            /**新增课程 */
-            addCourse() {
-                this.addCourseStatus = true
-                let item = {
-                    id: Math.uuid(),
-                    code: this.$store.state.userInfo.TEAMModelId,
-                    baseInfo: {
-                        courseCode: 'T968475',
-                        courseName: '未命名课程'+(this.$store.state.courseMgmt.courseList.length + 1),
-                        periodCode: '',
-                        gradeCode: '',
-                        subjectCode: '',
-                        notice: ''// 课程公告
-                    },
-                    assistTeacher: [], // 协同教师
-                    courseTime: [], // 上课时间表
-                    classroom: [], // 课程“教室”
-                    syllabus: []// 关联课纲
-                }
-                let test = this.$store.state.courseMgmt.courseList
-                test.push(item)
-                this.$store.commit('courseMgmt/setCourseList', test)
-                this.$store.commit('courseMgmt/setCurrentCourseIndex', this.$store.state.courseMgmt.courseList.length - 1)
-                setTimeout(() => {
-                    this.$refs.courseBaseSetting.setNoticeContent()
-                }, 500)
-                console.log(this.$refs.courseBaseSetting)
-                this.$refs.courseBaseSetting.baseEditStatus = false
-            },
-            getCourseInfo() {
-                this.$store.dispatch('courseMgmt/getCourseList').then(
-                    (res) => {
-                        console.log(res)
-                        if (res.code == 1 || res.code == 3) {
-                            this.schoolSetting = this.$store.state.schoolBaseInfo.schoolBaseInfo
-                        } else {
-                            // this.getDefaultData()
-                        }
-                        console.log(this.$store.state.courseMgmt.courseList)
-                    },
-                    (err) => {
-                        console.log(err)
-                    }
-                )
-            }
-        },
-        created() {
-            this.getCourseInfo()
-            this.getSchoolBaseInfo()
-            this.getClassroom()
-        }
-
-    }
-</script>
-<style lang="less" scoped>
-    @import './CourseManage.less';
-</style>
-<style lang="less">
-    .search-course .ivu-input {
-        background: none;
-        border-color: #424242;
-        border-radius: 8px;
-    }
-
-    .course-list-item .ivu-breadcrumb > span:last-child {
-        font-weight: 400;
-        color: #999;
-    }
-
-    .ivu-table-overflowY {
-        &::-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);
-    }
-
-    }
-
-    .course-base-info-content .ivu-input {
-        background: none;
-        border: none;
-        border-bottom: 1px solid #828282;
-        border-radius: 0px;
-        color: white;
-        font-size: 16px;
-    }
-
-    .course-base-info-content .ivu-form-item-label {
-        color: #929292;
-    }
-
-    .course-base-info-content .ivu-form-item-required .ivu-form-item-label:before {
-        color: #6DE2C4;
-    }
-
-    .course-base-info-content .ivu-form-item-error .ivu-input:focus {
-        border: none;
-    }
-
-    .course-base-info-content .ivu-input-group-prepend {
-        border: none;
-        background: none;
-        color: white;
-        font-size: 14px;
-    }
-
-    .course-base-info-content .ivu-checkbox-wrapper {
-        float: right;
-        color: #929292;
-    }
-
-    .course-base-info-content .ivu-checkbox-inner {
-        background: none;
-        border-color: #6DE2C4;
-    }
-
-    .course-base-info-content .ivu-checkbox-checked .ivu-checkbox-inner:after {
-        border-color: #6DE2C4;
-    }
-
-    .course-base-info-content .ivu-select-selection {
-        border-color: #828282;
-        background: none;
-    }
-
-        .course-base-info-content .ivu-select-selection:hover {
-            border-color: #57a3f3;
-        }
-
-    .course-base-info-content .ivu-select-input {
-        color: white;
-        font-size: 16px;
-    }
-
-    .course-base-info-content .w-e-toolbar {
-        background: #383838 !important;
-        border-radius: 5px 5px 0px 0px;
-        border-color: #383838 !important;
-    }
-
-    .course-base-info-content .w-e-text-container {
-        border-color: #383838 !important;
-        border-radius: 0px 0px 5px 5px;
-        overflow-y: auto !important;
-        height: 220px !important;
-        z-index: 99 !important;
-    }
-
-    .course-base-info-content .w-e-text {
-        overflow-y: auto;
-        color: white;
-        &::-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);
-    }
-
-    }
-
-    /*对话框样式修改*/
-    .add-course-modal .ivu-modal-content {
-        background-color: #383838 !important;
-        height: 700px;
-    }
-
-    .add-course-modal .ivu-modal-header {
-        border-color: #454545;
-        background-color: #383838;
-        border-top-left-radius: 6px;
-        border-top-right-radius: 6px;
-    }
-
-    .add-course-modal .ivu-modal-mask {
-        background-color: rgba(20,20,20,.7);
-    }
-
-    .add-course-modal .ivu-input {
-        background: none;
-        border: none;
-        border-bottom: 1px solid #828282;
-        border-radius: 0px;
-        color: white;
-        font-size: 16px;
-    }
-
-    .add-course-modal .ivu-form-item-label {
-        color: #929292;
-    }
-
-    .add-course-modal .ivu-modal-body {
-        padding: 16px 30px;
-    }
-
-    .course-list-header .ivu-input {
-        color: white;
-    }
-</style>

+ 0 - 70
TEAMModelOS/ClientApp/src/view/coursemgmt/CourseSyllabus.less

@@ -1,70 +0,0 @@
-@first-bgColor: #141414;
-@second-bgColor: #1b1b1b;
-@third-bgColor: #222222;
-@borderColor: #424242;
-@primary-textColor: #fff; //文本主颜色
-@second-textColor: #a5a5a5; //文本副级颜色
-@primary-fontSize: 14px;
-@second-fontSize: 16px;
-
-.course-syllabus-content {
-  width: 100%;
-  height: ~"calc(100% - 45px)";
-  color: @second-textColor;
-
-  .course-syllabus-tab-box {
-    width: 100%;
-    height: 45px;
-    border-bottom: 1px solid @borderColor;
-    padding-left: 10px;
-
-    .tab-label {
-      line-height: 45px;
-      color: @second-textColor;
-      margin-right: 55px;
-      cursor: pointer;
-    }
-
-    .tab-label-active {
-      color: white;
-      font-weight: 600;
-      border-bottom: 2px solid white;
-    }
-  }
-
-  .syllabus-filter-box {
-    width: 100%;
-    padding: 20px 10px;
-    border-bottom: 1px solid @borderColor;
-
-    span {
-      color: @second-textColor;
-    }
-  }
-
-  .course-syllabus-box {
-    width: 100%;
-    height: ~"calc(100% - 146px)"; 
-    position: relative;
-
-    .syllabus-title {
-      color: white;
-      padding: 5px 0px 15px 0px;
-      font-size: 16px;
-      font-weight: 500;
-      border-bottom: 1px solid @borderColor;
-    }
-
-    .syllabus-point {
-      margin-top: 30px;
-    }
-
-    .syllabus-content {
-      margin-top: 30px;
-    }
-
-    .syllabus-question {
-      margin-top: 30px;
-    }
-  }
-}

+ 0 - 214
TEAMModelOS/ClientApp/src/view/coursemgmt/CourseSyllabus.vue

@@ -1,214 +0,0 @@
-<template>
-    <div class="course-syllabus-content">
-        <div class="course-syllabus-tab-box">
-            <span :class="currentTabIndex == 0 ? 'tab-label tab-label-active':'tab-label'" @click="selectSyllabusTab(0)">{{$t('courseManage.syllabus.schoolSyllabus')}}</span>
-            <span :class="currentTabIndex == 1 ? 'tab-label tab-label-active':'tab-label'" @click="selectSyllabusTab(1)">{{$t('courseManage.syllabus.personalSyllabus')}}</span>
-        </div>
-        <div class="syllabus-filter-box">
-            <div class="dark-iview-select">
-                <span>{{$t('courseManage.syllabus.period')}}</span>
-                <Select v-model="filters.periodCode" filterable style="width:200px;" :placeholder="$t('courseManage.syllabus.placeHolder1')" :clearable="true" size="small">
-                    <Option v-for="(item,index) in $store.state.schoolBaseInfo.schoolBaseInfo.period" :value="item.periodCode" :key="index" @click.native="getCurrentGrade(index)">{{ item.periodName }}</Option>
-                </Select>
-                <span style="margin-left:30px;">{{$t('courseManage.syllabus.subject')}}</span>
-                <Select v-model="filters.subjectCode" filterable style="width:200px;" :placeholder="$t('courseManage.syllabus.placeHolder2')" :clearable="true" size="small">
-                    <Option v-for="(item,index) in fn.getPeriod($store.state.schoolBaseInfo.schoolBaseInfo,filters.periodCode).subjects" :value="item.subjectCode" :key="index">{{ item.subjectName }}</Option>
-                </Select>
-                <span style="margin-left:30px;">{{$t('courseManage.syllabus.grade')}}</span>
-                <Select v-model="filters.gradeCode" filterable style="width:200px;" :placeholder="$t('courseManage.syllabus.placeHolder3')" :clearable="true" size="small">
-                    <Option v-for="(item,index) in fn.getPeriod($store.state.schoolBaseInfo.schoolBaseInfo,filters.periodCode).grades" :value="item.gradeCode" :key="index">{{ item.gradeName }}</Option>
-                </Select>
-                </br>
-                <Checkbox v-model="showAll" style="margin-top:15px;">{{$t('courseManage.syllabus.text')}}</Checkbox>
-            </div>
-        </div>
-        <div class="course-syllabus-box">
-            <Split v-model="split1">
-                <div slot="left" class="demo-split-pane" style="padding-top:15px;">
-                    <vuescroll>
-                        <Collapse simple accordion @on-change="getVolumeCode" v-show="volumes.length > 0">
-                            <Panel v-for="(item,index) in volumes" :name="item.volumeCode" :key="index">
-                                {{item.volumeName}}
-                                <div slot="content">
-                                    <Tree ref="syllabusTree" :data="syllabus" show-checkbox multiple @on-check-change="getSelectSyllabus($event,index)"></Tree>
-                                </div>
-                            </Panel>
-                        </Collapse>
-                        <EmptyData v-show="volumes.length == 0" style="margin-top:100px;" fontSize="18px"></EmptyData>
-                    </vuescroll>
-                </div>
-                <div slot="right" class="demo-split-pane" style="padding-top:15px;padding-left:20px;overflow:auto;height: 100%;">
-                    <vuescroll>
-                        <p class="syllabus-title">2.1 等差数列求和</p>
-                        <div class="syllabus-point">
-                            <p>{{$t('courseManage.syllabus.knowledge')}}</p>
-                            <EmptyData :iconWidth="50" :fontSize="'10px'"></EmptyData>
-                        </div>
-                        <div class="syllabus-content">
-                            <p>{{$t('courseManage.syllabus.content')}}</p>
-                            <EmptyData :iconWidth="50" :fontSize="'10px'"></EmptyData>
-                        </div>
-                        <div class="syllabus-question">
-                            <p>{{$t('courseManage.syllabus.question')}}</p>
-                            <EmptyData :iconWidth="50" :fontSize="'10px'"></EmptyData>
-                        </div>
-                    </vuescroll>
-                </div>
-            </Split>
-
-        </div>
-    </div>
-</template>
-<script>
-    import fn from '@/utils/js-fn.js'
-    
-    export default {
-        data() {
-            return {
-                fn,
-                checkedSyllabus: [],
-                syllabus: [],
-                volumes: [],
-                split1: 0.8,
-                showAll: false,
-                currentTabIndex: 0,
-                filters: {
-                    periodCode: '',
-                    gradeCode: '',
-                    subjectCode: ''
-                },
-                gradeList: [],
-                subjectList: []
-            }
-        },
-        methods: {
-            getSelectSyllabus(data, index) {
-                let checkItem = this.$refs.syllabusTree[index].getCheckedAndIndeterminateNodes()
-                let checkedIds = checkItem.map((item, index) => {
-                    return item.id
-                })
-                if (checkItem.length > 0) {
-                    this.checkedSyllabus[checkItem[0].volumeCode] = checkedIds
-                    console.log(this.checkedSyllabus)
-                }
-            },
-            getVolumeCode(keys) {
-                if (keys.length > 0) {
-                    this.getSyllabusByVolume(keys[0])
-                }
-            },
-            selectSyllabusTab(index) {
-                this.currentTabIndex = index
-            },
-            getCurrentGrade(index) {
-                this.gradeList = this.$store.state.schoolBaseInfo.schoolBaseInfo.period[index].grades
-                this.subjectList = this.$store.state.schoolBaseInfo.schoolBaseInfo.period[index].subjects
-            },
-            getSyllabusByVolume(code) {
-                let requestData = {
-                    volumeCode: code,
-                    status: 1
-                }
-                this.$api.syllabus.GetTreeByVolume(requestData).then(
-                    (res) => {
-                        if (res.error == null) {
-                            this.syllabus = res.result.data
-                        } else {
-                            alert('API error!')
-                        }
-                    },
-                    (err) => {
-                        alert('API error!')
-                    }
-                )
-            },
-            getVolumes() {
-                let requestData = {
-                    periodCode: this.filters.periodCode,
-                    status: 1,
-                    subjectCode: this.filters.subjectCode,
-                    type: this.currentTabIndex,
-                    code:this.currentTabIndex == 1 ? this.$store.state.userInfo.TEAMModelId : this.$store.state.userInfo.schoolCode
-                }
-                this.$api.syllabus.GetVolumes(requestData).then(
-                    res => {
-                        if (res.error == null) {
-                            this.volumes = res.result.data
-                        } else {
-                            alert('API error!')
-                        }
-                    },
-                    err => {
-                        alert('API error!')
-                    }
-                )
-            }
-        },
-        watch: {
-            filters: {
-                deep: true,
-                handler(val, oldVal) {
-                    this.getVolumes()
-                }
-            }
-        },
-        created() {
-            this.filters.periodCode = this.$store.state.schoolBaseInfo.schoolBaseInfo.period[0].periodCode
-            this.filters.subjectCode = this.$store.state.schoolBaseInfo.schoolBaseInfo.period[0].subjects[0].subjectCode
-        }
-    }
-</script>
-<style scoped lang="less">
-    @import './CourseSyllabus.less';
-</style>
-<style>
-    .syllabus-filter-box .ivu-select-input {
-        color: white;
-    }
-
-    .syllabus-filter-box .ivu-select-selection {
-        border-color: #424242;
-    }
-
-    .course-syllabus-content .ivu-checkbox-inner {
-        background: none;
-    }
-
-    .course-syllabus-box .ivu-tree-title {
-        color: #a5a5a5;
-    }
-
-    .course-syllabus-box .ivu-split-trigger-vertical .ivu-split-trigger-bar {
-        background: #FFF;
-    }
-
-    .course-syllabus-box .ivu-split-trigger-vertical {
-        background: #303030;
-        border-color: #424242;
-    }
-
-    .course-syllabus-box .ivu-collapse-simple, .course-syllabus-box .ivu-collapse-content {
-        background: none;
-        color: white;
-    }
-
-    .course-syllabus-box .ivu-collapse, .course-syllabus-box .ivu-collapse > .ivu-collapse-item, .course-syllabus-box .ivu-collapse > .ivu-collapse-item > .ivu-collapse-header {
-        border: none;
-    }
-
-        .course-syllabus-box .ivu-collapse > .ivu-collapse-item > .ivu-collapse-header {
-            color: white;
-        }
-
-    .course-syllabus-box .ivu-collapse-content {
-        padding-left: 47px;
-    }
-
-    .course-syllabus-box .ivu-collapse > .ivu-collapse-item.ivu-collapse-item-active > .ivu-collapse-header {
-        border: none;
-    }
-
-    .course-syllabus-box .ivu-tree-empty {
-        color: #909090;
-    }
-</style>

+ 3 - 0
TEAMModelOS/ClientApp/src/view/newcourse/CourseClassroom.vue

@@ -578,6 +578,9 @@
 
                             }
                         }
+                        if (!this.courseInfo.classes[this.curClassIndex].getStatus) {
+                            this.getClassroomStudent()
+                        }
                     }
                 },
                 deep: true

+ 9 - 0
TEAMModelOS/ClientApp/src/view/newcourse/CoursePlan.less

@@ -147,4 +147,13 @@
     height:50px;
     line-height:50px;
 
+}
+.cell-action-icon{
+    color:white;
+    font-size:22px;
+    margin:25px 5px 0px 5px;
+    &:hover{
+        color:aqua;
+    }
+
 }

+ 94 - 44
TEAMModelOS/ClientApp/src/view/newcourse/CoursePlan.vue

@@ -45,14 +45,14 @@
                     <div class="cus-table-top dark-iview-input dark-iview-select">
                         <div class="semester-filter-wrap">
                             <!--<span class="label">学期</span>
-                            <Select v-model="semester" size="small" style="width: 200px;display:inline-block;">
-                                <Option v-for="(item,index) in semesterList.semesters" :value="item.semesterCode">{{item.semesterName}}</Option>
-                            </Select>-->
+                        <Select v-model="semester" size="small" style="width: 200px;display:inline-block;">
+                            <Option v-for="(item,index) in semesterList.semesters" :value="item.semesterCode">{{item.semesterName}}</Option>
+                        </Select>-->
                         </div>
                         <h1 class="sch-title">课程表</h1>
                     </div>
                     <div v-if="this.classListShow[this.curClassIndex]">
-                        <Table :columns="timeColumns" disabled-hover :data="this.classListShow[this.curClassIndex].classPlan" border :span-method="handleSpan" class="cus-table">
+                        <Table :columns="timeColumns" disabled-hover :data="classListShow[curClassIndex].classPlan" border :span-method="handleSpan" class="cus-table">
                             <!--上午/下午-->
                             <template slot-scope="{ row, index }" slot="sub">
                                 <p style="padding:10px 0px 4px 0px;font-size: 20px;">
@@ -72,9 +72,8 @@
                             <template slot-scope="{ row, index }" slot="MON">
                                 <div :class="row.weeklies.MON.status == 1 ? 'week-day-cell':'week-day-cell vact-status'">
                                     <div v-if="row.weeklies.MON.status == 1" class="toggle-status-btn-wrap">
-                                        <Button class="toggle-status-btn" @click="showSetCus(row,'MON')" type="default">
-                                            {{row.weeklies.MON.status == 1 ? '设置课程':'设置课程'}}
-                                        </Button>
+                                        <Icon class="cell-action-icon" type="ios-settings" title="设置课程" @click="showSetCus(row,'MON')" />
+                                        <Icon v-if="row.weeklies.MON.courseName" class="cell-action-icon" type="md-trash" title="取消课程" @click="showCancelCus(row,'MON')"/>
                                     </div>
                                     <p class="course-name">{{row.weeklies.MON.courseName}}</p>
                                     <p class="teacher-name">{{row.weeklies.MON.teacher}}</p>
@@ -84,9 +83,8 @@
                             <template slot-scope="{ row, index }" slot="TUE">
                                 <div :class="row.weeklies.TUE.status == 1 ? 'week-day-cell':'week-day-cell vact-status'">
                                     <div v-if="row.weeklies.TUE.status == 1" class="toggle-status-btn-wrap">
-                                        <Button class="toggle-status-btn" @click="showSetCus(row,'TUE')" type="default">
-                                            {{row.weeklies.TUE.status == 1 ? '设置课程':'设置课程'}}
-                                        </Button>
+                                        <Icon class="cell-action-icon" type="ios-settings" title="设置课程" @click="showSetCus(row,'TUE')" />
+                                        <Icon v-if="row.weeklies.TUE.courseName" class="cell-action-icon" type="md-trash" title="取消课程" @click="showCancelCus(row,'TUE')"/>
                                     </div>
                                     <p class="course-name">{{row.weeklies.TUE.courseName}}</p>
                                     <p class="teacher-name">{{row.weeklies.TUE.teacher}}</p>
@@ -96,9 +94,8 @@
                             <template slot-scope="{ row, index }" slot="WED">
                                 <div :class="row.weeklies.WED.status == 1 ? 'week-day-cell':'week-day-cell vact-status'">
                                     <div v-if="row.weeklies.WED.status == 1" class="toggle-status-btn-wrap">
-                                        <Button class="toggle-status-btn" @click="showSetCus(row,'WED')" type="default">
-                                            {{row.weeklies.WED.status == 1 ? '设置课程':'设置课程'}}
-                                        </Button>
+                                        <Icon class="cell-action-icon" type="ios-settings" title="设置课程" @click="showSetCus(row,'WED')" />
+                                        <Icon v-if="row.weeklies.WED.courseName" class="cell-action-icon" type="md-trash" title="取消课程" @click="showCancelCus(row,'WED')"/>
                                     </div>
                                     <p class="course-name">{{row.weeklies.WED.courseName}}</p>
                                     <p class="teacher-name">{{row.weeklies.WED.teacher}}</p>
@@ -108,9 +105,8 @@
                             <template slot-scope="{ row, index }" slot="THU">
                                 <div :class="row.weeklies.THU.status == 1 ? 'week-day-cell':'week-day-cell vact-status'">
                                     <div class="toggle-status-btn-wrap" v-if="row.weeklies.THU.status == 1">
-                                        <Button class="toggle-status-btn" @click="showSetCus(row,'THU')" type="default">
-                                            {{row.weeklies.THU.status == 1 ? '设置课程':'设置课程'}}
-                                        </Button>
+                                        <Icon class="cell-action-icon" type="ios-settings" title="设置课程" @click="showSetCus(row,'THU')" />
+                                        <Icon v-if="row.weeklies.THU.courseName" class="cell-action-icon" type="md-trash" title="取消课程" @click="showCancelCus(row,'THU')"/>
                                     </div>
                                     <p class="course-name">{{row.weeklies.THU.courseName}}</p>
                                     <p class="teacher-name">{{row.weeklies.THU.teacher}}</p>
@@ -120,9 +116,8 @@
                             <template slot-scope="{ row, index }" slot="FRI">
                                 <div :class="row.weeklies.FRI.status == 1 ? 'week-day-cell':'week-day-cell vact-status'">
                                     <div v-if="row.weeklies.FRI.status == 1" class="toggle-status-btn-wrap">
-                                        <Button class="toggle-status-btn" @click="showSetCus(row,'FRI')" type="default">
-                                            {{row.weeklies.FRI.status == 1 ? '设置课程':'设置课程'}}
-                                        </Button>
+                                        <Icon class="cell-action-icon" type="ios-settings" title="设置课程" @click="showSetCus(row,'FRI')" />
+                                        <Icon v-if="row.weeklies.FRI.courseName" class="cell-action-icon" type="md-trash" title="取消课程" @click="showCancelCus(row,'FRI')"/>
                                     </div>
                                     <p class="course-name">{{row.weeklies.FRI.courseName}}</p>
                                     <p class="teacher-name">{{row.weeklies.FRI.teacher}}</p>
@@ -132,9 +127,8 @@
                             <template slot-scope="{ row, index }" slot="SAT">
                                 <div :class="row.weeklies.SAT.status == 1 ? 'week-day-cell':'week-day-cell vact-status'">
                                     <div v-if="row.weeklies.SAT.status == 1" class="toggle-status-btn-wrap">
-                                        <Button class="toggle-status-btn" @click="showSetCus(row,'SAT')" type="default">
-                                            {{row.weeklies.SAT.status == 1 ? '设置课程':'设置课程'}}
-                                        </Button>
+                                        <Icon class="cell-action-icon" type="ios-settings" title="设置课程" @click="showSetCus(row,'SAT')" />
+                                        <Icon v-if="row.weeklies.SAT.courseName" class="cell-action-icon" type="md-trash" title="取消课程" @click="showCancelCus(row,'SAT')"/>
                                     </div>
                                     <p class="course-name">{{row.weeklies.SAT.courseName}}</p>
                                     <p class="teacher-name">{{row.weeklies.SAT.teacher}}</p>
@@ -144,9 +138,8 @@
                             <template slot-scope="{ row, index }" slot="SUN">
                                 <div :class="row.weeklies.SUN.status == 1 ? 'week-day-cell':'week-day-cell vact-status'">
                                     <div v-if="row.weeklies.SUN.status == 1" class="toggle-status-btn-wrap">
-                                        <Button class="toggle-status-btn" @click="showSetCus(row,'SUN')" type="default">
-                                            {{row.weeklies.SUN.status == 1 ? '设置课程':'设置课程'}}
-                                        </Button>
+                                        <Icon class="cell-action-icon" type="ios-settings" title="设置课程" @click="showSetCus(row,'SUN')" />
+                                        <Icon v-if="row.weeklies.SUN.courseName" class="cell-action-icon" type="md-trash" title="取消课程" @click="showCancelCus(row,'SUN')"/>
                                     </div>
                                     <p class="course-name">{{row.weeklies.SUN.courseName}}</p>
                                     <p class="teacher-name">{{row.weeklies.SUN.teacher}}</p>
@@ -180,7 +173,8 @@
         <Modal v-model="setCusStatus"
                title="设置课程"
                class-name="dark-iview-modal dark-iview-form"
-               @on-ok="confirmSetCus">
+               @on-ok="confirmSetCus"
+               @on-cancel="cancelSetCus">
             <Form :model="cusItem" :label-width="90">
                 <FormItem label="课程名称">
                     <Select v-model="cusItem.courseId">
@@ -194,6 +188,12 @@
                 </FormItem>
             </Form>
         </Modal>
+        <Modal v-model="cancelCusStatus"
+               title="取消课程"
+               class-name="dark-iview-modal dark-iview-form"
+               @on-ok="confirmCancelCus">
+            <p v-if="delCusInfo.row" style="color:white;font-size:16px;">确认取消当前课程?</p>
+        </Modal>
     </div>
 </template>
 <script>
@@ -212,7 +212,7 @@
                 },
                 isSearch: false,
                 isLoading: false,
-                coursePlan: {},
+                //coursePlan: {},
                 courseList: [],
                 cusItem: {
                     courseId: '',
@@ -220,6 +220,7 @@
                     row: {},
                     day: ''
                 },
+                delCusInfo: {},
                 errorClass: [],
                 errorCourse: [],
                 errorTeacher: [],
@@ -228,10 +229,11 @@
                 headerTitles: ['班级', '课程名称', '课程编码', '授课老师', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'],
                 importCusStatus: false,
                 setCusStatus: false,
-                semesterTree: [],
+                cancelCusStatus: false,
+                //semesterTree: [],
                 schoolInfo: {},
                 subIndex: 0,
-                semester: [],
+                //semester: [],
                 isListLoading: false,
                 classList: [],
                 classListShow: [],
@@ -291,6 +293,44 @@
             }
         },
         methods: {
+            showCancelCus(row, day) {
+                this.cancelCusStatus = true
+                console.log(row, day)
+                this.delCusInfo.row = row
+                this.delCusInfo.day = day
+            },
+            //确认取消课程
+            confirmCancelCus() {
+                let requestData = {
+                    id: this.delCusInfo.row.weeklies[this.delCusInfo.day].courseId,
+                    code: this.delCusInfo.row.weeklies[this.delCusInfo.day].teacherCode,
+                    classroomCode: this.classListShow[this.curClassIndex].classroomCode,
+                    time:this.delCusInfo.row.time,
+                    day:this.delCusInfo.day
+                }
+                this.isLoading = true
+                this.$api.courseMgmt.deleteTime(requestData).then(
+                    (res) => {
+                        if (!res.error) {
+                            this.$Message.success('取消成功')
+                            console.log('123456')
+                            console.log(this.classListShow[this.curClassIndex])
+                            this.classListShow[this.curClassIndex].classPlan[this.delCusInfo.row._index].weeklies[this.delCusInfo.day].teacher = undefined
+                            this.classListShow[this.curClassIndex].classPlan[this.delCusInfo.row._index].weeklies[this.delCusInfo.day].teacherCode = undefined
+                            this.classListShow[this.curClassIndex].classPlan[this.delCusInfo.row._index].weeklies[this.delCusInfo.day].courseName = undefined
+                            this.classListShow[this.curClassIndex].classPlan[this.delCusInfo.row._index].weeklies[this.delCusInfo.day].courseId = undefined
+                            let tempArr = JSON.parse(JSON.stringify(this.classListShow[this.curClassIndex].classPlan))
+                            this.classListShow[this.curClassIndex].classPlan = []
+                            this.classListShow[this.curClassIndex].classPlan = [...tempArr]
+                        }
+                        this.isLoading = false
+                    },
+                    (err) => {
+                        this.$Message.error('取消失败')
+                        this.isLoading = false
+                    }
+                )
+            },
             //关键字搜索班级
             onSearchClass() {
                 this.classListShow = this.classList.filter((item) => {
@@ -317,6 +357,11 @@
                     }
                 )
             },
+            //取消设置课程
+            cancelSetCus() {
+                this.cusItem.teacher = ''
+                this.cusItem.courseId = ''
+            },
             //确认设置课程
             confirmSetCus() {
                 this.isLoading = true
@@ -327,21 +372,26 @@
                     courseTime: {
                         label: this.cusItem.row.label,
                         time: this.cusItem.row.time,
-                        day: this.cusItem.day,
-                        //type:0
+                        day: this.cusItem.day
                     }
                 }
                 this.$api.courseMgmt.upsertAllPlan([requestData]).then(
                     (res) => {
-                        this.$set(this.classListShow[this.curClassIndex].classPlan[this.cusItem.row._index].weeklies[this.cusItem.day], 'courseName', this.courseList.filter((item) => {
-                            return item.id == this.cusItem.courseId
-                        })[0].courseName)
+                        if (!res.error && res.result.data.length > 0) {
+                            this.$set(this.classListShow[this.curClassIndex].classPlan[this.cusItem.row._index].weeklies[this.cusItem.day], 'courseName', this.courseList.filter((item) => {
+                                return item.id == this.cusItem.courseId
+                            })[0].courseName)
 
-                        this.$set(this.classListShow[this.curClassIndex].classPlan[this.cusItem.row._index].weeklies[this.cusItem.day], 'teacher', this.cusTeaList.filter((item) => {
-                            return item.id == this.cusItem.teacher
-                        })[0].name)
+                            this.$set(this.classListShow[this.curClassIndex].classPlan[this.cusItem.row._index].weeklies[this.cusItem.day], 'teacher', this.cusTeaList.filter((item) => {
+                                return item.id == this.cusItem.teacher
+                            })[0].name)
 
-                        this.$Message.success('设置成功!')
+                            this.$Message.success('设置成功!')
+                            this.cusItem.teacher = ''
+                            this.cusItem.courseId = ''
+                        } else {
+                            this.$Message.error('设置失败!')
+                        }
                         this.isLoading = false
                     },
                     (err) => {
@@ -510,8 +560,6 @@
                                     let realClass = planItem.classes.filter((item) => {
                                         return item.classroomCode == this.classListShow[this.curClassIndex].classroomCode
                                     })
-                                    console.log('0.0.0.')
-                                    console.log(realClass)
                                     for (let timeItem of realClass[0].courseTimes) {
                                         //可优化
                                         for (let i = 0; i < this.classListShow[this.curClassIndex].classPlan.length; i++) {
@@ -519,7 +567,9 @@
                                                 //this.$set(this.classListShow[this.curClassIndex].classPlan[i].weeklies[timeItem.day], 'courseName', courseName)
                                                 //this.$set(this.classListShow[this.curClassIndex].classPlan[i].weeklies[timeItem.day], 'teacher', teacherName)
                                                 this.classListShow[this.curClassIndex].classPlan[i].weeklies[timeItem.day].teacher = teacherName
+                                                this.classListShow[this.curClassIndex].classPlan[i].weeklies[timeItem.day].teacherCode = planItem.code
                                                 this.classListShow[this.curClassIndex].classPlan[i].weeklies[timeItem.day].courseName = courseName
+                                                this.classListShow[this.curClassIndex].classPlan[i].weeklies[timeItem.day].courseId = planItem.id
                                                 break
                                             }
                                         }
@@ -541,10 +591,10 @@
                 }
             }
         },
-        created() {
-            this.getCourseList()
-            this.$store.dispatch('teachers/getTeacherList').then(res => { })
-            this.$store.dispatch('schoolBaseInfo/getClassroom').then(res => {
+        async created() {
+            await this.getCourseList()
+            await this.$store.dispatch('teachers/getTeacherList').then(res => { })
+            await this.$store.dispatch('schoolBaseInfo/getClassroom').then(res => {
                 this.classList = this.$store.state.schoolBaseInfo.classroomList
                 this.classListShow = [...this.classList]
                 this.findClassPlan()

+ 6 - 2
TEAMModelOS/ClientApp/src/view/school-mgmt/SystemSetting/SystemSetting.less

@@ -226,7 +226,7 @@
 
                 &-name-line {
                     display: inline-block;
-                    .lineSpan(16px,3px,red,15px);
+                    .lineSpan(16px,3px,red,2px);
                 }
 
                 &-students-num {
@@ -514,4 +514,8 @@
             right:15px;
         }
     }
-}
+}
+.semester-name-label {
+    display: inline-block;
+    vertical-align: super;
+}

+ 46 - 90
TEAMModelOS/ClientApp/src/view/school-mgmt/SystemSetting/SystemSetting.vue

@@ -60,60 +60,57 @@
                         <p class="period-item-num"><span></span>{{ $t('schoolBaseInfo.semesterNum') + item.semesters.length}}</p>
                         <p class="period-item-num"><span></span>{{ $t('schoolBaseInfo.gradeNum') + item.grades.length}}</p>
                         <p class="period-item-num"><span></span>{{ $t('schoolBaseInfo.periodNum') + item.subjects.length}}</p>
-                        <!--<div class="period-item-tool">
-                        <Icon type="md-trash" title="删除" @click.stop="delPeriod(index)" />
-                    </div>-->
+
                     </div>
+                    
                 </div>
             </div>
             <!--学期列表-->
             <div class="sm-system-center">
                 <div class="col-title">
                     <span>{{$t('schoolBaseInfo.semesterSetting')}}</span>
-                    <Icon v-if="$access.ability('admin','schoolSetting-upd').validateAll"  type="md-add" @click="handleAddTerm" class="action-btn-icon" />
-                    <Icon v-if="$access.ability('admin','schoolSetting-upd').validateAll"  type="md-trash" @click="showComfirmDelSemester()" title="删除" :class="editIconStatus ? 'action-btn-icon':'custom-label-disabeld action-btn-icon'" />
-                    <Icon v-if="$access.ability('admin','schoolSetting-upd').validateAll"  type="md-create" @click="changeSemesterStatus(currentSemesterIndex)" title="编辑" :class="editIconStatus ? 'action-btn-icon':'custom-label-disabeld action-btn-icon'" />
+                    <Icon v-if="$access.ability('admin','schoolSetting-upd').validateAll" type="md-add" @click="handleAddTerm" class="action-btn-icon" />
+                    <Icon v-if="$access.ability('admin','schoolSetting-upd').validateAll" type="md-trash" @click="showComfirmDelSemester()" title="删除" :class="editIconStatus ? 'action-btn-icon':'custom-label-disabeld action-btn-icon'" />
+                    <Icon v-if="$access.ability('admin','schoolSetting-upd').validateAll" type="md-create" @click="changeSemesterStatus(curSemIndex)" title="编辑" :class="editIconStatus ? 'action-btn-icon':'custom-label-disabeld action-btn-icon'" />
                 </div>
                 <div class="col-body">
+
                     <div class="no-data-text" v-if="!schoolSetting.period[currentSchoolSysIndex].semesters.length">{{$t('schoolBaseInfo.noSemester')}}</div>
-                    <div class="term-list" v-if="schoolSetting.period[currentSchoolSysIndex].semesters.length">
-                        <div v-for="(item,index) in schoolSetting.period[currentSchoolSysIndex].semesters" :key="index" :class="index == currentSemesterIndex ? 'term-item block-bg block-bg-active':'term-item block-bg'" @click="chooseSemester(index)">
+                    <div class="term-list dark-iview-input disabled-iview-input dark-iview-inputnumber disabled-iview-inputnumber" v-if="schoolSetting.period[currentSchoolSysIndex].semesters.length">
+                        <div v-for="(item,index) in schoolSetting.period[currentSchoolSysIndex].semesters" :key="index" :class="index == curSemIndex ? 'term-item block-bg block-bg-active':'term-item block-bg'" @click="chooseSemester(index)">
                             <span class="term-item-name-line" :style="{backgroundColor: colorList[index]}"></span>
-                            <EditableLabel ref="semesterName" class="term-item-name" :content="item.semesterName" @editComplete="handleEditSemester($event,index)">
-                            </EditableLabel>
-                            <!--<Icon type="md-create" class="edit-btn" :title="$t('schoolBaseInfo.editLabel')" @click="changeSemesterStatus(index)" />-->
+                            <p class="semester-name-label">
+                                <Input v-model="item.semesterName" :disabled="editSemIndex !== index" placeholder="设置学期..." style="width: 180px" />
+                            </p>
                             <div class="term-item-start">
                                 <span>{{$t('schoolBaseInfo.startDate')}}</span>
-                                <Select v-model="item.month" :disabled="!$access.ability('admin','schoolSetting-upd').validateAll" :placeholder="$t('schoolBaseInfo.monthHolder')">
-                                    <Option v-for="(item,index) in monthList" :value="item" :key="index">{{ item }}</Option>
-                                </Select>
+                                <!--<Select v-model="item.month" :disabled="editSemIndex !== index" :placeholder="$t('schoolBaseInfo.monthHolder')">
+        <Option v-for="(item,index) in monthList" :value="item" :key="index">{{ item }}</Option>
+    </Select>-->
+                                <InputNumber v-model="item.month" size="small" style="width:50px;" :disabled="editSemIndex !== index" :max="12" :min="1"></InputNumber>
                                 <span> / </span>
-                                <Select v-model="item.day" :disabled="!$access.ability('admin','schoolSetting-upd').validateAll"  :placeholder="$t('schoolBaseInfo.dayHolder')">
-                                    <Option v-for="(item,index) in dayList" :value="(item+1).toString()" :key="index">{{ (item+1).toString() }}</Option>
-                                </Select>
+                                <InputNumber v-model="item.day" size="small" style="width:50px;" :disabled="editSemIndex !== index" :max="31" :min="1"></InputNumber>
                             </div>
                             <p class="term-item-students-num">{{$t('schoolBaseInfo.semesterDuration')+ item.days + $t('schoolBaseInfo.dayUnit')  }}</p>
-                            <!--<div class="term-item-tool">
-                            <Icon type="md-trash" :title="$t('schoolBaseInfo.delete')" @click.stop="delSemester(index)" />
-                        </div>-->
                         </div>
                     </div>
+                    
                     <div class="term-item-time-line" v-if="schoolSetting.period[currentSchoolSysIndex].semesters.length">
                         <ul>
                             <li v-for="(item,index) in monthEnList" :key="index">
                                 <span class="time-label">{{item}}.</span>
                                 <span class="time-dot">
-                                    <span v-if="auto" class="time-inner-dot" :class="index + 1 >= schoolSetting.period[currentSchoolSysIndex].semesters[currentSemesterIndex].month && index < endMonth ? 'bg-color-check':'bg-color-uncheck'"></span>
-                                    <span v-else class="time-inner-dot" :class="index + 1 >= schoolSetting.period[currentSchoolSysIndex].semesters[currentSemesterIndex].month || index < endMonth ? 'bg-color-check':'bg-color-uncheck'"></span>
+                                    <span v-if="auto" class="time-inner-dot" :class="index + 1 >= schoolSetting.period[currentSchoolSysIndex].semesters[curSemIndex].month && index < endMonth ? 'bg-color-check':'bg-color-uncheck'"></span>
+                                    <span v-else class="time-inner-dot" :class="index + 1 >= schoolSetting.period[currentSchoolSysIndex].semesters[curSemIndex].month || index < endMonth ? 'bg-color-check':'bg-color-uncheck'"></span>
                                     <span class="time-line-tail"></span>
                                 </span>
                                 <div>
-                                    <Icon class="first-arrow" size="22" type="ios-arrow-back" v-if="index + 1 == schoolSetting.period[currentSchoolSysIndex].semesters[currentSemesterIndex].month || index + 1 == endMonth" />
+                                    <Icon class="first-arrow" size="22" type="ios-arrow-back" v-if="index + 1 == schoolSetting.period[currentSchoolSysIndex].semesters[curSemIndex].month || index + 1 == endMonth" />
                                     <span v-if="auto">
-                                        <Icon class="second-arrow" size="22" :class="index  < endMonth ? 'color-check':'color-uncheck'" type="ios-arrow-back" v-if="index + 1 == schoolSetting.period[currentSchoolSysIndex].semesters[currentSemesterIndex].month || index + 1 == endMonth" />
+                                        <Icon class="second-arrow" size="22" :class="index  < endMonth ? 'color-check':'color-uncheck'" type="ios-arrow-back" v-if="index + 1 == schoolSetting.period[currentSchoolSysIndex].semesters[curSemIndex].month || index + 1 == endMonth" />
                                     </span>
                                     <span v-else>
-                                        <Icon class="second-arrow" size="22" :class="index + 1 >= endMonth ? 'color-check':'color-uncheck'" type="ios-arrow-back" v-if="index + 1 == schoolSetting.period[currentSchoolSysIndex].semesters[currentSemesterIndex].month || index + 1 == endMonth" />
+                                        <Icon class="second-arrow" size="22" :class="index + 1 >= endMonth ? 'color-check':'color-uncheck'" type="ios-arrow-back" v-if="index + 1 == schoolSetting.period[currentSchoolSysIndex].semesters[curSemIndex].month || index + 1 == endMonth" />
                                     </span>
                                 </div>
                             </li>
@@ -140,9 +137,6 @@
                 <div class="col-title">
                     <span>{{$t('schoolBaseInfo.subjectSetting')}}</span>
                     <Icon type="md-add" @click="addSubject()" class="action-btn-icon" v-if="$access.ability('admin','schoolSetting-upd').validateAll"/>
-                    <!--<div>
-                    <Icon type="md-trash" v-show="subjectSelectList.length" />
-                </div>-->
                 </div>
                 <div class="grade-body">
                     <div class="grade-item item-active" v-for="(item,index) in schoolSetting.period[currentSchoolSysIndex].subjects" :key="index">
@@ -155,7 +149,7 @@
                 </div>
             </div>
         </div>
-        <Modal v-model="campusStatus" class="campus-modal" :mask-closable="false" @on-cancel="cancelCampus" @on-ok="confirmCampus">
+        <Modal v-model="campusStatus" class="campus-modal dark-iview-modal" @on-cancel="cancelCampus" @on-ok="confirmCampus">
             <p slot="header" style="color:#DDDDDD;letter-spacing:2px;font-weight:400;">设置校区</p>
             <p v-for="(item,index) in schoolSetting.campuses" class="campus-name-item">
                 <Icon type="md-checkmark" size="20" style="margin-right:10px;position:absolute;left:15px;" v-if="index == selectedCampusIndex" />
@@ -173,8 +167,8 @@
         </Modal>
         <Modal v-model="delSemesterStatus"
                title="删除学期"
-               @on-ok="delSemester(currentSemesterIndex)">
-            <p>确认删除 {{schoolSetting.period[currentSchoolSysIndex].semesters[currentSemesterIndex].semesterName}} 吗?</p>
+               @on-ok="delSemester(curSemIndex)">
+            <p>确认删除 {{schoolSetting.period[currentSchoolSysIndex].semesters[curSemIndex].semesterName}} 吗?</p>
         </Modal>
     </div>
 
@@ -204,7 +198,7 @@
                 auto: true,
                 updated: false,
                 currentSchoolSysIndex: 0,
-                currentSemesterIndex: 0,
+                curSemIndex: 0,
                 isInit: true,
                 schoolSetting: {
                     schoolCode: '',
@@ -213,22 +207,12 @@
                     campuses: []
                 },
                 tabIndex: 0,
-                periodList: [
-                    {
-                        name: '紫藤小学北区'
-                    }
-                ],
+                editSemIndex: -1,
                 termList: [],
-                gradeList: [],
-                subjectList: [],
-                monthList: [],
                 monthEnList: [],
-                dayList: [],
                 colorList: [],
                 gradeSelectList: [],
                 subjectSelectList: [],
-                termMonthVal: 1,
-                termDayVal: 1,
                 TERM_MAX_LENGTH: 3, // 学期数上限
                 campusStatus: false,
                 selectedCampusIndex: -1
@@ -309,12 +293,12 @@
             //删除学段
             delPeriod(index) {
                 if (this.currentSchoolSysIndex >= index && index > 0) {
-                    this.currentSemesterIndex = 0
+                    this.curSemIndex = 0
                     this.currentSchoolSysIndex = 0
                 }
                 if (this.schoolSetting.period.length > 1) {
                     this.currentSchoolSysIndex = 0
-                    this.currentSemesterIndex = 0
+                    this.curSemIndex = 0
                     this.schoolSetting.period.splice(index, 1)
                     setTimeout(() => {
                         this.updated = false
@@ -328,7 +312,7 @@
             delSemester(index) {
                 if (this.schoolSetting.period[this.currentSchoolSysIndex].semesters.length > 1) {
                     this.currentSchoolSysIndex = 0
-                    this.currentSemesterIndex = 0
+                    this.curSemIndex = 0
                     this.schoolSetting.period[this.currentSchoolSysIndex].semesters.splice(index, 1)
                 } else {
                     this.$Message.warning(this.$t('schoolBaseInfo.ssTips2'))
@@ -391,11 +375,14 @@
             },
             //选择学期
             chooseSemester(index) {
-                this.currentSemesterIndex = index
+                if (index != this.curSemIndex) {
+                    this.editSemIndex = -1
+                    this.curSemIndex = index
+                }
             },
             //选择学段
             choosePeriod(index) {
-                this.currentSemesterIndex = 0
+                this.curSemIndex = 0
                 this.currentSchoolSysIndex = index
                 for (let item in this.schoolSetting.campuses) {
                     if (this.schoolSetting.campuses[item].campusCode === this.schoolSetting.period[this.currentSchoolSysIndex].campusCode) {
@@ -558,7 +545,9 @@
                 this.$refs.schoolName.handleEdit()
             },
             changeSemesterStatus(index) {
-                this.$refs.semesterName[index].handleEdit()
+                //this.$refs.semesterName[index].handleEdit()
+                this.editSemIndex = index
+
             },
             addSubject() {
                 if (this.termList.length < this.TERM_MAX_LENGTH) {
@@ -630,7 +619,7 @@
             handleAddTerm() {
                 if (this.termList.length < this.TERM_MAX_LENGTH) {
                     let newTerm = Object.assign({}, defaultTerm)
-                    let defMonth = this.schoolSetting.period[this.currentSchoolSysIndex].semesters.length == 0 ? 1 : this.schoolSetting.period[this.currentSchoolSysIndex].semesters[this.currentSemesterIndex].month + 1
+                    let defMonth = this.schoolSetting.period[this.currentSchoolSysIndex].semesters.length == 0 ? 1 : this.schoolSetting.period[this.currentSchoolSysIndex].semesters[this.curSemIndex].month + 1
                     this.schoolSetting.period[this.currentSchoolSysIndex].semesters.push({
                         semesterName: this.$t('schoolBaseInfo.persetSemester') + (this.schoolSetting.period[this.currentSchoolSysIndex].semesters.length + 1),
                         studentCount: '学生人数',
@@ -743,11 +732,6 @@
             }
         },
         mounted() {
-            this.monthList = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
-            // this.monthList = [...Array(12).keys()];
-            this.gradeList = ['一年级', '二年级', '三年级', '四年级', '五年级']
-            this.subjectList = ['语文', '数学', '外语', '化学', '物理', '语文', '数学', '外语', '化学', '物理']
-            this.dayList = [...Array(30).keys()]
             this.monthEnList = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']
             this.colorList = ['#F16C6A', '#68CDF1', '#00796B', '#7C4DFF', '#0288D1', '#D32F2F', '#00796B', '#7C4DFF', '#0288D1', '#D32F2F', '#00796B', '#7C4DFF']
         },
@@ -757,10 +741,10 @@
                 if (this.schoolSetting.period[this.currentSchoolSysIndex].semesters.length == 1) {
                     end = 12
                     this.auto = true
-                } else if (this.currentSemesterIndex + 1 < this.schoolSetting.period[this.currentSchoolSysIndex].semesters.length) {
-                    end = this.schoolSetting.period[this.currentSchoolSysIndex].semesters[this.currentSemesterIndex + 1].month
+                } else if (this.curSemIndex + 1 < this.schoolSetting.period[this.currentSchoolSysIndex].semesters.length) {
+                    end = this.schoolSetting.period[this.currentSchoolSysIndex].semesters[this.curSemIndex + 1].month
                     this.auto = true
-                } else if (this.currentSemesterIndex + 1 == this.schoolSetting.period[this.currentSchoolSysIndex].semesters.length) {
+                } else if (this.curSemIndex + 1 == this.schoolSetting.period[this.currentSchoolSysIndex].semesters.length) {
                     end = this.schoolSetting.period[this.currentSchoolSysIndex].semesters[0].month
                     this.auto = false
                 }
@@ -780,37 +764,9 @@
 
 <!-- 覆盖iview样式 -->
 <style>
-    .term-item-start .ivu-select {
-        width: 60px;
-        color: rgb(191, 191, 191);
-        margin: 0 10px;
-    }
-
-    .term-item-start .ivu-select-selected-value {
-        font-size: 16px !important;
-    }
-
-    .term-item-start .ivu-select-selection {
-        background: #333333;
-        border-color: rgba(196,196,196,.2);
-        border-radius: 8px;
-    }
-
-    .term-item-start .ivu-select-arrow {
-        /*top:72%;*/
-    }
-
-    .campus-modal .ivu-modal-content {
-        background-color: #383838 !important;
-        /*height: 750px;*/
-    }
-
-    .campus-modal .ivu-modal-header {
-        border-color: #454545;
-        background-color: #383838;
-    }
-
-    .campus-modal .ivu-modal-footer {
-        border: none;
+    .semester-name-label .ivu-input[disabled] {
+        font-size: 20px !important;
+        font-weight: bold;
+        color: white;
     }
 </style>

+ 0 - 1
TEAMModelOS/ClientApp/src/view/selflearning/ActivityReport.less

@@ -1 +0,0 @@
-

+ 0 - 20
TEAMModelOS/ClientApp/src/view/selflearning/ActivityReport.vue

@@ -1,20 +0,0 @@
-<template>
-    <div>
-        <h1 style="text-align:center; color:#808080;padding-top:300px;">学习活动仪表正在开发中,敬请期待!</h1>
-    </div>
-</template>
-<script>
-    export default {
-        data() {
-            return {
-
-            }
-        }
-    }
-</script>
-<style scoped lang="less">
-    @import "./ActivityReport.less";
-</style>
-<style lang="less">
-
-</style>

+ 0 - 67
TEAMModelOS/ClientApp/src/view/selflearning/CreateHomeWork.less

@@ -1,67 +0,0 @@
-@main-bgColor: rgb(40,40,40); //主背景颜色
-@borderColor: #424242;
-@primary-textColor: #fff; //文本主颜色
-@second-textColor: #a5a5a5; //文本副级颜色
-@primary-fontSize: 14px;
-@second-fontSize: 16px;
-
-.create-self-container {
-    width: 100%;
-    height: 100%;
-
-    .create-self-header {
-        width: 100%;
-        height: 45px;
-        line-height: 45px;
-        padding: 0px 15px;
-        border-bottom: 1px solid @borderColor;
-    }
-
-    .create-self-main{
-        width:100%;
-        height:~"calc(100% - 45px)";
-        display:flex;
-        flex-direction:row;
-    }
-}
-.create-self-header {
-    &-label {
-        color: #fff;
-        font-size: 16px;
-    }
-}
-.btn-save {
-    color: rgb(107, 223, 195);
-    float: right;
-    cursor: pointer;
-    margin-top: 6px;
-    margin-right: 15px;
-}
-.create-self-main {
-    .self-base-info-box {
-        width: 350px;
-        height: 100%;
-        border-right: 1px solid @borderColor;
-        padding-left: 15px;
-
-        .self-base-info-header {
-            width: 100%;
-            height: 40px;
-            color: @second-textColor;
-            line-height: 40px;
-            border-bottom: 1px solid @borderColor;
-        }
-    }
-
-    .self-content-box {
-        width: ~"calc(100% - 350px)";
-        height: 100%;
-        padding-left: 15px;
-        .self-content-box-header{
-            height:40px;
-            line-height:40px;
-            color:@second-textColor;
-            border-bottom:1px solid @borderColor;
-        }
-    }
-}

+ 0 - 43
TEAMModelOS/ClientApp/src/view/selflearning/CreateHomeWork.vue

@@ -1,43 +0,0 @@
-<template>
-    <div class="create-self-container">
-        <div class="create-self-header">
-            <span class="create-self-header-label">创建作业活动</span>
-            <Button class="btn-save" type="text" :loading="isLoading" ghost icon="ios-albums-outline" @click="saveData">保存数据</Button>
-        </div>
-        <div class="create-self-main">
-            <div class="self-base-info-box">
-                <div class="self-base-info-header">
-                    <span>基础信息</span>
-                </div>
-            </div>
-            <div class="self-content-box">
-                <!--<div class="self-content-box-header">
-                    <span>自学内容</span>
-                </div>-->
-            </div>
-        </div>
-    </div>
-</template>
-<script>
-    export default {
-        data() {
-            return {
-                isLoading: false,
-
-            }
-        },
-        methods: {
-            saveData() {
-                this.isLoading = true
-                setTimeout(() => {
-                    this.isLoading = false
-                },2000)
-            }
-        }
-    }
-</script>
-<style lang="less" scoped>
-    @import "./CreateHomeWork.less";
-</style>
-<style>
-</style>

+ 0 - 137
TEAMModelOS/ClientApp/src/view/selflearning/CreateSelfLearn.less

@@ -1,137 +0,0 @@
-@main-bgColor: rgb(40,40,40); //主背景颜色
-@borderColor: #424242;
-@primary-textColor: #fff; //文本主颜色
-@second-textColor: #a5a5a5; //文本副级颜色
-@primary-fontSize: 14px;
-@second-fontSize: 16px;
-
-.create-self-container {
-    width: 100%;
-    height: 100%;
-
-    .create-self-header {
-        width: 100%;
-        height: 45px;
-        line-height: 45px;
-        padding: 0px 15px;
-        border-bottom: 1px solid @borderColor;
-    }
-
-    .create-self-main{
-        width:100%;
-        height:~"calc(100% - 45px)";
-        display:flex;
-        flex-direction:row;
-    }
-}
-.create-self-header {
-    &-label {
-        color: #fff;
-        font-size: 16px;
-    }
-}
-.btn-save {
-    color: rgb(107, 223, 195);
-    float: right;
-    cursor: pointer;
-    margin-top: 6px;
-    margin-right: 15px;
-}
-.create-self-main {
-    .self-base-info-box {
-        width: 350px;
-        height: 100%;
-        border-right: 1px solid @borderColor;
-        padding-left: 15px;
-
-        .self-base-info-header {
-            width: 100%;
-            height: 40px;
-            color: @second-textColor;
-            line-height: 40px;
-            border-bottom: 1px solid @borderColor;
-        }
-
-        .base-info-form {
-            width: 100%;
-            height: calc(100% - 45px);
-            padding-top: 30px;
-            padding-right: 15px;
-        }
-    }
-
-    .self-content-box {
-        width: ~"calc(100% - 350px)";
-        height: 100%;
-        padding-left: 15px;
-
-        .self-content-box-header {
-            height: 40px;
-            line-height: 40px;
-            color: @second-textColor;
-            border-bottom: 1px solid @borderColor;
-        }
-
-        .add-step-type-label {
-            padding: 6px 4px;
-            cursor: pointer;
-
-            &:hover {
-                color: aqua;
-            }
-        }
-    }
-}
-.learn-step-box{
-    width:100%;
-    height:100%;
-    .learn-step-header{
-        height:40px;
-        line-height:40px;
-        color:@second-textColor;
-        border-bottom:1px solid @borderColor;
-    }
-}
-.learn-step-content {
-    padding-left: 15px;
-    width:100%;
-    height:100%;
-    .learn-step-content-header {
-        height: 40px;
-        width: 100%;
-        line-height: 40px;
-        border-bottom: 1px solid @borderColor;
-        color: @second-textColor;
-    }
-}
-.edit-step-name-icon {
-    display: none;
-    cursor: pointer;
-    margin-right:16px;
-    color:white;
-}
-
-.content-type-label {
-    color: white;
-    line-height: 13px;
-    margin: 10px 0px 5px 0px;
-    padding: 5px;
-    padding-left: 8px;
-    border-left: 2px solid white;
-    background: #333333;
-}
-
-.content-file-wrap {
-    height: fit-content;
-    padding-bottom: 20px;
-    color: white;
-    margin-bottom: 10px;
-}
-
-.content-question-wrap {
-    min-height: 200px;
-    padding: 10px 0px 20px 0px;
-}
-.content-file-item {
-    margin-bottom: 4px;
-}

+ 0 - 500
TEAMModelOS/ClientApp/src/view/selflearning/CreateSelfLearn.vue

@@ -1,500 +0,0 @@
-<template>
-    <div class="create-self-container">
-        <div class="create-self-header">
-            <span class="create-self-header-label">创建自主学习</span>
-            <Button class="btn-save" type="text" :loading="isLoading" ghost icon="ios-albums-outline" @click="saveData">保存数据</Button>
-        </div>
-        <div class="create-self-main">
-            <div class="self-base-info-box">
-                <div class="self-base-info-header">
-                    <span>基础信息</span>
-                </div>
-                <!--<vuescroll>  -->
-                <div class="base-info-form dark-iview-input dark-iview-select">
-                    <Form ref="selfLearnInfo" :model="selfLearnInfo" label-position="top" class="evaluation-attr-form" :rules="ruleValidate" label-colon>
-                        <FormItem label="活动名称" prop="name">
-                            <Input v-model="selfLearnInfo.name"></Input>
-                        </FormItem>
-                        <FormItem label="学段" prop="periodCode">
-                            <Select v-model="selfLearnInfo.periodCode">
-                                <Option v-for="(item,index) in $store.state.schoolBaseInfo.schoolBaseInfo.period" :value="item.periodCode" :key="index">{{ item.periodName }}</Option>
-                            </Select>
-                        </FormItem>
-                        <FormItem label="科目" prop="subjectCode">
-                            <Select v-model="selfLearnInfo.subjectCode" not-found-text="请先选择学段">
-                                <Option v-for="(item,index) in $jsFn.getPeriod($store.state.schoolBaseInfo.schoolBaseInfo,selfLearnInfo.periodCode).subjects" :value="item.subjectCode" :key="index">{{ item.subjectName }}</Option>
-                            </Select>
-                        </FormItem>
-                        <FormItem label="学习对象" prop="target">
-                            <Select v-model="selfLearnInfo.target">
-                                <Option v-for="(item,index) in classroomList" :value="item" :key="index">{{ item }}</Option>
-                            </Select>
-                        </FormItem>
-                        <FormItem label="截止时间" prop="expire">
-                            <DatePicker type="date" placeholder="设置截止时间" style="width:100%;"></DatePicker>
-                        </FormItem>
-                        <FormItem label="闯关模式" prop="isOrder">
-                            <div slot="label" style="display:inline-block;">
-                                <span>闯关模式:</span>
-                                <Tooltip trigger="hover" content="是否必须通过阶段测试才能进入下一阶段学习" theme="light" placement="right" max-width="200">
-                                    <Icon type="md-help" color="white" style="cursor:pointer;" />
-                                </Tooltip>
-                            </div>
-                            <RadioGroup v-model="selfLearnInfo.isOrder" style="color:#aaaaaa;">
-                                <Radio label="1">是</Radio>
-                                <Radio label="0" style="margin-left:30px;">否</Radio>
-                            </RadioGroup>
-                        </FormItem>
-
-                        <FormItem label="活动说明" prop="introduce">
-                            <Input v-model="selfLearnInfo.introduce" type="textarea" :rows="6"></Input>
-                        </FormItem>
-                    </Form>
-                </div>
-
-                <!--</vuescroll>-->
-            </div>
-            <div class="self-content-box dark-iview-split">
-                <Split v-model="split1">
-                    <div slot="left" class="learn-step-box dark-iview-table">
-                        <div class="learn-step-header">
-                            <span>自学步骤</span>
-                            <Tooltip style="float:right;" placement="left">
-                                <Icon style="margin-right:15px;cursor:pointer;" type="md-add" size="20" color="white" />
-                                <div slot="content">
-                                    <p class="add-step-type-label" @click="toggleSelectUnit"><Icon type="ios-pricetag-outline" size="18" style="margin-right:5px;" />选择最小单元</p>
-                                    <p class="add-step-type-label" @click="toggleSelectOrder"><Icon type="ios-list" size="20" style="margin-right:5px;" />选择编序式教材</p>
-                                    <p class="add-step-type-label" @click="addCustomStatus = true"><Icon type="ios-hand-outline" size="18" style="margin-right:5px;" />手动选择内容</p>
-                                </div>
-                            </Tooltip>
-                        </div>
-                        <Table draggable :columns="columns" :data="selfLearnInfo.steps" @on-drag-drop="dragOrder" @on-row-click="getCurrentItem" :row-class-name="setClassName" style="width:100%;" :show-header="false">
-                            <template slot-scope="{ row, index }" slot="name">
-                                <Icon type="ios-pricetags" color="white" style="margin-right:8px;" />
-                                <span class="learn-step-name">{{row.name}}</span>
-                            </template>
-                            <template slot-scope="{ row, index }" slot="action">
-                                <Icon type="md-create" class="edit-step-name-icon" @click="editSName(index)" />
-                                <Icon type="md-trash" class="edit-step-name-icon" @click="deleteStep(index)" />
-                            </template>
-                        </Table>
-                    </div>
-                    <div slot="right" class="learn-step-content">
-                        <div class="learn-step-content-header">
-                            <span>
-                                自学资源
-                            </span>
-                        </div>
-                        <div style="height:calc(100% - 45px);" v-if="selfLearnInfo.steps.length !== 0">
-                            <vuescroll>
-                                <p class="content-type-label">内容:{{selfLearnInfo.steps[stepIndex].resource.length}}个</p>
-                                <div class="content-file-wrap">
-                                    <ContentFileList :resources="selfLearnInfo.steps[stepIndex].resource"></ContentFileList>
-                                </div>
-                                <p class="content-type-label">题目:{{selfLearnInfo.steps[stepIndex].item.length}}道</p>
-                                <div class="content-question-wrap">
-                                    <EmptyData v-if="selfLearnInfo.steps[stepIndex].item.length == 0" style="margin-top:30px;"></EmptyData>
-                                    <QuestionList v-else :questions="selfLearnInfo.steps[stepIndex].item"></QuestionList>
-                                </div>
-                            </vuescroll>
-                        </div>
-                        <EmptyData style="margin-top:30px;" v-if="selfLearnInfo.steps.length == 0"></EmptyData>
-                    </div>
-                </Split>
-            </div>
-        </div>
-        <Modal v-model="selectUnitStatus"
-               title="选择最小单元"
-               class="dark-iview-modal"
-               width="960"
-               @on-ok="confirmSelectUnit">
-            <SelectLearnUnit @selectUnit="getSelectedUnit"></SelectLearnUnit>
-        </Modal>
-        <Modal v-model="selectOrderStatus"
-               title="选择编序式教材"
-               width="960"
-               class="dark-iview-modal"
-               @on-ok="confirmSelectOrder">
-            <SelectOrderLearn @selectOrderLearn="getSelectdOrderLearn"></SelectOrderLearn>
-        </Modal>
-        <Modal v-model="addCustomStatus"
-               title="自定义选择内容"
-               width="960"
-               class="dark-iview-modal dark-iview-input"
-               @on-ok="confirmAddCustom">
-            <span>名称:</span>
-            <Input v-model="newStepName" placeholder="请输入名称..." style="width: calc(100% - 50px);" />
-            <div style="width:100%; height:660px;margin-top:15px;">
-                <ChooseContent></ChooseContent>
-            </div>
-        </Modal>
-        <Modal v-model="editStepStatus"
-               title="修改名称"
-               class="dark-iview-modal dark-iview-input"
-               @on-ok="confirmEditStep">
-            <span>名称:</span>
-            <Input v-model="editStepName" placeholder="请输入名称..." style="width: calc(100% - 50px);" />
-        </Modal>
-        <Modal v-model="goToManageStatus"
-               title="管理自学活动"
-               ok-text="是"
-               cancel-text="否"
-               @on-ok="confirmToManage">
-            <p>自学活动保存成功,是否跳转到管理页面查看?</p>
-        </Modal>
-    </div>
-</template>
-<script>
-    import ChooseContent from '@/components/learnactivity/ChooseContent.vue'
-    import QuestionList from '@/components/learnactivity/QuestionList.vue'
-    import SelectLearnUnit from '@/components/learnactivity/SelectLearnUnit.vue'
-    import SelectOrderLearn from '@/components/learnactivity/SelectOrderLearn.vue'
-    
-    import ContentFileList from '@/components/learnactivity/ContentFileList.vue'
-    export default {
-        components: {
-            ChooseContent,
-            
-            QuestionList,
-            SelectLearnUnit,
-            SelectOrderLearn,
-            ContentFileList
-        },
-        data() {
-            return {
-                goToManageStatus: false,
-                selectedOrderLearn: [],
-                selectedUnit:[],
-                editStepName: '',
-                stepIndex: 0,
-                newStepName: '',
-                ruleValidate: {
-                    name: [
-                        { required: true, message: '请完善活动名称', trigger: 'change' }
-                    ],
-                    periodCode: [
-                        { required: true, message: '请选择学段', trigger: 'change' }
-                    ],
-                    subjectCode: [
-                        { required: true, message: '请选择学科', trigger: 'change' }
-                    ],
-                    isOrder: [
-                        { required: true, message: '请选择模式', trigger: 'change' }
-                    ],
-                    //target: [
-                    //    { required: true, message: '请选择发布对象', trigger: 'change' }
-                    //],
-                    introduce: [
-                        { required: true, message: '请完善说明信息', trigger: 'change' }
-                    ]
-                },
-                editStepStatus: false,
-                selectUnitStatus: false,
-                selectOrderStatus: false,
-                addCustomStatus: false,
-                split1: 0.2,
-                isLoading: false,
-                selfLearnInfo: {
-                    name: '',
-                    periodCode: '',
-                    subjectCode: '',
-                    target: [],
-                    isOrder: '',
-                    creator: '',
-                    introduce: '',
-                    expire: 0,
-                    steps: []
-                },
-                addStepStatus: false,
-                classroomList: [],
-                isLoading: false,
-                columns: [
-                    {
-                        title: '',
-                        slot: 'name',
-                        ellipsis: true
-                    },
-                    {
-                        title: '',
-                        slot: 'action',
-                        width: 80,
-                        align: 'right'
-                    }
-                ],
-            }
-        },
-        methods: {
-            confirmToManage() {
-                this.$router.push({
-                    name: 'manageSelfLearn'
-                })
-            },
-            /**
-             * 处理SelectLearnUnit组件选择事件
-             * @param data
-             */
-            getSelectedUnit(data) {
-                this.selectedUnit = data
-            },
-            confirmSelectUnit() {
-                let itemPromise = []
-                let resourcePromise = []
-                for (let i = 0; i < this.selectedUnit.length; i++) {
-                    itemPromise.push(this.$api.learnActivity.FindQuestionById(this.selectedUnit[i].item))
-                    resourcePromise.push(this.$api.learnActivity.FindSyllabusResourceById(this.selectedUnit[i].resource))
-                }
-                Promise.all(itemPromise).then(
-                    itemRes => {
-                        console.log('itemRes')
-                        console.log(itemRes)
-                        Promise.all(resourcePromise).then(
-                            resourceRes => {
-                                console.log('resourceRes')
-                                console.log(resourceRes)
-                                for (let i = 0; i < this.selectedUnit.length; i++) {
-                                    this.selectedUnit[i].item = itemRes[i].result.data
-                                    this.selectedUnit[i].resource = resourceRes[i].result.data
-                                }
-                                this.selfLearnInfo.steps.push(...this.selectedUnit)
-                                console.log(this.selfLearnInfo)
-                                this.selectedUnit.length = 0
-                            },
-                            err => {
-                                console.log('err')
-                                console.log(err)
-                            }
-                        )
-                    },
-                    err => {
-                        console.log('err')
-                        console.log(err)
-                    }
-                )
-            },
-            /**
-             * 处理SelectOrderLearn组件选择事件
-             * @param data
-             */
-            getSelectdOrderLearn(data) {
-                this.selectedOrderLearn = data
-            },
-            confirmSelectOrder() {
-                let itemPromise = []
-                let resourcePromise = []
-                console.log(this.selectedOrderLearn)
-                for (let i = 0; i < this.selectedOrderLearn.length; i++) {
-                    for (let j = 0; j < this.selectedOrderLearn[i].steps.length; j++) {
-                        itemPromise.push(this.$api.learnActivity.FindQuestionById(this.selectedOrderLearn[i].steps[j].item))
-                        resourcePromise.push(this.$api.learnActivity.FindSyllabusResourceById(this.selectedOrderLearn[i].steps[j].resource))
-                    }
-                }
-                Promise.all(itemPromise).then(
-                    itemRes => {
-                        console.log('itemRes')
-                        console.log(itemRes)
-                        Promise.all(resourcePromise).then(
-                            resourceRes => {
-                                console.log('resourceRes')
-                                console.log(resourceRes)
-                                for (let i = 0; i < this.selectedOrderLearn.length; i++) {
-                                    for (let j = 0; j < this.selectedOrderLearn[i].steps.length; j++) {
-                                        let index = i * this.selectedOrderLearn.length + j
-                                        console.log(index)
-                                        this.selectedOrderLearn[i].steps[j].item = itemRes[index].result.data
-                                        this.selectedOrderLearn[i].steps[j].resource = resourceRes[index].result.data
-                                    }
-                                    this.selfLearnInfo.steps.push(...this.selectedOrderLearn[i].steps)
-                                }
-                                this.selectedOrderLearn.length = 0
-                            },
-                            err => {
-                                console.log('err')
-                                console.log(err)
-                            }
-                        )
-                    },
-                    err => {
-                        console.log('err')
-                        console.log(err)
-                    }
-                )
-                
-            },
-            /**
-             * 通过id查询题目信息
-             * */
-            findQuestionById(ids) {
-                if (ids.length > 0) {
-                    this.listLoading = true
-                    this.$api.learnActivity.FindQuestionById(ids).then(
-                        res => {
-                            if (res.error == null) {
-                                return res.result.data
-                            } else {
-                                this.$Message.error("API ERROR!")
-                            }
-                            setTimeout(() => {
-                                this.listLoading = false
-                            }, 500)
-                        },
-                        err => {
-                            this.$Message.error("API ERROR!")
-                            setTimeout(() => {
-                                this.listLoading = false
-                            }, 1000)
-                        }
-                    )
-                }
-            },
-            /**
-             * 通过id查询内容信息
-             * */
-            findResourceById(ids) {
-                if (ids.length > 0) {
-                    this.listLoading = true
-                    this.$api.learnActivity.FindSyllabusResourceById(ids).then(
-                        res => {
-                            if (res.error == null) {
-                                return res.result.data
-                            } else {
-                                this.$Message.error("API ERROR!")
-                            }
-                            setTimeout(() => {
-                                this.listLoading = false
-                            }, 500)
-                        },
-                        err => {
-                            this.$Message.error("API ERROR!")
-                            setTimeout(() => {
-                                this.listLoading = false
-                            }, 500)
-                        }
-                    )
-                }
-            },
-            deleteStep(index) {
-                this.$Modal.confirm({
-                    title: '删除',
-                    content: '是否确定删除此学习步骤',
-                    okText: '是',
-                    cancelText: '否',
-                    onOk: () => {
-                        this.selfLearnInfo.steps.splice(index, 1)
-                    }
-                })
-            },
-            confirmEditStep() {
-                this.selfLearnInfo.steps[this.stepIndex].name = this.editStepName
-            },
-            editSName(index) {
-                this.editStepName = this.selfLearnInfo.steps[index].name
-                this.editStepStatus = true
-            },
-            getCurrentItem(row, index) {
-                this.stepIndex = index
-            },
-            setClassName(row, index) {
-                if (index == this.stepIndex) {
-                    return 'ivu-table-row-highlight'
-                }
-            },
-            /**
-             * table拖拽调整顺序
-             * @param index1
-             * @param index2
-             */
-            dragOrder(index1, index2) {
-                if (index1 > index2) {
-                    let item = this.selfLearnInfo.steps[index1];
-                    this.selfLearnInfo.steps.splice(index1, 1);
-                    this.selfLearnInfo.steps.splice(index2, 0, item);
-                } else if (index1 < index2) {
-                    let item = this.selfLearnInfo.steps[index1];
-                    this.selfLearnInfo.steps.splice(index2, 0, item);
-                    this.selfLearnInfo.steps.splice(index1, 1);
-                }
-            },
-            
-            
-            confirmAddCustom() {
-                this.selfLearnInfo.steps.push(
-                    {
-                        name: this.newStepName,
-                        resource: [],
-                        item: []
-                    }
-                )
-                this.newStepName = ''
-            },
-            toggleSelectUnit() {
-                this.selectUnitStatus = true
-            },
-            toggleSelectOrder() {
-                this.selectOrderStatus = true
-            },
-            checkData() {
-                let flag = true
-                this.$refs.selfLearnInfo.validate((valid) => {
-                    if (!valid) {
-                        flag = false
-                    }
-                })
-                return flag
-            },
-            saveData() {
-                let check = this.checkData()
-                if (check) {
-                    this.isLoading = true
-                    this.selfLearnInfo.code = this.$store.state.userInfo.TEAMModelId
-                    this.selfLearnInfo.creator = this.$store.state.userInfo.TEAMModelId
-                    this.$api.learnActivity.SaveSelfLearn([this.selfLearnInfo]).then(
-                        res => {
-                            if (res.error == null) {
-                                this.selfLearnInfo.id = res.result.data.id
-                                this.goToManageStatus = true
-                            } else {
-                                this.$Message.error("API ERROR!")
-                            }
-                            this.isLoading = false
-                        },
-                        err => {
-                            this.isLoading = false
-                        }
-                    )   
-                } else {
-                    this.$Message.error("请先完成必填信息")
-                }
-            }
-        },
-        created() {
-            let routerData = this.$route.params.selfLearnInfo
-            if (routerData != undefined) {
-                this.selfLearnInfo = routerData
-            }
-        }
-    }
-</script>
-<style lang="less" scoped>
-    @import "./CreateSelfLearn.less";
-</style>
-<style>
-    .learn-step-header .ivu-tooltip-inner {
-        background-color: rgba(70,76,91,1);
-    }
-
-    .base-info-form .ivu-form .ivu-form-item-label {
-        color: #A5A5A5;
-    }
-
-    .learn-step-box .ivu-table-row-highlight {
-        background-image: linear-gradient(90deg, rgba(30, 30, 30, 0) 0%, rgba(110, 110, 110, 0.2) 50%, rgba(110, 110, 110, 0.4) 100%);
-    }
-
-    .learn-step-box .ivu-table-row-hover .edit-step-name-icon {
-        display: inline-block;
-    }
-
-    .learn-step-box .ivu-table-row-hover td {
-        background: none !important;
-    }
-</style>

+ 0 - 111
TEAMModelOS/ClientApp/src/view/selflearning/LearnProgress.less

@@ -1,111 +0,0 @@
-@main-bgColor: rgb(40,40,40); //主背景颜色
-@borderColor: #424242;
-@primary-textColor: #fff; //文本主颜色
-@second-textColor: #a5a5a5; //文本副级颜色
-@primary-fontSize: 14px;
-@second-fontSize: 16px;
-
-.learn-progress-container {
-    width: 100%;
-    height: 100%;
-
-    .learn-progress-main {
-        width: 100%;
-        height: ~"calc(100% - 45px)";
-        padding-right: 10px;
-
-        .whole-progress-wrap {
-            width: 100%;
-            height: 300px;
-            display: flex;
-            flex-direction: row;
-
-            .progress-histogram-wrap {
-                width: 50%;
-                height: 100%;
-            }
-
-            .progress-detail-wrap {
-                width: 22%;
-                height: 100%;
-                color: white;
-                padding-right: 20px;
-                display:table;
-                padding-top:10px;
-                .student-type-label {
-                    font-size: 16px;
-                    color: #69efef;
-                    border-left: 3px solid #69efef;
-                    line-height: 14px;
-                    padding-left:5px;
-                    display: inline-block;
-                }
-
-                .student-name-wrap {
-                    color: #aaaaaa;
-                    font-size: 14px;
-                    margin-top: 10px;
-                    line-height:30px;
-                }
-            }
-        }
-    }
-}
-.learn-progress-filter {
-    width: ~"calc(100% - 40px)";
-    height: 40px;
-    line-height: 40px;
-    background: rgba(50, 50, 50, .6);
-    padding-left: 4px;
-    border-radius: 5px;
-    margin:auto;
-    /*margin-bottom: 20px;*/
-
-    .filter-label {
-        color: white;
-    }
-
-    .right-filter-wrap {
-        display: inline-block;
-        float: right;
-    }
-}
-.radio-box-wrap {
-    display: inline-block;
-    float: right;
-    margin-right: 55px;
-    margin-left: 30px;
-
-    .active-radio-box-item {
-        background: white;
-        color: black !important;
-    }
-
-    .radio-box-item {
-        color: white;
-
-        &:first-child {
-            border-top-left-radius: 5px;
-            border-bottom-left-radius: 5px;
-        }
-
-        &:last-child {
-            border-top-right-radius: 5px;
-            border-bottom-right-radius: 5px;
-            border-left: 0px;
-        }
-
-        line-height: 10px;
-        display: inline-block;
-        padding: 2px 10px;
-        border: 1px solid white;
-        cursor: pointer;
-    }
-}
-.to-detail-info {
-    cursor: pointer;
-    text-decoration: underline;
-}
-.to-detail-info:hover {
-    color: aqua;
-}

+ 0 - 240
TEAMModelOS/ClientApp/src/view/selflearning/LearnProgress.vue

@@ -1,240 +0,0 @@
-<template>
-    <div class="learn-progress-container">
-        <div class="learn-progress-main dark-iview-table">
-            <vuescroll>
-                <p style="color:#EEEEEE;padding-left:15px;font-size:16px;margin-top:15px;">活动进度概览</p>
-                <div class="whole-progress-wrap">
-                    <div class="progress-histogram-wrap" style="margin:auto;">
-                        <!--<ProgressHistogram @clickStep="clickStep"></ProgressHistogram>-->
-                    </div>
-                </div>
-                <p style="color:#EEEEEE;padding-left:15px;font-size:16px;margin-top:50px;margin-bottom:30px;">
-                    学生进度概览
-                </p>
-                <div class="learn-progress-filter dark-iview-select">
-                    <span class="filter-label">搜学生:</span>
-                    <Select v-model="model11" filterable style="display: inline-block;width: 200px;" size="small">
-                        <Option v-for="item in studentList" :value="item.value" :key="item.value">{{ item.label }}</Option>
-                    </Select>
-                    <!--<span class="filter-label" style="margin-left:30px;">选班级:</span>
-                    <Select v-model="model11" filterable style="display:inline-block;width:200px;" size="small">
-                        <Option v-for="item in classroomList" :value="item.value" :key="item.value">{{ item.label }}</Option>
-                    </Select>-->
-                </div>
-                <Table :columns="studentColumns" :data="studentPageData" :show-header="true" style="margin:0px 25px;">
-                    <template slot-scope="{ row, index }" slot="isComplete">
-                        <Icon size="20" type="md-checkmark" color="aqua" v-if="row.isComplete == 1" />
-                        <span v-else>--</span>
-                    </template>
-                    <template slot-scope="{ row, index }" slot="progress">
-                        <Progress :percent="50" status="normal" />
-                    </template>
-                    <template slot-scope="{ row, index }" slot="question">
-                        <div>
-                            <span title="提问/留言 次数">
-                                <Icon type="ios-create" size="16"/>5
-                            </span>
-                            <span style="color:rgb(45, 241, 142);margin-left:10px;">
-                                <Icon type="md-thumbs-up" />32
-                            </span>
-                            <span style="color:#f90;margin-left:10px;">
-                                <Icon type="md-thumbs-down" />10
-                            </span>
-                        </div>
-                    </template>
-                    <template slot-scope="{ row, index }" slot="action">
-                        <span @click="goToAnswer" class="to-detail-info">查看详情</span>
-                    </template>
-                </Table>
-                <div style="width:100%;text-align:center;margin-top:20px;" class="dark-iview-page">
-                    <Page :total="studentData.length" size="small" :current.sync="currentPage" :page-size="pageSize" show-sizer show-total @on-change="getPageData" @on-page-size-change="getPageData($event,'size')"/>
-                </div>
-            </vuescroll>
-        </div>
-    </div>
-</template>
-<script>
-    //import ProgressHistogram from '@/components/learnactivity/ProgressHistogram.vue'
-    export default {
-        //components: {
-        //    ProgressHistogram
-        //},
-        data() {
-            return {
-                pageSize: 10,
-                currentPage:1,
-                dataIndex: 1,
-                model11: '',
-                currentView: 0,
-                studentList: [],
-                classroomList: [],
-                columns: [
-                    {
-                        title: '学习阶段',
-                        key: 'name',
-                        //align:'center'
-                    },
-                    {
-                        title: '完成进度',
-                        slot: 'progress',
-                        align: 'center'
-                    },
-                    {
-                        title: '操作',
-                        slot: 'action',
-                        width: 150
-                    }
-                ],
-                data: [
-                    {
-                        name: '一次函数基础',
-                        progress: 50
-                    },
-                    {
-                        name: '一次函数进阶',
-                        progress: 50,
-
-                    },
-                    {
-                        name: '一次函数高阶',
-                        progress: 50,
-
-                    },
-                    {
-                        name: '一次函数总结',
-                        progress: 50,
-                    },
-                ],
-                studentData: [
-                    {
-                        name: '张飞',
-                        isComplete: 1
-                    },
-                    {
-                        name: '孔子',
-                        isComplete: 0,
-                    },
-                    {
-                        name: '柏拉图',
-                        isComplete: 1,
-                    },
-                    {
-                        name: '苏格拉底',
-                        isComplete: 1,
-                    },
-                    {
-                        name: '杜威',
-                        isComplete: 0,
-                    },
-                    {
-                        name: '老夫子',
-                        isComplete: 1,
-                    },
-                    {
-                        name: '张飞',
-                        isComplete: 1
-                    },
-                    {
-                        name: '孔子',
-                        isComplete: 0,
-                    },
-                    {
-                        name: '柏拉图',
-                        isComplete: 1,
-                    },
-                    {
-                        name: '苏格拉底',
-                        isComplete: 1,
-                    },
-                    {
-                        name: '杜威',
-                        isComplete: 0,
-                    },
-                    {
-                        name: '老夫子',
-                        isComplete: 1,
-                    },
-                    {
-                        name: '张飞',
-                        isComplete: 1
-                    },
-                    {
-                        name: '孔子',
-                        isComplete: 0,
-                    },
-                    {
-                        name: '柏拉图',
-                        isComplete: 1,
-                    },
-                    {
-                        name: '苏格拉底',
-                        isComplete: 1,
-                    },
-                    {
-                        name: '杜威',
-                        isComplete: 0,
-                    },
-                    {
-                        name: '老夫子11',
-                        isComplete: 1,
-                    }
-                ],
-                studentPageData:[],
-                studentColumns: [
-                    {
-                        title: '姓名',
-                        key: 'name',
-                        width:180
-                    },
-                    {
-                        title: '学习进度',
-                        slot: 'progress',
-                        width: 200,
-                        align: 'center'
-                    },
-                    {
-                        title: '提问/留言',
-                        slot: 'question',
-                        align: 'center'
-                    },
-                    {
-                        title: '操作',
-                        slot: 'action',
-                        width: 100
-                    }
-
-                ],
-            }
-        },
-        methods: {
-            clickStep(data) {
-                this.dataIndex = data.dataIndex
-            },
-            setCurrentView(index) {
-                this.currentView = index
-            },
-            getPageData(number, type) {
-                if (type == 'size') {
-                    this.pageSize = number
-                }
-                console.log(this.pageSize)
-                console.log(this.currentPage)
-                let starIndex = this.pageSize * (this.currentPage - 1)
-                let endIndex = this.pageSize * this.currentPage > this.studentData.length ? this.studentData.length : this.pageSize * this.currentPage
-                this.studentPageData = this.studentData.slice(starIndex, endIndex)
-            },
-            goToAnswer() {
-                this.$emit('goToAnswer')
-            }
-        },
-        created() {
-            this.getPageData()
-        }
-    }
-</script>
-<style scoped lang="less">
-@import "./LearnProgress.less";
-</style>
-<style>
-
-</style>

+ 0 - 188
TEAMModelOS/ClientApp/src/view/selflearning/ManageSelfLearn.less

@@ -1,188 +0,0 @@
-@main-bgColor: rgb(40,40,40); //主背景颜色
-@borderColor: #424242;
-@primary-textColor: #fff; //文本主颜色
-@second-textColor: #a5a5a5; //文本副级颜色
-@primary-fontSize: 14px;
-@second-fontSize: 16px;
-
-.self-learn-container {
-    width: 100%;
-    height: 100%;
-    display: flex;
-    flex-direction: row;
-
-    .self-learn-list-box {
-        width: 350px;
-        height: 100%;
-        padding-left: 15px;
-        border-right: 1px solid @borderColor;
-    }
-
-    .self-learn-main {
-        width: ~"calc(100% - 350px)";
-        height:100%;
-        padding-left:15px;
-    }
-}
-.self-learn-list-box {
-    .list-box-header {
-        height: 45px;
-        line-height: 45px;
-        border-bottom: 1px solid @borderColor;
-        span{
-            color:@second-textColor;
-        }
-    }
-}
-.to-create-icon {
-    float: right;
-    margin-right: 20px;
-    margin-top: 12px;
-    cursor: pointer;
-    color: white;
-    font-size: 18px;
-}
-.order-learn-item {
-    width: 100%;
-    padding: 10px 10px 10px 0px;
-    border-bottom: 1px solid @borderColor;
-    cursor: pointer;
-    position:relative;
-    
-
-    .order-learn-name {
-        color: white;
-        font-size: 20px;
-        margin-bottom: 5px;
-    }
-
-    .order-learn-steps {
-        color: @second-textColor;
-        height: 25px;
-        line-height: 25px;
-    }
-}
-
-.self-learn-main {
-    width: 100%;
-    height: 100%;
-
-    .self-learn-main-body {
-        width: 100%;
-        height: ~"calc(100% - 45px)";
-    }
-
-    .self-learn-main-header {
-        height: 45px;
-        width: 100%;
-        line-height: 45px;
-        border-bottom: 1px solid @borderColor;
-
-        .self-learn-header-right {
-            float: right;
-
-            .main-bar-action-btn {
-                color: white;
-                float: right;
-                margin-right: 50px;
-                cursor: pointer;
-
-                &:hover {
-                    color: aqua;
-                }
-            }
-        }
-
-        .main-header-tab {
-            color: @second-textColor;
-            margin-right: 35px;
-            cursor: pointer;
-            position: relative;
-            display: inline-block;
-            line-height: 25px;
-        }
-    }
-}
-
-.box-heaher {
-    height: 40px;
-    line-height: 40px;
-    color: @second-textColor;
-    border-bottom: 1px solid @borderColor;
-}
-
-.self-learn-main-body {
-    .base-info-box {
-        color: white;
-
-        .base-info-box-header {
-            .box-heaher;
-        }
-
-        .base-info-detail {
-            padding-top: 10px;
-
-            .base-info-item {
-                margin-bottom: 20px;
-            }
-
-            .base-info-label {
-                color: @second-textColor;
-                display: inline-block;
-                width: 80px;
-                font-size: 15px;
-            }
-
-            .base-info-value {
-                color: white;
-                font-size: 16px;
-                border-bottom: 1px solid #202020;
-                padding-bottom: 4px;
-            }
-        }
-    }
-
-    .learn-steps-box {
-        color: white;
-        padding-left: 15px;
-
-        .learn-steps-box-header {
-            .box-heaher;
-        }
-
-        .learn-steps-detail {
-            .self-learn-step-item {
-                padding: 10px 0px;
-                font-size: 16px;
-                cursor: pointer;
-                border-bottom: 1px solid @borderColor;
-            }
-        }
-    }
-
-    .learn-content-box {
-        color: white;
-        padding-left: 15px;
-        width: 100%;
-        height: 100%;
-
-        .learn-content-box-header {
-            .box-heaher;
-        }
-
-        .learn-content-detail {
-            width: 100%;
-            height: ~"calc(100% - 40px)";
-            padding-top: 15px;
-
-            .self-learn-content-label {
-                color: white;
-                line-height: 13px;
-                padding: 5px;
-                padding-left: 8px;
-                border-left: 2px solid white;
-                background: #333333;
-            }
-        }
-    }
-}

+ 0 - 255
TEAMModelOS/ClientApp/src/view/selflearning/ManageSelfLearn.vue

@@ -1,255 +0,0 @@
-<template>
-    <div class="self-learn-container">
-        <div class="self-learn-list-box">
-            <vuescroll>
-                <div class="list-box-header">
-                    <span>自学活动列表</span>
-                    <Icon type="md-add" class="to-create-icon" @click="goToCreate" />
-                </div>
-                <div v-for="(item,index) in selfLearnList" @click="selectOrderLearn(index)" :class="currentLearnIndex == index ? 'order-learn-item block-bg block-bg-active':'order-learn-item block-bg' ">
-                    <p class="order-learn-name">{{item.name}}</p>
-                    <div class="order-learn-steps">
-                        <span><Icon type="ios-cube" style="margin-right:8px;" />学习阶段:</span>
-                        <span>{{item.steps.length}}</span>
-                    </div>
-                    <div class="order-learn-steps">
-                        <span><Icon type="ios-cube" style="margin-right:8px;" />活动状态:</span>
-                        <span style="color:aqua;">{{index % 3 == 0 ? '未发布': index % 3 == 1 ? '进行中':'已结束' }}</span>
-                    </div>
-                </div>
-                <EmptyData v-if="selfLearnList.length == 0"></EmptyData>
-            </vuescroll>
-        </div>
-        <div class="self-learn-main">
-            <div class="self-learn-main-header">
-                <span :class="currentTabIndex == 0 ? 'main-header-tab line-bottom line-bottom-active':'main-header-tab line-bottom'" @click="selectTab(0)">活动信息</span>
-                <span :class="currentTabIndex == 1 ? 'main-header-tab line-bottom line-bottom-active':'main-header-tab line-bottom'" @click="selectTab(1)">学习进度</span>
-                <span :class="currentTabIndex == 2 ? 'main-header-tab line-bottom line-bottom-active':'main-header-tab line-bottom'" @click="selectTab(2)">学习数据</span>
-                <div class="self-learn-header-right">
-                    <span class="main-bar-action-btn" @click="editInfo()">
-                        <Icon type="ios-create-outline" size="20" />
-                        编辑内容
-                    </span>
-                    <span class="main-bar-action-btn">
-                        <Icon type="ios-send" size="20" />
-                        发布活动
-                    </span>
-                </div>
-            </div>
-            <div class="self-learn-main-body">
-                <div v-if="currentTabIndex == 0" class="dark-iview-split" style="width:100%;height:100%;">
-                    <Split v-model="split1">
-                        <div slot="left" class="base-info-box">
-                            <div class="base-info-box-header">
-                                <span>基础信息</span>
-                            </div>
-                            <EmptyData v-if="selfLearnList.length == 0"></EmptyData>
-                            <div v-else class="base-info-detail">
-                                <div class="base-info-item">
-                                    <span class="base-info-label">
-                                        名称:
-                                    </span>
-                                    <p class="base-info-value">
-                                        {{selfLearnList[currentLearnIndex].name}}
-                                    </p>
-                                </div>
-                                <div class="base-info-item">
-                                    <span class="base-info-label">
-                                        学段:
-                                    </span>
-
-                                    <p class="base-info-value">
-                                        <!--{{selfLearnList[currentLearnIndex].periodCode}}-->
-                                        小学
-                                    </p>
-                                </div>
-                                <div class="base-info-item">
-                                    <span class="base-info-label">
-                                        学科:
-                                    </span>
-                                    <p class="base-info-value">
-                                        {{selfLearnList[currentLearnIndex].subjectCode}}
-                                    </p>
-                                </div>
-                                <div class="base-info-item">
-                                    <span class="base-info-label">
-                                        学习对象:
-                                    </span>
-                                    <p class="base-info-value">
-                                        {{selfLearnList[currentLearnIndex].target.join(',')}}
-                                    </p>
-                                </div>
-                                <div class="base-info-item">
-                                    <span class="base-info-label">
-                                        闯关模式:
-                                    </span>
-                                    <p class="base-info-value">
-                                        {{selfLearnList[currentLearnIndex].isOrder == 1 ? '是':'否'}}
-                                    </p>
-                                </div>
-                                <div class="base-info-item">
-                                    <span class="base-info-label">
-                                        结束时间:
-                                    </span>
-                                    <p class="base-info-value">
-                                        暂未设置
-                                    </p>
-                                </div>
-                                <div class="base-info-item">
-                                    <p class="base-info-label">
-                                        备注说明:
-                                    </p>
-                                    <p class="base-info-value">
-                                        {{selfLearnList[currentLearnIndex].introduce}}
-                                    </p>
-                                </div>
-                            </div>
-                        </div>
-                        <div slot="right" class="demo-split-pane" style="width:100%;height:100%;">
-                            <Split v-model="split2">
-                                <div slot="left" class="learn-steps-box">
-                                    <div class="learn-steps-box-header">
-                                        <span>
-                                            学习阶段
-                                        </span>
-                                    </div>
-                                    <EmptyData v-if="selfLearnList.length == 0"></EmptyData>
-                                    <div v-else class="learn-steps-detail">
-                                        <div v-for="(item,index) in selfLearnList[currentLearnIndex].steps" @click="selectStep(index)" :class="currentStepIndex == index ? 'self-learn-step-item block-bg block-bg-active':'self-learn-step-item block-bg'">
-                                            <span>
-                                                {{item.name}}
-                                            </span>
-                                        </div>
-                                    </div>
-                                </div>
-                                <div slot="right" class="learn-content-box">
-                                    <div class="learn-content-box-header">
-                                        <span>
-                                            学习内容
-                                        </span>
-                                    </div>
-                                    <EmptyData v-if="selfLearnList.length == 0"></EmptyData>
-                                    <div v-else class="learn-content-detail">
-                                        <vuescroll>
-                                            <p class="self-learn-content-label">
-                                                内容:{{selfLearnList.length == 0 ? 0 : selfLearnList[currentLearnIndex].steps[currentStepIndex].resource.length}}
-                                            </p>
-                                            <div style="min-height:220px;">
-                                                <Loading v-show="isLoading"></Loading>
-                                                <ContentFileList v-show="!isLoading" :class="isLoading ? '':'animated fadeIn'" :resources="selfLearnList[currentLearnIndex].steps[currentStepIndex].resource"></ContentFileList>
-                                            </div>
-                                            <p class="self-learn-content-label" style="margin-bottom:15px;">
-                                                题目:{{selfLearnList.length == 0 ? 0 : selfLearnList[currentLearnIndex].steps[currentStepIndex].item.length}}
-                                            </p>
-                                            <div>
-                                                <EmptyData v-if="selfLearnList.length == 0" style="margin-top:120px;"></EmptyData>
-                                                <Loading v-show="isLoading"></Loading>
-                                                <QuestionList v-show="!isLoading" :class="isLoading ? '':'animated fadeIn'" :questions="selfLearnList[currentLearnIndex].steps[currentStepIndex].item" style="margin-top:12px;"></QuestionList>
-                                            </div>
-                                        </vuescroll>
-                                    </div>
-                                </div>
-                            </Split>
-                        </div>
-                    </Split>
-                </div>
-                <LearnProgress v-if="currentTabIndex == 1"></LearnProgress>
-            </div>
-        </div>
-        <Modal v-model="editStatus"
-               title="编辑内容"
-               @on-ok="confirmEdit">
-            <p>确认跳转到自主学习活动编辑页面?</p>
-        </Modal>
-        <Modal v-model="editStatus"
-               title="编辑内容"
-               class-name="dark-iview-modal"
-               @on-ok="confirmEdit">
-            <p>确认跳转到自主学习活动编辑页面?</p>
-        </Modal>
-    </div>
-</template>
-<script>
-    
-    import LearnProgress from './LearnProgress.vue'
-    import Loading from '@/common/Loading.vue'
-    import QuestionList from '@/components/learnactivity/QuestionList.vue'
-    import ContentFileList from '@/components/learnactivity/ContentFileList.vue'
-    export default {
-        components: {
-             LearnProgress, Loading, QuestionList, ContentFileList
-        },
-        data() {
-            return {
-                isLoading: false,
-                editStatus: false,
-                split1: 0.18,
-                split2: 0.2,
-                currentTabIndex: 0,
-                currentLearnIndex: 0,
-                currentStepIndex: 0,
-                selfLearnList: []
-            }
-        },
-        methods: {
-            confirmEdit() {
-                let selfLearnInfo = this.selfLearnList[this.currentLearnIndex]
-                this.$router.push({
-                    name: 'createSelfLearn',
-                    params: {
-                        selfLearnInfo
-                    }
-                })
-            },
-            editInfo() {
-                this.editStatus = true
-            },
-            selectStep(index) {
-                this.currentStepIndex = index
-                this.isLoading = true
-                setTimeout(() => {
-                    this.isLoading = false
-                },300)
-            },
-            selectTab(index) {
-                this.currentTabIndex = index
-            },
-            goToCreate() {
-                this.$router.push({
-                    name: 'createSelfLearn'
-                })
-            },
-            selectOrderLearn(index) {
-                this.currentLearnIndex = index
-            },
-            findSelfLearn() {
-                let requestData = {
-                    creator: this.$store.state.userInfo.TEAMModelId
-                }
-                this.$api.learnActivity.FindSelfLearn(requestData).then(
-                    res => {
-                        if (res.error == null) {
-                            this.selfLearnList = res.result.data
-                        } else {
-                            this.$Message.error("API ERROR!")
-                        }
-                    },
-                    err => {
-
-                    }
-                )
-            }
-        },
-        created() {
-            this.findSelfLearn()
-        }
-    }
-</script>
-<style lang="less" scoped>
-    @import "./ManageSelfLearn.less";
-</style>
-<style>
-    .learn-content-detail #loadingBox {
-        margin-top: 70px !important;
-    }
-</style>

+ 1 - 1
TEAMModelOS/ClientApp/src/view/selfstudy/ActivityInfo.less

@@ -97,7 +97,7 @@
             flex-direction: row;
 
             .progress-histogram-wrap {
-                width: 50%;
+                width: 90%;
                 height: 100%;
             }
 

+ 139 - 35
TEAMModelOS/ClientApp/src/view/selfstudy/ActivityInfo.vue

@@ -48,7 +48,7 @@
                                     </div>
                                     <p  class="chart-name">通过率统计</p>
                                     <div class="pass-bar-wrap">
-                                        <PassBar></PassBar>
+                                        <PassBar :passData="passData"></PassBar>
                                     </div>
                                     <p  class="chart-name">
                                         学生进度概览
@@ -59,29 +59,22 @@
                                             <Option v-for="item in classList[curClassIndex].students" :value="item.studentId" :key="item.value">{{ item.name }}</Option>
                                         </Select>
                                     </div>-->
-                                    <Table :columns="studentColumns" :data="showRecord" :show-header="true" style="margin:0px 25px;" no-data-text="此班暂无学生">
+                                    <Table :columns="studentColumns" :data="showRecord" :show-header="true" style="margin:0px 25px;" no-data-text="此班暂无学生" @on-sort-change="sortByPercent">
                                         <template slot-scope="{ row, index }" slot="isComplete">
                                             <Icon size="20" type="md-checkmark" color="aqua" v-if="row.isComplete == 1" />
                                             <span v-else>--</span>
                                         </template>
                                         <template slot-scope="{ row, index }" slot="progress">
-                                            <Progress :percent="row.percent" status="normal" />
+                                            <Progress :percent="row.percent" status="normal" style="width:80%; max-width:300px;"/>
                                         </template>
                                         <template slot-scope="{ row, index }" slot="question">
-                                            <div>
-                                                <span title="提问/留言 次数">
-                                                    <Icon type="ios-create" size="16" />5
-                                                </span>
-                                                <span style="color:rgb(45, 241, 142);margin-left:10px;">
-                                                    <Icon type="md-thumbs-up" />32
-                                                </span>
-                                                <span style="color:#f90;margin-left:10px;">
-                                                    <Icon type="md-thumbs-down" />10
-                                                </span>
+                                            <div style="cursor:pointer;font-size:20px;">
+                                                <span title="提问/留言" v-if="index % 3 == 0">- -</span>
+                                                <Icon @click="goToAnswer" v-else type="ios-chatbubbles-outline" title="查看留言/提问" />
                                             </div>
                                         </template>
-                                        <template slot-scope="{ row, index }" slot="action">
-                                            <span @click="goToAnswer" class="to-detail-info">查看详情</span>
+                                        <template slot-scope="{ row, index }" slot="max">
+                                            <span>{{getMaxStep(row)}}</span>
                                         </template>
                                     </Table>
                                     <div v-if="classList[curClassIndex][learnContent.id] && classList[curClassIndex][learnContent.id].record" style="width:100%;text-align:center;margin-top:20px;" class="dark-iview-page">
@@ -90,7 +83,8 @@
                                 </vuescroll>
                             </div>
                         </div>
-                        <AnswerRecord v-if="showAnswer" @closeAnswerDetail="showAnswer = false"></AnswerRecord>
+                        <!--<AnswerRecord v-if="showAnswer" @closeAnswerDetail="showAnswer = false"></AnswerRecord>-->
+                        <QuestionInfo v-if="showAnswer" @closeAnswerDetail="showAnswer = false"></QuestionInfo>
                     </div>
                     <EmptyData v-else textContent="此班未分享,暂无学习数据" style="padding-top:200px;"></EmptyData>
                 </vuescroll>
@@ -113,7 +107,13 @@
                             <span>否</span>
                         </Radio>
                     </RadioGroup>
+
                 </FormItem>
+                <transition name="fade">
+                    <FormItem label="过关分数" prop="stage" v-if="activityInfo.stage == 1">
+                        <InputNumber size="small" :max="100" :min="60" v-model="activityInfo.passScore" style="width:170px;"></InputNumber>
+                    </FormItem>
+                </transition>
                 <FormItem label="活动类型" prop="type">
                     <RadioGroup v-model="activityInfo.type" style="color:white;">
                         <Radio :label="item.value" v-for="item in activityTypeList">
@@ -139,12 +139,13 @@
     import ProgressPie from './ProgressPie.vue'
     import PassBar from './PassBar.vue'
     import Loading from '@/common/Loading.vue'
-    import AnswerDetail from './AnswerDetail.vue'
+    import StudyDetail from './StudyDetail.vue'
     import AnswerRecord from './AnswerRecord.vue'
+    import QuestionInfo from './QuestionInfo.vue'
 
     export default {
         components: {
-            AnswerDetail,AnswerRecord,Loading,ProgressBar,ProgressPie,PassBar
+            StudyDetail,AnswerRecord,Loading,ProgressBar,ProgressPie,PassBar,QuestionInfo
         },
         props: {
             learnContent: {
@@ -190,7 +191,8 @@
                 activityInfo: {
                     type: '',
                     endTime: undefined,
-                    stage: 1
+                    stage: 1,
+                    passScore:100
                 },
                 revokeStatus: false,
                 publishStatus: false,
@@ -205,6 +207,18 @@
                 showRecord:[],
                 studentPageData:[],
                 studentColumns: [
+                    {
+                        type: 'expand',
+                        width: 80,
+                        render: (h, params) => {
+                            return h(StudyDetail, {
+                                props: {
+                                    studyData: params.row,
+                                    learnContent: this.learnContent
+                                }
+                            })
+                        }
+                    },
                     {
                         title: '姓名',
                         key: 'name',
@@ -213,24 +227,64 @@
                     {
                         title: '学习进度',
                         slot: 'progress',
-                        width: 200,
+                        key:'percent',
+                        align: 'center',
+                        sortable: 'custom'
+                    },
+                    {
+                        title: '作答次数最多',
+                        slot: 'max',
                         align: 'center',
                         sortable: true
                     },
                     {
                         title: '提问/留言',
                         slot: 'question',
-                        align: 'center'
-                    },
-                    {
-                        title: '操作',
-                        slot: 'action',
-                        width: 100
+                        align: 'center',
+                        width: 200
                     }
                 ],
             }
         },
         methods: {
+            //根据完成进度排序
+            sortByPercent(column) {
+                //console.log(column, key, order)
+                console.log(column)
+                console.log(column.key == 'percent')
+                if (column.key == 'percent') {
+                    console.log('111')
+                    console.log(this.classList[this.curClassIndex][this.learnContent.id].record)
+                    this.classList[this.curClassIndex][this.learnContent.id].record.sort((a, b) => {
+                        console.log(a)
+                        if (column.order == 'asc') {
+                            return a.percent - b.percent
+                        } else {
+                            return b.percent - a.percent
+                        }
+                    })
+                    this.getPageData()
+                }
+            },
+            //计算作答次数最多的阶段
+            getMaxStep(row) {
+                let max = 1
+                let step = []
+                for (let item of row.steps) {
+                    if (item.count > max) {
+                        max = item.count
+                        step.length = 0
+                        step.push(item.index + 1)
+                    } else if (item.count == max && max !== 1) {
+                        step.push(item.index + 1)
+                    }
+                }
+                if (step.length > 0) {
+                    return step.join(',')
+                } else {
+                    return '--'
+                }
+            },
             clickStep(data) {
                 this.dataIndex = data.dataIndex
             },
@@ -281,7 +335,8 @@
                             endTime: this.activityInfo.endTime ? this.activityInfo.endTime: 0,
                             status: 200,
                             type: this.activityInfo.type,
-                            stage: this.activityInfo.stage
+                            stage: this.activityInfo.stage,
+                            passScore: this.activityInfo.passScore
                         }
                         this.$api.learnActivity.UpsertTask(requestData).then(
                             (res) => {
@@ -436,6 +491,7 @@
             }
         },
         computed: {
+            //多个阶段的学习进度统计
             countData() {
                 if (this.learnContent.pk == 'LearnProcess') {
                     let labels = this.learnContent.steps.map((item) => {
@@ -462,15 +518,8 @@
                         studentCount: studentCount
                     }
                 }
-                //else {
-                //    let labels = [this.learnContent.name]
-                //    return {
-                //        xAxisData: labels,
-                //        seriesData: [42],
-                //        studentCount: 50
-                //    }
-                //}
             },
+            //单个阶段的学习进度统计
             pieData() {
                 if (this.learnContent.pk == 'LearnUnit' || this.learnContent.steps.length < 2 ) {
                     if (this.classList.length > 0) {
@@ -487,6 +536,55 @@
                     } 
                 }
                 return [0,0]
+            },
+            //作答通过率统计
+            passData() {
+                if (this.learnContent.pk == 'LearnProcess') {
+                    let labels = this.learnContent.steps.map((item) => {
+                        return item.name
+                    })
+                    let studentCount = 0
+                    let result = []
+                    for (let item of labels) {
+                        result.push({
+                            name: item,
+                            zero: 0,
+                            once: 0,
+                            twice: 0,
+                            third: 0
+                        })
+                    }
+                    if (this.classList.length > 0) {
+                        if (this.classList[this.curClassIndex].students && this.classList[this.curClassIndex][this.learnContent.id].record) {
+                            studentCount = this.classList[this.curClassIndex].students.length
+                            for (let item of this.classList[this.curClassIndex][this.learnContent.id].record) {
+                                //let once = 0
+                                //let twice = 0
+                                //let third = 0
+                                //let zero = 0
+
+                                for (let stepIndex in item.steps) {
+                                    if (item.steps[stepIndex].count == 1) {
+                                        result[stepIndex].once++
+                                        //once++
+                                    } else if (item.steps[stepIndex].count == 2) {
+                                        result[stepIndex].twice++
+                                        //twice++
+                                    } else if (item.steps[stepIndex].count >= 3) {
+                                        result[stepIndex].third++
+                                        //third++
+                                    }
+                                }
+                            }
+                            for (let item of result) {
+                                item.zero = studentCount - item.once - item.twice - item.third
+                            }
+                        }
+                    }
+                    return result
+                } else if (this.learnContent.pk == 'LearnUnit') {
+
+                }
             }
         },
         created() {
@@ -501,4 +599,10 @@
     .learn-progress-filter .ivu-select-input {
         color:white;
     }
+    .learn-progress-main td.ivu-table-expanded-cell {
+        padding:0px;
+    }
+    .activity-detail-info .__view {
+        height:100%;
+    }
 </style>

+ 0 - 99
TEAMModelOS/ClientApp/src/view/selfstudy/AnswerDetail.less

@@ -1,99 +0,0 @@
-@main-bgColor: rgb(40,40,40); //主背景颜色
-@borderColor: #424242;
-@primary-textColor: #fff; //文本主颜色
-@second-textColor: #a5a5a5; //文本副级颜色
-@primary-fontSize: 14px;
-@second-fontSize: 16px;
-
-.answer-detail-container {
-    width: 100%;
-    height: 100%;
-    position: relative;
-    .answer-detail-header{
-        width:100%;
-        height:45px;
-        line-height:45px;
-    }
-}
-.close-answer-detail{
-    position:absolute;
-    right:50px;
-    top:10px;
-    color:white;
-    font-size:18px;
-    cursor:pointer;
-}
-.step-item-wrap{
-    margin-top:25px;
-    margin-bottom:25px;
-}
-.step-name {
-    color: white;
-    margin: 10px 0px 20px 0px;
-    font-size: 16px;
-    border-left: 3px solid #19be6b;
-    line-height: 16px;
-    padding-left: 5px;
-}
-.question-info{
-    color:white;
-}
-.question-item-wrap {
-    background: #404040;
-    padding: 10px 8px;
-    border-radius: 4px;
-    margin-bottom: 3px;
-}
-.question-detail-wrap {
-    color: white;
-
-    .option-item-wrap {
-        &:first-child {
-            margin-top: 15px;
-        }
-        padding-left:10px;
-        margin-top: 5px;
-        color:#DDDDDD;
-        .option-order {
-            margin-right: 10px;
-        }
-    }
-}
-.student-answer-wrap{
-    margin-top:10px;
-    color:aqua;
-}
-.whole-class-answer{
-    margin-top:5px;
-}
-.flag-span {
-    font-size: 10px;
-    background: #19be6b;
-    padding: 0 5px;
-    color: #fff;
-    display: inline-block;
-    margin-left: 10px;
-    border-radius: 2px;
-}
-.answer-detail-container .back-to-top {
-    position: fixed;
-    right: 50px;
-    bottom: 30px;
-    height: 48px;
-    width: 50px;
-    background: #595959;
-    z-index: 99999;
-    cursor: pointer;
-    display: flex;
-    flex-direction: column;
-    justify-content: center;
-    align-items: center;
-}
-.answer-detail-container .back-to-top:hover {
-    background: rgb(128,128,128);
-}
-
-.answer-detail-container .back-to-top .ivu-icon {
-    font-size: 26px;
-    color: white;
-}

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 315
TEAMModelOS/ClientApp/src/view/selfstudy/AnswerDetail.vue


+ 33 - 21
TEAMModelOS/ClientApp/src/view/selfstudy/AnswerRecord.vue

@@ -14,7 +14,7 @@
             <Icon type="md-close" class="close-answer-record" @click="closeAnswerDetail" />
             <div class="step-item-wrap dark-iview-table" v-for="(item,index) in steps">
                 <p class="step-name">{{item.name}}<span class="study-duration-span">学习时长:1天5小时32分</span></p>
-                <div style="width:100%;padding-left:15px;">
+                <div style="width:100%;padding-left:15px;padding-right:15px;">
                     <p class="question-label">作答记录:</p>
                     <Table :columns="columns" :data="data1" border>
                         <template slot-scope="{ row, index }" slot="index">
@@ -26,13 +26,10 @@
                     </Table>
                     <p class="question-label">留言/提问:</p>
                     <div class="student-question-item">
-                        <span class="question-info">1、这个问题怎么解决,上网查询了资料也没解决?</span>
-                        <span style="color:rgb(45, 241, 142);">
-                            <Icon type="md-thumbs-up" />32
-                        </span>
-                        <span style="color:#f90;margin-left:10px;">
-                            <Icon type="md-thumbs-down" />10
-                        </span>
+                        <span class="question-info">这个问题怎么解决,上网查询了资料也没解决?</span>
+                        <!--<Button type="primary" size="small" icon="ios-create">
+                            回复
+                        </Button>-->
                     </div>
                 </div>
                 <Divider v-if="index < (steps.length - 1)" dashed style="border-color: rgb(80, 80, 80);margin:50px 0px;"/>
@@ -185,43 +182,58 @@
                     "邱梦晗"],
                 showBack: false,
                 columns: [
+                    {
+                        type: 'expand',
+                        width: 50,
+                        render: (h, params) => {
+                            return h(WholeClassAnswer, {
+                                props: {
+                                    row: params.row
+                                }
+                            })
+                        }
+                    },
                     {
                         title: '题号',
                         slot: 'index',
                         align:'center'
                     },
                     {
-                        title: '学生作答次数',
-                        key: 'count',
+                        title: '首次作答答案',
+                        key: 'ans',
                         align:'center'
                     },
                     {
-                        title: '平均作答次数',
-                        key: 'average',
+                        title: '作答次数',
+                        key: 'count',
                         align:'center'
                     },
                     {
-                        title: '查看题目',
-                        slot: 'detail',
+                        title: '一次通过率(全班)',
+                        key: 'percent',
                         align:'center'
                     }
                 ],
                 data1: [
                     {
                         count: 2,
-                        average: 1.5,
+                        ans: 'A',
+                        percent:'61%'
                     },
                     {
-                        count: 2,
-                        average: 1.5,
+                        count: 1,
+                        ans: 'C',
+                        percent:'84%'
                     },
                     {
-                        count: 2,
-                        average: 1.5,
+                        count: 1,
+                        ans: 'C',
+                        percent:'69%'
                     },
                     {
-                        count: 2,
-                        average: 1.5,
+                        count: 3,
+                        ans: 'B',
+                        percent:'30%'
                     }
                 ]
             }

+ 182 - 106
TEAMModelOS/ClientApp/src/view/selfstudy/PassBar.vue

@@ -4,19 +4,14 @@
 <script>
     export default {
         props: {
-            countData: {
-                type: Object,
+            passData: {
+                type: Array,
                 default: () => {
-                    return {
-                        xAxisData: [],
-                        seriesData: [],
-                        studentCount: 0
-                    }
+                    return []
                 }
             }
         },
         data() {
-
             return {
                 dataIndex: 1,
                 passBar: undefined,
@@ -27,12 +22,7 @@
                             type: 'shadow'
                         },
                         formatter: function (params, ticket, callback) {
-                            console.log(params)
-                            console.log(ticket)
-                            //$.get('detail?name=' + params.name, function (content) {
-                            //    callback(ticket, toHTML(content));
-                            //});
-                            return '{b0}: {c0}<br />{b1}: {c1}';
+                            return '';
                         }
                     },
                     legend: {
@@ -40,19 +30,25 @@
                             {
                                 name: '一次通过',
                                 textStyle: {
-                                    color:'white'
+                                    color: 'white'
+                                }
+                            },
+                            {
+                                name: '二次通过',
+                                textStyle: {
+                                    color: 'white'
                                 }
                             },
                             {
-                                name: '非一次通过',
+                                name: '三次及以上',
                                 textStyle: {
-                                    color:'white'
+                                    color: 'white'
                                 }
                             },
                             {
                                 name: '未作答',
                                 textStyle: {
-                                    color:'white'
+                                    color: 'white'
                                 }
                             }
                         ]
@@ -62,7 +58,7 @@
                     },
                     yAxis: {
                         type: 'value',
-                        name: '一次通过人数',
+                        name: '人数',
                         axisLabel: {
                             color: 'white'
                         },
@@ -77,7 +73,8 @@
                     },
                     xAxis: {
                         type: 'category',
-                        data: ['一次函数阶1', '一次函数一次阶2', '一次函数初阶3'],
+                        data: [],
+                        //data: ['一次函数阶', '一次函数进阶', '一次函数高阶'],
                         axisLabel: {
                             color: 'white',
                             margin: 20
@@ -90,7 +87,7 @@
         mounted() {
             this.passBar = this.$echarts.init(document.getElementById('pass-bar'))
             //this.passBar.setOption(this.option)
-            this.randomNum()
+            //this.randomNum()
             this.passBar.on('click', (params) => {
                 this.$emit('clickStep', params)
             })
@@ -106,107 +103,186 @@
                     step2,
                     step3
                 ]
-                let max = (step1 > step2 ? step1 : step2) > step3 ? (step1 > step2 ? step1 : step2) : step3
-                //模拟一次通过人数
-                let passList = []
-                for (let i = 0; i < max; i++) {
-                    let item = {
-                        stack: i + '',
-                        name: '一次通过',
-                        type: 'bar',
-                        itemStyle: {
-                            color: "#19be6b"
+
+                //调整通过率统计维度
+                let once = {
+                    name: '一次通过',
+                    type: 'bar',
+                    itemStyle: {
+                        color: "#19be6b"
+                    },
+                    label: {
+                        normal: {
+                            show: true,
+                            textBorderColor: '#333',
+                            textBorderWidth: 2
                         },
-                        label: {
-                            normal: {
-                                show: true,
-                                textBorderColor: '#333',
-                                textBorderWidth: 2
-                            },
+                        show: true,
+                        position: 'inside'
+                    },
+                    data: []
+                }
+                for (let index = 0; index < stepNum; index++) {
+                    once.data.push(this.$jsFn.getBtwRandom(10, 30))
+                }
+
+                let twice = {
+                    name: '二次通过',
+                    type: 'bar',
+                    itemStyle: {
+                        color: "#5cadff"
+                    },
+                    label: {
+                        normal: {
                             show: true,
-                            position: 'inside'
+                            textBorderColor: '#333',
+                            textBorderWidth: 2
                         },
-                        data: []
-                    }
-                    //this.option.series.push(item)
-                    passList.push(item)
+                        show: true,
+                        position: 'inside'
+                    },
+                    data: []
                 }
-                for (let i = 0; i < stepNum; i++) {
-                    for (let j = 0; j < max; j++) {
-                        if (stepCount[i] > j) {
-                            let num = this.$jsFn.getBtwRandom(15, 30)
-                            passList[j].data.push(num)
-                        } else {
-                            passList[j].data.push(undefined)
-                        }
-                    }
+                for (let index = 0; index < stepNum; index++) {
+                    twice.data.push(this.$jsFn.getBtwRandom(10, 20))
                 }
-                //模拟未作答人数
-                let noAns = []
-                for (let i = 0; i < max; i++) {
-                    let item = {
-                        stack: i + '',
-                        name: '未作答',
-                        type: 'bar',
-                        itemStyle: {
-                            color: "#e8eaec"
+
+                let third = {
+                    name: '三次及以上',
+                    type: 'bar',
+                    itemStyle: {
+                        color: "#ff9900"
+                    },
+                    label: {
+                        normal: {
+                            show: true,
+                            textBorderColor: '#333',
+                            textBorderWidth: 2
                         },
-                        label: this.seriesLabel,
-                        data: []
-                    }
-                    noAns.push(item)
+                        show: true,
+                        position: 'inside'
+                    },
+                    data: []
                 }
-                for (let i = 0; i < stepNum; i++) {
-                    for (let j = 0; j < max; j++) {
-                        if (stepCount[i] > j) {
-                            let num = this.$jsFn.getBtwRandom(0, 10)
-                            noAns[j].data.push(num)
-                        } else {
-                            noAns[j].data.push(undefined)
-                        }
-                    }
+                for (let index = 0; index < stepNum; index++) {
+                    third.data.push(this.$jsFn.getBtwRandom(10, 20))
                 }
-                //模拟未通过人数
-                let noPass = []
-                for (let i = 0; i < max; i++) {
-                    let item = {
-                        stack: i + '',
-                        name: '非一次通过',
-                        type: 'bar',
-                        itemStyle: {
-                            color: "#5cadff"
+
+                let no = {
+                    name: '未作答',
+                    type: 'bar',
+                    itemStyle: {
+                        color: "#e8eaec"
+                    },
+                    label: {
+                        normal: {
+                            show: true,
+                            textBorderColor: '#333',
+                            textBorderWidth: 2
                         },
-                        label: this.seriesLabel,
-                        data: []
-                    }
-                    noPass.push(item)
+                        show: true,
+                        position: 'inside'
+                    },
+                    data: []
                 }
-                for (let i = 0; i < stepNum; i++) {
-                    for (let j = 0; j < max; j++) {
-                        if (stepCount[i] > j) {
-                            let num = 50 - noAns[j].data[i] - passList[j].data[i]
-                            noPass[j].data.push(num)
-                        } else {
-                            noPass[j].data.push(undefined)
-                        }
-                    }
+                for (let index = 0; index < stepNum; index++) {
+                    no.data.push(this.$jsFn.getBtwRandom(0, 10))
                 }
-                this.option.series.push(...passList, ...noPass, ...noAns)
+                this.option.series.push(once, twice, third, no)
                 this.passBar.setOption(this.option)
             }
         },
         watch: {
-            countData: {
+            passData: {
                 handler(n, o) {
-                    //this.$nextTick(() => {
-                    //    this.option.xAxis.data = this.countData.xAxisData
-                    //    this.option.series[0].data = this.countData.seriesData
-                    //    this.option.series[1].data.length = 0
-                    //    for (let item of this.countData.seriesData) {
-                    //        this.option.series[1].data.push(this.countData.studentCount - item == 0 ? undefined : this.countData.studentCount - item)
-                    //    }
-                    //    this.passBar.setOption(this.option)
-                    //})
+                    this.$nextTick(() => {
+                        this.option.xAxis.data = this.passData.map((item) => {
+                            return item.name
+                        })
+                        //调整通过率统计维度
+                        let once = {
+                            name: '一次通过',
+                            type: 'bar',
+                            itemStyle: {
+                                color: "#19be6b"
+                            },
+                            label: {
+                                normal: {
+                                    show: true,
+                                    textBorderColor: '#333',
+                                    textBorderWidth: 2
+                                },
+                                show: true,
+                                position: 'inside'
+                            },
+                            data: []
+                        }
+                        
+
+                        let twice = {
+                            name: '二次通过',
+                            type: 'bar',
+                            itemStyle: {
+                                color: "#5cadff"
+                            },
+                            label: {
+                                normal: {
+                                    show: true,
+                                    textBorderColor: '#333',
+                                    textBorderWidth: 2
+                                },
+                                show: true,
+                                position: 'inside'
+                            },
+                            data: []
+                        }
+
+                        let third = {
+                            name: '三次及以上',
+                            type: 'bar',
+                            itemStyle: {
+                                color: "#ff9900"
+                            },
+                            label: {
+                                normal: {
+                                    show: true,
+                                    textBorderColor: '#333',
+                                    textBorderWidth: 2
+                                },
+                                show: true,
+                                position: 'inside'
+                            },
+                            data: []
+                        }
+
+                        let no = {
+                            name: '未作答',
+                            type: 'bar',
+                            itemStyle: {
+                                color: "#e8eaec"
+                            },
+                            label: {
+                                normal: {
+                                    show: true,
+                                    textBorderColor: '#333',
+                                    textBorderWidth: 2
+                                },
+                                show: true,
+                                position: 'inside'
+                            },
+                            data: []
+                        }
+
+                        for (let index = 0; index < this.passData.length; index++) {
+                            once.data.push(this.passData[index].once)
+                            twice.data.push(this.passData[index].twice)
+                            third.data.push(this.passData[index].third)
+                            no.data.push(this.passData[index].zero)
+                        }
+                        this.option.series.length = 0
+                        this.option.series.push(once, twice, third, no)
+                        this.passBar.setOption(this.option)
+                    })
                 },
                 deep: true,
                 immediate: true

+ 2 - 1
TEAMModelOS/ClientApp/src/view/selfstudy/ProgressBar.vue

@@ -40,7 +40,8 @@
                         type: 'category',
                         data: [],
                         axisLabel: {
-                            color: 'white'
+                            color: 'white',
+                            rotate:-20
                         }
                     },
                     yAxis: {

+ 92 - 0
TEAMModelOS/ClientApp/src/view/selfstudy/QuestionInfo.less

@@ -0,0 +1,92 @@
+@main-bgColor: rgb(40,40,40); //主背景颜色
+@borderColor: #424242;
+@primary-textColor: #fff; //文本主颜色
+@second-textColor: #a5a5a5; //文本副级颜色
+@primary-fontSize: 14px;
+@second-fontSize: 16px;
+
+.question-info-container {
+    width: 100%;
+    height: 100%;
+    position: relative;
+    padding-left: 10px;
+
+    .answer-record-header {
+        width: 100%;
+        height: 45px;
+        line-height: 45px;
+    }
+}
+
+.close-question-info {
+    position: absolute;
+    right: 50px;
+    top: 10px;
+    color: white;
+    font-size: 18px;
+    cursor: pointer;
+}
+.question-label{
+    color:@second-fontSize;
+    color:@second-textColor;
+    padding-top:10px;
+}
+
+.step-item-wrap {
+    margin-top: 15px;
+    width: 100%;
+    margin-bottom:15px;
+}
+.step-name {
+    color: white;
+    margin: 10px 0px 15px 2px;
+    font-size: 16px;
+    border-left: 3px solid white;
+    line-height: 15px;
+    padding-left: 5px;
+    background: rgba(50,50,50,.8);
+    padding: 4px 0px 4px 6px;
+}
+.question-info{
+    color:white;
+    margin-bottom:10px;
+    margin-top:5px;
+    font-size:15px;
+    position:relative;
+}
+.question-info:before{
+    content:' ';
+    position:absolute;
+    left:-12px;
+    top:8px;
+    width:4px;
+    height:4px;
+    border-radius:2px;
+    background:white;
+}
+.student-label {
+    color: #CCCCCC;
+    padding: 2px 0px;
+    font-size:12px;
+    border-radius: 2px;
+    cursor: pointer;
+}
+.question-info-item{
+    border-bottom: 1px dashed #303030;
+    margin-bottom:10px;
+    padding-left:15px;
+}
+.question-info-item:last-child{
+    border:none;
+}
+.answer-label {
+    color: @second-textColor;
+    margin-bottom: 20px;
+    cursor: pointer;
+    display: inline-block;
+    user-select: none;
+
+    &:hover {
+        color: aqua;
+    }
+}

+ 125 - 0
TEAMModelOS/ClientApp/src/view/selfstudy/QuestionInfo.vue

@@ -0,0 +1,125 @@
+<template>
+    <div class="question-info-container">
+        <vuescroll ref="answer-record" @handle-scroll="checkBackTop">
+            <Icon type="md-close" class="close-question-info" @click="closeAnswerDetail" />
+            <p class="question-label">留言/问题</p>
+            <div class="step-item-wrap dark-iview-input">
+                <p class="step-name">一次函数初阶</p>
+                <div v-for="(item,index) in questions" class="question-info-item">
+                    <p>
+                        <span class="student-label">{{item.student}}</span>
+                        <Time :time="item.time" style="margin-left:15px;display:inline-block;color:#CCCCCC;font-size: 12px;" />
+                    </p>
+                    <p class="question-info">
+                        {{item.info}}
+                    </p>
+                    <span v-if="!item.edit" @click="answerTheQue(index)" class="answer-label"><Icon type="ios-create" size="16" />回复</span>
+                    <div v-else>
+                        <Input v-model="value17" rows="5" maxlength="100" type="textarea" placeholder="Enter something..." style="width: 400px" />
+                        <Button size="small" @click="item.edit = false" style="vertical-align: bottom;display:block;margin-top:5px;">确认</Button>
+                    </div>
+
+                </div>
+            </div>
+            <div class="step-item-wrap dark-iview-input">
+                <p class="step-name">一次函数初阶</p>
+                <div v-for="(item,index) in questions" class="question-info-item">
+                    <p>
+                        <span class="student-label">{{item.student}}</span>
+                        <Time :time="item.time" style="margin-left:15px;display:inline-block;color:white;font-size: 12px;" />
+                    </p>
+                    <p class="question-info">
+                        {{item.info}}
+                    </p>
+                    <span v-if="!item.edit" @click="answerTheQue(index)" class="answer-label"><Icon type="ios-create" size="16" />回复</span>
+                    <div v-else>
+                        <Input v-model="value17" rows="5" maxlength="100" type="textarea" placeholder="Enter something..." style="width: 400px" />
+                        <Button size="small" @click="item.edit = false" style="vertical-align: bottom;display:block;margin-top:5px;">确认</Button>
+                    </div>
+
+                </div>
+            </div>
+            <div class="step-item-wrap dark-iview-input">
+                <p class="step-name">一次函数初阶</p>
+                <div v-for="(item,index) in questions" class="question-info-item">
+                    <p>
+                        <span class="student-label">{{item.student}}</span>
+                        <Time :time="item.time" style="margin-left:15px;display:inline-block;color:white;font-size: 12px;" />
+                    </p>
+                    <p class="question-info">
+                        {{item.info}}
+                    </p>
+                    <span v-if="!item.edit" @click="answerTheQue(index)" class="answer-label"><Icon type="ios-create" size="16" />回复</span>
+                    <div v-else>
+                        <Input v-model="value17" rows="5" maxlength="100" type="textarea" placeholder="Enter something..." style="width: 400px" />
+                        <Button size="small" @click="item.edit = false" style="vertical-align: bottom;display:block;margin-top:5px;">确认</Button>
+                    </div>
+
+                </div>
+            </div>
+        </vuescroll>
+    </div>
+</template>
+<script>
+    export default {
+        data() {
+            return {
+                value17:'',
+                questions: [
+                    {
+                        info:'css水平、垂直居中的写法,请至少写出4种?',
+                        student: '李政谦',
+                        time:'2020-08-03'
+                    },
+                    {
+                        info:'1rem、1em、1vh、1px各自代表的含义?',
+                        student:'黎秭瑞',
+                        time:'2020-08-04'
+                    },
+                    {
+                        info:'画一条0.5px的直线?',
+                        student:'曾泓博',
+                        time:'2020-08-04'
+                    },
+                    {
+                        info:'说一下盒模型?',
+                        student:'陈婧汐',
+                        time:'2020-08-04'
+                    },
+                    {
+                        info:'画一个三角形?',
+                        student:'赖昱贝',
+                        time:'2020-08-04'
+                    },
+                    {
+                        info:'清除浮动的几种方式,及原理?',
+                        student:'胥静宇',
+                        time:'2020-08-04'
+                    }
+                ]
+            }
+        },
+        methods: {
+            answerTheQue(index) {
+                this.$set(this.questions[index], 'edit', true)
+            },
+            closeAnswerDetail() {
+                this.$emit('closeAnswerDetail')
+            },
+            checkBackTop(vertical, horizontal, nativeEvent) {
+                console.log('.......')
+                if (vertical.scrollTop > 100) {
+                    this.showBack = true
+                } else {
+                    this.showBack = false
+                }
+            },
+        }
+    }
+</script>
+<style scoped lang="less">
+    @import "./QuestionInfo.less";
+</style>
+<style>
+
+</style>

+ 114 - 0
TEAMModelOS/ClientApp/src/view/selfstudy/StudyDetail.vue

@@ -0,0 +1,114 @@
+<template>
+    <transition name="fade" mode="out-in">
+        <div class="study-detail-container">
+            <Table :columns="columns" :data="data"></Table>
+        </div>
+    </transition>
+</template>
+<script>
+    export default {
+        components: {
+        },
+        props: {
+            studyData: {
+                type: Object,
+                default: () => {
+                    return {}
+                }
+            },
+            learnContent: {
+                type: Object,
+                default:() => {
+                    return {}
+                }
+            }
+        },
+        data() {
+            return {
+            }
+        },
+        methods: {
+            
+        },
+        computed: {
+            columns() {
+                let col = []
+                col.push({
+                    title: '学习阶段',
+                    key: 'keyName'
+                })
+                if (this.learnContent.pk == 'LearnProcess') {
+                    for (let index in this.learnContent.steps) {
+                        col.push({
+                            title: this.learnContent.steps[index].name,
+                            key: index,
+                            align: 'center'
+                        })
+                    }
+                }
+                return col
+            },
+            data() {
+                let data = [
+                    {
+                        keyName: '得分'
+                    },
+                    {
+                        keyName: '作答次数'
+                    },
+                    {
+                        keyName: '状态'
+                    },
+                    //{
+                    //    keyName: '尝试次数最多'
+                    //}
+                ]
+                if (this.learnContent.pk == 'LearnProcess') {
+                    for (let index in this.learnContent.steps) {
+                        if (this.studyData.steps[index]) {
+                            data[0][index] = this.studyData.steps[index].score
+                            data[1][index] = this.studyData.steps[index].count
+                            data[2][index] = this.studyData.steps[index].score >= 80 ? '已通过' : '未通过'
+                        } else {
+                            data[0][index] = '--'
+                            data[1][index] = '--'
+                            data[2][index] = '未进行'
+                        }
+                        
+                    }
+                } else {
+                    
+                }
+                return data
+                
+                return data
+            }
+        },
+        watch: {
+            studyData: {
+                handler(n, o) {
+                    console.log(this.studyData)
+                },
+                deep: true
+            }
+        }
+    }
+</script>
+<style scoped lang="less">
+    .study-detail-container {
+        background: white;
+        padding:20px 50px;
+        
+    }
+</style>
+<style>
+    .study-detail-container .ivu-table td {
+        color:black;
+    }
+    .study-detail-container .ivu-table-header thead tr th {
+        color:black;
+    }
+    .study-detail-container .ivu-table-row-hover {
+        background: unset;
+    }
+</style>

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

@@ -111,7 +111,7 @@ namespace TEAMModelOS.Controllers
                         if (listclass.IsNotEmpty()) {
                             List<CourseTime> courseTimes = new List<CourseTime>();
                             listclass.ForEach(x => {
-                                if (!data.classes.Select(m=>m.classroomCode).Contains(x.classroomCode)) {
+                                if (data.classes.Select(m=>m.classroomCode).Contains(x.classroomCode)) {
                                     courseTimes.Add(x.courseTime);
                                 }
                             });