Browse Source

私人-->个人

liqk 4 years ago
parent
commit
85a8a3715b
23 changed files with 609 additions and 82 deletions
  1. 1 1
      TEAMModelGrpc/Protos/CourseService.proto
  2. 1 1
      TEAMModelGrpc/Protos/KnowledgeService.proto
  3. 2 2
      TEAMModelGrpc/TEAMModelOS.GRPC.xml
  4. 1 1
      TEAMModelOS.Service/Models/CommonInfo/Knowledge.cs
  5. 1 1
      TEAMModelOS.Service/TEAMModelOS.Model.xml
  6. 28 3
      TEAMModelOS/ClientApp/src/components/learnactivity/ProgressHistogram.vue
  7. 3 3
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/courseManage.js
  8. 3 3
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/courseManage.js
  9. 5 5
      TEAMModelOS/ClientApp/src/view/coursemgmt/AdminCourseClassroom.vue
  10. 5 5
      TEAMModelOS/ClientApp/src/view/coursemgmt/CourseClassroom.vue
  11. 1 1
      TEAMModelOS/ClientApp/src/view/evaluation/components/BasePoints.vue
  12. 1 1
      TEAMModelOS/ClientApp/src/view/knowledge-point/index/Index.vue
  13. 2 2
      TEAMModelOS/ClientApp/src/view/learnactivity/CreateEvaluation.vue
  14. 1 1
      TEAMModelOS/ClientApp/src/view/learnactivity/ImportCreate.vue
  15. 4 4
      TEAMModelOS/ClientApp/src/view/newcourse/CourseClassroom.vue
  16. 3 3
      TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.vue
  17. 108 0
      TEAMModelOS/ClientApp/src/view/selfstudy/ActivityInfo.less
  18. 163 31
      TEAMModelOS/ClientApp/src/view/selfstudy/ActivityInfo.vue
  19. 111 0
      TEAMModelOS/ClientApp/src/view/selfstudy/LearnProgress.less
  20. 151 0
      TEAMModelOS/ClientApp/src/view/selfstudy/LearnProgress.vue
  21. 11 11
      TEAMModelOS/ClientApp/src/view/selfstudy/SelfLearn.vue
  22. 2 2
      TEAMModelOS/ClientApp/src/view/syllabus/newSyllabus/operation/BaseKnowledge.vue
  23. 1 1
      TEAMModelOS/Controllers/School/CourseController.cs

+ 1 - 1
TEAMModelGrpc/Protos/CourseService.proto

