Browse Source

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

zhouj1203@hotmail.com 3 years ago
parent
commit
3a2a1ea5f7
100 changed files with 1727 additions and 5337 deletions
  1. 73 1
      TEAMModelFunction/MonitorServicesBus.cs
  2. 1 0
      TEAMModelFunction/local.settings.json
  3. 3 3
      TEAMModelOS.SDK/Models/Cosmos/BI/DingDingUser.cs
  4. 44 0
      TEAMModelOS.SDK/Models/Cosmos/Common/GroupList.cs
  5. 0 45
      TEAMModelOS.SDK/Models/Cosmos/Common/JoinList.cs
  6. 3 0
      TEAMModelOS.SDK/Models/Cosmos/Student/Student.cs
  7. 15 0
      TEAMModelOS.SDK/Models/Dtos/ItemCondDto.cs
  8. 1 0
      TEAMModelOS/ClientApp/src/api/http.js
  9. 3 0
      TEAMModelOS/ClientApp/src/api/studentWeb.js
  10. BIN
      TEAMModelOS/ClientApp/src/assets/image/area_exam.png
  11. BIN
      TEAMModelOS/ClientApp/src/assets/image/area_study.png
  12. BIN
      TEAMModelOS/ClientApp/src/assets/image/area_survey.png
  13. BIN
      TEAMModelOS/ClientApp/src/assets/image/area_vote.png
  14. BIN
      TEAMModelOS/ClientApp/src/assets/image/jyzx_app.png
  15. BIN
      TEAMModelOS/ClientApp/src/assets/image/ok_point.png
  16. BIN
      TEAMModelOS/ClientApp/src/assets/image/school_study.png
  17. BIN
      TEAMModelOS/ClientApp/src/assets/image/school_survey.png
  18. BIN
      TEAMModelOS/ClientApp/src/assets/image/school_vote.png
  19. BIN
      TEAMModelOS/ClientApp/src/assets/image/study_point.png
  20. 1 0
      TEAMModelOS/ClientApp/src/assets/student-web/component_styles/home-view.less
  21. 2 2
      TEAMModelOS/ClientApp/src/common/BaseLayout.vue
  22. 94 63
      TEAMModelOS/ClientApp/src/common/BaseSelectSchool.vue
  23. 3 0
      TEAMModelOS/ClientApp/src/common/BaseUserPoptip.vue
  24. 1 1
      TEAMModelOS/ClientApp/src/common/UploadModal.vue
  25. 19 9
      TEAMModelOS/ClientApp/src/components/coursemgt/StudentList.vue
  26. 10 5
      TEAMModelOS/ClientApp/src/components/homework/BaseHwTable.vue
  27. 1 1
      TEAMModelOS/ClientApp/src/components/questionnaire/BasePie.vue
  28. 2 2
      TEAMModelOS/ClientApp/src/components/questionnaire/BaseProgress.vue
  29. 1 0
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseBar.vue
  30. 1 0
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseEntryBar.vue
  31. 13 1
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseLevelPie.vue
  32. 6 3
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseMyTable.vue
  33. 13 1
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BasePie.vue
  34. 7 6
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseScatter.vue
  35. 7 6
      TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseTestScatter.vue
  36. 5 1
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/ClassmateCommentPages.vue
  37. 18 16
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/Homework.vue
  38. 14 11
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/HomeworkFeedback.vue
  39. 10 20
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReport.vue
  40. 2 2
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperTest.vue
  41. 18 3
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperView.vue
  42. 37 0
      TEAMModelOS/ClientApp/src/components/student-web/HomeView/CourseListView.vue
  43. 1 0
      TEAMModelOS/ClientApp/src/components/student-web/HomeView/MissionListCard.vue
  44. 7 1
      TEAMModelOS/ClientApp/src/css/site.css
  45. 6 4
      TEAMModelOS/ClientApp/src/locale/lang/en-US/cusMgt.js
  46. 3 3
      TEAMModelOS/ClientApp/src/locale/lang/en-US/evaluation.js
  47. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/en-US/home.js
  48. 4 0
      TEAMModelOS/ClientApp/src/locale/lang/en-US/jyzx.js
  49. 9 9
      TEAMModelOS/ClientApp/src/locale/lang/en-US/learnActivity.js
  50. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/en-US/login.js
  51. 3 3
      TEAMModelOS/ClientApp/src/locale/lang/en-US/schoolMgmt.js
  52. 3 3
      TEAMModelOS/ClientApp/src/locale/lang/en-US/stuAccount.js
  53. 53 51
      TEAMModelOS/ClientApp/src/locale/lang/en-US/studentWeb.js
  54. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/en-US/syllabus.js
  55. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/en-US/system.js
  56. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/en-US/teachContent.js
  57. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/en-US/teachermgmt.js
  58. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/en-US/utils.js
  59. 2 0
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/cusMgt.js
  60. 4 0
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/jyzx.js
  61. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/login.js
  62. 2 0
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/studentWeb.js
  63. 2 0
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/cusMgt.js
  64. 2 2
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/evaluation.js
  65. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/home.js
  66. 5 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/jyzx.js
  67. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/learnActivity.js
  68. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/login.js
  69. 13 11
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/studentWeb.js
  70. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/system.js
  71. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/teachermgmt.js
  72. 2 2
      TEAMModelOS/ClientApp/src/router/routes.js
  73. 1 0
      TEAMModelOS/ClientApp/src/service/User.js
  74. 1 1
      TEAMModelOS/ClientApp/src/static/video.json
  75. 6 1
      TEAMModelOS/ClientApp/src/store/module/user.js
  76. 23 7
      TEAMModelOS/ClientApp/src/utils/directive.js
  77. 3 3
      TEAMModelOS/ClientApp/src/utils/editorTools.js
  78. 0 4960
      TEAMModelOS/ClientApp/src/utils/wangEditor.js
  79. 3 1
      TEAMModelOS/ClientApp/src/view/abilityMgmt/Index.vue
  80. 0 1
      TEAMModelOS/ClientApp/src/view/classmgt/CreateNotice.vue
  81. 1 0
      TEAMModelOS/ClientApp/src/view/evaluation/bank/ExerciseList.vue
  82. 15 4
      TEAMModelOS/ClientApp/src/view/evaluation/index/CreateExercises.vue
  83. 25 6
      TEAMModelOS/ClientApp/src/view/evaluation/index/CreatePaper.vue
  84. 8 5
      TEAMModelOS/ClientApp/src/view/homepage/AcCountPie.vue
  85. 142 0
      TEAMModelOS/ClientApp/src/view/homepage/HourDetail.vue
  86. 2 2
      TEAMModelOS/ClientApp/src/view/homepage/MinTable.vue
  87. 355 0
      TEAMModelOS/ClientApp/src/view/homepage/NewHomePage.less
  88. 488 0
      TEAMModelOS/ClientApp/src/view/homepage/NewHomePage.vue
  89. 1 1
      TEAMModelOS/ClientApp/src/view/homepage/TeachScore.vue
  90. 1 1
      TEAMModelOS/ClientApp/src/view/homepage/TechScore.vue
  91. 14 5
      TEAMModelOS/ClientApp/src/view/jyzx/Question.vue
  92. 9 1
      TEAMModelOS/ClientApp/src/view/jyzx/Vote.vue
  93. 1 1
      TEAMModelOS/ClientApp/src/view/jyzx/classMemoir.vue
  94. 1 1
      TEAMModelOS/ClientApp/src/view/jyzx/discuss.vue
  95. 1 1
      TEAMModelOS/ClientApp/src/view/jyzx/index.less
  96. 1 1
      TEAMModelOS/ClientApp/src/view/jyzx/offline.less
  97. 42 23
      TEAMModelOS/ClientApp/src/view/jyzx/topicPublish.vue
  98. 1 1
      TEAMModelOS/ClientApp/src/view/knowledge-point/index/Index.less
  99. 20 5
      TEAMModelOS/ClientApp/src/view/knowledge-point/index/Index.vue
  100. 0 0
      TEAMModelOS/ClientApp/src/view/learnactivity/CreateSchoolEva.vue

+ 73 - 1
TEAMModelFunction/MonitorServicesBus.cs

@@ -15,6 +15,7 @@ using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos;
 using TEAMModelOS.SDK.Models.Cosmos;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
+using TEAMModelOS.Services.Common;
 
 
 namespace TEAMModelFunction
 namespace TEAMModelFunction
 {
 {
@@ -374,7 +375,7 @@ namespace TEAMModelFunction
                 //TODO学习活动
                 //TODO学习活动
                 //await FixActivity(client, stuListChange, "Learn");
                 //await FixActivity(client, stuListChange, "Learn");
                 //TODO作业活动
                 //TODO作业活动
-                // await FixActivity(client, stuListChange, "Homework");
+                await StuListService.FixActivity(client,_dingDing, stuListChange, "Homework");
 
 
                 if (stuListChange.type==null||!stuListChange.type.Equals("research")) {
                 if (stuListChange.type==null||!stuListChange.type.Equals("research")) {
                     //课程名单变动修改学生课程关联信息
                     //课程名单变动修改学生课程关联信息
@@ -387,6 +388,77 @@ namespace TEAMModelFunction
             }
             }
         }
         }
 
 
+        [FunctionName("ItemCond")]
+        public async Task ItemCond([ServiceBusTrigger("%Azure:ServiceBus:ItemCondQueue%", Connection = "Azure:ServiceBus:ConnectionString")] string msg)
+        {
+            try
+            {
+                var jsonMsg = JsonDocument.Parse(msg);
+                if (jsonMsg.RootElement.ValueKind.Equals(JsonValueKind.Array))
+                {
+                    List<ItemCondDto> itemCondDtos = msg.ToObject<List<ItemCondDto>>();
+                    foreach (var itemCondDto in itemCondDtos)
+                    {
+                        var value = await _azureRedis.GetRedisClient(8).HashGetAsync($"{itemCondDto.key}", $"{itemCondDto.filed}");
+                        ItemCond itemCond = null;
+                        var client = _azureCosmos.GetCosmosClient();
+                        string containerId = itemCondDto.scope.Equals("private") ? "Teacher" : "School";
+                        if (value != default && !value.IsNullOrEmpty)
+                        {
+
+                            itemCond = value.ToString().ToObject<ItemCond>();
+                        }
+                        else
+                        {
+                            try
+                            {
+                                itemCond = await client.GetContainer(Constant.TEAMModelOS, containerId).ReadItemAsync<ItemCond>(itemCondDto.filed, new PartitionKey($"{itemCondDto.key}"));
+                            }
+                            catch (CosmosException)
+                            {
+                                itemCond = new ItemCond() { id = itemCondDto.filed, code = $"{itemCondDto.key}", pk = "ItemCond", ttl = -1, count = 0, grades = new List<GradeCount>(), subjects = new List<SubjectCount>() };
+                            };
+                        }
+                        ItemService.CountItemCond(itemCondDto.newItem, itemCondDto.odlItem, itemCond);
+                        await client.GetContainer(Constant.TEAMModelOS, containerId).UpsertItemAsync<ItemCond>(itemCond, new PartitionKey(itemCond.code));
+                        await _azureRedis.GetRedisClient(8).HashSetAsync($"{itemCondDto.key}", $"{itemCondDto.filed}", itemCond.ToJsonString());
+                    }
+                }
+                else {
+                    ItemCondDto itemCondDto = msg.ToObject< ItemCondDto>();
+                    var value = await _azureRedis.GetRedisClient(8).HashGetAsync($"{itemCondDto.key}", $"{itemCondDto.filed}");
+                    ItemCond itemCond = null;
+                    var client = _azureCosmos.GetCosmosClient();
+                    string containerId = itemCondDto.scope.Equals("private") ? "Teacher" : "School";
+                    if (value != default && !value.IsNullOrEmpty)
+                    {
 
 
+                        itemCond = value.ToString().ToObject<ItemCond>();
+                    }
+                    else
+                    {
+                        try
+                        {
+                            itemCond = await client.GetContainer(Constant.TEAMModelOS, containerId).ReadItemAsync<ItemCond>(itemCondDto.filed, new PartitionKey($"{itemCondDto.key}"));
+                        }
+                        catch (CosmosException)
+                        {
+                            itemCond = new ItemCond() { id = itemCondDto.filed, code = $"{itemCondDto.key}", pk = "ItemCond", ttl = -1, count = 0, grades = new List<GradeCount>(), subjects = new List<SubjectCount>() };
+                        };
+                    }
+                    ItemService.CountItemCond(itemCondDto.newItem, itemCondDto.odlItem, itemCond);
+                    await client.GetContainer(Constant.TEAMModelOS, containerId).UpsertItemAsync<ItemCond>(itemCond, new PartitionKey(itemCond.code));
+                    await _azureRedis.GetRedisClient(8).HashSetAsync($"{itemCondDto.key}", $"{itemCondDto.filed}", itemCond.ToJsonString());
+                }
+            }
+            catch (CosmosException ex )
+            {
+                await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-ServiceBus,ItemCond()\n{ex.Message}\n{ex.StackTrace}\n{msg}", GroupNames.醍摩豆服務運維群組);
+            }
+            catch (Exception ex)
+            {
+                await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-ServiceBus,ItemCond()\n{ex.Message}\n{ex.StackTrace}\n{msg}", GroupNames.醍摩豆服務運維群組);
+            }
+        }
     }
     }
 }
 }

+ 1 - 0
TEAMModelFunction/local.settings.json

@@ -12,6 +12,7 @@
     "Azure:Redis:ConnectionString": "106.12.23.251:6379,password=habook,ssl=false,abortConnect=False,writeBuffer=10240",
     "Azure:Redis:ConnectionString": "106.12.23.251:6379,password=habook,ssl=false,abortConnect=False,writeBuffer=10240",
     "Azure:ServiceBus:ActiveTask": "dep-active-task",
     "Azure:ServiceBus:ActiveTask": "dep-active-task",
     "Azure:ServiceBus:NoticeTask": "dep-notice-task",
     "Azure:ServiceBus:NoticeTask": "dep-notice-task",
+    "Azure:ServiceBus:ItemCondQueue": "dep-itemcond",
     "Option:Location": "China-Dep",
     "Option:Location": "China-Dep",
     "FUNCTIONS_WORKER_RUNTIME": "dotnet"
     "FUNCTIONS_WORKER_RUNTIME": "dotnet"
   }  
   }  

+ 3 - 3
TEAMModelOS.SDK/Models/Cosmos/BI/DingDingUser.cs

@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Text;
 using System.Text;
 
 
@@ -25,8 +25,8 @@ namespace TEAMModelOS.SDK.Models.Cosmos.BI
         public string deptPositionListTitle { get; set; }
         public string deptPositionListTitle { get; set; }
         public string hiredDate { get; set; }
         public string hiredDate { get; set; }
         public bool active { get; set; }
         public bool active { get; set; }
-        public List<rolelist> roleList { get; set; }
-        public class rolelist
+        public List<Role> roles { get; set; }
+        public class Role
         {
         {
             public string id { get; set; }
             public string id { get; set; }
             public string name { get; set; }
             public string name { get; set; }

+ 44 - 0
TEAMModelOS.SDK/Models/Cosmos/Common/GroupList.cs

@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace TEAMModelOS.SDK.Models
+{
+    public  class GroupList:CosmosEntity
+    {
+        public GroupList() {
+            pk = "GroupList";
+        }
+        public string name { get; set; }
+        //标记该名单唯一code
+        public string no { get; set; }
+        public string periodId { get; set; }
+        public string scope { get; set; }
+        public string school { get; set; }
+        public string creatorId { get; set; }
+        /// <summary>
+        /// student 学生名单类型,教研组research,学科组subject,好友friend,管理manage等
+        /// </summary>
+        public string type { get; set; } = "student";
+        public List<Member> members { get; set; } = new List<Member>();
+
+    }
+    public class Member
+    {
+        /// <summary>
+        /// 账号id
+        /// </summary>
+        public string id { get; set; }
+        //学生所在的学校
+        public string code { get; set; }
+        /// <summary>
+        ///类型 1 tmdid,2 student
+        /// </summary>
+        public int type { get; set; }
+        /// <summary>
+        /// 头像
+        /// </summary>
+        public string picture { get; set; }
+       // public string role { get; set; }
+    }
+}

+ 0 - 45
TEAMModelOS.SDK/Models/Cosmos/Common/JoinList.cs

@@ -1,45 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace TEAMModelOS.SDK.Models.Cosmos.Common
-{
-
-    /*
-     * {
-            "id": "28936",
-            "code": "JoinList-hbcn",
-            "school": [
-                "schoolClassid1"
-            ],
-            "teacher": [
-                "stulistGUID"
-            ]
-        },
-        {
-            "id": "tmdid",
-            "code": "JoinList-tmdid",
-            "school": [
-                "schoolClassid1"
-            ],
-            "teacher": [
-                "schoolClassid1"
-            ]
-        }
-     */
-
-    /// <summary>
-    /// 暂时不使用
-    /// 学生已经加入的名单列表
-    /// 分学校创建的学生名单和教师创建的私人名单
-    /// </summary>
-    public class JoinList : CosmosEntity
-    {
-        public JoinList()
-        {
-            pk = "JoinList";
-        }
-        public List<string> school { get; set; } = new List<string>();
-        public List<string> teacher { get; set; } = new List<string>();
-    }
-}

+ 3 - 0
TEAMModelOS.SDK/Models/Cosmos/Student/Student.cs

@@ -24,5 +24,8 @@ namespace TEAMModelOS.SDK.Models
         public string groupId { get; set; }
         public string groupId { get; set; }
         public string groupName { get; set; }
         public string groupName { get; set; }
         public string periodId { get; set; }
         public string periodId { get; set; }
+        //补充留级信息
+        //0在校,1留级,2退学 3毕业
+        public int status { get; set; } = 0;
     }
     }
 }
 }

+ 15 - 0
TEAMModelOS.SDK/Models/Dtos/ItemCondDto.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace TEAMModelOS.SDK.Models
+{
+    public  class ItemCondDto
+    {
+        public ItemInfo newItem { get; set; }
+        public ItemInfo odlItem { get; set; }
+        public string key { get; set; }
+        public string filed { get; set; }
+        public string scope { get; set; }
+    }
+}

+ 1 - 0
TEAMModelOS/ClientApp/src/api/http.js

@@ -8,6 +8,7 @@ const NO_ACCESS_API = [
     '/oauth2/login',
     '/oauth2/login',
     '/oauth2/token',
     '/oauth2/token',
     '/service/sandsms/pin',
     '/service/sandsms/pin',
+    '/service/sandmail/pin',
     '/teacher/init/get-school-list',
     '/teacher/init/get-school-list',
     '/student/login',
     '/student/login',
     '/area/lang',
     '/area/lang',

+ 3 - 0
TEAMModelOS/ClientApp/src/api/studentWeb.js

@@ -189,6 +189,9 @@ export default {
         return post('/blob/sas-r', data)
         return post('/blob/sas-r', data)
     },
     },
     //查询文件授权
     //查询文件授权
+    /* 
+        现在统一使用 this.$tools.getBlobSas 来获取授权
+    */
     getFileSas: function (data) {
     getFileSas: function (data) {
         return post('/blob/sas-url-r', data)
         return post('/blob/sas-url-r', data)
     },
     },

BIN
TEAMModelOS/ClientApp/src/assets/image/area_exam.png


BIN
TEAMModelOS/ClientApp/src/assets/image/area_study.png


BIN
TEAMModelOS/ClientApp/src/assets/image/area_survey.png


BIN
TEAMModelOS/ClientApp/src/assets/image/area_vote.png


BIN
TEAMModelOS/ClientApp/src/assets/image/jyzx_app.png


BIN
TEAMModelOS/ClientApp/src/assets/image/ok_point.png


BIN
TEAMModelOS/ClientApp/src/assets/image/school_study.png


BIN
TEAMModelOS/ClientApp/src/assets/image/school_survey.png


BIN
TEAMModelOS/ClientApp/src/assets/image/school_vote.png


BIN
TEAMModelOS/ClientApp/src/assets/image/study_point.png


+ 1 - 0
TEAMModelOS/ClientApp/src/assets/student-web/component_styles/home-view.less

@@ -261,6 +261,7 @@
                         border-radius: 10px;
                         border-radius: 10px;
                         background-color: #24B880;
                         background-color: #24B880;
                         display: inline-block;
                         display: inline-block;
