Browse Source

Merge branch 'develop5.0-tmd' of http://52.130.252.100:10000/TEAMMODEL/TEAMModelOS into develop5.0-tmd

OnePsycho 3 years ago
parent
commit
3dcc1617c8

+ 2 - 1
TEAMModeBI/Controllers/DingDingStruc/DDStructController.cs

@@ -394,7 +394,8 @@ namespace TEAMModeBI.Controllers.DingDingStruc
                                             {
                                                 foreach (var obj in _roles.EnumerateArray())
                                                 {
-                                                    if (obj.GetString().Equals($"assistant"))
+                                                    //初始定义顾问的assistant 更改为assist
+                                                    if (obj.GetString().Equals($"assist"))
                                                     {
                                                         roles.Add(obj.GetString());
                                                     }

+ 49 - 3
TEAMModelOS/ClientApp/src/assets/iconfont/demo_index.html

@@ -54,6 +54,18 @@
       <div class="content unicode" style="display: block;">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+              <span class="icon iconfont">&#xe6fb;</span>
+                <div class="name">培训专区</div>
+                <div class="code-name">&amp;#xe6fb;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe658;</span>
+                <div class="name">提交</div>
+                <div class="code-name">&amp;#xe658;</div>
+              </li>
+          
             <li class="dib">
               <span class="icon iconfont">&#xe657;</span>
                 <div class="name">icon-头像</div>
@@ -966,9 +978,9 @@
 <pre><code class="language-css"
 >@font-face {
   font-family: 'iconfont';
-  src: url('iconfont.woff2?t=1638010010922') format('woff2'),
-       url('iconfont.woff?t=1638010010922') format('woff'),
-       url('iconfont.ttf?t=1638010010922') format('truetype');
+  src: url('iconfont.woff2?t=1638152855697') format('woff2'),
+       url('iconfont.woff?t=1638152855697') format('woff'),
+       url('iconfont.ttf?t=1638152855697') format('truetype');
 }
 </code></pre>
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -994,6 +1006,24 @@
       <div class="content font-class">
         <ul class="icon_lists dib-box">
           
+          <li class="dib">
+            <span class="icon iconfont icon-offline"></span>
+            <div class="name">
+              培训专区
+            </div>
+            <div class="code-name">.icon-offline
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-submit"></span>
+            <div class="name">
+              提交
+            </div>
+            <div class="code-name">.icon-submit
+            </div>
+          </li>
+          
           <li class="dib">
             <span class="icon iconfont icon-is-leader"></span>
             <div class="name">
@@ -2362,6 +2392,22 @@
       <div class="content symbol">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-offline"></use>
+                </svg>
+                <div class="name">培训专区</div>
+                <div class="code-name">#icon-offline</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-submit"></use>
+                </svg>
+                <div class="name">提交</div>
+                <div class="code-name">#icon-submit</div>
+            </li>
+          
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#icon-is-leader"></use>

+ 11 - 3
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.css

@@ -1,8 +1,8 @@
 @font-face {
   font-family: "iconfont"; /* Project id 2000444 */
-  src: url('iconfont.woff2?t=1638010010922') format('woff2'),
-       url('iconfont.woff?t=1638010010922') format('woff'),
-       url('iconfont.ttf?t=1638010010922') format('truetype');
+  src: url('iconfont.woff2?t=1638152855697') format('woff2'),
+       url('iconfont.woff?t=1638152855697') format('woff'),
+       url('iconfont.ttf?t=1638152855697') format('truetype');
 }
 
 .iconfont {
@@ -13,6 +13,14 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.icon-offline:before {
+  content: "\e6fb";
+}
+
+.icon-submit:before {
+  content: "\e658";
+}
+
 .icon-is-leader:before {
   content: "\e657";
 }

File diff suppressed because it is too large
+ 1 - 1
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.js


+ 14 - 0
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.json

@@ -5,6 +5,20 @@
   "css_prefix_text": "icon-",
   "description": "",
   "glyphs": [
+    {
+      "icon_id": "1013267",
+      "name": "培训专区",
+      "font_class": "offline",
+      "unicode": "e6fb",
+      "unicode_decimal": 59131
+    },
+    {
+      "icon_id": "9512645",
+      "name": "提交",
+      "font_class": "submit",
+      "unicode": "e658",
+      "unicode_decimal": 58968
+    },
     {
       "icon_id": "868307",
       "name": "icon-头像",

BIN
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.ttf


BIN
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.woff


BIN
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.woff2


+ 1 - 1
TEAMModelOS/ClientApp/src/common/UploadModal.vue

@@ -296,7 +296,7 @@ export default {
         },
         // modal确认事件
         modalOk() {
-            if (!this.tags.period.length) {
+            if (this.$store.state.userInfo.hasSchool && !this.tags.period.length) {
                 this.$Message.warning('请至少选择一个学段')
                 this.modalLoading = false
                 setTimeout(() => {

+ 2 - 2
TEAMModelOS/ClientApp/src/components/public/personalPhoto/Index.less

@@ -4,8 +4,8 @@
     justify-content: center;
     .avatar{
         display: flex;
-        width: 33px;
-		height: 33px;
+        width: 40px;
+		height: 40px;
         border-radius: 50%;
         align-items: center;
         justify-content: center;

+ 2 - 0
TEAMModelOS/ClientApp/src/locale/lang/en-US/cusMgt.js

@@ -118,6 +118,8 @@ export default {
     justRmList:'Remove from course list only (not actually deleted, list can continue to be used)',
     permDelList:'Permanent deletion (other courses using this list will also be deleted)',
     //ManageClass.vue
+    stuMgt:'學生管理',
+    classNotice:'班級公告',
     classLabel:'Class:',
     stuCount:'Student Number: ',
     autoGroup:'Auto Grouping',

+ 2 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/cusMgt.js

@@ -118,6 +118,8 @@ export default {
     justRmList:'仅从课程名单移除(没有真正删除,名单可继续使用)',
     permDelList:'永久删除 (如果其他课程在使用名单也会关联删除)',
     //ManageClass.vue
+    stuMgt:'学生管理',
+    classNotice:'班级公告',
     classLabel:'班级:',
     stuCount:'学生人数:',
     autoGroup:'自动分组',

+ 2 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/cusMgt.js

@@ -118,6 +118,8 @@ export default {
     justRmList:'僅從課程名單移除(沒有真正刪除,名單可繼續使用)',
     permDelList:'永久刪除 (如果其他課程在使用名單也會關聯刪除)',
     //ManageClass.vue
+    stuMgt:'學生管理',
+    classNotice:'班級公告',
     classLabel: '班級:',
     stuCount: '學生人數:',
     autoGroup: '自動分組',

+ 2 - 2
TEAMModelOS/ClientApp/src/view/classmgt/ClassMgt.vue

@@ -2,8 +2,8 @@
     <div class="class-mgt-container">
         <div class="class-mgt-header">
             <div class="tab-box">
-                <span @click="tabClick('student')" :class="['pane',routerName == 'student' ? 'active':'']">学生管理</span>
-                <span @click="tabClick('classnotice')" :class="['pane',routerName == 'classnotice' || routerName == 'createClassNotice' ? 'active':'']">班级公告</span>
+                <span @click="tabClick('student')" :class="['pane',routerName == 'student' ? 'active':'']">{{$t('cusMgt.stuMgt')}}</span>
+                <span @click="tabClick('classnotice')" :class="['pane',routerName == 'classnotice' || routerName == 'createClassNotice' ? 'active':'']">{{$t('cusMgt.classNotice')}}</span>
             </div>
         </div>
         <router-view></router-view>

+ 1 - 1
TEAMModelOS/ClientApp/src/view/homepage/NewHomePage.vue

@@ -451,9 +451,9 @@ export default {
     },
     created() {
         this.getAcCount()
-        this.getStudyTime()
         if (this.$store.state.userInfo.hasSchool) {
             this.findNotice()
+            this.getStudyTime()
         }
     },
     mounted() {

+ 10 - 0
TEAMModelOS/ClientApp/src/view/statistics/Dashboard.less

@@ -208,8 +208,18 @@
 .teacher-name {
     font-size: 16px;
     margin-left: 10px;
+    flex: 1;
 }
 .people-unit{
     font-size: 12px;
     color: #757575;
+}
+.hour-count-wrap{
+    float: right;
+
+}
+.teacher-hour-num{
+    width: 30px;
+    display: inline-block;
+    margin-left: 5px;
 }

+ 13 - 2
TEAMModelOS/ClientApp/src/view/statistics/Dashboard.vue

@@ -120,8 +120,18 @@
         <Modal v-model="viewStatus" :title="groupData[viewIndex] ? groupData[viewIndex].groupName : ''" footer-hide>
             <div v-if="groupData[viewIndex]">
                 <div v-for="(item,index) in groupData[viewIndex].members" :key="index" class="teacher-item">
-                    <PersonalPhoto :name="item.name" :picture="item.picture" style="display: inline-block;" />
+                    <PersonalPhoto :name="item.name" :picture="item.picture"/>
                     <span class="teacher-name">{{item.name}}</span>
+                    <span class="hour-count-wrap">
+                        <Icon custom="iconfont icon-online" title="线上研修学时"/>
+                        <span class="teacher-hour-num">{{item.onlineTime}}</span>
+                        <Icon custom="iconfont icon-submit" title="认证材料学时"/>
+                        <span class="teacher-hour-num">{{item.currency.submitTime}}</span>
+                        <Icon custom="iconfont icon-offline" title="校本研修学时"/>
+                        <span class="teacher-hour-num">{{item.offlineTime}}</span>
+                        <Icon custom="iconfont icon-cus-video" title="课堂实录学时"/>
+                        <span class="teacher-hour-num">{{item.classTime}}</span>
+                    </span>
                 </div>
             </div>
         </Modal>
@@ -203,6 +213,7 @@ export default {
     },
     methods: {
         viewMember(index) {
+            console.log(this.groupData[index])
             this.viewIndex = index
             this.viewStatus = true
         },
@@ -242,7 +253,7 @@ export default {
                         let joinCount = res.teacherTrains.length
                         let onlineCount = res.teacherTrains.filter(item => item.onlineTime >= 20).length
                         let offlineCount = res.teacherTrains.filter(item => item.offlineTime >= 10).length
-                        let submitCount = res.teacherTrains.filter(item => item.currency.currency >= 15).length
+                        let submitCount = res.teacherTrains.filter(item => item.currency.submitTime >= 15).length
                         let classCount = res.teacherTrains.filter(item => item.classTime >= 5).length
                         console.log(classCount)
                         this.rate1 = joinCount ? parseInt(onlineCount * 100 / joinCount) : 0

+ 11 - 9
TEAMModelOS/ClientApp/src/view/statistics/TableData.vue

@@ -8,7 +8,7 @@
             </Button>
         </div>
         <vuescroll>
-            <Table :columns="columns1" :data="hourDataShow" :loading="loading" stripe >
+            <Table :columns="columns1" :data="hourDataShow" :loading="loading" stripe>
                 <template slot-scope="{ row }" slot="header">
                     <PersonalPhoto :name="row.name" :picture="row.picture" style="display: inline-block;" />
                 </template>
@@ -191,20 +191,22 @@ export default {
             })
         },
         exportData() {
+            console.log(this.hourData)
             let downloadData = this.hourData.map(item => {
                 return {
-                    tmdname: item.tmdname,
+                    name: item.name,
+                    groupName:item.groupName,
                     onlineTime: item.onlineTime,
-                    offlinelTime: item.offlinelTime,
-                    schoolScoreTime: item.schoolScoreTime,
-                    classVideoTime: item.classVideoTime,
-                    alltime: item.alltime > 50 ? 50 : item.alltime,
-                    status: item.alltime < 50 ? '未完成' : '已完成'
+                    offlineTime: item.offlineTime,
+                    submitTime: item.currency.submitTime,
+                    classTime: item.classTime,
+                    alltime: item.totalTime > 50 ? 50 : item.totalTime,
+                    status: item.totalTime < 50 ? '未完成' : '已完成'
                 }
             })
             const params = {
-                title: this.columns1.map(i => i.title),
-                key: ['tmdname', 'onlineTime', 'offlinelTime', 'schoolScoreTime', 'classVideoTime', 'alltime', 'status'],
+                title: ['姓名', '组别', '线上研修学时', '校本研修学时', '认证材料学时', '课堂记录学时', '总学时', '完成状态'],
+                key: ['name', 'groupName', 'onlineTime', 'offlineTime', 'submitTime', 'classTime', 'alltime', 'status'],
                 data: downloadData,
                 autoWidth: true,
                 filename: '学时统计'

+ 17 - 4
TEAMModelOS/ClientApp/src/view/train/TrainDetail.vue

@@ -790,7 +790,7 @@ export default {
         },
         closePreview() {
             var myVideo = document.getElementById('previewVideo') // 获取视频video
-            if(myVideo) myVideo.pause()
+            if (myVideo) myVideo.pause()
             this.previewStatus = false
         },
         getSizeByBytes(bytes) {
@@ -1310,9 +1310,22 @@ export default {
                                     teacher.status = 0
                                 }
                             })
-							/* 临时处理 */
-							let classTargets = this.trainInfo.groupLists[0][this.trainInfo.targets[0]]
-                            this.tableData = res.members.filter(i => classTargets.includes(i.groupName))
+                            /**
+                             * 筛选发布对象组别的老师
+                             * 研修活动发布对象(tchList)默认就是研修名单
+                             * 具体老师需要更具发布研修选择对象即名单组别(groupLists)进行名单内部筛选
+                             */
+                            if (this.trainInfo.groupLists && this.trainInfo.groupLists.length) {
+                                let listId = this.trainInfo.tchLists[0]
+                                let groupFilter = this.trainInfo.groupLists.find(item => item[listId])
+                                if (groupFilter) {
+                                    this.tableData = res.members.filter(i => groupFilter[listId].includes(i.groupName))
+                                } else {
+                                    this.tableData = res.members
+                                }
+                            } else {
+                                this.tableData = res.members
+                            }
                             if (this.trainInfo.settings.includes('survey')) {
                                 this.getSurveyInfo()
                             }

+ 2 - 2
TEAMModelOS/Properties/launchSettings.json

@@ -11,7 +11,7 @@
   "profiles": {
     "IIS Express": {
       "commandName": "IISExpress",
-      "launchBrowser": true,
+      "launchBrowser": false,
       "launchUrl": "selectModule",
       "environmentVariables": {
         "ASPNETCORE_ENVIRONMENT": "Development"
@@ -19,7 +19,7 @@
     },
     "TEAMModelOS": {
       "commandName": "Project",
-      "launchBrowser": true,
+      "launchBrowser": false,
       //"launchUrl": "login",
       "applicationUrl": "https://localhost:5001;http://localhost:5000",
       "environmentVariables": {