@@ -76,7 +76,7 @@ message BaseInfo {
 
 //课程
 message Course {
-   //学校编码 如果是教师人知识点 则为 personal(写死) 否则为学校编码
+   //学校编码 如果是教师人知识点 则为 personal(写死) 否则为学校编码
    string scopeCode = 1;
    //基础信息
    BaseInfo baseInfo = 2;

+ 1 - 1
TEAMModelGrpc/Protos/KnowledgeService.proto

@@ -69,7 +69,7 @@ message Knowledge {
    string alias = 4;
    //学科
    string subjectCode = 5;
-   //学校编码 如果是教师人知识点为醍摩豆id 否则为学校编码
+   //学校编码 如果是教师人知识点为醍摩豆id 否则为学校编码
    string scopeCode = 6;
    int32 order = 7;
    //删除状态0 删除 1 有效

+ 2 - 2
TEAMModelGrpc/TEAMModelOS.GRPC.xml

@@ -1011,7 +1011,7 @@
         </member>
         <member name="P:TMDGrpc.CourseService.Course.ScopeCode">
              <summary>
-            学校编码 如果是教师人知识点 则为 personal(写死) 否则为学校编码
+            学校编码 如果是教师人知识点 则为 personal(写死) 否则为学校编码
              </summary>
         </member>
         <member name="F:TMDGrpc.CourseService.Course.BaseInfoFieldNumber">
@@ -1887,7 +1887,7 @@
         </member>
         <member name="P:TMDGrpc.KnowledgeService.Knowledge.ScopeCode">
              <summary>
-            学校编码 如果是教师人知识点为醍摩豆id 否则为学校编码
+            学校编码 如果是教师人知识点为醍摩豆id 否则为学校编码
              </summary>
         </member>
         <member name="F:TMDGrpc.KnowledgeService.Knowledge.OrderFieldNumber">

+ 1 - 1
TEAMModelOS.Service/Models/CommonInfo/Knowledge.cs

@@ -22,7 +22,7 @@ namespace TEAMModelOS.Service.Models
             points = new List<string>();
         }
         /// <summary>
-        /// 学校编码 如果是教师人知识点为醍摩豆id 否则为学校编码 
+        /// 学校编码 如果是教师人知识点为醍摩豆id 否则为学校编码 
         /// </summary>
         [PartitionKey]
         [Required(ErrorMessage = "{0} 必须填写")]

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

@@ -141,7 +141,7 @@
         </member>
         <member name="P:TEAMModelOS.Service.Models.Knowledge.code">
             <summary>
-            学校编码 如果是教师人知识点为醍摩豆id 否则为学校编码 
+            学校编码 如果是教师人知识点为醍摩豆id 否则为学校编码 
             </summary>
         </member>
         <member name="P:TEAMModelOS.Service.Models.Knowledge.type">

+ 28 - 3
TEAMModelOS/ClientApp/src/components/learnactivity/ProgressHistogram.vue

@@ -3,6 +3,18 @@
 </template>
 <script>
     export default {
+        props: {
+            countData: {
+                type: Object,
+                default: () => {
+                    return {
+                        xAxisData: [],
+                        seriesData: [],
+                        studentCount:0
+                    }
+                }
+            }
+        },
         data() {
             return {
                 dataIndex: 1,
@@ -26,7 +38,7 @@
                     },
                     xAxis: {
                         type: 'category',
-                        data: ['一次函数初阶', '一次函数进阶', '一次函数高阶', '一次函数总结'],
+                        data: [],
                         axisLabel: {
                             color: 'white'
                         }
@@ -49,7 +61,7 @@
                     series: [
                         {
                             stack: '总量',
-                            data: [42, 29, 19, 5],
+                            data: [],
                             type: 'bar',
                             itemStyle: {
                                 color: "#69EFEF"
@@ -64,7 +76,7 @@
                         },
                         {
                             stack: '总量',
-                            data: [8, 21, 31, 45],
+                            data: [],
                             type: 'bar',
                             itemStyle: {
                                 color: "#AAAAAA"
@@ -87,6 +99,19 @@
             this.progressHistogram.on('click', (params) => {
                 this.$emit('clickStep', params)
             })
+        },
+        watch: {
+            countData: {
+                handler(n, o) {
+                    this.option.xAxis.data = this.countData.xAxisData
+                    this.option.series[0].data = this.countData.seriesData
+                    for (let item of this.countData.seriesData) {
+                        this.option.series[1].data.push(this.countData.studentCount - item)
+                    }
+                },
+                deep: true,
+                immediate: true
+            }
         }
     }
 </script>

+ 3 - 3
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/courseManage.js

@@ -34,7 +34,7 @@ export default {
     },
     syllabus: {
         schoolSyllabus: '校本课纲',
-        personalSyllabus: '人课纲',
+        personalSyllabus: '人课纲',
         period: '学制:',
         subject: '学科:',
         grade: '年级:',
@@ -74,7 +74,7 @@ export default {
         studentTableC5: '组别',
         studentTableC6: '组名',
         addClassroomProp1: '选择预设教室',
-        addClassroomProp2: '新建人教室',
+        addClassroomProp2: '新建人教室',
         chooseClassroom: '请选择系统的教室',
         searchHolder1: '关键字搜索',
         classroomTableC1: '教室编码',
@@ -82,7 +82,7 @@ export default {
         classroomTableC3: '学制',
         classroomTableC4: '年级',
         classroomTableC5: '学生人数',
-        personalClassroomTitle: '创建人教室',
+        personalClassroomTitle: '创建人教室',
         invitationCode: '教室邀请码',
         classroomName: '教室名称',
         closeChoose: '关闭选择教室',

+ 3 - 3
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/courseManage.js

@@ -34,7 +34,7 @@ export default {
     },
     syllabus: {
         schoolSyllabus: '校本課綱',
-        personalSyllabus: '人課綱',
+        personalSyllabus: '人課綱',
         period: '學制:',
         subject: '學科:',
         grade: '年級:',
@@ -73,7 +73,7 @@ export default {
         studentTableC5: '組別',
         studentTableC6: '組名',
         addClassroomProp1: '選擇預設教室',
-        addClassroomProp2: '新建人教室',
+        addClassroomProp2: '新建人教室',
         chooseClassroom: '請選擇系統的教室',
         searchHolder1: '關鍵字搜索',
         classroomTableC1: '教室編碼',
@@ -81,7 +81,7 @@ export default {
         classroomTableC3: '學制',
         classroomTableC4: '年級',
         classroomTableC5: '學生人數',
-        personalClassroomTitle: '創建人教室',
+        personalClassroomTitle: '創建人教室',
         invitationCode: '教室邀請碼',
         classroomName: '教室名稱',
         closeChoose: '關閉選擇教室',

+ 5 - 5
TEAMModelOS/ClientApp/src/view/coursemgmt/AdminCourseClassroom.vue

@@ -305,7 +305,7 @@
                 periodList: [],
                 currentSetIndex: 0,
                 systemClassroomList: [],//系统教室列表
-                classroomList: [],//系统教室和人教室列表
+                classroomList: [],//系统教室和人教室列表
                 systemColumns: [
                     {
                         title: '教室编码',
@@ -590,19 +590,19 @@
                             this.$api.courseMgmt.saveOrUpdateCourse([this.courseInfo]).then(
                                 (res) => {
                                     if (res.error == null) {
-                                        this.$Message.success('人教室添加成功!')
+                                        this.$Message.success('人教室添加成功!')
                                     } else {
-                                        this.$Message.error('人教室添加失败!')
+                                        this.$Message.error('人教室添加失败!')
                                     }
                                 },
                                 (err) => {
-                                    this.$Message.error('人教室添加失败!')
+                                    this.$Message.error('人教室添加失败!')
                                 }
                             )
                         }
                     },
                     (err) => {
-                        this.$Message.error('人教室添加失败!')
+                        this.$Message.error('人教室添加失败!')
                     }
                 )
             },

+ 5 - 5
TEAMModelOS/ClientApp/src/view/coursemgmt/CourseClassroom.vue

@@ -262,7 +262,7 @@
                 periodList: [],
                 currentSetIndex: 0,
                 systemClassroomList: [],//系统教室列表
-                classroomList:[],//系统教室和人教室列表
+                classroomList:[],//系统教室和人教室列表
                 systemColumns: [
                     {
                         title: '教室编码',
@@ -486,19 +486,19 @@
                             this.$api.courseMgmt.saveOrUpdateCourse([this.courseInfo]).then(
                                 (res) => {
                                     if (res.error == null) {
-                                        this.$Message.success('人教室添加成功!')
+                                        this.$Message.success('人教室添加成功!')
                                     } else {
-                                        this.$Message.error('人教室添加失败!')
+                                        this.$Message.error('人教室添加失败!')
                                     }
                                 },
                                 (err) => {
-                                    this.$Message.error('人教室添加失败!')
+                                    this.$Message.error('人教室添加失败!')
                                 }
                             )
                         }
                     },
                     (err) => {
-                        this.$Message.error('人教室添加失败!')
+                        this.$Message.error('人教室添加失败!')
                     }
                 )
             },

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

@@ -45,7 +45,7 @@
                style="z-index:99999">
             <span>知识点类型</span>
             <Select v-model="newPointType" style="margin:10px 0">
-                <Option value="private">人知识点</Option>
+                <Option value="private">人知识点</Option>
                 <Option value="school">校本知识点</Option>
             </Select>
             <span>知识点名称</span>

+ 1 - 1
TEAMModelOS/ClientApp/src/view/knowledge-point/index/Index.vue

@@ -345,7 +345,7 @@
                 })
             },
 
-            // 校本知识块与人切换
+            // 校本知识块与人切换
             handleTabClick(index) {
                 this.checkedPointList = []
                 this.tabIndex = index

+ 2 - 2
TEAMModelOS/ClientApp/src/view/learnactivity/CreateEvaluation.vue

@@ -247,7 +247,7 @@ import router from '../../router'
                 classList: [
                     {
                         value: '0',
-                        label: ' 人课程'
+                        label: ' 人课程'
                     },
                     {
                         value: '1',
@@ -588,7 +588,7 @@ import router from '../../router'
                 this.evaluationInfo = routerData
 
                 /**
-                处理无接口数据时返回为人课程或校本课程
+                处理无接口数据时返回为人课程或校本课程
                 */  
                 if (routerData.testPaper.length > 1) {
                     this.evaluationInfo.classType = '1'

+ 1 - 1
TEAMModelOS/ClientApp/src/view/learnactivity/ImportCreate.vue

@@ -31,7 +31,7 @@
            @on-ok="comfirmSync"
            @on-cancel="cancelSync">
 
-      <p style="font-size:18px;line-height:50px;padding-top:15px;">是否同步导入的题目到人题库?</p>
+      <p style="font-size:18px;line-height:50px;padding-top:15px;">是否同步导入的题目到人题库?</p>
     </Modal>
     <Modal v-model="comfirmPreviewStatus"
            ok-text="是"

+ 4 - 4
TEAMModelOS/ClientApp/src/view/newcourse/CourseClassroom.vue

@@ -380,19 +380,19 @@
                             }]).then(
                                 (res) => {
                                     if (res.error == null) {
-                                        this.$Message.success('人教室添加成功!')
+                                        this.$Message.success('人教室添加成功!')
                                     } else {
-                                        this.$Message.error('人教室添加失败!')
+                                        this.$Message.error('人教室添加失败!')
                                     }
                                 },
                                 (err) => {
-                                    this.$Message.error('人教室添加失败!')
+                                    this.$Message.error('人教室添加失败!')
                                 }
                             )
                         }
                     },
                     (err) => {
-                        this.$Message.error('人教室添加失败!')
+                        this.$Message.error('人教室添加失败!')
                     }
                 )
             },

+ 3 - 3
TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.vue

@@ -139,7 +139,7 @@
             }
         },
         methods: {
-            //删除人课程
+            //删除人课程
             delCourse() {
 
             },
@@ -156,7 +156,7 @@
             showComfirmDelete() {
 
             },
-            //添加人课程
+            //添加人课程
             showAddCourse() {
                 this.addCusStatus = true
             },
@@ -192,7 +192,7 @@
                 })
                 
             },