+                        margin-right: 5px;
                     }
                     }
                     & > p{
                     & > p{
                         font-size: 16px;
                         font-size: 16px;

+ 2 - 2
TEAMModelOS/ClientApp/src/common/BaseLayout.vue

@@ -224,7 +224,7 @@ export default {
                             role: 'admin',
                             role: 'admin',
                             permission: 'notify-upd',
                             permission: 'notify-upd',
                             menuName: 'schoolNotify',
                             menuName: 'schoolNotify',
-                            isShow: this.$store.state.config.srvAdr == 'China'
+                            isShow: true
                         },
                         },
                         // 授权管理
                         // 授权管理
                         {
                         {
@@ -345,7 +345,7 @@ export default {
                     role: 'admin|teacher',
                     role: 'admin|teacher',
                     permission: '',
                     permission: '',
                     subName: 'scTrain',
                     subName: 'scTrain',
-                    isShow: true,
+                    isShow: this.$store.state.config.srvAdr == 'China',
                     child: [{
                     child: [{
                         icon: 'iconfont icon-policy',
                         icon: 'iconfont icon-policy',
                         name: this.$t('system.menu.policy'),
                         name: this.$t('system.menu.policy'),

+ 94 - 63
TEAMModelOS/ClientApp/src/common/BaseSelectSchool.vue

@@ -1,24 +1,44 @@
 <template>
 <template>
 	<div class="base-school-select">
 	<div class="base-school-select">
 		<div v-if="!joinSchools || !joinSchools.length">{{ noJoinSchoolContent }}</div>
 		<div v-if="!joinSchools || !joinSchools.length">{{ noJoinSchoolContent }}</div>
-		<Dropdown @on-click="onSchoolSelect" v-else>
-			<img class="school-logo" :src="curSchool.picture" style="width: 25px;"/>
-			<a href="javascript:void(0)"
-				:class="['base-user-post', joinSchools && joinSchools.length === 1 ? 'single-school' : '']">
-				{{ curSchool.name }}
-				<Icon type="ios-arrow-down"></Icon>
-			</a>
-			<DropdownMenu slot="list">
-				<div v-for="(item,index) in areaSchs" :key="index">
-					<DropdownItem :name="index">
-						<div class="school-item">
-							<img :src="item.picture || defaultLogo" alt="" style="border-radius: 50%;">
-							<span>{{ item.name }}</span>
-						</div>
-					</DropdownItem>
-				</div>
-			</DropdownMenu>
-		</Dropdown>
+		<div v-else>
+			<!-- 学校切换 -->
+			<Dropdown @on-click="onSchoolSelect">
+				<img class="school-logo" :src="curSchool.picture" style="width: 25px;"/>
+				<a href="javascript:void(0)"
+					:class="['base-user-post', areaSchs && areaSchs.length === 1 ? 'single-school' : '']">
+					{{ curSchool.name }}
+					<Icon type="ios-arrow-down"></Icon>
+				</a>
+				<DropdownMenu slot="list">
+					<div v-for="(item,index) in areaSchs" :key="index">
+						<DropdownItem :name="index">
+							<div class="school-item">
+								<img :src="item.picture || defaultLogo" alt="" style="border-radius: 50%;">
+								<span>{{ item.name }}</span>
+							</div>
+						</DropdownItem>
+					</div>
+				</DropdownMenu>
+			</Dropdown>
+			<!-- 学段切换 -->
+			<Dropdown @on-click="onPeriodSelect" style="margin-left: 20px;">
+				<a href="javascript:void(0)" :class="['base-user-post', periods && periods.length === 1 ? 'single-school' : '']">
+					{{ curPeriod.name }}
+					<Icon type="ios-arrow-down"></Icon>
+				</a>
+				<DropdownMenu slot="list">
+					<div v-for="(item,index) in periods" :key="index">
+						<DropdownItem :name="index">
+							<div class="school-item">
+								<span>{{ item.name }}</span>
+							</div>
+						</DropdownItem>
+					</div>
+				</DropdownMenu>
+			</Dropdown>
+		</div>
+		
 	</div>
 	</div>
 	</div>
 	</div>
 </template>
 </template>
@@ -38,7 +58,11 @@
 				},
 				},
 				joinSchools: [],
 				joinSchools: [],
 				areaSchs:[],
 				areaSchs:[],
-				areaList:[]
+				areaList:[],
+				periods:[],
+				curPeriod:{
+					name:''
+				}
 			}
 			}
 		},
 		},
 		created() {
 		created() {
@@ -49,6 +73,7 @@
 			let user = this.$store.state.user.userProfile || JSON.parse(decodeURIComponent(localStorage.user_profile, "utf-8"));
 			let user = this.$store.state.user.userProfile || JSON.parse(decodeURIComponent(localStorage.user_profile, "utf-8"));
 			let schoolProfile = localStorage.school_profile ? JSON.parse(decodeURIComponent(localStorage.school_profile,
 			let schoolProfile = localStorage.school_profile ? JSON.parse(decodeURIComponent(localStorage.school_profile,
 				"utf-8")) : undefined;
 				"utf-8")) : undefined;
+			let localPeriodInfo =  localStorage.curPeriod ? JSON.parse(localStorage.curPeriod) : null
 			this.user.schools = user.schools
 			this.user.schools = user.schools
 			let joinSchools = user.schools && user.schools.length ? user.schools.filter(i => i.status === 'join') : null
 			let joinSchools = user.schools && user.schools.length ? user.schools.filter(i => i.status === 'join') : null
 			
 			
@@ -64,22 +89,27 @@
 				})
 				})
 			}
 			}
 			this.joinSchools = joinSchools
 			this.joinSchools = joinSchools
-			console.log(JSON.stringify(joinSchools))
-			console.log(Boolean(schoolProfile))
 			// 如果本地存储已经有保存学校信息 则刷新后会直接读取之前的学校信息
 			// 如果本地存储已经有保存学校信息 则刷新后会直接读取之前的学校信息
-			if (schoolProfile && joinSchools.length) {
-				console.log(schoolProfile.school_base.id)
-				this.curSchool = joinSchools.filter(i => i.schoolId === schoolProfile.school_base.id)[0]
-				this.$store.commit('setSchoolCode', this.curSchool.schoolId)
-				this.areaList = [...new Set(this.joinSchools.map(i => i.area).map(j => j.name))]
-				this.areaSchs = this.joinSchools.filter(i => i.area.name === this.curSchool.area.name)
-			} else if (joinSchools && joinSchools.length) {
-				// 拿到用户管理的schools 必须是已加入的学校
-				this.curSchool = user.defaultschool ? joinSchools.filter(i => i.schoolId === user.defaultschool)[0] :
-					joinSchools[0]
+			if (joinSchools.length) {
+				if(schoolProfile){
+					this.curSchool = joinSchools.find(i => i.schoolId === schoolProfile.school_base.id)
+				}else{
+					this.curSchool = user.defaultschool ? joinSchools.find(i => i.schoolId === user.defaultschool) : joinSchools[0]
+				}
 				this.$store.commit('setSchoolCode', this.curSchool.schoolId)
 				this.$store.commit('setSchoolCode', this.curSchool.schoolId)
 				this.areaList = [...new Set(this.joinSchools.map(i => i.area).map(j => j.name))]
 				this.areaList = [...new Set(this.joinSchools.map(i => i.area).map(j => j.name))]
 				this.areaSchs = this.joinSchools.filter(i => i.area.name === this.curSchool.area.name)
 				this.areaSchs = this.joinSchools.filter(i => i.area.name === this.curSchool.area.name)
+				this.periods = this.$store.state.user.schoolProfile.school_base.period
+				this.periods && (this.curPeriod = this.periods[localPeriodInfo ? localPeriodInfo.periodIndex : 0])
+				if(!localPeriodInfo){
+					this.curPeriod.periodIndex = 0
+					// 保存Vuex
+					this.$store.commit('user/setCurPeriod',this.curPeriod)
+					// 保存Stroage
+					localStorage.setItem('curPeriod',JSON.stringify(this.curPeriod))
+				}else{
+					this.$store.commit('user/setCurPeriod',localPeriodInfo)
+				}
 			} else {
 			} else {
 				this.$Message.warning(this.$t('utils.noShoolTip'))
 				this.$Message.warning(this.$t('utils.noShoolTip'))
 			}
 			}
@@ -88,9 +118,6 @@
 		},
 		},
 		methods: {
 		methods: {
 			async onSchoolSelect(val) {
 			async onSchoolSelect(val) {
-				console.error(val)
-				console.log(this.user.schools)
-				console.log(this.joinSchools)
 				/* 如果没有加入的学校或者加入的学校都没有归属区 */
 				/* 如果没有加入的学校或者加入的学校都没有归属区 */
 				if(this.joinSchools.length){
 				if(this.joinSchools.length){
 					this.joinSchools.forEach(i => {
 					this.joinSchools.forEach(i => {
@@ -107,6 +134,22 @@
 				this.$EventBus.$emit('onGlobalLoading', true)
 				this.$EventBus.$emit('onGlobalLoading', true)
 				this.curSchool = this.areaSchs[val]
 				this.curSchool = this.areaSchs[val]
 				let schoolCode = this.areaSchs[val].schoolId
 				let schoolCode = this.areaSchs[val].schoolId
+				this.changeCurSchool(schoolCode)
+			},
+			
+			/* 学段选择 */
+			onPeriodSelect(val){
+				this.curPeriod = this.periods[val]
+				// 保存当前学段的下标 提供给部分模块的select使用
+				this.curPeriod.periodIndex = val
+				// 保存Vuex
+				this.$store.commit('user/setCurPeriod',this.curPeriod)
+				// 保存Stroage
+				localStorage.setItem('curPeriod',JSON.stringify(this.curPeriod))
+			},
+			
+			/* 学校切换后针对当前学校CODE进行操作 */
+			changeCurSchool(schoolCode){
 				this.$EventBus.$emit('onChangeSchool', {
 				this.$EventBus.$emit('onChangeSchool', {
 					schoolCode: schoolCode
 					schoolCode: schoolCode
 				})
 				})
@@ -117,18 +160,21 @@
 					if (res) {
 					if (res) {
 						this.$User.freshLogin()
 						this.$User.freshLogin()
 					}
 					}
+					setTimeout(() => {
+						this.$EventBus.$emit('onGlobalLoading', false)
+						console.log('切换学校了',this.curSchool,schoolCode)
+						console.log('当前学校的学段信息',this.$store.state.user.schoolProfile.school_base.id)
+						console.log('当前学校的学段信息',this.$store.state.user.schoolProfile.school_base.period)
+						this.periods = this.$store.state.user.schoolProfile.school_base.period
+						this.periods && (this.curPeriod = this.periods[0])
+						this.onPeriodSelect(0)
+					}, 500)
+					this.$router.push({
+						name: 'home'
+					})
 				});
 				});
-				setTimeout(() => {
-					this.$EventBus.$emit('onGlobalLoading', false)
-				}, 500)
-				this.$router.push({
-					name: 'home'
-				})
-			},
+			}
 		},
 		},
-		
-		
-
 		mounted() {
 		mounted() {
 			// 解绑之前的事件 防止多次触发
 			// 解绑之前的事件 防止多次触发
 			this.$EventBus.$off('onChangeSchool')
 			this.$EventBus.$off('onChangeSchool')
@@ -150,23 +196,8 @@
 				if(this.joinSchools && this.joinSchools.length){
 				if(this.joinSchools && this.joinSchools.length){
 					this.areaSchs = this.joinSchools.filter(i => i.area.name === params.areaName)
 					this.areaSchs = this.joinSchools.filter(i => i.area.name === params.areaName)
 					this.curSchool = params.schoolCode ? this.areaSchs.find(i => i.schoolId === params.schoolCode) : this.areaSchs[0]
 					this.curSchool = params.schoolCode ? this.areaSchs.find(i => i.schoolId === params.schoolCode) : this.areaSchs[0]
-					// sessionStorage.setItem('areaName',params)
-					// this.onSchoolSelect(0)
 					let schoolCode = this.curSchool.schoolId
 					let schoolCode = this.curSchool.schoolId
-					this.$EventBus.$emit('onChangeSchool', {
-						schoolCode: schoolCode
-					})
-					// 更新当前school_code
-					this.$store.dispatch('user/setSchoolCode', schoolCode)
-					// 更新当前school_profile以及access
-					this.$store.dispatch('user/checkSchoolProfile').then(res => {
-						if (res) {
-							this.$User.freshLogin()
-						}
-					});
-					this.$router.push({
-						name: 'home'
-					})
+					this.changeCurSchool(schoolCode)
 				}
 				}
 			})
 			})
 		},
 		},
@@ -212,9 +243,9 @@
 					display: inline-block;
 					display: inline-block;
 					width: 0;
 					width: 0;
 					height: 0;
 					height: 0;
-					border-right: solid 8px transparent;
-					border-left: solid 8px transparent;
-					border-top: solid 8px #d0d0d0;
+					border-right: solid 6px transparent;
+					border-left: solid 6px transparent;
+					border-top: solid 6px #16b1f3;
 					margin-left: 8px;
 					margin-left: 8px;
 					margin-bottom: 3px;
 					margin-bottom: 3px;
 				}
 				}

+ 3 - 0
TEAMModelOS/ClientApp/src/common/BaseUserPoptip.vue

@@ -107,6 +107,9 @@ export default {
             this.$router.push({
             this.$router.push({
                 name: goPlatform === 'area' ? 'area' : 'home'
                 name: goPlatform === 'area' ? 'area' : 'home'
             })
             })
+			if(goPlatform === 'area'){
+				localStorage.removeItem('curPeriod')
+			}
             localStorage.setItem('platform', this.curPlatform === 'area' ? 'school' : 'area')
             localStorage.setItem('platform', this.curPlatform === 'area' ? 'school' : 'area')
             this.curPlatform = goPlatform
             this.curPlatform = goPlatform
         },
         },

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

@@ -607,7 +607,7 @@ export default {
 
 
 .upload-file-item:hover {
 .upload-file-item:hover {
     /* color: white; */
     /* color: white; */
-    background: #585858;
+    background: var(--hover-text-color);
     border-radius: 5px;
     border-radius: 5px;
 }
 }
 
 

+ 19 - 9
TEAMModelOS/ClientApp/src/components/coursemgt/StudentList.vue

@@ -3,9 +3,9 @@
         <div class="student-filter-wrap">
         <div class="student-filter-wrap">
             <span style="margin-top:6px">{{$t('stuAccount.filterLabel')}}</span>
             <span style="margin-top:6px">{{$t('stuAccount.filterLabel')}}</span>
             <!-- 學制Select -->
             <!-- 學制Select -->
-            <Select v-model="searchPeriod" style="width:120px;" :placeholder="$t('stuAccount.periodHolder')" @on-change="filterData" :not-found-text="$t('stuAccount.noSchool')">
+            <!-- <Select v-model="searchPeriod" style="width:120px;" :placeholder="$t('stuAccount.periodHolder')" @on-change="filterData" :not-found-text="$t('stuAccount.noSchool')">
                 <Option v-for="(item,index) in periods" :value="item.id" :key="index">{{ item.name }}</Option>
                 <Option v-for="(item,index) in periods" :value="item.id" :key="index">{{ item.name }}</Option>
-            </Select>
+            </Select> -->
             <!-- 學級Select -->
             <!-- 學級Select -->
             <Select v-model="searchGrade" style="width:180px;margin-left:5px;" :placeholder="$t('stuAccount.gradeHolder')" :not-found-text="$t('stuAccount.sltPdFirst')" clearable @on-change="filterData">
             <Select v-model="searchGrade" style="width:180px;margin-left:5px;" :placeholder="$t('stuAccount.gradeHolder')" :not-found-text="$t('stuAccount.sltPdFirst')" clearable @on-change="filterData">
                 <Option v-for="(item, index) in years" :value="item.value" :key="index">{{ item.label }}</Option>
                 <Option v-for="(item, index) in years" :value="item.value" :key="index">{{ item.label }}</Option>
@@ -306,15 +306,25 @@ export default {
         }
         }
     },
     },
     watch: {
     watch: {
-        periods: {
+        // periods: {
+        //     handler(n, o) {
+        //         if (n && n.length) {
+        //             this.searchPeriod = n[0].id
+        //         }
+        //     },
+        //     deep: true,
+        //     immediate: true
+        // }
+        '$store.state.user.curPeriod': {
+            deep: true,
+            immediate: true,
             handler(n, o) {
             handler(n, o) {
-                if (n && n.length) {
-                    this.searchPeriod = n[0].id
+                if (n) {
+                    this.searchPeriod = n.id
+                    this.filterData()
                 }
                 }
-            },
-            deep: true,
-            immediate: true
-        }
+            }
+        },
     }
     }
 
 
 }
 }

+ 10 - 5
TEAMModelOS/ClientApp/src/components/homework/BaseHwTable.vue

@@ -337,11 +337,16 @@
 									},
 									},
 									on: {
 									on: {
 										click: async function() {
 										click: async function() {
-											let comments = await that.getStuComments(params.row)
-											console.log(comments)
-											that.commentList = comments.comments.filter(i => i.identity !== 'teacher')
-											that.mutualEvaluationModal = true
-											that.currentRateValue = comments.star
+											if (params.row.submit) {
+												let comments = await that.getStuComments(params.row)
+												console.log(comments)
+												that.commentList = comments.comments.filter(i => i.identity !== 'teacher')
+												that.mutualEvaluationModal = true
+												that.currentRateValue = comments.star
+											} else {
+												that.$Message.warning(vm.$t(
+													'homework.table.noSubmit'))
+											}
 										}
 										}
 									},
 									},
 								})
 								})

+ 1 - 1
TEAMModelOS/ClientApp/src/components/questionnaire/BasePie.vue

@@ -51,7 +51,7 @@
 						type: 'pie',
 						type: 'pie',
 						radius: '50%',
 						radius: '50%',
 						center: ['50%', '50%'],
 						center: ['50%', '50%'],
-						color: ['#eeeeee', '#70B1E7'],
+						color: ['#ffffff', '#70B1E7'],
 						data: [{
 						data: [{
 								value: this.total - this.noAnswerdCount,
 								value: this.total - this.noAnswerdCount,
 								name: that.$t('survey.questionaire.finished')
 								name: that.$t('survey.questionaire.finished')

+ 2 - 2
TEAMModelOS/ClientApp/src/components/questionnaire/BaseProgress.vue

@@ -157,10 +157,10 @@
 								normal: {
 								normal: {
 									color: new that.$echarts.graphic.LinearGradient(0, 0, 1, 1, [{
 									color: new that.$echarts.graphic.LinearGradient(0, 0, 1, 1, [{
 										offset: 0,
 										offset: 0,
-										color: '#eeeeee'
+										color: '#ffffff'
 									}, {
 									}, {
 										offset: 1,
 										offset: 1,
-										color: '#eeeeee'
+										color: '#ffffff'
 									}]),
 									}]),
 									shadowBlur: 5,
 									shadowBlur: 5,
 									shadowColor: '#66666a',
 									shadowColor: '#66666a',

+ 1 - 0
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseBar.vue

@@ -432,5 +432,6 @@
         height: 400px;
         height: 400px;
         margin: 0 auto;
         margin: 0 auto;
         display: block;
         display: block;
+        margin-top: 20px;
     }
     }
 </style>
 </style>

+ 1 - 0
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseEntryBar.vue

@@ -336,5 +336,6 @@
         height: 400px;
         height: 400px;
         margin: 0 auto;
         margin: 0 auto;
         display: block;
         display: block;
+        margin-top: 20px;
     }
     }
 </style>
 </style>

+ 13 - 1
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseLevelPie.vue

@@ -34,7 +34,19 @@
 						center: ['45%', '55%'],
 						center: ['45%', '55%'],
 						max: 100, // for funnel
 						max: 100, // for funnel
 						sort: 'ascending', // for funnel
 						sort: 'ascending', // for funnel
-						data: data
+						data: data,
+                        emphasis: {
+                            label: {
+                                show: true,
+                                fontSize: '16',
+                                fontWeight: 'bold'
+                            },
+                            itemStyle: {
+                                shadowBlur: 10,
+                                shadowOffsetX: 0,
+                                shadowColor: 'rgba(0, 0, 0, 0.3)'
+                            }
+                        },
 					}
 					}
 				}
 				}
 
 

+ 6 - 3
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseMyTable.vue

@@ -676,7 +676,7 @@
 		justify-content: space-between;
 		justify-content: space-between;
 		padding-right: 5px;
 		padding-right: 5px;
 		/* height: 40px; */
 		/* height: 40px; */
-		margin-bottom: 10px;
+		margin-bottom: 20px;
 	}
 	}
 
 
 	.table-subject-select .table-tips {
 	.table-subject-select .table-tips {
@@ -685,7 +685,7 @@
 		font-weight: bold;
 		font-weight: bold;
 		position: absolute;
 		position: absolute;
 		right: 120px;
 		right: 120px;
-		top: 10px;
+		top: 40px;
 	}
 	}
 
 
 	.table-subject-select .ivu-select {
 	.table-subject-select .ivu-select {
@@ -716,7 +716,7 @@
 		font-weight: bold;
 		font-weight: bold;
 		position: absolute;
 		position: absolute;
 		right: 5px;
 		right: 5px;
-		top: 10px;
+		top: 40px;
 		cursor: pointer;
 		cursor: pointer;
 	}
 	}
 
 
@@ -763,7 +763,10 @@
 		font-weight: 500;
 		font-weight: 500;
 		color: var(--primary-text-color);
 		color: var(--primary-text-color);
 		border-left: 5px solid var(--tabs-bottom-color);
 		border-left: 5px solid var(--tabs-bottom-color);
+		padding: 5px 0;
 		padding-left: 10px;
 		padding-left: 10px;
 		margin-bottom: 10px;
 		margin-bottom: 10px;
+		width: 100%;
+    	background: var(--active-item-start);
 	}
 	}
 </style>
 </style>

+ 13 - 1
TEAMModelOS/ClientApp/src/components/student-analysis/total/BasePie.vue

@@ -34,7 +34,19 @@
                         center: ['45%', '50%'],
                         center: ['45%', '50%'],
                         max: 100, // for funnel
                         max: 100, // for funnel
                         sort: 'ascending', // for funnel
                         sort: 'ascending', // for funnel
-                        data: data
+                        data: data,
+                        emphasis: {
+                            label: {
+                                show: true,
+                                fontSize: '16',
+                                fontWeight: 'bold'
+                            },
+                            itemStyle: {
+                                shadowBlur: 10,
+                                shadowOffsetX: 0,
+                                shadowColor: 'rgba(0, 0, 0, 0.3)'
+                            }
+                        },
                     }
                     }
                 }
                 }
 
 

+ 7 - 6
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseScatter.vue

@@ -188,7 +188,7 @@
 									label: {
 									label: {
 										show: true,
 										show: true,
 										position: ['90%', '10%'],
 										position: ['90%', '10%'],
-										color: '#66ff33',
+										color: '#008955',
 										fontSize: 20,
 										fontSize: 20,
 										formatter: 'A'
 										formatter: 'A'
 									}
 									}
@@ -212,7 +212,7 @@
 									label: {
 									label: {
 										show: true,
 										show: true,
 										position: ['5%', '10%'],
 										position: ['5%', '10%'],
-										color: '#66ff33',
+										color: '#008955',
 										fontSize: 20,
 										fontSize: 20,
 										formatter: "A'"
 										formatter: "A'"
 									}
 									}
@@ -231,7 +231,7 @@
 									label: {
 									label: {
 										show: true,
 										show: true,
 										position: ['90%', '10%'],
 										position: ['90%', '10%'],
-										color: '#66ff33',
+										color: '#008955',
 										fontSize: 20,
 										fontSize: 20,
 										formatter: 'B'
 										formatter: 'B'
 									}
 									}
@@ -250,7 +250,7 @@
 									label: {
 									label: {
 										show: true,
 										show: true,
 										position: ['5%', '10%'],
 										position: ['5%', '10%'],
-										color: '#66ff33',
+										color: '#008955',
 										fontSize: 20,
 										fontSize: 20,
 										zIndex: 99999,
 										zIndex: 99999,
 										formatter: "B'"
 										formatter: "B'"
@@ -270,7 +270,7 @@
 									label: {
 									label: {
 										show: true,
 										show: true,
 										position: ['90%', '10%'],
 										position: ['90%', '10%'],
-										color: '#66ff33',
+										color: '#008955',
 										fontSize: 20,
 										fontSize: 20,
 										formatter: 'C'
 										formatter: 'C'
 									}
 									}
@@ -289,7 +289,7 @@
 									label: {
 									label: {
 										show: true,
 										show: true,
 										position: ['5%', '10%'],
 										position: ['5%', '10%'],
-										color: '#66ff33',
+										color: '#008955',
 										fontSize: 20,
 										fontSize: 20,
 										formatter: "C'"
 										formatter: "C'"
 									}
 									}
@@ -351,5 +351,6 @@
 		height: 500px;
 		height: 500px;
 		margin: 0 auto;
 		margin: 0 auto;
 		display: block;
 		display: block;
+		margin-top: 20px;
 	}
 	}
 </style>
 </style>

+ 7 - 6
TEAMModelOS/ClientApp/src/components/student-analysis/total/BaseTestScatter.vue

@@ -170,7 +170,7 @@
 									label: {
 									label: {
 										show: true,
 										show: true,
 										position: ['90%', '10%'],
 										position: ['90%', '10%'],
-										color: '#66ff33',
+										color: '#008955',
 										fontSize: 20,
 										fontSize: 20,
 										formatter: 'B'
 										formatter: 'B'
 									}
 									}
@@ -182,13 +182,13 @@
 									xAxis: '1',
 									xAxis: '1',
 									yAxis: '50',
 									yAxis: '50',
 									itemStyle: {
 									itemStyle: {
-										color: 'rgba(90,90,90,.2)'
+										color: 'rgba(90,90,90,.1)'
 
 
 									},
 									},
 									label: {
 									label: {
 										show: true,
 										show: true,
 										position: ['5%', '10%'],
 										position: ['5%', '10%'],
-										color: '#66ff33',
+										color: '#008955',
 										fontSize: 20,
 										fontSize: 20,
 										formatter: "B'"
 										formatter: "B'"
 									}
 									}
@@ -201,13 +201,13 @@
 									xAxis: '0.5',
 									xAxis: '0.5',
 									yAxis: '100',
 									yAxis: '100',
 									itemStyle: {
 									itemStyle: {
-										color: 'rgba(90,90,90,.2)'
+										color: 'rgba(90,90,90,.1)'
 
 
 									},
 									},
 									label: {
 									label: {
 										show: true,
 										show: true,
 										position: ['90%', '80%'],
 										position: ['90%', '80%'],
-										color: '#66ff33',
+										color: '#008955',
 										fontSize: 20,
 										fontSize: 20,
 										formatter: 'A'
 										formatter: 'A'
 									}
 									}
@@ -226,7 +226,7 @@
 									label: {
 									label: {
 										show: true,
 										show: true,
 										position: ['5%', '40%'],
 										position: ['5%', '40%'],
-										color: '#66ff33',
+										color: '#008955',
 										fontSize: 20,
 										fontSize: 20,
 										formatter: "A'"
 										formatter: "A'"
 									}
 									}
@@ -282,5 +282,6 @@
 		height: 500px;
 		height: 500px;
 		margin: 0 auto;
 		margin: 0 auto;
 		display: block;
 		display: block;
+		margin-top: 20px;
 	}
 	}
 </style>
 </style>

+ 5 - 1
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/ClassmateCommentPages.vue

@@ -227,7 +227,8 @@ export default {
                     opt: "AnswerRecordAll",
                     opt: "AnswerRecordAll",
                     id: this.homeWork.id,
                     id: this.homeWork.id,
                     code: this.homeWork.code.split("-")[1],
                     code: this.homeWork.code.split("-")[1],
-                    listIds: this.homeWork.classes,
+                    // 名单分3种,只会有一个名单有id,classes:行政班,stuLists:教学班,tchLists:研修中心
+                    listIds: this.homeWork.classes.length ? this.homeWork.classes : (this.homeWork.stuLists.length ? this.homeWork.stuLists : this.homeWork.tchLists),
                     targetType: this.homeWork.targetType,
                     targetType: this.homeWork.targetType,
                 }
                 }
                 this.$api.studentWeb.getAllComment(params).then(res => {
                 this.$api.studentWeb.getAllComment(params).then(res => {
@@ -243,6 +244,9 @@ export default {
                         this.nowStudent = this.students[0]
                         this.nowStudent = this.students[0]
                         this.getAllComment()
                         this.getAllComment()
                         this.isLoading = false
                         this.isLoading = false
+                    } else {
+                        this.isLoading = false
+                        this.$Message.warning(this.$t("studentWeb.homework.message3"))
                     }
                     }
                 })
                 })
             }
             }

+ 18 - 16
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/Homework.vue

@@ -22,8 +22,6 @@
         <EventBasicInfo :info="getItemTitle" />
         <EventBasicInfo :info="getItemTitle" />
         <Loading v-show="isLoad" bgColor="rgba(0, 0, 0, 0.3)"></Loading>
         <Loading v-show="isLoad" bgColor="rgba(0, 0, 0, 0.3)"></Loading>
         
         
-        <!-- 未交作业 -->
-        <!-- <HomeworkDetail :homeworkInfo="homeworkInfo" v-if="getItemTitle.progress == 'going'" /> -->
         <!-- 已交作业 -->
         <!-- 已交作业 -->
         <Tabs :value="selectTab" @on-click="onTabChange">
         <Tabs :value="selectTab" @on-click="onTabChange">
             <!-- 作业内容 -->
             <!-- 作业内容 -->
@@ -128,6 +126,7 @@
                                     <div class="home-upload">
                                     <div class="home-upload">
                                         <div class="uploadBtn">
                                         <div class="uploadBtn">
                                             <Upload
                                             <Upload
+                                                multiple
                                                 action=""
                                                 action=""
                                                 :before-upload="customUpload"
                                                 :before-upload="customUpload"
                                                 :show-upload-list="false"
                                                 :show-upload-list="false"
@@ -193,22 +192,18 @@
 <script>
 <script>
 import BillBoardandLightBox from "../../EventView/BillBoardandLightBox"
 import BillBoardandLightBox from "../../EventView/BillBoardandLightBox"
 import EventBasicInfo from "../../EventBasicInfo";
 import EventBasicInfo from "../../EventBasicInfo";
-import HomeworkDetail from "./HomeworkDetail";
 import HomeworkFeedback from "./HomeworkFeedback";
 import HomeworkFeedback from "./HomeworkFeedback";
 import BlobTool from "@/utils/blobTool.js"
 import BlobTool from "@/utils/blobTool.js"
 import { mapGetters, mapState } from 'vuex';
 import { mapGetters, mapState } from 'vuex';
 import Loading from '@/common/Loading.vue'
 import Loading from '@/common/Loading.vue'