-            //获取人课程列表
+            //获取人课程列表
             getPersonalCus() {
                 let requestData = {
                     code: this.$store.state.userInfo.TEAMModelId

+ 108 - 0
TEAMModelOS/ClientApp/src/view/selfstudy/ActivityInfo.less

@@ -80,4 +80,112 @@
     padding: 3px;
     font-weight: 400;
     vertical-align: middle;
+}
+.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;
 }

+ 163 - 31
TEAMModelOS/ClientApp/src/view/selfstudy/ActivityInfo.vue

@@ -15,35 +15,80 @@
                 <div @click="selectActivity(index)" v-for="(item,index) in classList" :class="index == curClassIndex ? 'activity-target-item block-bg block-bg-active':'block-bg activity-target-item'">
                     <p class="target-name">
                         {{item.classroomName}}
-                        <span class="class-type-label" :title="item.code === $store.state.userInfo.schoolCode ? '校本班级':'人班级'">{{item.code === $store.state.userInfo.schoolCode ? '校':'私'}}</span>
-                        <span class="activity-status" :style="{background: item[id] ? '#19be6b':'#ed4014'}">{{item[id] ? '进行中':'未分享'}}</span>
+                        <span class="class-type-label" :title="item.code === $store.state.userInfo.schoolCode ? '校本班级':'人班级'">{{item.code === $store.state.userInfo.schoolCode ? '校':'私'}}</span>
+                        <span class="activity-status" :style="{background: item[learnContent.id] ? '#19be6b':'#ed4014'}">{{item[learnContent.id] ? '进行中':'未分享'}}</span>
                     </p>
                     <p style="margin-top:6px;">
                         <span class="info-label">活动类型:</span>