-import ClassmateCommentPages from "../EventContentTypeTemplate/ClassmateCommentPages"
 
 
 export default {
 export default {
     name: "Howework",
     name: "Howework",
     components: {
     components: {
         BillBoardandLightBox,
         BillBoardandLightBox,
-        HomeworkDetail,
         HomeworkFeedback,
         HomeworkFeedback,
         EventBasicInfo,
         EventBasicInfo,
         Loading,
         Loading,
-        ClassmateCommentPages
     },
     },
     created() {
     created() {
         this.openLightBox = false;
         this.openLightBox = false;
@@ -272,7 +267,7 @@ export default {
                 this.$api.studentWeb.getHomework(params).then(res => {
                 this.$api.studentWeb.getHomework(params).then(res => {
                     if(res.status == 200 && res.work) {
                     if(res.status == 200 && res.work) {
                         if(res.work.attachments.length) {
                         if(res.work.attachments.length) {
-                            this.getSas(res.work)
+                            // this.getSas(res.work)
                         }
                         }
                         if(res.work.progress === 'finish') {
                         if(res.work.progress === 'finish') {
                             this.isEnd = true
                             this.isEnd = true
@@ -330,6 +325,7 @@ export default {
         },
         },
         // 文件展示
         // 文件展示
         customUpload(file) {
         customUpload(file) {
+            console.log(file);
             // 有限制格式
             // 有限制格式
             if(this.homeworkInfo.extLimit.length) {
             if(this.homeworkInfo.extLimit.length) {
                 let extension = file.name.substring(file.name.lastIndexOf(".") + 1, file.name.length).toLowerCase()
                 let extension = file.name.substring(file.name.lastIndexOf(".") + 1, file.name.length).toLowerCase()
@@ -474,8 +470,10 @@ export default {
             })
             })
         },
         },
         // 下载附件、作业
         // 下载附件、作业
-        loadAttach(file) {
-            let curFile = file.url
+        async loadAttach(file) {
+            let code = this.homeworkInfo.scope == "private" ? this.homeworkInfo.creatorId : this.homeworkInfo.school
+            let sas = await this.$tools.getBlobSas(code)
+            let curFile = file.url + sas
             const downloadRes = async () => {
             const downloadRes = async () => {
                 let response = await fetch(curFile); // 内容转变成blob地址
                 let response = await fetch(curFile); // 内容转变成blob地址
                 let blob = await response.blob();  // 创建隐藏的可下载链接
                 let blob = await response.blob();  // 创建隐藏的可下载链接
@@ -532,13 +530,17 @@ export default {
     },
     },
     watch: {
     watch: {
         getItemTitle: {
         getItemTitle: {
-            handler() {
-                this.homeworkInfo = undefined
-                this.answerList = undefined
-                this.isEnd = false
-                this.isApply = false
-                this.selectTab  = "homework"
-                this.getHomework()
+            handler(n, o) {
+                if(n) {
+                    console.log(n);
+                    this.homeworkInfo = undefined
+                    this.answerList = undefined
+                    this.isEnd = false
+                    this.isApply = false
+                    this.selectTab  = "homework"
+                    this.getHomework()
+                }
+                
             }
             }
         },
         },
     }
     }

+ 14 - 11
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/HomeworkFeedback.vue

@@ -66,24 +66,27 @@
                                     /> -->
                                     /> -->
                                     <span class="classmates-name">{{ item.username }}</span>
                                     <span class="classmates-name">{{ item.username }}</span>
                                     <div>
                                     <div>
-                                        <div>
+                                        <div class="timeRate">
+                                            <div>
+                                                {{ $t("studentWeb.homework.grade") }}:
+                                                <Rate class allow-half disabled v-model="item.star" />
+                                            </div>
+                                            <span>{{ $t("studentWeb.homework.time") }}:{{ dateFormat(item.replies[0].time) }}</span>
+                                        </div>
+                                        <div style="">
                                             <strong>{{ $t("studentWeb.homework.comment") }}</strong>
                                             <strong>{{ $t("studentWeb.homework.comment") }}</strong>
                                             {{ item.replies[0].comment }}
                                             {{ item.replies[0].comment }}
                                         </div>
                                         </div>
-                                        <!-- <div style="margin-left: 10px" v-if="item.replies.length > 1">
+                                        <div style="padding: 5px 0 0 10px; border-top: 1px solid #f1f1f1; margin-top: 5px" v-if="item.replies.length > 1">
                                             <div v-for="(rep, index) in item.replies" :key="index">
                                             <div v-for="(rep, index) in item.replies" :key="index">
                                                 <div v-if="index > 0">
                                                 <div v-if="index > 0">
-                                                    <span>{{ $t("studentWeb.homework.supcomment") }}</span>
-                                                    {{ rep.comment }}
+                                                    <div>
+                                                        <span>{{ $t("studentWeb.homework.supcomment") }}</span>
+                                                        {{ rep.comment }}
+                                                    </div>
+                                                    <span style="text-align:right; display: inherit;">{{ $t("studentWeb.homework.time") }}:{{ dateFormat(rep.time) }}</span>
                                                 </div>
                                                 </div>
                                             </div>
                                             </div>
-                                        </div> -->
-                                        <div class="timeRate">
-                                            <div>
-                                                {{ $t("studentWeb.homework.grade") }}:
-                                                <Rate class allow-half disabled v-model="item.star" />
-                                            </div>
-                                            <span>{{ $t("studentWeb.homework.time") }}:{{ dateFormat(item.replies[0].time) }}</span>
                                         </div>
                                         </div>
                                     </div>
                                     </div>
                                 </div>
                                 </div>

+ 10 - 20
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReport.vue

@@ -416,10 +416,11 @@
             },
             },
             // 点击文件资源
             // 点击文件资源
             async getItemData(data) {
             async getItemData(data) {
+                // 已经有授权,在查看文件时不需要再次获取授权
                 this.previewStatus = false
                 this.previewStatus = false
                 if (data.file) {
                 if (data.file) {
                     this.previewFile = this._.cloneDeep(data)
                     this.previewFile = this._.cloneDeep(data)
-                    // this.previewFile.blobUrl = await this.getFileSas(data)
+                    console.log(this.previewFile.blobUrl);
                     if (this.previewFile.fileType == 'doc' || this.previewFile.fileType == 'csv'
                     if (this.previewFile.fileType == 'doc' || this.previewFile.fileType == 'csv'
                         || this.previewFile.fileType == 'xls' || this.previewFile.fileType == 'xlsx' ||
                         || this.previewFile.fileType == 'xls' || this.previewFile.fileType == 'xlsx' ||
                         this.previewFile.fileType == 'pptx' || this.previewFile.fileType == 'ppt' || this.previewFile.fileType == 'docx') {
                         this.previewFile.fileType == 'pptx' || this.previewFile.fileType == 'ppt' || this.previewFile.fileType == 'docx') {
@@ -440,23 +441,9 @@
                     this.$Message.warning(this.$t('studentWeb.exam.report.pdfErr'))
                     this.$Message.warning(this.$t('studentWeb.exam.report.pdfErr'))
                 })
                 })
             },
             },
-            // 已经有授权,在查看文件时不需要再次获取授权
-            //获取文件授权
-            async getFileSas(data) {
-                if (data) {
-                    let req = {
-                        url: data.blobUrl
-                    }
-                    let curFile = ""
-                    await this.$api.studentWeb.getFileSas(req).then(res => {
-                         curFile = res.url
-                     })
-                    return curFile
-                }
-            },
             //下载补救文件资源
             //下载补救文件资源
             async downloadFile(data) {
             async downloadFile(data) {
-                // let blobData = await this.getFileSas(data)
+                // 已经有授权,在查看文件时不需要再次获取授权
                 let blobData = data.blobUrl
                 let blobData = data.blobUrl
                 const downloadRes = async () => {
                 const downloadRes = async () => {
                     let response = await fetch(blobData); // 内容转变成blob地址
                     let response = await fetch(blobData); // 内容转变成blob地址
@@ -549,7 +536,7 @@
                 this.paperData.length = 0
                 this.paperData.length = 0
                 this.ansData.length = 0
                 this.ansData.length = 0
                 this.markData.length = 0
                 this.markData.length = 0
-                let exam = [...this.getPaperInfo.item]
+                let exam = this.getPaperInfo.item ? [...this.getPaperInfo.item] : []
                 if (exam.length) {
                 if (exam.length) {
                     for (let i = 0; i < exam.length; i++) {
                     for (let i = 0; i < exam.length; i++) {
                         if (!exam[i].repair) {
                         if (!exam[i].repair) {
@@ -715,10 +702,13 @@
             },
             },
             difficultyRate() {
             difficultyRate() {
                 let level = 0
                 let level = 0
-                if (this.paperInfo.item.length) {
-                    let levelArr = this.paperInfo.item.map(i => i.level)
-                    level = this._.meanBy(levelArr).toFixed(1)
+                if(Object.keys(this.paperInfo).length) {
+                    if (this.paperInfo.item.length) {
+                        let levelArr = this.paperInfo.item.map(i => i.level)
+                        level = this._.meanBy(levelArr).toFixed(1)
+                    }
                 }
                 }
+                
                 return Number(level)
                 return Number(level)
             },
             },
         },
         },

+ 2 - 2
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperTest.vue

@@ -766,7 +766,7 @@
             },
             },
             //下载补救文件资源
             //下载补救文件资源
             async downloadFile(data) {
             async downloadFile(data) {
-                // let blobData = await this.getFileSas(data)
+                // 已经有授权,在查看文件时不需要再次获取授权
                 let blobData = data.blobUrl
                 let blobData = data.blobUrl
                 const downloadRes = async () => {
                 const downloadRes = async () => {
                     let response = await fetch(blobData); // 内容转变成blob地址
                     let response = await fetch(blobData); // 内容转变成blob地址
@@ -782,10 +782,10 @@
             },
             },
             // 点击文件资源
             // 点击文件资源
             async getItemData(data) {
             async getItemData(data) {
+                // 已经有授权,在查看文件时不需要再次获取授权
                 this.previewStatus = false
                 this.previewStatus = false
                 if (data.file) {
                 if (data.file) {
                     this.previewFile = this._.cloneDeep(data)
                     this.previewFile = this._.cloneDeep(data)
-                    // this.previewFile.blobUrl = await this.getFileSas(data)
                     if (this.previewFile.fileType == 'doc' || this.previewFile.fileType == 'csv'
                     if (this.previewFile.fileType == 'doc' || this.previewFile.fileType == 'csv'
                         || this.previewFile.fileType == 'xls' || this.previewFile.fileType == 'xlsx' ||
                         || this.previewFile.fileType == 'xls' || this.previewFile.fileType == 'xlsx' ||
                         this.previewFile.fileType == 'pptx' || this.previewFile.fileType == 'ppt' || this.previewFile.fileType == 'docx') {
                         this.previewFile.fileType == 'pptx' || this.previewFile.fileType == 'ppt' || this.previewFile.fileType == 'docx') {

+ 18 - 3
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperView.vue

@@ -258,8 +258,13 @@
                         }
                         }
                     }
                     }
                     if (exam.id == undefined) {
                     if (exam.id == undefined) {
-                        this.selectData = await this.$evTools.getStuPaper(code)
-                        this.examData.push(this.selectData)
+                        try {
+                            this.selectData = await this.getStuPaper(code)
+                            this.examData.push(this.selectData)
+                        } catch (error) {
+                            this.$Message.error(this.$t("studentWeb.exam.examError"))
+                        }
+                        
                     } else {
                     } else {
                         this.selectData = exam
                         this.selectData = exam
                     }
                     }
@@ -276,7 +281,7 @@
                     }
                     }
                     this.chooseData = data
                     this.chooseData = data
                     this.isLoad = false
                     this.isLoad = false
-                    if (this.selectData.item.length > 0) {
+                    if (Object.keys(this.selectData).length && this.selectData.item.length > 0) {
                         if (data.stuAns[0] !== undefined) {
                         if (data.stuAns[0] !== undefined) {
                             this.isExamDown = true
                             this.isExamDown = true
                         }
                         }
@@ -287,6 +292,16 @@
                     }
                     }
                 }
                 }
             },
             },
+            getStuPaper(code) {
+                return new Promise(async(r, j) => {
+                    try {
+                        let a = await this.$evTools.getStuPaper(code)
+                        r(a)
+                    } catch(e) {
+                        j(undefined)
+                    }
+                })
+            },
             /* =====未调用===== */
             /* =====未调用===== */
             dateFormat(timestamp) {
             dateFormat(timestamp) {
                 var date = new Date(timestamp)
                 var date = new Date(timestamp)

+ 37 - 0
TEAMModelOS/ClientApp/src/components/student-web/HomeView/CourseListView.vue

@@ -930,4 +930,41 @@ export default {
         color: #24b880;
         color: #24b880;
     }
     }
 }
 }
+
+.list-block{
+    .ivu-tabs-nav {
+        float: left !important;
+
+        text-align: center;
+        margin-top: 20px;
+        position: relative;
+
+        @media screen and (max-width: 1366px) {
+            margin-top: 8px;
+        }
+    }
+
+    .ivu-tabs-tab {
+        text-align: center !important;
+
+        // font-size: 20px;
+        margin: 0px 10px;
+        width: auto;
+        
+    }
+    .ivu-tabs-tab:hover {
+        text-align: center !important;
+        color: #24b880 !important;
+    }
+    .ivu-tabs-tab.ivu-tabs-tab-active.ivu-tabs-tab-focused {
+        color: #24b880!important;
+        font-weight: bolder;
+        border-bottom: 5px solid #24b880 !important;
+        margin: 0px 10px;
+        width: auto;
+    }
+    .ivu-tabs-ink-bar {
+        height: 0px;
+    }
+}
 </style>
 </style>

+ 1 - 0
TEAMModelOS/ClientApp/src/components/student-web/HomeView/MissionListCard.vue

@@ -43,6 +43,7 @@
                             <span v-show="item.eventType == 'Exam'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolExam'):$t('studentWeb.public.privateExam')}}</span>
                             <span v-show="item.eventType == 'Exam'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolExam'):$t('studentWeb.public.privateExam')}}</span>
                             <span v-show="item.eventType == 'Vote'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolVote'):$t('studentWeb.public.privateVote')}}</span>
                             <span v-show="item.eventType == 'Vote'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolVote'):$t('studentWeb.public.privateVote')}}</span>
                             <span v-show="item.eventType == 'Survey'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolSurvey'):$t('studentWeb.public.privateSurvey')}}</span>
                             <span v-show="item.eventType == 'Survey'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolSurvey'):$t('studentWeb.public.privateSurvey')}}</span>
+                            <span v-show="item.eventType == 'Homework'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolHomework'):$t('studentWeb.public.privateHomework')}}</span>
                             <span>{{ item.name }}</span>
                             <span>{{ item.name }}</span>
                         </div>
                         </div>
                         <p class="list-item-time">
                         <p class="list-item-time">

+ 7 - 1
TEAMModelOS/ClientApp/src/css/site.css

@@ -310,10 +310,12 @@ audio::-internal-media-controls-overflow-button {
 	font-size: 16px;
 	font-size: 16px;
 	font-weight: 500;
 	font-weight: 500;
 	color: var(--primary-text-color);
 	color: var(--primary-text-color);
-	margin: 30px 0 0 55px;
+	/* margin: 30px 0 0 55px; */
 	display: block;
 	display: block;
+	padding: 5px 0;
 	border-left: 5px solid var(--tabs-bottom-color);
 	border-left: 5px solid var(--tabs-bottom-color);
 	padding-left: 10px;
 	padding-left: 10px;
+	background-color: var(--active-item-start);
 }
 }
 
 
 .common-toolTip .ivu-tooltip-inner{
 .common-toolTip .ivu-tooltip-inner{
@@ -327,3 +329,7 @@ audio::-internal-media-controls-overflow-button {
 	margin: 0 5px !important;
 	margin: 0 5px !important;
 	font-size: 16px;
 	font-size: 16px;
 }
 }
+
+.w-e-text table td, .w-e-text table th{
+	height: 30px;
+}

+ 6 - 4
TEAMModelOS/ClientApp/src/locale/lang/en-US/cusMgt.js

@@ -8,7 +8,7 @@ export default {
     noTeacher:'None yet',
     noTeacher:'None yet',
     cusName:'Course Name',
     cusName:'Course Name',
     cNameHolder:'Please enter course name',
     cNameHolder:'Please enter course name',
-    cNameErr:'课程名称不能包含空格',
+    cNameErr:'Course name cannot contain spaces',
     cusCode:'Course ID',
     cusCode:'Course ID',
     codeHolder:'Please enter course ID',
     codeHolder:'Please enter course ID',
     cusDesc:'Course Description',
     cusDesc:'Course Description',
@@ -53,10 +53,10 @@ export default {
     saveErr:'Failed to save',
     saveErr:'Failed to save',
 
 
     //MyCourse.vue
     //MyCourse.vue
-    scCus:'School Course',
+    scCus:'School',
     cusInfo:'Course Information',
     cusInfo:'Course Information',
     noScCus:'No course yet',
     noScCus:'No course yet',
-    privCus:'Personal Course',
+    privCus:'Personal',
     noPrivCus:'No course created yet',
     noPrivCus:'No course created yet',
     noCusClass:'Not yet arranged course name list',
     noCusClass:'Not yet arranged course name list',
     delStu:'Delete student',
     delStu:'Delete student',
@@ -94,7 +94,7 @@ export default {
     ev:'Assessment',
     ev:'Assessment',
     vote:'Poll',
     vote:'Poll',
     qu:'Survey',
     qu:'Survey',
-    hw:'Assignment',
+    hw:'Homework',
     sl:'Self-directed learning',
     sl:'Self-directed learning',
     acTime:'Activity Time',
     acTime:'Activity Time',
     private:'Personal',
     private:'Personal',
@@ -217,6 +217,8 @@ export default {
     gradeLabel:'Grade',
     gradeLabel:'Grade',
     cusNoRepeat:'The same course ID already exists',
     cusNoRepeat:'The same course ID already exists',
     cusNameRepeat:'The same course name already exists',
     cusNameRepeat:'The same course name already exists',
+    noClassInfo:'暫未找到班級信息',
+    noRoomInfo:'暫未找到教室信息',
 
 
     //MgtStuList.vue
     //MgtStuList.vue
     nameList:'Name list',
     nameList:'Name list',

+ 3 - 3
TEAMModelOS/ClientApp/src/locale/lang/en-US/evaluation.js

@@ -1,6 +1,6 @@
 export default {
 export default {
 	completeTip:'Please complete the subject, grade and semester data for the current school system first!',
 	completeTip:'Please complete the subject, grade and semester data for the current school system first!',
-	canChoose:'can choose',
+	canChoose:'choice(s)',
 	editor:{
 	editor:{
 		uploadVideo:'Upload Local Video',
 		uploadVideo:'Upload Local Video',
 		uploadAudio:'Upload Local Audio',
 		uploadAudio:'Upload Local Audio',
@@ -216,8 +216,8 @@ export default {
 		warningTips3:'Test question data reading is complete!',
 		warningTips3:'Test question data reading is complete!',
 		warningTips4:'Failed to parse eligible questions, please check if the import format is modified according to the template!',
 		warningTips4:'Failed to parse eligible questions, please check if the import format is modified according to the template!',
 		warningTips5:'Sorry, failed to parse the file!',
 		warningTips5:'Sorry, failed to parse the file!',
-		tips6:'Operation failed, please complete the subject information of the current school segment first!',
-		tips7:'Operation failed, please complete the grade information of the current school section first!'
+		tips6:'Operation failed, please complete the subject information of the current school system first!',
+		tips7:'Operation failed, please complete the grade information of the current school system first!'
 	},
 	},
 	createPaper:{
 	createPaper:{
 		setAutoConditions:'Set auto-design exam file requirment',
 		setAutoConditions:'Set auto-design exam file requirment',

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/en-US/home.js

@@ -16,7 +16,7 @@ export default{
     col6:'Whole-class Assessment',
     col6:'Whole-class Assessment',
     ac1:'Assessment',
     ac1:'Assessment',
     ac2:'Self-directed Learning',
     ac2:'Self-directed Learning',
-    ac3:'Assignment',
+    ac3:'Homework',
     ac4:'Poll',
     ac4:'Poll',
     ac5:'Survey',
     ac5:'Survey',
     countNum:'Number',
     countNum:'Number',

+ 4 - 0
TEAMModelOS/ClientApp/src/locale/lang/en-US/jyzx.js

@@ -190,6 +190,10 @@ export default{
     },
     },
     // 活动
     // 活动
     activity: {
     activity: {
+        voteHeader1: "投票列表",
+        voteHeader2: "投票内容",
+        queHeader1: "问卷列表",
+        queHeader2: "问卷内容",
         des: "描述",
         des: "描述",
         voteArea: "投票区",
         voteArea: "投票区",
         haveVoteNum: "可投票数",
         haveVoteNum: "可投票数",

+ 9 - 9
TEAMModelOS/ClientApp/src/locale/lang/en-US/learnActivity.js

@@ -1,12 +1,12 @@
 export default {
 export default {
     //MgtSchoolEva.vue
     //MgtSchoolEva.vue
-	school:'',
-	area:'',
-	noFound:'未查詢到當前活動!',
-	deleteAreaTitle:'刪除區級活動',
-	deleteAreaTip:'刪除區級活動後,相關學校將無法參與此活動,確認刪除活動嗎?',
-	deleteAreaFail:'刪除失敗',
-	notSupportType:'不支持上傳該格式類型文件!',
+	school:'School',
+	area:'District',
+	noFound:"Can't find the current activity!",
+	deleteAreaTitle:'Delete District Activity',
+	deleteAreaTip:'If the district activity is deleted, the related school will not be able to participate in the activity. Confirm to delete the activity?',
+	deleteAreaFail:'Failed to delete',
+	notSupportType:'Uploading files of this format is not supported!',
     mgtScEv: {
     mgtScEv: {
         listLabel: 'Assessment List',
         listLabel: 'Assessment List',
         period: 'School System:',
         period: 'School System:',
@@ -16,7 +16,7 @@ export default {
         createTime: 'Test Time:',
         createTime: 'Test Time:',
         pending: 'Scheduled',
         pending: 'Scheduled',
         going: 'In progress',
         going: 'In progress',
-        finish: 'Has ended',
+        finish: 'Ended',
         endTime: 'Ending time:',
         endTime: 'Ending time:',
         stop: 'End immediately',
         stop: 'End immediately',
         evType: 'Assessment Type:',
         evType: 'Assessment Type:',
@@ -332,7 +332,7 @@ export default {
         objectiveLabel:'(Objective)',
         objectiveLabel:'(Objective)',
         alreadyLabel:'(Already)',
         alreadyLabel:'(Already)',
         exTag: '異常',
         exTag: '異常',
-        scoreTips: '溫馨提示:客觀題已由系統自動評分,下面只顯示了需要人工評分的主觀題題號。 ',
+        scoreTips: '溫馨提示:客觀題已由系統自動評分,下面只顯示了需要人工評分的主觀題題號。',
         feedback:'反饋:',
         feedback:'反饋:',
         exStatus:'狀態:未處理',
         exStatus:'狀態:未處理',
         continueMark:'繼續閱卷',
         continueMark:'繼續閱卷',

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/en-US/login.js

@@ -5,7 +5,7 @@ export default {
         QRLogin: 'Scan QRCode login',
         QRLogin: 'Scan QRCode login',
         schoolLogin: 'School Account Login',
         schoolLogin: 'School Account Login',
         ies5: 'TEAM Model Cloud',
         ies5: 'TEAM Model Cloud',
-        jinniuLogin:'賬號登錄'
+        jinniuLogin:'Account Login'
     },
     },
     subTitle: {
     subTitle: {
         IDLogin: 'Log in to IES Smarter Teaching Service and access the cloud services instantly',
         IDLogin: 'Log in to IES Smarter Teaching Service and access the cloud services instantly',

+ 3 - 3
TEAMModelOS/ClientApp/src/locale/lang/en-US/schoolMgmt.js

@@ -23,11 +23,11 @@ export default {
   block4Title2: 'Activity Status',
   block4Title2: 'Activity Status',
   block4Title3: 'Self-study lesson completion rate',
   block4Title3: 'Self-study lesson completion rate',
   block4Title4: 'Online Assessment completion rate',
   block4Title4: 'Online Assessment completion rate',
-  block4Title5: 'Assignment completion rate',
+  block4Title5: 'Homework completion rate',
   block4Title6: 'Course/Learning Portfolios/Resource Output Changes(D)',
   block4Title6: 'Course/Learning Portfolios/Resource Output Changes(D)',
   block4SubTitle1: 'Self-study Lesson Number',
   block4SubTitle1: 'Self-study Lesson Number',
   block4SubTitle2: 'Online Assessment Number',
   block4SubTitle2: 'Online Assessment Number',
-  block4SubTitle3: 'Assignment Number',
+  block4SubTitle3: 'Homework Number',
   block4SubTitle4: 'Total Smarter Classroom Number',
   block4SubTitle4: 'Total Smarter Classroom Number',
   block4SubTitle5: 'In-progress Activities',
   block4SubTitle5: 'In-progress Activities',
   block4SubTitle6: 'Finished Activities',
   block4SubTitle6: 'Finished Activities',
@@ -45,7 +45,7 @@ export default {
   text11: 'Sokrates',
   text11: 'Sokrates',
   text12: 'E-Note',
   text12: 'E-Note',
   text13: 'Uploaded Video',
   text13: 'Uploaded Video',
-  text14: 'Assignment',
+  text14: 'Homework',
   text15: 'Flipped Classroom',
   text15: 'Flipped Classroom',
   text16: 'Online Assessment',
   text16: 'Online Assessment',
   text17: 'Language',
   text17: 'Language',

+ 3 - 3
TEAMModelOS/ClientApp/src/locale/lang/en-US/stuAccount.js

@@ -102,9 +102,9 @@ export default {
   idRepErr:'Account already exists, will overwrite the original account',
   idRepErr:'Account already exists, will overwrite the original account',
   stuYearErr:"Student's academic year data is incorrect",
   stuYearErr:"Student's academic year data is incorrect",
   classYearErr:"Class's grade level is incorrect",
   classYearErr:"Class's grade level is incorrect",
-  noFormatErr: '座號格式錯誤',
-  classFormatErr: '班級格式錯誤',
-  classNameErr: '班級名稱異常',
+  noFormatErr: 'Incorrect seat number format',
+  classFormatErr: 'Incorrect class format',
+  classNameErr: 'Class name abnormal',
   importOk: 'Import successfully',
   importOk: 'Import successfully',
 
 
   // Authorization.vue
   // Authorization.vue

+ 53 - 51
TEAMModelOS/ClientApp/src/locale/lang/en-US/studentWeb.js

@@ -9,20 +9,20 @@ export default {
         exam: 'Assessment',
         exam: 'Assessment',
         vote: 'Poll',
         vote: 'Poll',
         survey: 'Survey',
         survey: 'Survey',
-        homework: '作业',
+        homework: 'Homework',
     },
     },
     public: {
     public: {
         noData: 'No data yet',
         noData: 'No data yet',
         going: 'In progress',
         going: 'In progress',
         finish: 'Ended',
         finish: 'Ended',
-        schoolExam: 'School-level Assessment',
+        schoolExam: 'School Assessment',
         privateExam: 'Personal Assessment',
         privateExam: 'Personal Assessment',
-        schoolVote: 'School-level Poll',
+        schoolVote: 'School Poll',
         privateVote: 'Personal Poll',
         privateVote: 'Personal Poll',
-        schoolSurvey: 'School-level Survey',
+        schoolSurvey: 'School Survey',
         privateSurvey: 'Personal Survey',
         privateSurvey: 'Personal Survey',
-        schoolHomework: '校级作业',
-        privateHomework: '个人作业',
+        schoolHomework: 'School Homework',
+        privateHomework: 'Personal Homework',
         search: 'Please enter the query content...',
         search: 'Please enter the query content...',
         notice: 'This feature is not yet available, stay tuned!',
         notice: 'This feature is not yet available, stay tuned!',
         develop: "Features are under development, stay tuned!",
         develop: "Features are under development, stay tuned!",
@@ -36,7 +36,7 @@ export default {
         all: "All",
         all: "All",
         preview: "Preview",
         preview: "Preview",
         exam: "Assessment",
         exam: "Assessment",
-        homework: "Assignment",
+        homework: "Homework",
         vote: "Poll",
         vote: "Poll",
         survey: "Survey",
         survey: "Survey",
     },
     },
@@ -60,7 +60,7 @@ export default {
         Fineshed: 'Completed',
         Fineshed: 'Completed',
         Timeout: 'Overdue',
         Timeout: 'Overdue',
         makeupExam: 'Can make up this assessment',
         makeupExam: 'Can make up this assessment',
-        makeupHw: 'Can make up this assignment',
+        makeupHw: 'Can make up this homework',
         selectActivity: 'Please select an activity from the list',
         selectActivity: 'Please select an activity from the list',
         allSubject: 'All Subjects'
         allSubject: 'All Subjects'
     },
     },
@@ -105,10 +105,10 @@ export default {
     },
     },
     coursesCardTitle: 'My Course List',
     coursesCardTitle: 'My Course List',
     newAddCourse: 'The latest addition',
     newAddCourse: 'The latest addition',
-    addTime: "加入时间",
+    addTime: "Join time",
     missionListCardTitle: 'Activity Task List',
     missionListCardTitle: 'Activity Task List',
-    choiceTime: "筛选时间",
-    missionListCardPlace: "默认展示近30天的活动",
+    choiceTime: "Filter Time",
+    missionListCardPlace: "Default display activities within 30 days",
     missionListCardLoading: 'Loading',
     missionListCardLoading: 'Loading',
     missionListCardReachBottom: 'Already the bottom, no more activities! ',
     missionListCardReachBottom: 'Already the bottom, no more activities! ',
     myProgressBar: {
     myProgressBar: {
@@ -153,8 +153,8 @@ export default {
             'First Grade'
             'First Grade'
         ],
         ],
         stackType: [
         stackType: [
-            'Assignment',
-            'Assessment',
+            'Homework',
+            'Homework',
             'Pre-class preview',
             'Pre-class preview',
             'Poll'
             'Poll'
         ]
         ]
@@ -172,8 +172,8 @@ export default {
     },
     },
     eventPieChart: {
     eventPieChart: {
         partType: [
         partType: [
-            'Assignment',
-            'Assessment',
+            'Homework',
+            'Homework',
             'Pre-class preview',
             'Pre-class preview',
             'Poll'
             'Poll'
         ]
         ]
@@ -197,7 +197,7 @@ export default {
     Fineshed: 'Completed',
     Fineshed: 'Completed',
     Timeout: 'Overdue',
     Timeout: 'Overdue',
     makeupExam: 'Can make up this assessment',
     makeupExam: 'Can make up this assessment',
-    makeupHW: 'Can make up this assignment',
+    makeupHW: 'Can make up this homework',
     empty: 'No information yet ~',
     empty: 'No information yet ~',
     baseInfo: {
     baseInfo: {
         subject: 'Subject:',
         subject: 'Subject:',
@@ -271,36 +271,37 @@ export default {
         },
         },
     },
     },
     homework: {
     homework: {
-        homeworkShow: '作答记录',
-        homeworkUpload: 'Assignment Upload Area',
-        homeworkChoice: '选择文件',
-        homeworkUoloadBtn: 'Upload Assignment',
+        homeworkShow: 'Answering Record',
+        homeworkUpload: 'Homework Upload Area',
+        homeworkChoice: 'Select file',
+        homeworkUoloadBtn: 'Upload Homework',
         homeworkReUoloadBtn: 'Re-upload',
         homeworkReUoloadBtn: 'Re-upload',
-        CommentClassmatesHomeworkBtn: "Classmates' assignment observation and mutual evaluation",
+        CommentClassmatesHomeworkBtn: "Classmates' homework observation and mutual evaluation",
         uploadSuccess: 'Upload successfully',
         uploadSuccess: 'Upload successfully',
-        uploadError: '上传失败',
-        uploadDes: 'After the activity is over, you can view the assignment score and comments',
+        uploadError: 'Failed to upload',
+        uploadDes: 'After the activity is over, you can view the homework score and comments',
         timeoutHint: 'The uploading time for assessment has ended. Thus, the score will be calculated as 0, or wait for the teacher to allow make-ups.',
         timeoutHint: 'The uploading time for assessment has ended. Thus, the score will be calculated as 0, or wait for the teacher to allow make-ups.',
-        timeoutApply: '教师已开放补交,请尽快上传作业。',
-        contentPage: 'Assignment Content',
+        timeoutApply: 'Teacher has issued late homework pass, so please upload them as soon as possible',
+        contentPage: 'Homework Content',
         scorePage: 'Score and Comment',
         scorePage: 'Score and Comment',
         score: 'Score From Teacher',
         score: 'Score From Teacher',
         classmatesComments: 'Score From Classmates',
         classmatesComments: 'Score From Classmates',
         comment: 'Give a comment: ',
         comment: 'Give a comment: ',
-        supcomment: '补评: ',
-        delTitle: "作业已被删除,是否删除此条记录?",
-        delOk: "删除",
-        delCancel: "取消",
-        sizeOver: "该文件大小超过限制",
-        extLimit: "该文件格式不符合要求",
-        message1: "请先选择文件!",
-        message2: "请先进行打分和写评语",
-        uploadTime: "提交时间",
-        upload: "下载",
-        fileSize: "文件大小",
-        maxSize: "不超过50MB",
-        fileType: "格式限制",
-        placeholder1: "作业作答...",
+        supcomment: 'Additional Comments: ',
+        delTitle: "The homework has been deleted, do you want to delete this record?",
+        delOk: "Delete",
+        delCancel: "Cancel",
+        sizeOver: "The file size exceeds the limit",
+        extLimit: "The file format does not meet the requirements",
+        message1: "Please select a file first!",
+        message2: "Please rate and write comments first",
+        message3: "该班级暂无其他学生",
+        uploadTime: "Submit Time",
+        upload: "Download",
+        fileSize: "File Size",
+        maxSize: "Less than 50MB",
+        fileType: "Format Restriction",
+        placeholder1: "Homework answers...",
         scoreNum: '分',
         scoreNum: '分',
         grade: "评分",
         grade: "评分",
         time: "发布时间",
         time: "发布时间",
@@ -316,13 +317,13 @@ export default {
         table4: "操作",
         table4: "操作",
     },
     },
     classmatesComment: {
     classmatesComment: {
-        title: "Classmates' assignment observation and mutual evaluation",
+        title: "Classmates' homework observation and mutual evaluation",
         seatNo: 'Seat No.',
         seatNo: 'Seat No.',
-        classNo: '班级',
+        classNo: 'Class',
         name: 'Name',
         name: 'Name',
         star: 'Star',
         star: 'Star',
         comment: 'Give a comment',
         comment: 'Give a comment',
-        preview: 'Assignment Preview: ',
+        preview: 'Homework Preview: ',
         unPreview: 'The format of this file currently does not provide preview',
         unPreview: 'The format of this file currently does not provide preview',
         download: 'Download File',
         download: 'Download File',
         submitted: 'Submit',
         submitted: 'Submit',
@@ -398,10 +399,10 @@ export default {
             noRes: 'Results are not yet calculated.',
             noRes: 'Results are not yet calculated.',
             getScore: 'Number of scored questions',
             getScore: 'Number of scored questions',
             answerBack: 'Answering Review',
             answerBack: 'Answering Review',
-            right: 'Answer Correctly',
-            wrong: 'Answer Incorrectly',
+            right: 'Answered Correctly',
+            wrong: 'Answered Incorrectly',
             noScore: 'Not Graded',
             noScore: 'Not Graded',
-            noAnswer: "未答题",
+            noAnswer: "Not Answered",
             ansRes: 'Answering Result',
             ansRes: 'Answering Result',
             mark: 'Annotate',
             mark: 'Annotate',
             testAns: 'Reference Answer',
             testAns: 'Reference Answer',
@@ -490,9 +491,10 @@ export default {
         answer: 'Answer',
         answer: 'Answer',
         inputAnswers: 'Please enter the answer result',
         inputAnswers: 'Please enter the answer result',
         emput: 'Empty',
         emput: 'Empty',
-        delTitle: "评测已被删除,是否删除此条记录?",
-        delOk: "删除",
-        delCancel: "取消",
+        delTitle: "The assessment has been deleted, do you want to delete this record?",
+        delOk: "Delete",
+        delCancel: "Cancel",
+        examError: "试卷存在问题,无法正常打开",
     },
     },
     queNaire: {
     queNaire: {
         submitSuccess: 'Submitted successfully',
         submitSuccess: 'Submitted successfully',
@@ -503,9 +505,9 @@ export default {
         noAns2: " question(s)",
         noAns2: " question(s)",
         noAns3: "not answered. Please complete before submitting",
         noAns3: "not answered. Please complete before submitting",
         noAns4: "Confirm",
         noAns4: "Confirm",
-        delTitle: "问卷已被删除,是否删除此条记录?",
-        delOk: "删除",
-        delCancel: "取消",
+        delTitle: "The survey has been deleted, do you want to delete this record?",
+        delOk: "Delete",
+        delCancel: "Cancel",
     },
     },
     'informview-title': 'Notification Overview',
     'informview-title': 'Notification Overview',
     view: 'Go to view',
     view: 'Go to view',

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/en-US/syllabus.js

@@ -1,5 +1,5 @@
 export default{
 export default{
-	noSaveShare:'This chapter has not been saved yet. Please save it before operation!',
+	noSaveShare:'This topic has not been saved yet. Please save it before operation!',
 	noShareMyself:'Cannot share to yourself',
 	noShareMyself:'Cannot share to yourself',
 	copyChapter:'copy Chapter',
 	copyChapter:'copy Chapter',
 	ignoreChapter:'ignore Chapter',
 	ignoreChapter:'ignore Chapter',

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/en-US/system.js

@@ -64,7 +64,7 @@ export default {
         onlineTrain:'Online Seminar',
         onlineTrain:'Online Seminar',
         appAssassment:'Application Appraisal',
         appAssassment:'Application Appraisal',
         discuss:'Discussion Center',
         discuss:'Discussion Center',
-        policy:'政策文件'
+        policy:'Policy Document'
     },
     },
     compt: {
     compt: {
         cusWare: 'Teaching Material',
         cusWare: 'Teaching Material',

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/en-US/teachContent.js

@@ -1,7 +1,7 @@
 export default {
 export default {
   recent: 'Recent',
   recent: 'Recent',
   recentTips: 'Temporary cache of up to 20 recently uploaded resources.The cache will be cleared when you exit the account or change computers.',
   recentTips: 'Temporary cache of up to 20 recently uploaded resources.The cache will be cleared when you exit the account or change computers.',
-  filterRes: 'HiTeach Material',
+  filterRes: 'HiTeach',
   filterPicture: 'Image',
   filterPicture: 'Image',
   filterVideo: 'Video',
   filterVideo: 'Video',
   filterAudio: 'Audio',
   filterAudio: 'Audio',

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/en-US/teachermgmt.js

@@ -25,7 +25,7 @@ export default {
             auth1: 'Allow editing of school system content, including grade level and semester subject information'
             auth1: 'Allow editing of school system content, including grade level and semester subject information'
         },
         },
         reset: 'Restore Default',
         reset: 'Restore Default',
-        clearContent:'是否確認清空當前老師的所有系統權限? ',
+        clearContent:'Do you confirm to clear all system authorizations of the current teacher?',
         save: 'Save Change',
         save: 'Save Change',
         on: 'On',
         on: 'On',
         off: 'Off'
         off: 'Off'

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/en-US/utils.js

@@ -4,7 +4,7 @@ export default {
 	audioFormatError:'The audio format is incorrect! Please reselect!',
 	audioFormatError:'The audio format is incorrect! Please reselect!',
 	fileReadFail:'There is test data reading failure!',
 	fileReadFail:'There is test data reading failure!',
 	uploadLoading:'Uploading...',
 	uploadLoading:'Uploading...',
-	standrad:'能力點版本',
+	standrad:'Capability Point Version',
 	choose:"Select",
 	choose:"Select",
 	draw:'Draw',
 	draw:'Draw',
 	arrow:'Arrow',
 	arrow:'Arrow',

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

@@ -217,6 +217,8 @@ export default {
     gradeLabel:'年级',
     gradeLabel:'年级',
     cusNoRepeat:'课程编码重复',
     cusNoRepeat:'课程编码重复',
     cusNameRepeat:'课程名称重复',
     cusNameRepeat:'课程名称重复',
+    noClassInfo:'暂未找到班级信息',
+    noRoomInfo:'暂未找到教室信息',
 
 
     //MgtStuList.vue
     //MgtStuList.vue
     nameList:'名单',
     nameList:'名单',

+ 4 - 0
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/jyzx.js

@@ -190,6 +190,10 @@ export default{
     },
     },
     // 活动
     // 活动
     activity: {
     activity: {
+        voteHeader1: "投票列表",
+        voteHeader2: "投票内容",
+        queHeader1: "问卷列表",
+        queHeader2: "问卷内容",
         des: "描述",
         des: "描述",
         voteArea: "投票区",
         voteArea: "投票区",
         haveVoteNum: "可投票数",
         haveVoteNum: "可投票数",

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-CN/login.js

@@ -23,7 +23,7 @@ export default {
         text2: '使用学校提供的学生专属帐号与密码登入本校,体验本校提供的活动、缴交作业或参与考试等任务。 '
         text2: '使用学校提供的学生专属帐号与密码登入本校,体验本校提供的活动、缴交作业或参与考试等任务。 '
     },
     },
     placeholder: {
     placeholder: {
-        id: '醍摩豆ID / 手机号码 / E-Mail',
+        id: '醍摩豆ID / 手机号码',
         psw: '密码',
         psw: '密码',
         schoolMenu: '选择学校',
         schoolMenu: '选择学校',
         schoolID: '账号',
         schoolID: '账号',

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

@@ -295,6 +295,7 @@ export default {
         extLimit: "该文件格式不符合要求",
         extLimit: "该文件格式不符合要求",
         message1: "请先选择文件!",
         message1: "请先选择文件!",
         message2: "请先进行打分和写评语",
         message2: "请先进行打分和写评语",
+        message3: "该班级暂无其他学生",
         uploadTime: "提交时间",
         uploadTime: "提交时间",
         upload: "下载",
         upload: "下载",
         fileSize: "文件大小",
         fileSize: "文件大小",
@@ -493,6 +494,7 @@ export default {
         delTitle: "评测已被删除,是否删除此条记录?",
         delTitle: "评测已被删除,是否删除此条记录?",
         delOk: "删除",
         delOk: "删除",
         delCancel: "取消",
         delCancel: "取消",
+        examError: "试卷存在问题,无法正常打开",
     },
     },
     queNaire: {
     queNaire: {
         submitSuccess: '提交成功',
         submitSuccess: '提交成功',

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

@@ -217,6 +217,8 @@ export default {
     gradeLabel: '年級',
     gradeLabel: '年級',
     cusNoRepeat:'課程編碼重複',
     cusNoRepeat:'課程編碼重複',
     cusNameRepeat:'課程名稱重複',
     cusNameRepeat:'課程名稱重複',
+    noClassInfo:'暫未找到班級信息',
+    noRoomInfo:'暫未找到教室信息',
 
 
     //MgtStuList.vue
     //MgtStuList.vue
     nameList: '名單',
     nameList: '名單',

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

@@ -216,8 +216,8 @@ export default {
 		warningTips3: '試題資料讀取完成!',
 		warningTips3: '試題資料讀取完成!',
 		warningTips4: '未解析出符合條件的試題,請檢查匯入格式是否按照範本檔案修改!',
 		warningTips4: '未解析出符合條件的試題,請檢查匯入格式是否按照範本檔案修改!',
 		warningTips5: '抱歉,檔案解析失敗!',
 		warningTips5: '抱歉,檔案解析失敗!',
-		tips6:'操作失敗,請先完善當前學段的科目信息!',
-		tips7:'操作失敗,請先完善當前學段的年級信息!'
+		tips6:'操作失敗,請先完善當前學段的科目資訊!',
+		tips7:'操作失敗,請先完善當前學段的年級資訊!'
 	},
 	},
 	createPaper: {
 	createPaper: {
 		setAutoConditions: '設定自動組卷條件',
 		setAutoConditions: '設定自動組卷條件',

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/home.js

@@ -16,7 +16,7 @@ export default {
     col6: '全班測驗',
     col6: '全班測驗',
     ac1: '評量測驗',
     ac1: '評量測驗',
     ac2: '自主學習',
     ac2: '自主學習',
-    ac3: '作活動',
+    ac3: '作活動',
     ac4: '投票活動',
     ac4: '投票活動',
     ac5: '問卷調查',
     ac5: '問卷調查',
     countNum:'數量',
     countNum:'數量',

+ 5 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/jyzx.js

@@ -145,7 +145,7 @@ export default{
         teacher1: "教師",
         teacher1: "教師",
         noCheck: "未抽查",
         noCheck: "未抽查",
         teacherName: "教師姓名",
         teacherName: "教師姓名",
-        message1: "您確實要删除該作业嗎?",
+        message1: "您確實要刪除該作業嗎?",
     },
     },
     // 课堂实录
     // 课堂实录
     classRecord: {
     classRecord: {
@@ -190,6 +190,10 @@ export default{
     },
     },
     // 活动
     // 活动
     activity: {
     activity: {
+        voteHeader1: "投票清單",
+        voteHeader2: "投票內容",
+        queHeader1: "問卷清單",
+        queHeader2: "問卷內容",
         des: "描述",
         des: "描述",
         voteArea: "投票區",
         voteArea: "投票區",
         haveVoteNum: "可投票數",
         haveVoteNum: "可投票數",

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/learnActivity.js

@@ -332,7 +332,7 @@ export default {
         objectiveLabel:'(客)',
         objectiveLabel:'(客)',
         alreadyLabel:'(已)',
         alreadyLabel:'(已)',
         exTag: '異常',
         exTag: '異常',
-        scoreTips: '溫馨提示:客觀題已由系統自動評分,下面只顯示了需要人工評分的主觀題題號。 ',
+        scoreTips: '溫馨提示:客觀題已由系統自動評分,下面只顯示了需要人工評分的主觀題題號。',
         feedback:'反饋:',
         feedback:'反饋:',
         exStatus:'狀態:未處理',
         exStatus:'狀態:未處理',
         continueMark:'繼續閱卷',
         continueMark:'繼續閱卷',

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/login.js

@@ -5,7 +5,7 @@ export default {
         QRLogin: '掃描登入',
         QRLogin: '掃描登入',
         schoolLogin: '校內帳號登入',
         schoolLogin: '校內帳號登入',
         ies5: '醍摩豆雲平台',
         ies5: '醍摩豆雲平台',
-        jinniuLogin:'號登錄'
+        jinniuLogin:'號登錄'
     },
     },
     subTitle: {
     subTitle: {
         IDLogin: '登入IES智慧教學服務,即刻存取雲端服務',
         IDLogin: '登入IES智慧教學服務,即刻存取雲端服務',

+ 13 - 11
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/studentWeb.js

@@ -9,7 +9,7 @@ export default {
         exam: '評量',
         exam: '評量',
         vote: '投票',
         vote: '投票',
         survey: '問卷',
         survey: '問卷',
-        homework: '作',
+        homework: '作',
     },
     },
     public: {
     public: {
         noData: '暫無資料',
         noData: '暫無資料',
@@ -21,8 +21,8 @@ export default {
         privateVote: '個人投票',
         privateVote: '個人投票',
         schoolSurvey: '校級問卷',
         schoolSurvey: '校級問卷',
         privateSurvey: '個人問卷',
         privateSurvey: '個人問卷',
-        schoolHomework: '校級作',
-        privateHomework: '個人作',
+        schoolHomework: '校級作',
+        privateHomework: '個人作',
         search: '請輸入查詢內容...',
         search: '請輸入查詢內容...',
         notice: '此功能暫未開放,敬請期待!',
         notice: '此功能暫未開放,敬請期待!',
         develop: "開發中",
         develop: "開發中",
@@ -281,26 +281,27 @@ export default {
         uploadError: '上傳失敗',
         uploadError: '上傳失敗',
         uploadDes: '活動結束後,即可檢視作業成績評語',
         uploadDes: '活動結束後,即可檢視作業成績評語',
         timeoutHint: '作業上傳時間已結束,本次作業成績將以 0分 計算,或等候教師開放補交',
         timeoutHint: '作業上傳時間已結束,本次作業成績將以 0分 計算,或等候教師開放補交',
-        timeoutApply: '教師已開放補交,請儘快上傳作。',
+        timeoutApply: '教師已開放補交,請儘快上傳作。',
         contentPage: '作業內容',
         contentPage: '作業內容',
         scorePage: '成績評語',
         scorePage: '成績評語',
         score: '教師評分',
         score: '教師評分',
         classmatesComments: '同學給評',
         classmatesComments: '同學給評',
         comment: '給評: ',
         comment: '給評: ',
         supcomment: '補評: ',
         supcomment: '補評: ',
-        delTitle: "作业已被删除,是否删除此條記錄?",
-        delOk: "除",
+        delTitle: "作業已被刪除,是否刪除此條記錄?",
+        delOk: "除",
         delCancel: "取消",
         delCancel: "取消",
         sizeOver: "該文件大小超過限制",
         sizeOver: "該文件大小超過限制",
         extLimit: "該檔案格式不符合要求",
         extLimit: "該檔案格式不符合要求",
         message1: "請先選擇文件!",
         message1: "請先選擇文件!",
         message2: "請先進行打分和寫評語",
         message2: "請先進行打分和寫評語",
+        message3: "該班級暫無其他學生",
         uploadTime: "提交時間",
         uploadTime: "提交時間",
         upload: "下載",
         upload: "下載",
         fileSize: "文件大小",
         fileSize: "文件大小",
         maxSize: "不超過50MB",
         maxSize: "不超過50MB",
         fileType: "格式限制",
         fileType: "格式限制",
-        placeholder1: "作作答...",
+        placeholder1: "作作答...",
         scoreNum: '分',
         scoreNum: '分',
         grade: "評分",
         grade: "評分",
         time: "發佈時間",
         time: "發佈時間",
@@ -490,9 +491,10 @@ export default {
         answer: '作答',
         answer: '作答',
         inputAnswers: '請輸入作答結果',
         inputAnswers: '請輸入作答結果',
         emput: '空',
         emput: '空',
-        delTitle: "評測已被删除,是否删除此條記錄?",
-        delOk: "除",
+        delTitle: "評測已被刪除,是否刪除此條記錄?",
+        delOk: "除",
         delCancel: "取消",
         delCancel: "取消",
+        examError: "試卷存在問題,無法正常打開",
     },
     },
     queNaire: {
     queNaire: {
         submitSuccess: '提交成功',
         submitSuccess: '提交成功',
@@ -503,8 +505,8 @@ export default {
         noAns2: "題",
         noAns2: "題",
         noAns3: "未答,請先完成再提交",
         noAns3: "未答,請先完成再提交",
         noAns4: "確定",
         noAns4: "確定",
-        delTitle: "問卷已被删除,是否删除此條記錄?",
-        delOk: "除",
+        delTitle: "問卷已被刪除,是否刪除此條記錄?",
+        delOk: "除",
         delCancel: "取消",
         delCancel: "取消",
     },
     },
     'informview-title': '通知總覽',
     'informview-title': '通知總覽',

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/system.js

@@ -49,7 +49,7 @@ export default {
         prtVote: '個人投票',
         prtVote: '個人投票',
         prtQu: '個人問卷',
         prtQu: '個人問卷',
         selfLearn: '自主學習',
         selfLearn: '自主學習',
-        homework: '作活動',
+        homework: '作活動',
         acRecord: '活動記錄',
         acRecord: '活動記錄',
         cusMgt: '課程管理',
         cusMgt: '課程管理',
         taskList: '任務清單',
         taskList: '任務清單',

+ 1 - 1
TEAMModelOS/ClientApp/src/locale/lang/zh-TW/teachermgmt.js

@@ -25,7 +25,7 @@ export default {
             auth1: '允許編輯學制內容,包括年級、學期學科資訊'
             auth1: '允許編輯學制內容,包括年級、學期學科資訊'
         },
         },
         reset: '恢復預設',
         reset: '恢復預設',
-        clearContent:'是否確認清空當前老師的所有系統權限? ',
+        clearContent:'是否確認清空當前老師的所有系統權限?',
         save: '儲存變更',
         save: '儲存變更',
         on: '開啟',
         on: '開啟',
         off: '關閉'
         off: '關閉'

+ 2 - 2
TEAMModelOS/ClientApp/src/router/routes.js

@@ -132,7 +132,7 @@ export const routes = [{
 	{
 	{
 		name: 'home',
 		name: 'home',
 		path: '/home',
 		path: '/home',
-		redirect: '/home/MyCourse',
+		redirect: '/home/homePage', //登录成功跳转页面
 		component: resolve => require(['@/view/Home'], resolve),
 		component: resolve => require(['@/view/Home'], resolve),
 		meta: {
 		meta: {
 			middleware: ['login', 'role:admin|teacher'], // 强制登录(会自动跳转到登录页),角色为管理员或教师
 			middleware: ['login', 'role:admin|teacher'], // 强制登录(会自动跳转到登录页),角色为管理员或教师
@@ -694,7 +694,7 @@ export const routes = [{
 			{
 			{
 				path: 'homePage',
 				path: 'homePage',
 				name: 'homePage',
 				name: 'homePage',
-				component: resolve => require(['@/view/homepage/HomePage.vue'], resolve),
+				component: resolve => require(['@/view/homepage/NewHomePage.vue'], resolve),
 				meta: {
 				meta: {
 					activeName: 'homePage'
 					activeName: 'homePage'
 				}
 				}

+ 1 - 0
TEAMModelOS/ClientApp/src/service/User.js

@@ -80,6 +80,7 @@ export class User {
           localStorage.removeItem('cacheSchoolFiles')
           localStorage.removeItem('cacheSchoolFiles')
           localStorage.removeItem('cachePrivFiles')
           localStorage.removeItem('cachePrivFiles')
           localStorage.removeItem('platform')
           localStorage.removeItem('platform')
+          localStorage.removeItem('curPeriod')
           sessionStorage.removeItem('areaName')
           sessionStorage.removeItem('areaName')
           sessionStorage.removeItem('areaId')
           sessionStorage.removeItem('areaId')
           
           

+ 1 - 1
TEAMModelOS/ClientApp/src/static/video.json

@@ -93,7 +93,7 @@
     "content": "当代教育名家冯恩洪教授作“课堂价值与国民素质”的专题报告。他提出学校应重视知识的应用,教是为了不教,“究竟是教师带着学生走向真理,还是教师带着真理走向学生?”是值得我们静下心来思考的问题。",
     "content": "当代教育名家冯恩洪教授作“课堂价值与国民素质”的专题报告。他提出学校应重视知识的应用,教是为了不教,“究竟是教师带着学生走向真理,还是教师带着真理走向学生?”是值得我们静下心来思考的问题。",
     "link": "https://teammodelstorage.blob.core.chinacloudapi.cn/0-public/video/%E4%B8%93%E5%AE%B6/%E5%BD%93%E4%BB%A3%E6%95%99%E8%82%B2%E5%90%8D%E5%AE%B6%E5%86%AF%E6%81%A9%E6%B4%AA.mp4",
     "link": "https://teammodelstorage.blob.core.chinacloudapi.cn/0-public/video/%E4%B8%93%E5%AE%B6/%E5%BD%93%E4%BB%A3%E6%95%99%E8%82%B2%E5%90%8D%E5%AE%B6%E5%86%AF%E6%81%A9%E6%B4%AA.mp4",
     "poster": "https://teammodelstorage.blob.core.chinacloudapi.cn/0-public/video/%E4%B8%93%E5%AE%B6/%E5%B0%81%E9%9D%A2/%E5%86%AF%E6%81%A9%E6%B4%AA.png",
     "poster": "https://teammodelstorage.blob.core.chinacloudapi.cn/0-public/video/%E4%B8%93%E5%AE%B6/%E5%B0%81%E9%9D%A2/%E5%86%AF%E6%81%A9%E6%B4%AA.png",
-    "title": "专题报告:课堂价值与国素质"
+    "title": "专题报告:课堂价值与国素质"
   },
   },
   {
   {
     "reporter": "陈先云",
     "reporter": "陈先云",

+ 6 - 1
TEAMModelOS/ClientApp/src/store/module/user.js

@@ -39,7 +39,8 @@ export default {
             courses: undefined
             courses: undefined
         },
         },
         authStatus: undefined, //(單數)老師權限總設定值
         authStatus: undefined, //(單數)老師權限總設定值
-        authStatusMulti: undefined //(複數)老師權限總設定值
+        authStatusMulti: undefined, //(複數)老師權限總設定值
+		curPeriod:undefined
     },
     },
     getters: {
     getters: {
         getSchoolUserAll: state => {
         getSchoolUserAll: state => {
@@ -167,6 +168,10 @@ export default {
         }
         }
     },
     },
     mutations: {
     mutations: {
+		/* 设置当前学段 */
+		setCurPeriod(state,data){
+			state.curPeriod = data
+		},
         //更新userProfile schools
         //更新userProfile schools
         setSchoolsInfo(state, data) {
         setSchoolsInfo(state, data) {
             console.log('111',state, data)
             console.log('111',state, data)

+ 23 - 7
TEAMModelOS/ClientApp/src/utils/directive.js

@@ -12,19 +12,35 @@ const specialChar = {
     bind: function (el, binding, vnode) {
     bind: function (el, binding, vnode) {
         // 正则规则可根据需求自定义
         // 正则规则可根据需求自定义
         // var regRule = /[`~!@#$%^&*()\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、]/g
         // var regRule = /[`~!@#$%^&*()\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、]/g
-        var regRule = /[`~!@#$^&*\-+=<>?"{}|,;'\\[\]·~!@#&*——\-+={}|]/g
+        let regRule = /[`~!#$^&*\-+=<>?"{}|,;'\\[\]·~!#&*——\-+={}|]/g
+        let isChinese = false
         let $inp = findEle(el, 'input')
         let $inp = findEle(el, 'input')
         el.$inp = $inp
         el.$inp = $inp
-        $inp.handle = function () {
-            let val = $inp.value
-            $inp.value = val.replace(regRule, '')
-            console.log('自定义指令', val)
-            trigger($inp, 'input')
+        if ($inp) {
+            $inp.handle = function () {
+                if (!isChinese) {
+                    let val = $inp.value
+                    $inp.value = val.replace(regRule, '')
+                    console.log('自定义指令', val)
+                    trigger($inp, 'input')
+                }
+            }
+            $inp.addEventListener('keyup', $inp.handle)
+            $inp.addEventListener('compositionstart', (e) => {
+                isChinese = true
+                console.log('11', e, isChinese)
+            })
+            $inp.addEventListener('compositionend', (e) => {
+                console.log('22', e)
+                isChinese = false
+            })
         }
         }
-        $inp.addEventListener('keyup', $inp.handle)
     },
     },
     unbind: function (el) {
     unbind: function (el) {
         el.$inp && el.$inp.removeEventListener('keyup', el.$inp.handle)
         el.$inp && el.$inp.removeEventListener('keyup', el.$inp.handle)
+        el.$inp && el.$inp.removeEventListener('compositionend')
+        el.$inp && el.$inp.removeEventListener('compositionstart')
+        // el.$inp && el.$inp.removeEventListener('keydown', el.$inp.handle)
     },
     },
 }
 }
 
 

+ 3 - 3
TEAMModelOS/ClientApp/src/utils/editorTools.js

@@ -72,7 +72,8 @@ export default {
 			'table',
 			'table',
 			'splitLine',
 			'splitLine',
 			'canvas',
 			'canvas',
-			'formula'
+			'formula',
+			'undo'
 		]
 		]
 		isOption && editor.config.menus.splice(editor.config.menus.indexOf('video'),1)
 		isOption && editor.config.menus.splice(editor.config.menus.indexOf('video'),1)
 	},
 	},
@@ -119,8 +120,7 @@ export default {
 			'link',
 			'link',
 			'list',
 			'list',
 			'image',
 			'image',
-			'table',
-			'splitLine',
+			'undo'
 		]
 		]
 	},
 	},
 	
 	

File diff suppressed because it is too large
+ 0 - 4960
TEAMModelOS/ClientApp/src/utils/wangEditor.js


+ 3 - 1
TEAMModelOS/ClientApp/src/view/abilityMgmt/Index.vue

@@ -206,7 +206,7 @@
 									<Input v-special-char v-model="addVolumeForm.env" :placeholder="$t('ability.mgmt.place5')"></Input>
 									<Input v-special-char v-model="addVolumeForm.env" :placeholder="$t('ability.mgmt.place5')"></Input>
 								</FormItem>
 								</FormItem>
 								<FormItem :label="$t('ability.mgmt.isCompulsory')" prop="compulsory">
 								<FormItem :label="$t('ability.mgmt.isCompulsory')" prop="compulsory">
-									<i-switch size="large" v-model="addVolumeForm.currency === 1">
+									<i-switch size="large" v-model="addVolumeForm.compulsory">
 										<span slot="open">{{ $t('ability.mgmt.compulsory') }}</span>
 										<span slot="open">{{ $t('ability.mgmt.compulsory') }}</span>
 										<span slot="close">{{ $t('ability.mgmt.noCompulsory') }}</span>
 										<span slot="close">{{ $t('ability.mgmt.noCompulsory') }}</span>
 									</i-switch>
 									</i-switch>
@@ -778,6 +778,7 @@
 			},
 			},
 			/* 编辑当前册别 */
 			/* 编辑当前册别 */
 			doEditVolume() {
 			doEditVolume() {
+				this.curVolume.compulsory = this.curVolume.currency === 1
 				this.addVolumeForm = JSON.parse(JSON.stringify(this.curVolume))
 				this.addVolumeForm = JSON.parse(JSON.stringify(this.curVolume))
 				this.isEditVolume = true
 				this.isEditVolume = true
 				this.isAddVolumeModal = true
 				this.isAddVolumeModal = true
@@ -1781,6 +1782,7 @@
 								"sug": this.addVolumeForm.sug,
 								"sug": this.addVolumeForm.sug,
 								"stds": this.addVolumeForm.stds,
 								"stds": this.addVolumeForm.stds,
 								"compulsory": this.addVolumeForm.compulsory,
 								"compulsory": this.addVolumeForm.compulsory,
+								"currency": this.addVolumeForm.compulsory ? 1 : 0,
 								"dimension": this.curDimensionCode,
 								"dimension": this.curDimensionCode,
 								"creatorId": this.$store.state.userInfo.TEAMModelId,
 								"creatorId": this.$store.state.userInfo.TEAMModelId,
 								"creatorName": this.$store.state.userInfo.name,
 								"creatorName": this.$store.state.userInfo.name,

+ 0 - 1
TEAMModelOS/ClientApp/src/view/classmgt/CreateNotice.vue

@@ -44,7 +44,6 @@
     </div>
     </div>
 </template>
 </template>
 <script>
 <script>
-import E from '@/utils/wangEditor.js'
 export default {
 export default {
     data() {
     data() {
         // 验证公告时间
         // 验证公告时间

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

@@ -811,6 +811,7 @@
 				return this.$store.state.userInfo.hasSchool;
 				return this.$store.state.userInfo.hasSchool;
 			},
 			},
 		},
 		},
+		
 	};
 	};
 </script>
 </script>
 <style lang="less">
 <style lang="less">

+ 15 - 4
TEAMModelOS/ClientApp/src/view/evaluation/index/CreateExercises.vue

@@ -227,7 +227,7 @@
 		},
 		},
 		created() {
 		created() {
 			// 初始化区班校信息
 			// 初始化区班校信息
-			this.getSchoolInfo();
+			// this.getSchoolInfo(0);
 
 
 			let scope = this.$route.name === 'newSchoolExercise' ? 'school' : 'private'; // 编辑题目
 			let scope = this.$route.name === 'newSchoolExercise' ? 'school' : 'private'; // 编辑题目
 			if (scope) {
 			if (scope) {
@@ -239,14 +239,13 @@
 
 
 		},
 		},
 		methods: {
 		methods: {
-			getSchoolInfo() {
+			getSchoolInfo(periodIndex) {
 				this.$store.dispatch("user/getSchoolProfile").then((res) => {
 				this.$store.dispatch("user/getSchoolProfile").then((res) => {
 					let schoolBaseInfo = res.school_base;
 					let schoolBaseInfo = res.school_base;
 					if (schoolBaseInfo) {
 					if (schoolBaseInfo) {
 						this.schoolInfo = schoolBaseInfo;
 						this.schoolInfo = schoolBaseInfo;
 						if (schoolBaseInfo.period.length) {
 						if (schoolBaseInfo.period.length) {
-							this.gradeList = schoolBaseInfo.period[0].grades;
-							this.subjectList = schoolBaseInfo.period[0].subjects;
+							this.onPeriodChange(periodIndex)
 						}
 						}
 					}
 					}
 				});
 				});
@@ -829,6 +828,18 @@
 				return this.$store.state.userInfo.hasSchool
 				return this.$store.state.userInfo.hasSchool
 			},
 			},
 		},
 		},
+		watch:{
+			'$store.state.user.curPeriod':{
+				deep:true,
+				immediate:true,
+				handler(n,o){
+					if(n){
+						this.getSchoolInfo(n.periodIndex)
+						this.exercisePeriod = n.periodIndex
+					}
+				}
+			}
+		},
 		// 路由离开生命周期函数
 		// 路由离开生命周期函数
 		beforeRouteLeave(to, from, next) {
 		beforeRouteLeave(to, from, next) {
 			if (this.isComplete) {
 			if (this.isComplete) {

+ 25 - 6
TEAMModelOS/ClientApp/src/view/evaluation/index/CreatePaper.vue

@@ -1,5 +1,5 @@
 <template>
 <template>
-	<div class="create-evaluation-container">
+	<div class="create-evaluation-container custom-iview-split">
 		<div class="create-header">
 		<div class="create-header">
 			<p class="create-header-title">
 			<p class="create-header-title">
 				{{ isEditPaper ? $t('evaluation.paperList.editPaper') : evaluationInfo.createType === 'auto' ? $t('evaluation.index.autoCreate') : evaluationInfo.createType === 'import' ? $t('evaluation.index.importCreate')  : $t('evaluation.index.manualCreate') }}
 				{{ isEditPaper ? $t('evaluation.paperList.editPaper') : evaluationInfo.createType === 'auto' ? $t('evaluation.index.autoCreate') : evaluationInfo.createType === 'import' ? $t('evaluation.index.importCreate')  : $t('evaluation.index.manualCreate') }}
@@ -184,11 +184,11 @@
 			localStorage.setItem('curCreateType', this.evaluationInfo.createType)
 			localStorage.setItem('curCreateType', this.evaluationInfo.createType)
 			this.evaluationInfo.type = this.$route.name === 'newSchoolPaper' ? 'school' : 'private'
 			this.evaluationInfo.type = this.$route.name === 'newSchoolPaper' ? 'school' : 'private'
 			this.evaluationInfo.scope = this.evaluationInfo.type
 			this.evaluationInfo.scope = this.evaluationInfo.type
-			this.getSchoolBaseInfo().then(res => {
-				if (!res) return
-				this.schoolInfo = res
-				this.onPeriodChange(0)
-			})
+			// this.getSchoolBaseInfo().then(res => {
+			// 	if (!res) return
+			// 	this.schoolInfo = res
+			// 	this.onPeriodChange(0)
+			// })
 			sessionStorage.setItem('isSave',0)
 			sessionStorage.setItem('isSave',0)
 		},
 		},
 		methods: {
 		methods: {
@@ -1396,6 +1396,21 @@
 					this.$refs.testPaper.isShowBackToTop = n > 200
 					this.$refs.testPaper.isShowBackToTop = n > 200
 				}
 				}
 			},
 			},
+			'$store.state.user.curPeriod':{
+				deep:true,
+				immediate:true,
+				handler(n,o){
+					if(n && !this.isEditPaper){
+						console.log('组卷接收到的学段',n.periodIndex)
+						this.getSchoolBaseInfo().then(res => {
+							if (!res) return
+							this.schoolInfo = res
+							this.evaluationInfo.paperPeriod = n.periodIndex
+							this.onPeriodChange(n.periodIndex)
+						})
+					}
+				}
+			}
 		}
 		}
 	}
 	}
 </script>
 </script>
@@ -1469,4 +1484,8 @@
 		/* background: none; */
 		/* background: none; */
 		/* border-color: #999999; */
 		/* border-color: #999999; */
 	}
 	}
+
+	.question-main-tabs .ivu-badge-count-primary{
+		background-color: #05C19C;
+	}
 </style>
 </style>

+ 8 - 5
TEAMModelOS/ClientApp/src/view/homepage/AcCountPie.vue

@@ -28,7 +28,6 @@ export default {
                     backgroundColor: '#fff',
                     backgroundColor: '#fff',
                     extraCssText: 'box-shadow: 0px 0px 10px 0px rgba(19,83,88,0.2);'
                     extraCssText: 'box-shadow: 0px 0px 10px 0px rgba(19,83,88,0.2);'
                 },
                 },
-                // backgroundColor: "#27262b",
                 title: [],
                 title: [],
                 legend: {
                 legend: {
                     data: [],
                     data: [],
@@ -42,19 +41,21 @@ export default {
                 grid: {
                 grid: {
                     left: '20px',
                     left: '20px',
                     right: '20px',
                     right: '20px',
-                    top: '20px',
+                    top: '40px',
                     bottom: '20px',
                     bottom: '20px',
-                    containLabel: true
                 },
                 },
                 series: [
                 series: [
                     {
                     {
                         name: this.$t('home.countNum'),
                         name: this.$t('home.countNum'),
                         type: 'pie',
                         type: 'pie',
                         top: -60,
                         top: -60,
-                        radius: [85, 115],
+                        radius: ['65%','85%'],
                         labelLine: {
                         labelLine: {
                             show: false
                             show: false
                         },
                         },
+                        label:{
+                            show:false
+                        },
                         data: []
                         data: []
                     }
                     }
                 ]
                 ]
@@ -130,7 +131,9 @@ export default {
 </script>
 </script>
 <style scoped lang="less">
 <style scoped lang="less">
 #ac-type-count {
 #ac-type-count {
-    width: 100%;
+    margin: auto;
+    width: 90%;
+    max-width: 300px;
     height: 360px;
     height: 360px;
     display: flex;
     display: flex;
     justify-content: center;
     justify-content: center;

+ 142 - 0
TEAMModelOS/ClientApp/src/view/homepage/HourDetail.vue

@@ -0,0 +1,142 @@
+<template>
+    <div class="hour-detail" :id="'hour-detail'+guid"></div>
+</template>
+<script>
+import elementResizeDetectorMaker from "element-resize-detector"
+let rich = {
+    complete: {
+        fontSize: 30,
+        fontFamily: 'DINBold',
+        color: 'red',
+        // padding: [0, 0, 0, 0],
+    },
+    total: {
+        fontSize: 14,
+        fontFamily: 'DINBold',
+        color: '#515a6e'
+    },
+    textLabel: {
+        fontSize: 14,
+        color: '#17233d',
+        textAlign: 'center',
+        marginTop: 200
+    }
+}
+
+export default {
+    props: {
+        hourInfo: {
+            type: Object,
+            default: () => {
+                return {}
+            }
+        }
+    },
+    data() {
+        return {
+            guid: '',
+            hourDetail: undefined,
+            option: {
+                tooltip: {
+                    formatter: "{a} <br/>{b} : {c}%"
+                },
+                series: [
+                    {
+                        type: 'gauge',
+                        radius: '100%',
+                        startAngle: '225',
+                        endAngle: '-45',
+                        pointer: {
+                            show: false
+                        },
+                        detail: {
+                            formatter: (value) => {
+                                // return '{bule|' + 79.8 + '}\n{radius|综合健康评分}{white|%}';
+                                return `{complete| ${this.hourInfo.value || 0}}{total|/${this.hourInfo.total || 0}}\n{textLabel|${this.hourInfo.name || ''}}`;
+                            },
+                            rich: rich,
+                            "offsetCenter": ['0%', "10%"],
+                        },
+                        data: [],
+                        title: {
+                            show: false,
+                        },
+                        axisLine: {
+                            show: true,
+                            lineStyle: {
+                                color: [
+                                    [0.80, 'rgba(0, 97, 226, 0.8)'],
+                                    [1, 'rgba(0, 97, 226, 0.15)']
+                                ],
+                                width: 8,
+                                shadowOffsetX: 0,
+                                shadowOffsetY: 0,
+                                opacity: 1,
+                            }
+                        },
+                        axisTick: {
+                            show: false
+                        },
+                        splitLine: {
+                            show: false,
+                            length: 25,
+                            lineStyle: {
+                                color: '#00377a',
+                                width: 2,
+                                type: 'solid',
+                            },
+                        },
+                        axisLabel: {
+                            show: false
+                        },
+                    }
+                ]
+            }
+        }
+    },
+    created() {
+        this.guid = this.$jsFn.uuid()
+    },
+    mounted() {
+        this.hourDetail = this.$echarts.init(document.getElementById('hour-detail' + this.guid))
+        this.hourDetail.setOption(this.option)
+        this.erd = elementResizeDetectorMaker()
+        this.erd.listenTo(document.getElementById('hour-detail' + this.guid), () => {
+            this.$nextTick(() => {
+                //监听到事件后执行的业务逻辑
+                this.hourDetail.resize()
+            })
+        })
+    },
+    watch: {
+        hourInfo: {
+            handler(n, o) {
+                if (n.name) {
+                    this.option.series[0].data = []
+                    this.option.series[0].data.push(n)
+                    this.$nextTick(() => {
+                        if (!this.hourDetail) {
+                            this.hourDetail = this.$echarts.init(document.getElementById('hour-detail' + this.guid))
+                        }
+                        this.hourDetail.setOption(this.option)
+                    })
+                }
+            },
+            deep: true,
+            immediate: true
+        }
+    }
+}
+</script>
+<style scoped lang="less">
+.hour-detail {
+    margin: 0px 10%;
+    width: 28%;
+    max-width: 120px;
+    height: 120px;
+    display: flex;
+    justify-content: center;
+}
+</style>
+<style>
+</style>

+ 2 - 2
TEAMModelOS/ClientApp/src/view/homepage/MinTable.vue

@@ -386,9 +386,9 @@ export default {
 .home-cus-plan .ivu-table td,
 .home-cus-plan .ivu-table td,
 .home-cus-plan .ivu-table-header thead tr th,
 .home-cus-plan .ivu-table-header thead tr th,
 .home-cus-plan .ivu-table-wrapper {
 .home-cus-plan .ivu-table-wrapper {
-    border-color: var(--border-color);
+    border-color: #f7f7f7;
 }
 }
 .home-cus-plan .ivu-table::after {
 .home-cus-plan .ivu-table::after {
-    background-color: var(--border-color);
+    background-color: #f7f7f7;
 }
 }
 </style>
 </style>

+ 355 - 0
TEAMModelOS/ClientApp/src/view/homepage/NewHomePage.less

@@ -0,0 +1,355 @@
+@main-bgColor: rgb(40,40,40); //��������ɫ
+@borderColor: var(--border-color); //�߿���ɫ
+@primary-textColor: var(--primary-text-color); //主文本颜色
+@second-textColor: var(--second-text-color); //副文本颜色
+@hover-textBgColor: var(--hover-text-color); //hover 的背景色
+@nothing-textColor: #5f5f5f;
+@primary-fontSize: 14px;
+@second-fontSize: 16px;
+@large-fontSize: 20px;
+
+.home-page-container {
+    width: 100%;
+    height: 100%;
+    display: flex;
+    flex-direction: row;
+    background: #ffffff;
+    padding: 10px 0px 10px 10px;
+}
+.chart-box{
+    width: ~"calc(100% - 335px)";
+    float: left;
+    display: flex;
+    flex-wrap: wrap;
+    padding: 5px;
+    .chart-box-column1{
+        width: 25%;
+        min-width: 200px;
+        margin-right: 2%;
+    }
+    .chart-box-column2{
+        width: 72%;
+        min-width: 500px;
+    }
+}
+.text-box{
+    width: 320px;
+    // background: #fff;
+    float: right;
+    margin-right: 15px;
+    padding: 0px 0px 10px 10px;
+    margin-top: 5px;
+    border-radius: 5px;
+    // &:hover{
+    //     box-shadow: 0px 0px 10px #e9e9e9;
+    // }
+}
+.cus-table-box{
+    border-radius: 5px;
+    overflow: hidden;
+    box-shadow: 0 0 10px 2px var(--card-shadow);
+    // width: 25%;
+    width: 100%;
+    min-width: 200px;
+    // margin-right: 2%;
+    margin-bottom: 15px;
+    height: 350px;
+}
+.class-chart-box{
+    border-radius: 5px;
+    box-shadow: 0 0 10px 2px var(--card-shadow);
+    width: 100%;
+    min-width: 556px;
+    height: fit-content;
+    padding: 20px;
+    position: relative;
+    margin-bottom: 30px;
+    display: flex;
+    height: 350px;
+    justify-content: space-evenly;
+}
+.class-chart{
+    margin-top: 50px;
+}
+.ac-count-box{
+    border-radius: 5px;
+    box-shadow: 0 0 10px 2px var(--card-shadow);
+    padding: 20px;
+    position: relative;
+    // margin-right: 2%;
+    margin-bottom: 30px;
+    height: 380px;
+    // width: 25%;
+    width: 100%;
+    min-width: 200px;
+}
+.chart-title{
+    position: absolute;
+    left: 20px;
+    top: 20px;
+}
+.train-chart-box{
+    border-radius: 5px;
+    box-shadow: 0 0 10px 2px var(--card-shadow);
+    // width: 71%;
+    width: 100%;
+    min-width: 500px;
+    height: fit-content;
+    padding: 20px;
+    position: relative;
+    margin-bottom: 30px;
+    // height: 680px;
+    // display: flex;
+    // justify-content: space-evenly;
+    // align-items: center;
+}
+.train-hour-wrap{
+    display: flex;
+    justify-content: space-evenly;
+    align-items: center;
+}
+.total-hour-label{
+    margin-top: 10px;
+    font-size: 20px;
+}
+.complete-hour{
+    color: #ff9900;
+    font-weight: 600;
+    font-size: 40px;
+}
+.train-hour-box{
+    width: 40%;
+    // text-align: center;
+    padding-left: 30px;
+}
+.hour-detail-box{
+    width: 60%;
+}
+.hour-detail-item{
+    width: 100%;
+    margin: 30px 0px;
+}
+.hour-detail-chart{
+    display: inline-block;
+}
+.complete-detail-hour{
+    color: red;
+    // font-weight: 600;
+    font-size: 24px;
+}
+.detail-hour-label{
+    font-size: 14px;
+    margin-top: 5px;
+}
+.text-title{
+    background: rgba(45, 183, 245, 0.6);
+    width: fit-content;
+    color: white;
+    padding: 1px 10px 2px 8px;
+    position: relative;
+    &::after{
+        position: absolute;
+        content: '';
+        right: -18px;
+        top: 6px;
+        border-right: 12px solid transparent;
+        border-left: 12px solid transparent;
+        border-bottom: 12px solid rgba(45, 183, 245, 0.6);
+        transform: rotate(90deg);
+    }
+}
+.notice-box{
+    margin-bottom: 10px;
+    padding: 10px 0px 10px 10px;
+    box-shadow: -2px 0px 5px #e9e9e9;
+    border-radius: 5px;
+}
+.notice-list-wrap{
+    height: 184px;
+}
+.going-box{
+    margin-bottom: 10px;
+    padding: 10px 0px 10px 10px;
+    box-shadow: -2px 0px 5px #e9e9e9;
+    border-radius: 5px;
+}
+.going-list-wrap{
+    height: 200px;
+    margin: 10px 0px;
+}
+.recent-box{
+    margin-bottom: 10px;
+    padding: 10px 0px 10px 10px;
+    box-shadow: -2px 0px 5px #e9e9e9;
+    border-radius: 5px;
+}
+.recent-list-wrap{
+    height: 170px;
+    margin: 10px 0px;
+}
+.in-pro-ac-item {
+    width: 100%;
+    color: @second-textColor;
+    padding: 5px 0px;
+    font-size: 14px;
+    display: flex;
+    cursor: pointer;
+    align-items: center;
+
+    &:hover{
+        background: @hover-textBgColor;
+    }
+    .ac-type-icon {
+        width: 60px;
+        text-align: center;
+        color: #40A8F0;
+        line-height: 55px;
+        font-size: 25px;
+        margin-right: 10px;
+    }
+
+    .ac-info-box {
+        width: ~"calc(100% - 80px)";
+
+        p {
+            text-overflow: ellipsis;
+            overflow: hidden;
+            white-space: nowrap;
+        }
+
+        .classname-label {
+            background: #666666;
+            border-radius: 15px;
+            padding: 1px 8px;
+            color: #EEEEEE;
+            font-weight: 600;
+            margin-right: 10px;
+            font-size: 14px;
+        }
+
+        .ac-name-label {
+            color: @primary-textColor;
+            text-overflow: ellipsis;
+            overflow: hidden;
+            white-space: nowrap;
+        }
+
+        .ac-time-wrap {
+            color: @second-textColor;
+            font-size: 14px;
+        }
+    }
+
+    .ac-pro-box {
+        width: 80px;
+        text-align: center;
+        .type-label{
+            font-size:14px;
+            padding: 1px 5px;
+            color: #5cadff;
+            border-radius: 2px;
+            border: 1px solid #5cadff;
+            line-height: 50px;
+        }
+        .special-color{
+            color: #19be6b;
+            border-color: #19be6b;
+        }
+    }
+}
+.notice-list-box {
+    list-style: none;
+    // color: white;
+
+    li {
+        width: 100%;
+        border-bottom: 1px solid #f0f0f0;
+        padding: 10px 5px 10px 10px;
+        cursor: pointer;
+
+        &:hover {
+            background: @hover-textBgColor;
+            // padding: 5px 2px;
+        }
+    }
+
+    .notice-title {
+        color: #1cc0f3;
+        font-size: 12px;
+        font-weight: 400;
+    }
+
+    .notice-text {
+        color: @second-textColor;
+        margin: 2px 0px;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        width: 100%;
+
+        p {
+            white-space: nowrap;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            width: 100%;
+        }
+    }
+
+    .long-text {
+        white-space: unset;
+    }
+
+    .notice-time {
+        color: @second-textColor;
+        font-size: 12px;
+    }
+
+    .notice-dot {
+        width: 6px;
+        height: 6px;
+        display: inline-block;
+        background: red;
+        border-radius: 50%;
+        margin-left: 6px;
+        vertical-align: middle;
+    }
+}
+
+@media screen and (max-width: 1300px){
+    .chart-box-column1{
+        width: 96% !important;
+        margin-right: 0px;
+    }
+    .chart-box-column2{
+        width: 96% !important;
+    }
+}
+.train-count-wrap{
+    // display: flex;
+    // flex-wrap: wrap;
+    // justify-content: space-evenly;
+    border-top: 1px dashed var(--border-color);
+    padding-top: 30px;
+    padding-left: 30px;
+    column-count: 3;
+    .train-count-item{
+        width: fit-content;
+        display: flex;
+        margin-bottom: 30px;
+        align-items: center;
+    }
+    .train-count-img{
+        width: 80px;
+    }
+    .train-count-info{
+        margin-left: 20px;
+    }
+    .count-label{
+        font-size: 16px;
+    }
+    .count-num{
+        font-size: 20px;
+        font-weight: 500;
+    }
+}
+

+ 488 - 0
TEAMModelOS/ClientApp/src/view/homepage/NewHomePage.vue

@@ -0,0 +1,488 @@
+<template>
+    <div class="home-page-container">
+        <vuescroll>
+            <div class="chart-box">
+                <div class="chart-box-column1">
+                    <!-- 我的课表 -->
+                    <div class="cus-table-box">
+                        <MinTable @tmwCus="getTmwCus"></MinTable>
+                    </div>
+                    <!-- 活动统计 -->
+                    <div class="ac-count-box">
+                        <p class="chart-title">
+                            {{$t('home.acCount')}}
+                        </p>
+                        <AcCountPie style="margin-top:-20px;" :count="acCount"></AcCountPie>
+                    </div>
+                </div>
+                <div class="chart-box-column2">
+                    <!-- 课堂数据 -->
+                    <!-- <div class="class-chart-box">
+                        <p class="chart-title">
+                            {{$t('home.classData')}}
+                            <span style="color: var(--normal-icon-color);margin-left: 6px;font-size: 12px;">
+                                ({{$t('system.preview')}})
+                            </span>
+                        </p>
+                        <div style="width:45%">
+                            <TechScore class="class-chart"></TechScore>
+                        </div>
+                        <div style="width:45%;padding-top:15px">
+                            <TeachScore class="class-chart"></TeachScore>
+                        </div>
+                    </div> -->
+                    <!-- 研修数据 -->
+                    <div class="train-chart-box">
+                        <p class="chart-title">
+                            研修统计
+                        </p>
+                        <!-- 学时统计 -->
+                        <div class="train-hour-wrap">
+                            <!-- 总学时 -->
+                            <div class="train-hour-box">
+                                <i-circle :stroke-color="strokeColor" :percent="allTimeInfo.percent" :size="200">
+                                    <span class="complete-hour">{{allTimeInfo.complete}}</span>
+                                    <span style="font-size:24px">/{{allTimeInfo.total}}</span>
+                                    <p class="total-hour-label">
+                                        {{ $t("jyzx.homePage.totalTime") }}
+                                        <Tooltip :max-width="400" transfer>
+                                            <Icon type="ios-alert" size="15" />
+                                            <div slot="content">
+                                                <div>
+                                                    {{ $t("jyzx.homePage.remarks1") }}
+                                                </div>
+                                                <div>
+                                                    {{ $t("jyzx.homePage.remarks2") }}
+                                                </div>
+                                                <div>
+                                                    {{ $t("jyzx.homePage.remarks3") }}
+                                                </div>
+                                            </div>
+                                        </Tooltip>
+                                    </p>
+                                </i-circle>
+                            </div>
+                            <!-- 学时详情 -->
+                            <div class="hour-detail-box">
+                                <div class="hour-detail-item">
+                                    <HourDetail class="hour-detail-chart" :hourInfo="onlineInfo"></HourDetail>
+                                    <HourDetail class="hour-detail-chart" :hourInfo="offlineInfo"></HourDetail>
+                                </div>
+                                <div class="hour-detail-item">
+                                    <HourDetail class="hour-detail-chart" :hourInfo="verifyInfo"></HourDetail>
+                                    <HourDetail class="hour-detail-chart" :hourInfo="videoInfo"></HourDetail>
+                                </div>
+                            </div>
+                        </div>
+                        <!-- 活动数量统计 -->
+                        <div class="train-count-wrap">
+                            <div class="train-count-item" v-for="(item,index) in trainCountList" :key="index">
+                                <img :src="item.img" class="train-count-img" alt="">
+                                <div class="train-count-info">
+                                    <p class="count-label">{{item.text}}</p>
+                                    <p class="count-num">{{`${item.complete}/${item.total}`}}</p>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="text-box">
+                <!-- 学校公告 -->
+                <div class="notice-box">
+                    <p class="text-title">{{$t('home.scNotice')}}</p>
+                    <div class="notice-list-wrap">
+                        <vuescroll>
+                            <ul class="notice-list-box">
+                                <li v-for="(item,index) in noticeList" :key="index" @click="viewNotice(index)">
+                                    <div style="display:flex;justify-content:space-between;">
+                                        <p>
+                                            <span class="notice-title">{{item.title}}</span>
+                                            <span class="notice-dot" v-if="index < 2"></span>
+                                        </p>
+                                        <span class="notice-time">{{$jsFn.dateFormat(item.startTime)}}</span>
+                                    </div>
+                                </li>
+                                <EmptyData v-show="noticeList.length == 0" :textContent="$t('home.noNotice')"></EmptyData>
+                            </ul>
+                        </vuescroll>
+                    </div>
+                </div>
+                <!-- 进行中的活动 -->
+                <div class="going-box">
+                    <p class="text-title">{{$t('home.goingList')}}</p>
+                    <div class="going-list-wrap">
+                        <vuescroll>
+                            <div v-for="(item,index) in goingList" :key="index" class="in-pro-ac-item" @click="toAc(item.pk, item.scope)">
+                                <div class="ac-info-box">
+                                    <p>
+                                        <span class="ac-name-label">{{item.name}}</span>
+                                    </p>
+                                    <p class="ac-time-wrap">
+                                        <Icon type="md-alarm" />
+                                        {{$jsFn.dateFormat(item.startTime)}} - {{$jsFn.dateFormat(item.endTime)}}
+                                    </p>
+                                </div>
+                                <div class="ac-pro-box">
+                                    <span :class="['type-label', item.owner == 'school' ? '' : 'special-color']">
+                                        {{item.owner == 'school' ? $t('home.schoolLabel') : $t('home.privateLabel')}}
+                                    </span>
+                                </div>
+                            </div>
+                            <EmptyData v-show="!goingList.length" :textContent="$t('home.noGoing')"></EmptyData>
+                        </vuescroll>
+                    </div>
+                </div>
+                <!-- 最近课堂记录 -->
+                <div class="recent-box">
+                    <p class="text-title">{{$t('home.recentRecord')}}</p>
+                    <div class="recent-list-wrap">
+                        <vuescroll>
+                            <EmptyData :textContent="$t('home.noRecord')"></EmptyData>
+                        </vuescroll>
+                    </div>
+                </div>
+            </div>
+        </vuescroll>
+        <Modal v-model="viewNoticeStatus" :title="noticeList[noticeIndex] ? noticeList[noticeIndex].title : ''" width="600">
+            <template v-if="noticeList[noticeIndex]">
+                <p class="notice-content" v-html="noticeList[noticeIndex].content"></p>
+            </template>
+        </Modal>
+    </div>
+
+</template>
+<script>
+import AcCountPie from "./AcCountPie.vue"
+import HourDetail from "./HourDetail.vue"
+import TechScore from "./TechScore.vue"
+import TeachScore from "./TeachScore.vue"
+import MinTable from "./MinTable.vue"
+export default {
+    components: {
+        AcCountPie, TechScore, TeachScore, MinTable, HourDetail
+    },
+    inject: ['reload'],
+    data() {
+        return {
+            //总学时数据
+            allTimeInfo: {
+                complete: 0,
+                total: 50,
+                percent: 0
+            },
+            split1: 0.5,
+            split2: 0.5,
+            split3: 0.5,
+            itemCount: 10,
+            tmwCus: [],
+            srvAdr: 'China',
+            hasVerify: false, //是否完成手机号验证
+            acCount: [],
+            goingList: [],
+            noticeList: [],
+            viewNoticeStatus: false,
+            noticeIndex: 0,
+            strokeColor: ['#5cadff', '#2d8cf0'],
+            strokeColor1: ['#00ffa0', '#19be6b'],
+            onlineInfo: {
+                name: '线上研修',
+                total: 20,
+                value: 8
+            },
+            offlineInfo: {
+                name: '校本研修',
+                total: 20,
+                value: 8
+            },
+            verifyInfo: {
+                name: '认证材料',
+                total: 20,
+                value: 8
+            },
+            videoInfo: {
+                name: '课堂实录',
+                total: 20,
+                value: 8
+            },
+            trainCountList: [
+                {
+                    text: '已学能力点',
+                    img: require('@/assets/image/study_point.png'),
+                    complete: 0,
+                    total: 0
+                },
+                {
+                    text: '检测合格能力点',
+                    img: require('@/assets/image/ok_point.png'),
+                    complete: 0,
+                    total: 0
+                },
+                {
+                    text: '成果提交',
+                    img: require('@/assets/image/jyzx_app.png'),
+                    complete: 0,
+                    total: 0
+                },
+                {
+                    text: '区级研修',
+                    img: require('@/assets/image/area_study.png'),
+                    complete: 0,
+                    total: 0
+                },
+                {
+                    text: '区级问卷',
+                    img: require('@/assets/image/area_survey.png'),
+                    complete: 0,
+                    total: 0
+                },
+                {
+                    text: '区级投票',
+                    img: require('@/assets/image/area_vote.png'),
+                    complete: 0,
+                    total: 0
+                },
+                {
+                    text: '校级研修',
+                    img: require('@/assets/image/school_study.png'),
+                    complete: 0,
+                    total: 0
+                },
+                {
+                    text: '校级问卷',
+                    img: require('@/assets/image/school_survey.png'),
+                    complete: 0,
+                    total: 0
+                },
+                {
+                    text: '校级投票',
+                    img: require('@/assets/image/school_vote.png'),
+                    complete: 0,
+                    total: 0
+                }
+            ]
+        }
+    },
+    methods: {
+        //查询学时数据
+        getStudyTime() {
+            let req = {
+                tmdid: this.$store.state.userInfo.TEAMModelId,
+                school: this.$store.state.userInfo.schoolCode,
+            }
+            this.$api.jyzx.getStudyTime(req).then((res) => {
+                if (res) {
+                    this.allTimeInfo.complete = res.alltime
+                    this.allTimeInfo.total = res.setting.allTime
+                    this.allTimeInfo.percent = res.setting.allTime ? res.alltime * 100 / res.setting.allTime : 0
+
+                    // 线上研修
+                    this.onlineInfo.total = res.setting.onlineTime
+                    this.onlineInfo.value = res.onlineTime > res.setting.onlineTime ? res.setting.onlineTime : res.onlineTime
+
+                    // 校本研修
+                    this.offlineInfo.total = res.setting.offlineTime
+                    this.offlineInfo.value = res.offlineTime > res.setting.offlineTime ? res.setting.offlineTime : res.offlineTime
+
+                    // 认证材料
+                    this.verifyInfo.total = res.setting.submitTime
+                    this.verifyInfo.value = res.schoolScoreTime > res.setting.submitTime ? res.setting.submitTime : res.schoolScoreTime
+
+                    // 课堂实录
+                    this.videoInfo.total = res.setting.classTime
+                    this.videoInfo.value = res.classVideoTime > res.setting.classTime ? res.setting.classTime : res.classVideoTime
+
+                    //已学能力点
+                    this.trainCountList[0].total = 30
+                    this.trainCountList[0].complete = res.allAbilityCount
+
+                    //检测合格能力点
+                    this.trainCountList[1].total = res.subCount
+                    this.trainCountList[1].complete = res.hasAbilityExercise
+
+                    //成果提交
+                    this.trainCountList[2].total = res.uploadTotalCount
+                    this.trainCountList[2].complete = res.uploadDoneCount
+
+                    //区级研修
+                    this.trainCountList[3].total = res.offlineAreaJoinCount
+                    this.trainCountList[3].complete = res.offlineAreaDoneCount
+
+                    //区级问卷
+                    this.trainCountList[4].total = res.surveyAreaJoinCount
+                    this.trainCountList[4].complete = res.surveyAreaDoneCount
+
+                    //区级投票
+                    this.trainCountList[5].total = res.voteAreaJoinCount
+                    this.trainCountList[5].complete = res.voteAreaDoneCount
+
+                    //校级研修
+                    this.trainCountList[6].total = res.offlineSchoolJoinCount
+                    this.trainCountList[6].complete = res.offlineSchoolDoneCount
+
+                    //校级问卷
+                    this.trainCountList[7].total = res.surveyJoinCount
+                    this.trainCountList[7].complete = res.surveyDoneCount
+
+                    //校级投票
+                    this.trainCountList[8].total = res.voteJoinCount
+                    this.trainCountList[8].complete = res.voteDoneCount
+                }
+            }).finally(() => {
+                this.isLoading = false
+            })
+        },
+        viewNotice(index) {
+            this.noticeIndex = index
+            this.viewNoticeStatus = true
+        },
+        //查询学校公告
+        findNotice() {
+            let params = {
+                code: this.$store.state.userInfo.schoolCode,
+                type: "school",
+                publish: 1
+            }
+            this.$api.notice.FindNotice(params).then(
+                res => {
+                    this.noticeList = res.notices
+                },
+                err => {
+                    this.$Message.error('API error!')
+                }
+            )
+        },
+        getAcIcon(type) {
+            let icon = ''
+            switch (type) {
+                case 'Exam':
+                    icon = 'iconfont icon-test'
+                    break
+                case 'Self':
+                    icon = 'iconfont icon-activityT'
+                    break
+                case 'Homework':
+                    icon = 'iconfont icon-hw'
+                    break
+                case 'Vote':
+                    icon = 'iconfont icon-vote'
+                    break
+                case 'Survey':
+                    icon = 'iconfont icon-questionnaire'
+                    break
+                default:
+                    break
+            }
+            return icon
+        },
+        getTmwCus(data) {
+            this.tmwCus = []
+            this.tmwCus = this._.cloneDeep(data)
+        },
+        toAc(type, scope) {
+        },
+        toRecordPage() {
+            this.$router.push({
+                path: '/home/classRecord'
+            })
+        },
+        toSelfLearn() {
+            //this.$router.push({
+            //    path: '/home/SelfLearn'
+            //})
+        },
+        toJoinSchool() {
+            this.$router.push({
+                path: '/home/settings'
+            })
+        },
+
+        //获取活动统计数据已经进行中的活动
+        getAcCount() {
+            this.$api.learnActivity.ActivityCount({}).then(
+                res => {
+                    if (res.totalCount && res.totalCount.length) {
+                        res.totalCount.forEach(item => {
+                            switch (item.key) {
+                                case 'Exam':
+                                    item.name = this.$t('home.ac1')
+                                    break
+                                case 'Self':
+                                    item.name = this.$t('home.ac2')
+                                    break
+                                case 'Homework':
+                                    item.name = this.$t('home.ac3')
+                                    break
+                                case 'Vote':
+                                    item.name = this.$t('home.ac4')
+                                    break
+                                case 'Survey':
+                                    item.name = this.$t('home.ac5')
+                                    break
+                                default:
+                                    break
+                            }
+                        })
+                        this.acCount = res.totalCount
+                    }
+                    if (res.goingDatas) {
+                        this.goingList = res.goingDatas
+                    }
+
+                },
+                err => {
+                    this.$Message.error('API error!')
+                }
+            )
+        }
+    },
+    created() {
+        this.getAcCount()
+        this.getStudyTime()
+        if (this.$store.state.userInfo.hasSchool) {
+            this.findNotice()
+        }
+    },
+    mounted() {
+        this.$EventBus.$off('onChangeSchool')
+        this.$EventBus.$on('onChangeSchool', (data) => {
+            this.getAcCount()
+        })
+    },
+    computed: {
+        //暂时只验证加入学校, 手机号需要对接API
+        isComplete() {
+            return this.$store.state.userInfo.hasSchool && this.hasVerify
+        }
+    },
+    watch: {
+        '$store.state.userInfo.schoolCode': {
+            handler(n, o) {
+                this.getAcCount()
+            }
+        }
+    }
+}
+</script>
+<style scoped lang="less">
+@import "./NewHomePage.less";
+</style>
+<style lang="less">
+.home-page-container .ivu-card-body {
+    height: calc(100% - 52px);
+    padding: 0px;
+}
+.notice-text {
+    p {
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        width: 100%;
+    }
+}
+.train-hour-box .ivu-chart-circle {
+    width: 80% !important;
+    height: fit-content !important;
+    max-width: 200px;
+}
+</style>

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

@@ -133,7 +133,7 @@ export default {
 </style>
 </style>
 <style lang="less">
 <style lang="less">
 #teach-method {
 #teach-method {
-    width: 100%;
+    width: 90%;
     height: 200px;
     height: 200px;
     display: flex;
     display: flex;
     justify-content: center;
     justify-content: center;

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

@@ -95,7 +95,7 @@ export default {
 </script>
 </script>
 <style lang="less" scoped>
 <style lang="less" scoped>
 #tech-score {
 #tech-score {
-    width: 100%;
+    width: 80%;
     height: 240px;
     height: 240px;
 }
 }
 </style>
 </style>

+ 14 - 5
TEAMModelOS/ClientApp/src/view/jyzx/Question.vue

@@ -7,6 +7,7 @@
                 border-right: 1px solid rgba(0, 0, 0, 0.1);
                 border-right: 1px solid rgba(0, 0, 0, 0.1);
             "
             "
         >
         >
+            <div class="list-head">{{ $t("jyzx.activity.queHeader1") }}</div>
             <vuescroll>
             <vuescroll>
                 <EmptyData v-if="!listShow.length" :top="100"></EmptyData>
                 <EmptyData v-if="!listShow.length" :top="100"></EmptyData>
                 <div style="margin-bottom: 50px;" v-else>
                 <div style="margin-bottom: 50px;" v-else>
@@ -54,9 +55,10 @@
             </vuescroll>
             </vuescroll>
         </div>
         </div>
         <div class="ques-option">
         <div class="ques-option">
+            <div class="list-head">{{ $t("jyzx.activity.queHeader2") }}</div>
             <div
             <div
-                style="height: 100%"
-				  v-if="listShow.length"
+                style="height: 100%; margin: 0 15px"
+				v-if="listShow.length"
             >
             >
                 <vuescroll>
                 <vuescroll>
                     <div>
                     <div>
@@ -380,6 +382,13 @@ export default {
     height: 100%;
     height: 100%;
 	// font-family: 'NotoSerif', '微软正黑体', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Sans-serif;
 	// font-family: 'NotoSerif', '微软正黑体', 'Microsoft JhengHei UI', 'Microsoft JhengHei', Sans-serif;
 
 
+
+    .list-head{
+        height: 45px;
+        line-height: 45px;
+        padding: 0 15px;
+    }
+
     .school-gade{
     .school-gade{
         vertical-align: middle;
         vertical-align: middle;
         font-size: 14px;
         font-size: 14px;
@@ -464,9 +473,9 @@ export default {
 
 
     .ques-option {
     .ques-option {
         width: 100%;
         width: 100%;
-        background-color: #fff;
-        padding-left: 20px;
-        padding-top: 15px;
+        // background-color: #fff;
+        /* padding-left: 20px;
+        padding-top: 15px; */
 
 
         .title-rect-name{
         .title-rect-name{
             font-weight: 500;
             font-weight: 500;

+ 9 - 1
TEAMModelOS/ClientApp/src/view/jyzx/Vote.vue

@@ -7,6 +7,7 @@
                 border-right: 1px solid rgba(0, 0, 0, 0.1);
                 border-right: 1px solid rgba(0, 0, 0, 0.1);
             "
             "
         >
         >
+            <div class="list-head">{{ $t("jyzx.activity.voteHeader1") }}</div>
             <vuescroll>
             <vuescroll>
                 <EmptyData v-if="!listShow.length" :top="100"></EmptyData>
                 <EmptyData v-if="!listShow.length" :top="100"></EmptyData>
                 <div style="margin-bottom: 50px" v-else>
                 <div style="margin-bottom: 50px" v-else>
@@ -53,6 +54,7 @@
             </vuescroll>
             </vuescroll>
         </div>
         </div>
         <div style="width: 75%; background-color: #fff;overflow: auto;padding-bottom: 40px;">
         <div style="width: 75%; background-color: #fff;overflow: auto;padding-bottom: 40px;">
+            <div class="list-head">{{ $t("jyzx.activity.voteHeader2") }}</div>
             <EmptyData v-if="!Object.keys(voteInfo).length" :top="-100"></EmptyData>
             <EmptyData v-if="!Object.keys(voteInfo).length" :top="-100"></EmptyData>
             <div class="vote-option" v-else>
             <div class="vote-option" v-else>
                 <div class="billboard-and-LightBox">
                 <div class="billboard-and-LightBox">
@@ -523,6 +525,12 @@ export default {
     display: flex;
     display: flex;
     height: 100%;
     height: 100%;
 
 
+    .list-head{
+        height: 45px;
+        line-height: 45px;
+        padding: 0 15px;
+    }
+
     .school-gade{
     .school-gade{
         vertical-align: middle;
         vertical-align: middle;
         font-size: 14px;
         font-size: 14px;
@@ -608,7 +616,7 @@ export default {
     .vote-option {
     .vote-option {
         width: 100%;
         width: 100%;
         background-color: #fff;
         background-color: #fff;
-        padding-left: 20px;
+        padding-left: 15px;
         padding-top: 15px;
         padding-top: 15px;
 
 
         .billboard-and-LightBox{
         .billboard-and-LightBox{

+ 1 - 1
TEAMModelOS/ClientApp/src/view/jyzx/classMemoir.vue

@@ -7,7 +7,7 @@
                         <AbilityUpload :auth="curSas" :acceptTypes="['mp4','avi','flv','mkv','rmvb']" :scope="'school'" mode='other' :prefix="uploadId" @uploadFinish="uploadFinish"></AbilityUpload>
                         <AbilityUpload :auth="curSas" :acceptTypes="['mp4','avi','flv','mkv','rmvb']" :scope="'school'" mode='other' :prefix="uploadId" @uploadFinish="uploadFinish"></AbilityUpload>
                         <Button type="info" size="large" :long="true" @click="confirm">{{ $t('jyzx.classRecord.loadOK') }}</Button>
                         <Button type="info" size="large" :long="true" @click="confirm">{{ $t('jyzx.classRecord.loadOK') }}</Button>
                     </div>
                     </div>
-                    <div v-if="calssListinfo.length" style="height: calc(100vh - 255px); overflow: auto">
+                    <div v-if="calssListinfo.length" style="height: calc(100vh - 255px); overflow: auto; margin-top: 20px">
                         <Table :columns="classCol" :data="calssListinfo" height="680">
                         <Table :columns="classCol" :data="calssListinfo" height="680">
                             <template slot-scope="{ row, index }" slot="action">
                             <template slot-scope="{ row, index }" slot="action">
                                 <Button size="small" @click="checkevaluate(row,true)" style="margin-right:2%">{{ $t('jyzx.common.seeEvaluate') }}</Button>
                                 <Button size="small" @click="checkevaluate(row,true)" style="margin-right:2%">{{ $t('jyzx.common.seeEvaluate') }}</Button>

+ 1 - 1
TEAMModelOS/ClientApp/src/view/jyzx/discuss.vue

@@ -41,7 +41,7 @@
                                         <span style="color: #2d8cf0"
                                         <span style="color: #2d8cf0"
                                             >{{ $t('jyzx.common.content') }}:</span
                                             >{{ $t('jyzx.common.content') }}:</span
                                         >
                                         >
-                                        <p v-html="item.comment"></p>
+                                        <span v-html="item.comment"></span>
                                     </div>
                                     </div>
                                     <div class="disAction">
                                     <div class="disAction">
                                         <div>
                                         <div>

+ 1 - 1
TEAMModelOS/ClientApp/src/view/jyzx/index.less

@@ -144,7 +144,7 @@
 			.node-resource-box {
 			.node-resource-box {
 				display: flex;
 				display: flex;
 				flex-direction: column;
 				flex-direction: column;
-				padding: 10px 20px;
+				padding: 0px 10px;
 				overflow: auto;
 				overflow: auto;
 				padding-bottom: 30px;
 				padding-bottom: 30px;
 
 

+ 1 - 1
TEAMModelOS/ClientApp/src/view/jyzx/offline.less

@@ -106,7 +106,7 @@
 		display: flex;
 		display: flex;
 
 
 		&-header {
 		&-header {
-			height: 40px;
+			height: 45px;
 			width: 100%;
 			width: 100%;
 			// border-bottom: 1px solid @borderColor;
 			// border-bottom: 1px solid @borderColor;
 			display: flex;
 			display: flex;

+ 42 - 23
TEAMModelOS/ClientApp/src/view/jyzx/topicPublish.vue

@@ -2,11 +2,8 @@
     <div class="topicbox">
     <div class="topicbox">
         <div class="topicheader">
         <div class="topicheader">
             <div class="headerleft">
             <div class="headerleft">
-                <div class="totalbox">
-                    <Button type="primary" @click="topicShow = !topicShow">{{ $t("jyzx.discuss.addTopic") }}</Button>
-                </div>
                 <div class="taginfo">
                 <div class="taginfo">
-                    <span style="margin-left: 20px">{{ $t("jyzx.discuss.topicType") }}:</span>
+                    <span>{{ $t("jyzx.discuss.topicType") }}:</span>
                     <CheckboxGroup v-model="toType" @on-change="topicType">
                     <CheckboxGroup v-model="toType" @on-change="topicType">
                         <Checkbox label="1" border>{{ $t("jyzx.discuss.normal") }}</Checkbox>
                         <Checkbox label="1" border>{{ $t("jyzx.discuss.normal") }}</Checkbox>
                         <Checkbox label="2" border>{{ $t("jyzx.discuss.point") }}</Checkbox>
                         <Checkbox label="2" border>{{ $t("jyzx.discuss.point") }}</Checkbox>
@@ -14,6 +11,20 @@
                     <!-- <Tag checkable color="geekblue" size ="large" @on-change="topicType(1)">普通话题</Tag>
                     <!-- <Tag checkable color="geekblue" size ="large" @on-change="topicType(1)">普通话题</Tag>
                     <Tag checkable color="volcano" size ="large" @on-change="topicType(2)">能力点话题</Tag> -->
                     <Tag checkable color="volcano" size ="large" @on-change="topicType(2)">能力点话题</Tag> -->
                 </div>
                 </div>
+                
+                <div class="aboutme">
+                    <Dropdown @on-click="metopic">
+                        <Buuton>
+                            {{ showType }}
+                            <Icon type="ios-arrow-down"></Icon>
+                        </Buuton>
+                        <DropdownMenu slot="list">
+                            <DropdownItem name="allTopic">{{ $t("jyzx.discuss.allTopic") }}</DropdownItem>
+                            <DropdownItem name="metopic">{{ $t("jyzx.discuss.myTopic") }}</DropdownItem>
+                            <DropdownItem name="mereply">{{ $t("jyzx.discuss.replyMe") }}</DropdownItem>
+                        </DropdownMenu>
+                    </Dropdown>
+                </div>
             </div>
             </div>
             <div class="headerright">
             <div class="headerright">
                 <div class="searchbox light-iview-input">
                 <div class="searchbox light-iview-input">
@@ -25,18 +36,10 @@
                         @on-search="searchKeyword"
                         @on-search="searchKeyword"
                     />
                     />
                 </div>
                 </div>
-                <div class="aboutme">
-                    <Dropdown @on-click="metopic">
-                        <a href="javascript:void(0)">
-                            {{ showType }}
-                            <Icon type="ios-arrow-down"></Icon>
-                        </a>
-                        <DropdownMenu slot="list">
-                            <DropdownItem name="allTopic">{{ $t("jyzx.discuss.allTopic") }}</DropdownItem>
-                            <DropdownItem name="metopic">{{ $t("jyzx.discuss.myTopic") }}</DropdownItem>
-                            <DropdownItem name="mereply">{{ $t("jyzx.discuss.replyMe") }}</DropdownItem>
-                        </DropdownMenu>
-                    </Dropdown>
+                
+                <div class="totalbox">
+                    <Icon type="md-add-circle" size="25" color="#57a3f3" @click="topicShow = !topicShow" :title="$t('jyzx.discuss.addTopic')" />
+                    <!-- <Button type="primary">{{ $t("jyzx.discuss.addTopic") }}</Button> -->
                 </div>
                 </div>
                 <!-- <div class="topicbtn">
                 <!-- <div class="topicbtn">
                     <Button
                     <Button
@@ -299,7 +302,7 @@ export default {
 }
 }
 .topicheader {
 .topicheader {
     /* width: 90%; */
     /* width: 90%; */
-    height: 70px;
+    height: 55px;
     /* margin: 0% 5%; */
     /* margin: 0% 5%; */
     border-bottom: 1px solid #ccc;
     border-bottom: 1px solid #ccc;
 }
 }
@@ -307,7 +310,11 @@ export default {
 .headerleft {
 .headerleft {
     width: 48%;
     width: 48%;
     float: left;
     float: left;
-    padding: 1% 0% 1% 2%;
+    // padding: 1% 0% 1% 2%;
+    padding-left: 2%;
+    display: flex;
+    // justify-content: flex-end;
+    align-items: center;
 }
 }
 
 
 .totalbox {
 .totalbox {
@@ -318,7 +325,7 @@ export default {
 .taginfo {
 .taginfo {
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;
-    margin-left: 4%;
+    // margin-left: 4%;
 
 
     .ivu-checkbox{
     .ivu-checkbox{
         display: none;
         display: none;
@@ -329,6 +336,10 @@ export default {
         border-color: #16C18E;
         border-color: #16C18E;
         color: #fff;
         color: #fff;
     }
     }
+
+    .ivu-checkbox-border{
+        border: none;
+    }
 }
 }
 #statementBox {
 #statementBox {
     margin: 1%;
     margin: 1%;
@@ -339,14 +350,17 @@ export default {
     /* float: left; */
     /* float: left; */
     padding: 0% 2%;
     padding: 0% 2%;
     display: inline-block;
     display: inline-block;
-    margin-top: 10px;
+    // margin-top: 10px;
 }
 }
 
 
 .headerright {
 .headerright {
     width: 45%;
     width: 45%;
     float: right;
     float: right;
     padding: 0.5% 2% 1% 2%;
     padding: 0.5% 2% 1% 2%;
-    text-align: right;
+    // text-align: right;
+    display: flex;
+    justify-content: flex-end;
+    align-items: center;
 }
 }
 
 
 .aboutme {
 .aboutme {
@@ -354,12 +368,17 @@ export default {
     /* display: inline-block;
     /* display: inline-block;
     line-height: 40px; */
     line-height: 40px; */
     line-height: 48px;
     line-height: 48px;
-    float: right;
+    // float: right;
+    padding-left: 2%;
+
+    .ivu-dropdown{
+        cursor: pointer;
+    }
 }
 }
 
 
 .topicbtn {
 .topicbtn {
     width: 15%;
     width: 15%;
-    float: right;
+    // float: right;
 }
 }
 
 
 .ivu-btn-circle {
 .ivu-btn-circle {

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

@@ -109,7 +109,7 @@
                 &-item {
                 &-item {
                     position: relative;
                     position: relative;
                     width: 100%;
                     width: 100%;
-                    padding: 16px 25px;
+                    padding: 15px;
                     // border-bottom: 1px solid @borderColor;
                     // border-bottom: 1px solid @borderColor;
                     cursor: pointer;
                     cursor: pointer;
 
 

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

@@ -10,9 +10,10 @@
 			<div class="new-syllabus-select">
 			<div class="new-syllabus-select">
 				<!-- <span>{{$t("knowledge.period")}}:</span> -->
 				<!-- <span>{{$t("knowledge.period")}}:</span> -->
 				<Select ref="periodSelect" v-model="currentPeriodIndex" @on-change="onPeriodChange"
 				<Select ref="periodSelect" v-model="currentPeriodIndex" @on-change="onPeriodChange"
-					@on-select="onPeriodSelect">
+					@on-select="onPeriodSelect" style="display: none;">
 					<Option v-for="(item,index) in periodList" :value="index" :key="index">{{ item.name }}</Option>
 					<Option v-for="(item,index) in periodList" :value="index" :key="index">{{ item.name }}</Option>
 				</Select>
 				</Select>
+				<span style="font-size: 14px;">知识点管理</span>
 			</div>
 			</div>
 			<Button type="success" v-if="$access.ability('admin','knowledge-upd').validateAll && updated"
 			<Button type="success" v-if="$access.ability('admin','knowledge-upd').validateAll && updated"
 				class="school-tools ivu-btn ivu-btn-default" icon="ios-albums-outline"
 				class="school-tools ivu-btn ivu-btn-default" icon="ios-albums-outline"
@@ -92,7 +93,7 @@
 						<EmptyData :top="100"></EmptyData>
 						<EmptyData :top="100"></EmptyData>
 					</div>
 					</div>
 					<div v-else>
 					<div v-else>
-						<p style="font-size: 12px;font-weight: 400;margin-left: 10px;margin-top: 10px;color: #888686;">
+						<p style="font-size: 12px;font-weight: 400;margin-left: 15px;margin-top: 10px;color: #888686;">
 							{{$t("knowledge.colorTip")}}
 							{{$t("knowledge.colorTip")}}
 						</p>
 						</p>
 						<draggable class="points-wrap" tag="div" v-model="pointList" v-bind="dragOptions">
 						<draggable class="points-wrap" tag="div" v-model="pointList" v-bind="dragOptions">
@@ -526,9 +527,9 @@
 						if (schoolBaseInfo.period.length) {
 						if (schoolBaseInfo.period.length) {
 							this.periodList = schoolBaseInfo.period
 							this.periodList = schoolBaseInfo.period
 							this.currentParams.school_code = schoolBaseInfo.id
 							this.currentParams.school_code = schoolBaseInfo.id
-							this.currentParams.periodId = schoolBaseInfo.period[0].id
-							this.currentPeriodIndex = 0 // 默认选择第一个学段
-							this.onPeriodChange(0)
+							// this.currentParams.periodId = schoolBaseInfo.period[0].id
+							// this.currentPeriodIndex = 0 // 默认选择第一个学段
+							// this.onPeriodChange(0)
 						}
 						}
 					}
 					}
 				})
 				})
@@ -549,6 +550,7 @@
 							this.blockCounts = res.datas
 							this.blockCounts = res.datas
 							this.schoolBlockCount = res.datas.map(i => i.countBlock)
 							this.schoolBlockCount = res.datas.map(i => i.countBlock)
 							this.privateBlockCount = res.datas.map(i => i.countBlock)
 							this.privateBlockCount = res.datas.map(i => i.countBlock)
+							console.log(this.countArr);
 						})
 						})
 					}
 					}
 				})
 				})
@@ -680,6 +682,7 @@
 							this.handleConfirmSave({}, '3')
 							this.handleConfirmSave({}, '3')
 						} else {
 						} else {
 							let that = this
 							let that = this
+							this.countArr = []
 							this.isLoadSubject = true
 							this.isLoadSubject = true
 							this.activePeriodIndex = index
 							this.activePeriodIndex = index
 							this.currentParams.periodId = this.originData.period[index].id
 							this.currentParams.periodId = this.originData.period[index].id
@@ -1088,6 +1091,18 @@
 					}
 					}
 				}
 				}
 			},
 			},
+			'$store.state.user.curPeriod':{
+				deep:true,
+				immediate:true,
+				handler(n,o){
+					if(n){
+						this.$store.dispatch('user/getSchoolProfile').then(res => {
+							this.onPeriodChange(n.periodIndex)
+							this.currentPeriodIndex = n.periodIndex
+						})
+					}
+				}
+			}
 		},
 		},
 		beforeRouteLeave(to, from, next) {
 		beforeRouteLeave(to, from, next) {
 			if (this.updated) {
 			if (this.updated) {

+ 0 - 0
TEAMModelOS/ClientApp/src/view/learnactivity/CreateSchoolEva.vue


Some files were not shown because too many files changed in this diff