-                        <span class="info-value">{{ !item[id] ? '-- --' : item[id].type == 1 ? '自主学习':'课前预习'}}</span>
+                        <span class="info-value">{{ !item[learnContent.id] ? '-- --' : item[learnContent.id].type == 1 ? '自主学习':'课前预习'}}</span>
                     </p>
-                    <p style="margin-top:6px;" v-if="item[id]">
-                        <span class="info-label">{{ item[id].type == 1 ? '开始时间:' : '结束时间:' }}</span>
-                        <span class="info-value">{{item[id].type == 1 ? $tools.formatTime(item[id].createTime,'yyyy-MM-dd') : $tools.formatTime(item[id].endTime)}}</span>
+                    <p style="margin-top:6px;" v-if="item[learnContent.id]">
+                        <span class="info-label">{{ item[learnContent.id].type == 1 ? '开始时间:' : '结束时间:' }}</span>
+                        <span class="info-value">{{item[learnContent.id].type == 1 ? $tools.formatTime(item[learnContent.id].createTime,'yyyy-MM-dd') : $tools.formatTime(item[learnContent.id].endTime)}}</span>
                     </p>
                     <p style="margin-top:6px;" v-else>
                         <span class="info-label">结束时间:</span>
                         <span class="info-value">{{item.endTime ? item.endTime:'-- --'}}</span>
                     </p>
                 </div>
-
-
-
             </div>
             <div slot="right" class="activity-detail-info">
                 <vuescroll>
-                    <div v-if="classList[curClassIndex][id]">
+                    <div v-if="classList[curClassIndex][learnContent.id]">
                         <transition name="fade" mode="out-in">
-                            <LearnProgress v-if="!showAnswer" @goToAnswer="goToAnswer"></LearnProgress>
-                            
+                            <!--<LearnProgress v-if="!showAnswer" @goToAnswer="goToAnswer"></LearnProgress>-->
+                            <div class="learn-progress-container" v-if="!showAnswer">
+                                <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 :countData="countData" @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="curStudent" filterable style="display: inline-block;width: 200px;" size="small">
+                                                <Option v-for="item in studentData" :value="item.value" :key="item.value">{{ item.label }}</Option>
+                                            </Select>
+                                        </div>
+                                        <Table :columns="studentColumns" :data="studentPageData" :show-header="true" style="margin:0px 25px;" no-data-text="此班暂无学生">
+                                            <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>
                         </transition>
                         <transition name="fade" mode="out-in">
-                            <AnswerRecord v-if="showAnswer" @closeAnswerDetail="closeAnswerDetail"></AnswerRecord>
+                            <AnswerRecord v-if="showAnswer" @closeAnswerDetail="showAnswer = false"></AnswerRecord>
                         </transition>
                     </div>
                     <NoData v-else textContent="此班未分享,暂无学习数据" style="padding-top:200px;"></NoData>
@@ -84,20 +129,25 @@
     </div>
 </template>
 <script>
+    import ProgressHistogram from '@/components/learnactivity/ProgressHistogram.vue'
     import NoData from '@/common/NoData.vue'
     import Loading from '@/common/Loading.vue'
-    import LearnProgress from '@/view/selflearning/LearnProgress.vue'
+    //import LearnProgress from './LearnProgress.vue'
     import AnswerDetail from './AnswerDetail.vue'
     import AnswerRecord from './AnswerRecord.vue'
 
     export default {
         components: {
-            LearnProgress,AnswerDetail,AnswerRecord,NoData,Loading
+            AnswerDetail,AnswerRecord,NoData,Loading,ProgressHistogram
         },
         props: {
-            id: {
-                default: '',
-                type: String
+            learnContent: {
+                default: () => {
+                    return {
+                        id:''
+                    }
+                },
+                type: Object
             },
             classList: {
                 default: () => {
@@ -108,14 +158,28 @@
         },
         data() {
             return {
-                publishTypeList: [
-                    {
-                        value: '0',
-                        label:'立即发布'
-                    },
+                recordList: [
                     {
-                        value: '1',
-                        label:'定时发布'
+                        id: '',
+                        code: 'habook0001',
+                        pk: 'Record',
+                        steps: [
+                            {
+                                resource: [
+                                    {
+                                        order: 0,
+                                        costTime: ''
+                                    }
+                                ],
+                                answer: [
+                                    {
+                                        order: 0,
+                                        ans: '',
+                                        costTime:''
+                                    }
+                                ]
+                            }
+                        ]
                     }
                 ],
                 activityTypeList: [
@@ -147,15 +211,65 @@
                 publishStatus: false,
                 showAnswer: false,
                 curClassIndex:0,
-                split1: 0.25
+                split1: 0.25,
+                
+                pageSize: 10,
+                currentPage:1,
+                dataIndex: 1,
+                curStudent: '',
+                studentData: [],
+                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
+            },
+            //学生表格分页
+            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')
+            },
+            /**
+             * 确认分享学习内容
+             * */
             confirmPublish() {
                 this.$refs.activityInfo.validate((valid) => {
                     if (valid) {
                         let requestData = {
-                            id: this.id,
+                            id: this.learnContent.id,
                             code: this.classList[this.curClassIndex].classroomCode,
                             endTime: this.activityInfo.endTime ? this.activityInfo.endTime: 0,
                             status: 200,
@@ -181,16 +295,34 @@
             },
             goToAnswer() {
                 this.showAnswer = true
-            },
-            closeAnswerDetail() {
-                this.showAnswer = false
             }
         },
         mounted() {
             
+        },
+        computed: {
+            countData() {
+                if (this.learnContent.pk == 'LearnProcess') {
+                    let labels = this.learnContent.steps.map((item) => {
+                        return item.name
+                    })
+                    return {
+                        xAxisData: labels,
+                        seriesData: [42, 29, 19, 5],
+                        studentCount: 50
+                    }
+                } else {
+                    let labels = [this.learnContent.name]
+                    return {
+                        xAxisData: labels,
+                        seriesData: [42],
+                        studentCount: 50
+                    }
+                }
+            },
         },
         created() {
-          
+          this.getPageData()
         }
     }
 </script>

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

@@ -0,0 +1,111 @@
+@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;
+}

+ 151 - 0
TEAMModelOS/ClientApp/src/view/selfstudy/LearnProgress.vue

@@ -0,0 +1,151 @@
+<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 :countData="countData" @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>
+                </div>
+                <Table :columns="studentColumns" :data="studentPageData" :show-header="true" style="margin:0px 25px;" no-data-text="此班暂无学生">
+                    <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 {
+                countData: {
+                    xAxisData: ['一次函数初阶', '一次函数进阶', '一次函数高阶', '一次函数总结'],
+                    seriesData: [42, 29, 19, 5],
+                    studentCount: 50
+                },
+                pageSize: 10,
+                currentPage:1,
+                dataIndex: 1,
+                model11: '',
+                currentView: 0,
+                studentList: [],
+                classroomList: [],
+                data: [
+                    {
+                        name: '一次函数基础',
+                        progress: 50
+                    },
+                    {
+                        name: '一次函数进阶',
+                        progress: 50,
+
+                    },
+                    {
+                        name: '一次函数高阶',
+                        progress: 50,
+
+                    },
+                    {
+                        name: '一次函数总结',
+                        progress: 50,
+                    },
+                ],
+                studentData: [],
+                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>

+ 11 - 11
TEAMModelOS/ClientApp/src/view/selfstudy/SelfLearn.vue

@@ -29,11 +29,11 @@
             </div>
             <div class="order-learn-main-body dark-iview-split" v-if="listType == 'order' && orderLearnList[currentLearnIndex]">
                 <OrderLearnInfo v-if="currentTabIndex == 0" :orderLearnInfo="orderLearnList[currentLearnIndex]"></OrderLearnInfo>
-                <ActivityInfo v-else :id="id" :classList="classList"></ActivityInfo>
+                <ActivityInfo v-else :learnContent="learnContent" :classList="classList"></ActivityInfo>
             </div>
             <div class="order-learn-main-body dark-iview-split" v-else-if="listType == 'unit' && unitList[currentUnitIndex]">
                 <UnitInfo v-if="currentTabIndex == 0"  :unitInfo="unitList[currentUnitIndex]"></UnitInfo>
-                <ActivityInfo v-else :id="id" :classList="classList"></ActivityInfo>
+                <ActivityInfo v-else :learnContent="learnContent" :classList="classList"></ActivityInfo>
             </div>
         </div>
         <Modal v-model="editStatus"
@@ -97,26 +97,26 @@ import { faTruck } from '@fortawesome/free-solid-svg-icons'
                     }
                 }
             },
-            id() {
+            learnContent() {
                 if (this.listType == 'order') {
                     if (this.orderLearnList.length > 0) {
-                        return this.orderLearnList[this.currentLearnIndex].id
+                        return this.orderLearnList[this.currentLearnIndex]
                     } else {
-                        return ''
+                        return {}
                     }
                 } else {
                     if (this.unitList.length > 0) {
-                        return this.unitList[this.currentUnitIndex].id
+                        return this.unitList[this.currentUnitIndex]
                     } else {
-                        return ''
+                        return {}
                     }
                 }
             }
         },
         watch: {
-            id: {
+            learnContent: {
                 handler(n, o) {
-                    if (this.requestIds.indexOf(this.id) == -1) {
+                    if (this.requestIds.indexOf(this.learnContent.id) == -1) {
                         this.findTask()
                     }
                 },
@@ -218,7 +218,7 @@ import { faTruck } from '@fortawesome/free-solid-svg-icons'
             //查询学习任务
             findTask() {
                 this.$api.learnActivity.findTask({
-                    id: this.id
+                    id: this.learnContent.id
                 }).then(
                     (res) => {
                         if (res.error == null) {
@@ -231,7 +231,7 @@ import { faTruck } from '@fortawesome/free-solid-svg-icons'
                                     }
                                 }
                             }
-                            this.requestIds.push(this.id)
+                            this.requestIds.push(this.learnContent.id)
                             console.log(this.classList)
                         } else {
                             this.$Message.error('API error!')

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

@@ -11,7 +11,7 @@
                 <div class="select-content">
                     <div class="knowledge-left">
                         <div :class='["knowledge-left-item",activeIndex === 0 ? "item-active" : ""]' @click="onChangeOrigin(0)">校本知识点</div>
-                        <div :class='["knowledge-left-item",activeIndex === 1 ? "item-active" : ""]' @click="onChangeOrigin(1)">人知识点</div>
+                        <div :class='["knowledge-left-item",activeIndex === 1 ? "item-active" : ""]' @click="onChangeOrigin(1)">人知识点</div>
                     </div>
                     <div class="knowledge-right">
                         <vuescroll>
@@ -121,7 +121,7 @@
                 })
             },
 
-            // 获取人知识点仓库
+            // 获取人知识点仓库
             getPrivatePoints() {
                 this.currentParams.code = this.$store.state.userInfo.TEAMModelId
                 this.$api.knowledge.GetSchoolPoints(this.currentParams).then(res => {

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

@@ -215,7 +215,7 @@ namespace TEAMModelOS.Controllers
             List<Course> coursesp = await _cosmos.FindByDict<Course>(new Dictionary<string, object> { { "code", request.@params } });
             if (courses.IsNotEmpty())
             {
-                //人教室
+                //人教室
                 if (coursesp.IsNotEmpty())
                 {
                     coursesp.ForEach(x =>