Browse Source

Merge remote-tracking branch 'origin/develop3.0' into develop3.0

JAELYS 4 years ago
parent
commit
e1220162e7
52 changed files with 1494 additions and 382 deletions
  1. 1 2
      TEAMModelGrpc/Services/ClassroomService.cs
  2. 1 2
      TEAMModelGrpc/Services/HomeWorkService.cs
  3. 78 0
      TEAMModelOS.SDK/DI/AzureCosmos/AzureCosmosExtensions.cs
  4. 11 2
      TEAMModelOS.SDK/DI/AzureCosmos/Inner/SQLHelper.cs
  5. 2 2
      TEAMModelOS.SDK/Helper/Common/StringHelper/HtmlHelper.cs
  6. 4 0
      TEAMModelOS.Service/Models/SchoolInfo/ExamInfo.cs
  7. 5 0
      TEAMModelOS.Service/TEAMModelOS.Model.xml
  8. 69 0
      TEAMModelOS/ClientApp/src/assets/iconfont/demo_index.html
  9. 18 6
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.css
  10. BIN
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.eot
  11. 1 1
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.js
  12. 21 0
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.json
  13. 9 0
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.svg
  14. BIN
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.ttf
  15. BIN
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.woff
  16. BIN
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.woff2
  17. 1 1
      TEAMModelOS/ClientApp/src/common/CollapseMenuLayout.vue
  18. 8 2
      TEAMModelOS/ClientApp/src/router/routes.js
  19. 5 1
      TEAMModelOS/ClientApp/src/view/Home.vue
  20. 14 0
      TEAMModelOS/ClientApp/src/view/classmgt/ManageClass.less
  21. 1 1
      TEAMModelOS/ClientApp/src/view/classmgt/ManageClass.vue
  22. 1 1
      TEAMModelOS/ClientApp/src/view/evaluation/components/BaseImport.vue
  23. 2 2
      TEAMModelOS/ClientApp/src/view/evaluation/index/PickExercise.css
  24. 4 2
      TEAMModelOS/ClientApp/src/view/homepage/AcCountPie.vue
  25. 13 7
      TEAMModelOS/ClientApp/src/view/homepage/CoursePlan.vue
  26. 56 17
      TEAMModelOS/ClientApp/src/view/homepage/HomePage.less
  27. 254 149
      TEAMModelOS/ClientApp/src/view/homepage/HomePage.vue
  28. 24 30
      TEAMModelOS/ClientApp/src/view/homepage/TeachScore.vue
  29. 1 1
      TEAMModelOS/ClientApp/src/view/learnactivity/CreateEvaluation.vue
  30. 34 27
      TEAMModelOS/ClientApp/src/view/learnactivity/ExamPaperAnalysis.less
  31. 5 5
      TEAMModelOS/ClientApp/src/view/learnactivity/ExamPaperAnalysis.vue
  32. 3 10
      TEAMModelOS/ClientApp/src/view/learnactivity/ManageEvaluation.vue
  33. 126 0
      TEAMModelOS/ClientApp/src/view/settings/Index.less
  34. 167 0
      TEAMModelOS/ClientApp/src/view/settings/Index.vue
  35. 135 0
      TEAMModelOS/ClientApp/src/view/settings/SchoolMgmt.less
  36. 324 0
      TEAMModelOS/ClientApp/src/view/settings/SchoolMgmt.vue
  37. 9 9
      TEAMModelOS/ClientApp/src/view/teachcontent/index.vue
  38. 5 4
      TEAMModelOS/Controllers/Analysis/ChangeController.cs
  39. 4 2
      TEAMModelOS/Controllers/Core/BlobController.cs
  40. 7 54
      TEAMModelOS/Controllers/Exam/ExamController.cs
  41. 4 2
      TEAMModelOS/Controllers/Exam/ImportExerciseController.cs
  42. 5 3
      TEAMModelOS/Controllers/Exam/PaperController.cs
  43. 6 4
      TEAMModelOS/Controllers/Syllabus/ItemInfoController.cs
  44. 4 2
      TEAMModelOS/Controllers/Syllabus/KnowledgeController.cs
  45. 4 3
      TEAMModelOS/Controllers/Syllabus/ResourceController.cs
  46. 7 5
      TEAMModelOS/Controllers/Task/HomeworkController.cs
  47. 7 5
      TEAMModelOS/Controllers/Task/LearnController.cs
  48. 6 5
      TEAMModelOS/Controllers/Task/SurveyController.cs
  49. 6 5
      TEAMModelOS/Controllers/Task/VoteController.cs
  50. 4 4
      TEAMModelOS/JsonFile/Core/LangConfig.json
  51. 2 2
      TEAMModelOS/Service/Syllabus/KnowledgeService.cs
  52. 16 2
      TEAMModelOS/Startup.cs

+ 1 - 2
TEAMModelGrpc/Services/ClassroomService.cs

@@ -1,4 +1,4 @@
-using Grpc.Core;
+using Grpc.Core;
 using Grpc.Extension.Abstract;
 using Microsoft.AspNetCore.Authorization;
 using System;
@@ -41,7 +41,6 @@ namespace TEAMModelGrpc.Services
                 }
                 else
                 {
-                    classroom.id = Guid.NewGuid().ToString();
                     ClassStudent students = new ClassStudent();
                     students.code = classroom.code;
                     students.id = classroom.classroomCode;

+ 1 - 2
TEAMModelGrpc/Services/HomeWorkService.cs

@@ -1,4 +1,4 @@
-using Grpc.Core;
+using Grpc.Core;
 using Grpc.Extension.Abstract;
 using Microsoft.AspNetCore.Authorization;
 using System;
@@ -45,7 +45,6 @@ namespace TEAMModelGrpc.Services
                         //评论
                         StudentComment homeWorkComment = new StudentComment
                         {
-                            commentid = Guid.NewGuid().ToString(),
                             comment = homeWorkCommentDto.comment,
                             createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds(),
                             fromId = homeWorkCommentDto.fromId,

+ 78 - 0
TEAMModelOS.SDK/DI/AzureCosmos/AzureCosmosExtensions.cs

@@ -262,6 +262,21 @@ namespace TEAMModelOS.SDK.DI
             AsyncPageable<int> query = container.container.GetItemQueryIterator<int>(queryDefinition: cosmosDbQuery.CosmosQueryDefinition, requestOptions: queryRequestOptions);
             return await ResultsFromFeedIterator(query);
         }
+        public static async Task<List<int>> FindCountByDict<T>(this AzureCosmosFactory azureCosmosFactory,JsonElement json)
+        {
+            Type type = typeof(T);
+            AzureCosmosModel container = azureCosmosFactory.GetCosmosModel(type.Name);
+            string pk = type.Name;
+            StringBuilder sql = new StringBuilder("select  value count(c)  from c");
+            AzureCosmosQuery cosmosDbQuery = SQLHelper.GetSQL(json, sql, pk);
+            if (cosmosDbQuery == null)
+            {
+                return new List<int> { 0 };
+            }
+            QueryRequestOptions queryRequestOptions = GetDefaultQueryRequestOptions(itemsPerPage: GetEffectivePageSize(-1, null));
+            AsyncPageable<int> query = container.container.GetItemQueryIterator<int>(queryDefinition: cosmosDbQuery.CosmosQueryDefinition, requestOptions: queryRequestOptions);
+            return await ResultsFromFeedIterator(query);
+        }
         public static async Task<List<dynamic>> FindCountByDict(this AzureCosmosFactory azureCosmosFactory, string CollectionName, Dictionary<string, object> dict)
         {
             if (azureCosmosFactory.CosmosDict.typeCosmos.TryGetValue(CollectionName, out AzureCosmosModel container))
@@ -286,6 +301,37 @@ namespace TEAMModelOS.SDK.DI
                 throw new BizException("CollectionName named:" + CollectionName + " dose not exsit in Database!");
             }
         }
+        public static async Task<List<dynamic>> FindCountByDict(this AzureCosmosFactory azureCosmosFactory, string CollectionName,JsonElement json)
+        {
+            if (azureCosmosFactory.CosmosDict.typeCosmos.TryGetValue(CollectionName, out AzureCosmosModel container))
+            {
+                Dictionary<string, object> dict = new Dictionary<string, object>();
+                var emobj = json.EnumerateObject();
+                while (emobj.MoveNext())
+                {
+                    if (emobj.Current.Name != "@CURRPAGE"|| 
+                        emobj.Current.Name != "@PAGESIZE" || 
+                        emobj.Current.Name != "@ASC" || 
+                        emobj.Current.Name != "@DESC") {
+                        dict[emobj.Current.Name] = emobj.Current.Value;
+                    }
+                }
+                string pk = container.type.Name;
+                StringBuilder sql = new StringBuilder("select  value count(c)  from c");
+                AzureCosmosQuery cosmosDbQuery = SQLHelper.GetSQL(dict, sql, pk);
+                if (cosmosDbQuery == null)
+                {
+                    return new List<dynamic> { 0 };
+                }
+                QueryRequestOptions queryRequestOptions = GetDefaultQueryRequestOptions(itemsPerPage: GetEffectivePageSize(-1, null));
+                AsyncPageable<dynamic> query = container.container.GetItemQueryIterator<dynamic>(queryDefinition: cosmosDbQuery.CosmosQueryDefinition, requestOptions: queryRequestOptions);
+                return await ResultsFromFeedIterator(query);
+            }
+            else
+            {
+                throw new BizException("CollectionName named:" + CollectionName + " dose not exsit in Database!");
+            }
+        }
         public static async Task<T> Update<T>(this AzureCosmosFactory azureCosmosFactory,  T entity) where T : ID
         {
             Type type = typeof(T);
@@ -385,6 +431,33 @@ namespace TEAMModelOS.SDK.DI
             QueryRequestOptions queryRequestOptions = GetDefaultQueryRequestOptions(itemsPerPage: GetEffectivePageSize(-1, null));
             return await ResultsFromQueryAndOptions<T>(azureCosmosFactory,cosmosDbQuery, queryRequestOptions);
         }
+        public static async Task<List<T>> FindByDict<T>(this AzureCosmosFactory azureCosmosFactory, JsonElement jsonElement, List<string> propertys = null) where T : ID
+        {
+            StringBuilder sql;
+            sql = SQLHelper.GetSQLSelect(propertys);
+            string pk = typeof(T).Name;
+            AzureCosmosQuery cosmosDbQuery = SQLHelper.GetSQL(jsonElement, sql, pk);
+            QueryRequestOptions queryRequestOptions = GetDefaultQueryRequestOptions(itemsPerPage: GetEffectivePageSize(-1, null));
+            return await ResultsFromQueryAndOptions<T>(azureCosmosFactory, cosmosDbQuery, queryRequestOptions);
+        }
+        public static async Task<List<dynamic>> FindByDict(this AzureCosmosFactory azureCosmosFactory, string CollectionName, JsonElement json, List<string> propertys = null)
+        {
+            if (azureCosmosFactory.CosmosDict.typeCosmos.TryGetValue(CollectionName, out AzureCosmosModel container))
+            {
+
+                string pk = container.type.Name;
+                StringBuilder sql;
+                sql = SQLHelper.GetSQLSelect(propertys);
+                AzureCosmosQuery cosmosDbQuery = SQLHelper.GetSQL(json, sql, pk);
+                QueryRequestOptions queryRequestOptions = GetDefaultQueryRequestOptions(itemsPerPage: GetEffectivePageSize(-1, null));
+                AsyncPageable<dynamic> query = container.container.GetItemQueryIterator<dynamic>(queryDefinition: cosmosDbQuery.CosmosQueryDefinition, requestOptions: queryRequestOptions);
+                return await ResultsFromFeedIterator(query);
+            }
+            else
+            {
+                throw new BizException("CollectionName named:" + CollectionName + " dose not exsit in Database!");
+            }
+        }
         public static async Task<List<dynamic>> FindByDict(this AzureCosmosFactory azureCosmosFactory, string CollectionName, Dictionary<string, object> dict, List<string> propertys = null)
         {
             if (azureCosmosFactory.CosmosDict.typeCosmos.TryGetValue(CollectionName, out AzureCosmosModel container))
@@ -462,6 +535,11 @@ namespace TEAMModelOS.SDK.DI
             }
 
         }
+        public static async Task<List<IdPk>> DeleteAll<T>(this AzureCosmosFactory azureCosmosFactory, JsonElement dict) where T : ID
+        {
+            List<T> list = await azureCosmosFactory.FindByDict<T>(dict);
+            return await azureCosmosFactory.DeleteAll(list);
+        }
         public static async Task<List<IdPk>> DeleteAll<T>(this AzureCosmosFactory azureCosmosFactory, List<T> enyites) where T : ID
         {
             Type type = typeof(T);

+ 11 - 2
TEAMModelOS.SDK/DI/AzureCosmos/Inner/SQLHelper.cs

@@ -1,4 +1,4 @@
-using Newtonsoft.Json.Linq;
+using Newtonsoft.Json.Linq;
 using System;
 using System.Collections;
 using System.Collections.Generic;
@@ -114,7 +114,16 @@ namespace TEAMModelOS.SDK.DI.AzureCosmos.Inner
                 return false;
             }
         }
-
+        public static AzureCosmosQuery GetSQL(JsonElement json, StringBuilder sql, string pk = null)
+        {
+            Dictionary<string, object> dict = new Dictionary<string, object>();
+            var emobj = json.EnumerateObject();
+            while (emobj.MoveNext())
+            {
+                dict[emobj.Current.Name] = emobj.Current.Value;
+            }
+            return GetSQL(dict, sql, pk);
+        }
         public static AzureCosmosQuery GetSQL(Dictionary<string, object> dict, StringBuilder sql, string pk = null)
         {
             if (dict != null)

+ 2 - 2
TEAMModelOS.SDK/Helper/Common/StringHelper/HtmlHelper.cs

@@ -1,4 +1,4 @@
-using HtmlAgilityPack;
+using HtmlAgilityPack;
 using System;
 using System.Collections.Generic;
 using System.Text;
@@ -42,7 +42,7 @@ namespace TEAMModelOS.SDK.Helper.Common.StringHelper
             if (str.EndsWith("</p>") && !str.Contains("<p>")&& !str.Contains("<p >") && !str.Contains("<p  >")){
                 str = str.Replace("</p>", "");
             }
-
+            str= Regex.Replace(str, "<p([^>]{0,})>\\s*</p>", "");
             return str;
         }
 

+ 4 - 0
TEAMModelOS.Service/Models/SchoolInfo/ExamInfo.cs

@@ -56,6 +56,10 @@ namespace TEAMModelOS.Service.Models
         public long sequenceNumber { get; set; }
         public Condition conditions { get; set; }
         public List<string> blobUrl { get; set; }
+        /// <summary>
+        /// 所有试卷阅卷状态
+        /// </summary>
+        public List<int> marks { get; set; }
     }
     public class Condition
     {

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

@@ -491,6 +491,11 @@
             考试类型 段考 stage  联考 union 平常考 normal 其他 other
              </summary>
         </member>
+        <member name="P:TEAMModelOS.Service.Models.ExamInfo.marks">
+            <summary>
+            所有试卷阅卷状态
+            </summary>
+        </member>
         <member name="P:TEAMModelOS.Service.Models.Condition.range">
             <summary>
             评测范围 class 班级测验,年级测验 grade , 区级测验 distric

+ 69 - 0
TEAMModelOS/ClientApp/src/assets/iconfont/demo_index.html

@@ -30,6 +30,24 @@
       <div class="content unicode" style="display: block;">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+              <span class="icon iconfont">&#xe635;</span>
+                <div class="name">视频</div>
+                <div class="code-name">&amp;#xe635;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe7ec;</span>
+                <div class="name">课前预习</div>
+                <div class="code-name">&amp;#xe7ec;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe7c8;</span>
+                <div class="name">hi</div>
+                <div class="code-name">&amp;#xe7c8;</div>
+              </li>
+          
             <li class="dib">
               <span class="icon iconfont">&#xe713;</span>
                 <div class="name">双箭头 右</div>
@@ -284,6 +302,33 @@
       <div class="content font-class">
         <ul class="icon_lists dib-box">
           
+          <li class="dib">
+            <span class="icon iconfont icon-video"></span>
+            <div class="name">
+              视频
+            </div>
+            <div class="code-name">.icon-video
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-prepare-study"></span>
+            <div class="name">
+              课前预习
+            </div>
+            <div class="code-name">.icon-prepare-study
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-hi"></span>
+            <div class="name">
+              hi
+            </div>
+            <div class="code-name">.icon-hi
+            </div>
+          </li>
+          
           <li class="dib">
             <span class="icon iconfont icon-arrow-right"></span>
             <div class="name">
@@ -619,6 +664,30 @@
       <div class="content symbol">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-video"></use>
+                </svg>
+                <div class="name">视频</div>
+                <div class="code-name">#icon-video</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-prepare-study"></use>
+                </svg>
+                <div class="name">课前预习</div>
+                <div class="code-name">#icon-prepare-study</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-hi"></use>
+                </svg>
+                <div class="name">hi</div>
+                <div class="code-name">#icon-hi</div>
+            </li>
+          
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#icon-arrow-right"></use>

File diff suppressed because it is too large
+ 18 - 6
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.css


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


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


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

@@ -5,6 +5,27 @@
   "css_prefix_text": "icon-",
   "description": "",
   "glyphs": [
+    {
+      "icon_id": "8090323",
+      "name": "视频",
+      "font_class": "video",
+      "unicode": "e635",
+      "unicode_decimal": 58933
+    },
+    {
+      "icon_id": "9743023",
+      "name": "课前预习",
+      "font_class": "prepare-study",
+      "unicode": "e7ec",
+      "unicode_decimal": 59372
+    },
+    {
+      "icon_id": "15093929",
+      "name": "hi",
+      "font_class": "hi",
+      "unicode": "e7c8",
+      "unicode_decimal": 59336
+    },
     {
       "icon_id": "7090060",
       "name": "双箭头 右",

File diff suppressed because it is too large
+ 9 - 0
TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.svg


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


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


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


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

@@ -198,7 +198,7 @@
                             {
                                 icon: 'iconfont icon-xueqing',
                                 name: '学情分析',
-                                router: '/home',
+                                router: '/totalIndex',
                                 tag: 'M',
                                 role: 'admin',
                                 permission:'analysis'

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

@@ -70,7 +70,7 @@ export const routes = [
     {
         name: 'home',
         path: '/home',
-        redirect: 'totalIndex',
+        redirect: '/home/HomePage',
         component: resolve => require(['@/view/Home'], resolve),
         meta: {
             middleware: ['login', 'role:admin|teacher'], // 强制登录(会自动跳转到登录页),角色为管理员或教师
@@ -78,7 +78,7 @@ export const routes = [
         children: [
             {
                 name: 'totalIndex',
-                path: '/home',
+                path: '/totalIndex',
                 component: resolve => require(['@/view/student-analysis/total-analysis/EvaluationList/TotalIndex.vue'], resolve),
             },
             {
@@ -341,6 +341,12 @@ export const routes = [
                 path: 'feedback',
                 name: 'feedback',
                 component: resolve => require(['@/view/feedback/Feedback.vue'], resolve)
+            },
+            //设置
+            {
+                path: 'settings',
+                name: 'settings',
+                component: resolve => require(['@/view/settings/Index.vue'], resolve)
             }
         ]
     }

+ 5 - 1
TEAMModelOS/ClientApp/src/view/Home.vue

@@ -5,7 +5,7 @@
             <div class="header-right-box fl-around" slot="header-content">
                 <Icon custom="iconfont icon-home" @click="toHome"/>
                 <Icon type="md-help-circle" @click="toFeedback"/>
-                <Icon type="ios-settings" />
+                <Icon type="ios-settings" @click="toSettings"/>
                 <Icon type="ios-bug" @click="isShowMock = true" />
                 <Dropdown @on-click="basicMenu">
                     <a href="javascript:void(0)">
@@ -161,6 +161,9 @@
             toHome() {
                 this.$router.push({ path: '/home/homePage' })
             },
+			toSettings(){
+				this.$router.push({ path: '/home/settings' })
+			},
             toFeedback() {
                 this.$router.push({ path: '/home/feedback' })
             },
@@ -370,6 +373,7 @@
     #content {
         height: 100%;
         background: #191919;
+		overflow: hidden;
     }
 
     /*重绘滚动条样式*/

+ 14 - 0
TEAMModelOS/ClientApp/src/view/classmgt/ManageClass.less

@@ -0,0 +1,14 @@
+@first-bgColor: #141414;
+@second-bgColor: #1b1b1b;
+@third-bgColor: #222222;
+@borderColor: #424242;
+@primary-textColor: #fff; //文本主颜色
+@second-textColor: #a5a5a5; //文本副级颜色
+@primary-fontSize: 14px;
+@second-fontSize: 16px;
+
+.home-page-container{
+    width:100%;
+    height:100%;
+
+}

+ 1 - 1
TEAMModelOS/ClientApp/src/view/classmgt/ManageClass.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="home-page-container">
-        <h1 style="text-align:center; padding-top:200px;font-size:40px;">班级管理页面正在开发中,敬请期待!</h1>
+        
     </div>
 </template>
 <script>

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

@@ -187,7 +187,7 @@
              */
             uploadSuccess(response) {
                 if (response.error === null) {
-                    let requestData = { htmlString: response.result.data.HtmlString }
+                    let requestData = { lang:localStorage.getItem('local'), htmlString: response.result.data.HtmlString }
                     this.$api.SaveAnalyzeHtml(requestData).then(res => {
                         if (res.error === null) {
                                 this.$Message.success('试题数据读取完成!')

+ 2 - 2
TEAMModelOS/ClientApp/src/view/evaluation/index/PickExercise.css

@@ -148,8 +148,8 @@
 
         .content-wrap .exercise-item p {
             /*margin: 10px 0;*/
-            display: inline-block;
-            word-break: break-all;
+            /* display: inline-block;
+            word-break: break-all; */
         }
 
 .complete-line {

+ 4 - 2
TEAMModelOS/ClientApp/src/view/homepage/AcCountPie.vue

@@ -20,11 +20,11 @@
                             type: 'pie',
                             radius: ['48%', '62%'],
                             avoidLabelOverlap: false,
+                            legendHoverLink: false,
                             label: {
                                 show: false,
                                 position: 'center',
                                 formatter: function (data) { // 设置圆饼图中间文字排版
-                                    console.log(data)
                                     return data.value + "\n" + data.name
                                 }
                             },
@@ -68,7 +68,9 @@
             })
 
             //当鼠标离开时,把当前项置为选中 
-            this.typeCountPie.on('mouseout', (e)=> {
+            this.typeCountPie.on('mouseout', (e) => {
+                console.log('....')
+                console.log(e)
                 this.index = e.dataIndex
                 this.typeCountPie.dispatchAction({ type: 'highlight', seriesIndex: 0, dataIndex: e.dataIndex })
             })

+ 13 - 7
TEAMModelOS/ClientApp/src/view/homepage/CoursePlan.vue

@@ -3,43 +3,43 @@
         <Table :columns="columns1" :data="data1" border>
             <!--星期一-->
             <template slot-scope="{ row, index }" slot="MON">
-                <div v-if="row.MON == 1">
+                <div v-if="row.MON == 1" class="active-cell">
                     <span class="course-dot"></span>
                 </div>
             </template>
             <!--星期二-->
             <template slot-scope="{ row, index }" slot="TUE">
-                <div v-if="row.TUE == 1">
+                <div v-if="row.TUE == 1" class="active-cell">
                     <span class="course-dot"></span>
                 </div>
             </template>
             <!--星期三-->
             <template slot-scope="{ row, index }" slot="WED">
-                <div v-if="row.WED == 1">
+                <div v-if="row.WED == 1" class="active-cell">
                     <span class="course-dot"></span>
                 </div>
             </template>
             <!--星期四-->
             <template slot-scope="{ row, index }" slot="THU">
-                <div v-if="row.THU == 1">
+                <div v-if="row.THU == 1" class="active-cell">
                     <span class="course-dot"></span>
                 </div>
             </template>
             <!--星期五-->
             <template slot-scope="{ row, index }" slot="FRI">
-                <div v-if="row.FRI == 1">
+                <div v-if="row.FRI == 1" class="active-cell">
                     <span class="course-dot"></span>
                 </div>
             </template>
             <!--星期六-->
             <template slot-scope="{ row, index }" slot="SAT">
-                <div v-if="row.SAT == 1">
+                <div v-if="row.SAT == 1" class="active-cell">
                     <span class="course-dot"></span>
                 </div>
             </template>
             <!--星期日-->
             <template slot-scope="{ row, index }" slot="SUN">
-                <div v-if="row.SUN == 1">
+                <div v-if="row.SUN == 1" class="active-cell">
                     <span class="course-dot"></span>
                 </div>
             </template>
@@ -169,6 +169,12 @@
         background:aqua;
         border-radius:4px;
     }
+    .active-cell {
+        width:100%;
+        height:48px;
+        line-height:48px;
+        background:#505050;
+    }
 </style>
 <style>
 

+ 56 - 17
TEAMModelOS/ClientApp/src/view/homepage/HomePage.less

@@ -34,18 +34,14 @@
 
 
 .card-content-box {
-    min-height: 700px;
+    height:100%;
 }
 .custom-arrow-icon {
     transform: rotate(180deg);
     font-size: 12px;
     vertical-align: text-top;
 }
-.detail-content-box{
-    width:100%;
-    min-height:120px;
-    max-height:350px;
-}
+
 .detail-content-title{
     color:white;
 }
@@ -88,8 +84,7 @@
 }
 .in-pro-detail {
     width: 100%;
-    margin-top: 30px;
-    box-shadow: 0px 0px 10px 5px rgba(0, 0, 0, 0.9);
+    box-shadow: 0px -6px 10px -2px #141414;
 
     .in-pro-ac-item {
         width: 100%;
@@ -98,17 +93,26 @@
         font-size: 16px;
         border-bottom: 1px solid @borderColor;
         display: flex;
+        cursor: pointer;
 
         .ac-type-icon {
             width: 80px;
             text-align: center;
             color: white;
-            line-height:55px;
+            line-height: 55px;
+            font-size:35px;
+            margin-right:10px;
         }
 
         .ac-info-box {
             width: ~"calc(100% - 180px)";
 
+            p {
+                text-overflow: ellipsis;
+                overflow: hidden;
+                white-space: nowrap;
+            }
+
             .classname-label {
                 background: #666666;
                 border-radius: 15px;
@@ -121,12 +125,15 @@
 
             .ac-name-label {
                 color: white;
+                text-overflow: ellipsis;
+                overflow: hidden;
+                white-space: nowrap;
             }
 
-            .ac-time-wrap{
-                color:@second-textColor;
-                font-size:14px;
-                margin-top:8px;
+            .ac-time-wrap {
+                color: @second-textColor;
+                font-size: 14px;
+                margin-top: 8px;
             }
         }
 
@@ -165,7 +172,7 @@
 }
 .course-info-box {
     width:100%;
-    height:334px;
+    padding-top:20px;
 }
 .record-count-box {
     width: 100%;
@@ -192,9 +199,6 @@
 .best-record-box {
     width: 100%;
     color: @second-textColor;
-    box-shadow: 0px 0px 10px 5px rgba(0, 0, 0, 0.9);
-    margin-top: 40px;
-    padding-top: 30px;
 }
 .best-record-title{
     text-align:center;
@@ -204,4 +208,39 @@
         margin-left:5px;
         font-weight:800;
     }
+}
+.course-plan-box {
+}
+.split-title {
+    color: #a5a5a5;
+    margin-top: 20px;
+    padding: 10px 5px;
+}
+.upload-record-box {
+     box-shadow: 0px -6px 10px -2px #141414;
+}
+.upload-record-item {
+    width: 100%;
+    padding:10px 0px;
+    border-bottom:1px solid @borderColor;
+    cursor:pointer;
+}
+.record-type-icon{
+    width:30px;
+}
+.recorde-name {
+    width: ~"calc(100% - 120px)";
+    display: inline-block;
+    color: white;
+    text-overflow: ellipsis;
+    overflow: hidden;
+    white-space: nowrap;
+    vertical-align: bottom;
+}
+.record-time {
+    width: 90px;
+    display: inline-block;
+    text-align: right;
+    color: #a5a5a5;
+    padding-right:6px;
 }

+ 254 - 149
TEAMModelOS/ClientApp/src/view/homepage/HomePage.vue

@@ -6,16 +6,82 @@
                     <Card style="width:100%; height:100%; margin-top:10px;">
                         <p slot="title">
                             <Icon custom="iconfont icon-kecheng"></Icon>
-                            课程清单
+                            课程安排
                         </p>
-                        <a href="#" slot="extra">
-                            <Icon custom="iconfont icon-arrow" class="custom-arrow-icon" size="12"></Icon>
-                        </a>
                         <div class="card-content-box">
                             <vuescroll>
-                                <div class="course-info-box"></div>
-                                <h3 style="text-align:center;color:white;">课程表</h3>
-                                <CoursePlan></CoursePlan>
+                                <CoursePlan class="course-plan-box"></CoursePlan>
+                                <p class="split-title">课前预习</p>
+                                <div class="in-pro-detail">
+                                    <div class="in-pro-ac-item">
+                                        <Icon custom="iconfont icon-prepare-study" class="ac-type-icon"  ></Icon>
+                                        <div class="ac-info-box">
+                                            <p>
+                                                <span class="classname-label">一年级一班</span>
+                                                <span class="ac-name-label">两位数加法1231123123123123123</span>
+                                            </p>
+                                            <p class="ac-time-wrap">
+                                                2020.01.11 - 2020.01.22
+                                            </p>
+                                        </div>
+                                        <div class="ac-pro-box">
+                                            <i-circle :percent="80" :size="50" :stroke-width="10" :trail-width="10" stroke-linecap="square">
+                                                <span style="font-size:16px">80%</span>
+                                            </i-circle>
+                                        </div>
+                                    </div>
+                                    <div class="in-pro-ac-item">
+                                        <Icon custom="iconfont icon-prepare-study" class="ac-type-icon"  ></Icon>
+                                        <div class="ac-info-box">
+                                            <p>
+                                                <span class="classname-label">一年级一班</span>
+                                                <span class="ac-name-label">两位数加法</span>
+                                            </p>
+                                            <p class="ac-time-wrap">
+                                                2020.01.11 - 2020.01.22
+                                            </p>
+                                        </div>
+                                        <div class="ac-pro-box">
+                                            <i-circle :percent="80" :size="50" :stroke-width="10" :trail-width="10" stroke-linecap="square">
+                                                <span style="font-size:16px">80%</span>
+                                            </i-circle>
+                                        </div>
+                                    </div>
+                                    <div class="in-pro-ac-item">
+                                        <Icon custom="iconfont icon-prepare-study" class="ac-type-icon"  ></Icon>
+                                        <div class="ac-info-box">
+                                            <p>
+                                                <span class="classname-label">一年级一班</span>
+                                                <span class="ac-name-label">两位数加法4r5434</span>
+                                            </p>
+                                            <p class="ac-time-wrap">
+                                                2020.01.11 - 2020.01.22
+                                            </p>
+                                        </div>
+                                        <div class="ac-pro-box">
+                                            <i-circle :percent="80" :size="50" :stroke-width="10" :trail-width="10" stroke-linecap="square">
+                                                <span style="font-size:16px">80%</span>
+                                            </i-circle>
+                                        </div>
+                                    </div>
+                                    <div class="in-pro-ac-item">
+                                        <Icon custom="iconfont icon-prepare-study" class="ac-type-icon"  ></Icon>
+                                        <div class="ac-info-box">
+                                            <p>
+                                                <span class="classname-label">一年级一班</span>
+                                                <span class="ac-name-label">两位数加fsadfa法</span>
+                                            </p>
+                                            <p class="ac-time-wrap">
+                                                2020.01.11 - 2020.01.22
+                                            </p>
+                                        </div>
+                                        <div class="ac-pro-box">
+                                            <i-circle :percent="80" :size="50" :stroke-width="10" :trail-width="10" stroke-linecap="square">
+                                                <span style="font-size:16px">80%</span>
+                                            </i-circle>
+                                        </div>
+                                    </div>
+                                </div>
                             </vuescroll>
                         </div>
                     </Card>
@@ -26,33 +92,33 @@
                             <Icon custom="iconfont icon-class"></Icon>
                             课堂记录
                         </p>
-                        <a href="#" slot="extra">
-                            <Icon custom="iconfont icon-arrow" class="custom-arrow-icon"></Icon>
-                        </a>
                         <div class="card-content-box">
                             <vuescroll>
-                                <div class="record-count-box">
-                                    <div class="record-count-item">
-                                        <p class="record-count-num">0</p>
-                                        <p class="record-count-text">今日</p>
+                                <TechScore></TechScore>
+                                <TeachScore></TeachScore>
+                                <p class="split-title">最近3天记录</p>
+                                <div class="upload-record-box">
+                                    <div class="upload-record-item">
+                                        <Icon class="record-type-icon" custom="iconfont icon-hi" color="white" size="16"></Icon>
+                                        <span class="recorde-name">fjlsakjflksajflsk123131313131231313123132131313123jfaslkj</span>
+                                        <Time class="record-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
                                     </div>
-                                    <div class="record-count-item">
-                                        <p class="record-count-num">3</p>
-                                        <p class="record-count-text">本周</p>
+                                    <div class="upload-record-item">
+                                        <Icon class="record-type-icon" custom="iconfont icon-video" color="white" size="16"></Icon>
+                                        <span class="recorde-name">fjlsakjflksajflskjfaslkj</span>
+                                        <Time class="record-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
                                     </div>
-                                    <div class="record-count-item">
-                                        <p class="record-count-num">31</p>
-                                        <p class="record-count-text">总数</p>
+                                    <div class="upload-record-item">
+                                        <Icon class="record-type-icon" custom="iconfont icon-hi" color="white" size="16"></Icon>
+                                        <span class="recorde-name">fjlsakjflksajflskjfaslkj</span>
+                                        <Time class="record-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
+                                    </div>
+                                    <div class="upload-record-item">
+                                        <Icon class="record-type-icon" custom="iconfont icon-hi" color="white" size="16"></Icon>
+                                        <span class="recorde-name">fjlsakjflksajflskjfaslkj</span>
+                                        <Time class="record-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
                                     </div>
                                 </div>
-                                <div class="best-record-box">
-                                    <p class="best-record-title">
-                                        最佳课例:<span>气候对农业生产的影响>></span>
-                                    </p>
-                                    <TechScore></TechScore>
-                                    <TeachScore></TeachScore>
-                                </div>
-
                             </vuescroll>
                         </div>
                     </Card>
@@ -64,145 +130,170 @@
                             活动概览
                         </p>
                         <div class="card-content-box">
-                            <div class="detail-content-box">
-                                <vuescroll>
-                                    <AcCountPie></AcCountPie>
-                                    <div class="in-pro-box">
-                                        <p class="status-tag">进行中</p>
-                                        <p class="count-tag">4</p>
-                                        <p class="jump-tag">
-                                            <Icon custom="iconfont icon-arrow" class="custom-arrow-icon"></Icon>
-                                        </p>
+                            <vuescroll>
+                                <AcCountPie></AcCountPie>
+                                <div class="in-pro-box">
+                                    <p class="status-tag">进行中</p>
+                                    <p class="count-tag">4</p>
+                                    <p class="jump-tag">
+                                        <Icon custom="iconfont icon-arrow" class="custom-arrow-icon"></Icon>
+                                    </p>
+                                </div>
+                                <div class="in-pro-detail">
+                                    <div class="in-pro-ac-item">
+                                        <Icon custom="iconfont icon-vote" class="ac-type-icon"  ></Icon>
+                                        <div class="ac-info-box">
+                                            <p>
+                                                <span class="classname-label">一年级一班</span>
+                                                <span class="ac-name-label">两位数加法123100</span>
+                                            </p>
+                                            <p class="ac-time-wrap">
+                                                2020.01.11 - 2020.01.22
+                                            </p>
+                                        </div>
+                                        <div class="ac-pro-box">
+                                            <i-circle :percent="80" :size="50" :stroke-width="10" :trail-width="10" stroke-linecap="square">
+                                                <span style="font-size:16px">80%</span>
+                                            </i-circle>
+                                        </div>
                                     </div>
-                                    <div class="in-pro-detail">
-                                        <div class="in-pro-ac-item">
-                                            <Icon custom="iconfont icon-test" class="ac-type-icon" size="45" style="margin-right:10px;"></Icon>
-                                            <div class="ac-info-box">
-                                                <p>
-                                                    <span class="classname-label">一年级一班</span>
-                                                    <span class="ac-name-label">两位数加法</span>
-                                                </p>
-                                                <p class="ac-time-wrap">
-                                                    2020.01.11 - 2020.01.22
-                                                </p>
-                                            </div>
-                                            <div class="ac-pro-box">
-                                                <i-circle :percent="80" size="50" stroke-width="10" trail-width="10" stroke-linecap="square">
-                                                    <span style="font-size:16px">80%</span>
-                                                </i-circle>
-                                            </div>
-                                        </div>
-                                        <div class="in-pro-ac-item">
-                                            <Icon custom="iconfont icon-test" class="ac-type-icon" size="45" style="margin-right:10px;"></Icon>
-                                            <div class="ac-info-box">
-                                                <p>
-                                                    <span class="classname-label">一年级一班</span>
-                                                    <span class="ac-name-label">两位数加法</span>
-                                                </p>
-                                                <p class="ac-time-wrap">
-                                                    2020.01.11 - 2020.01.22
-                                                </p>
-                                            </div>
-                                            <div class="ac-pro-box">
-                                                <i-circle :percent="80" size="50" stroke-width="10" trail-width="10" stroke-linecap="square">
-                                                    <span style="font-size:16px">80%</span>
-                                                </i-circle>
-                                            </div>
-                                        </div>
-                                        <div class="in-pro-ac-item">
-                                            <Icon custom="iconfont icon-test" class="ac-type-icon" size="45" style="margin-right:10px;"></Icon>
-                                            <div class="ac-info-box">
-                                                <p>
-                                                    <span class="classname-label">一年级一班</span>
-                                                    <span class="ac-name-label">两位数加法</span>
-                                                </p>
-                                                <p class="ac-time-wrap">
-                                                    2020.01.11 - 2020.01.22
-                                                </p>
-                                            </div>
-                                            <div class="ac-pro-box">
-                                                <i-circle :percent="80" size="50" stroke-width="10" trail-width="10" stroke-linecap="square">
-                                                    <span style="font-size:16px">80%</span>
-                                                </i-circle>
-                                            </div>
-                                        </div>
-                                        <div class="in-pro-ac-item">
-                                            <Icon custom="iconfont icon-test" class="ac-type-icon" size="45" style="margin-right:10px;"></Icon>
-                                            <div class="ac-info-box">
-                                                <p>
-                                                    <span class="classname-label">一年级一班</span>
-                                                    <span class="ac-name-label">两位数加法</span>
-                                                </p>
-                                                <p class="ac-time-wrap">
-                                                    2020.01.11 - 2020.01.22
-                                                </p>
-                                            </div>
-                                            <div class="ac-pro-box">
-                                                <i-circle :percent="80" size="50" stroke-width="10" trail-width="10" stroke-linecap="square">
-                                                    <span style="font-size:16px">80%</span>
-                                                </i-circle>
-                                            </div>
+                                    <div class="in-pro-ac-item">
+                                        <Icon custom="iconfont icon-hw" class="ac-type-icon"  ></Icon>
+                                        <div class="ac-info-box">
+                                            <p>
+                                                <span class="classname-label">一年级一班</span>
+                                                <span class="ac-name-label">两位数加法</span>
+                                            </p>
+                                            <p class="ac-time-wrap">
+                                                2020.01.11 - 2020.01.22
+                                            </p>
+                                        </div>
+                                        <div class="ac-pro-box">
+                                            <i-circle :percent="80" :size="50" :stroke-width="10" :trail-width="10" stroke-linecap="square">
+                                                <span style="font-size:16px">80%</span>
+                                            </i-circle>
                                         </div>
                                     </div>
-                                </vuescroll>
-                            </div>
+                                    <div class="in-pro-ac-item">
+                                        <Icon custom="iconfont icon-questionnaire" class="ac-type-icon"  ></Icon>
+                                        <div class="ac-info-box">
+                                            <p>
+                                                <span class="classname-label">一年级一班</span>
+                                                <span class="ac-name-label">两位数加12325法</span>
+                                            </p>
+                                            <p class="ac-time-wrap">
+                                                2020.01.11 - 2020.01.22
+                                            </p>
+                                        </div>
+                                        <div class="ac-pro-box">
+                                            <i-circle :percent="80" :size="50" :stroke-width="10" :trail-width="10" stroke-linecap="square">
+                                                <span style="font-size:16px">80%</span>
+                                            </i-circle>
+                                        </div>
+                                    </div>
+                                    <div class="in-pro-ac-item">
+                                        <Icon custom="iconfont icon-learning-self" class="ac-type-icon"></Icon>
+                                        <div class="ac-info-box">
+                                            <p>
+                                                <span class="classname-label">一年级一班</span>
+                                                <span class="ac-name-label">两位数加法</span>
+                                            </p>
+                                            <p class="ac-time-wrap">
+                                                2020.01.11 - 2020.01.22
+                                            </p>
+                                        </div>
+                                        <div class="ac-pro-box">
+                                            <i-circle :percent="80" :size="50" :stroke-width="10" :trail-width="10" stroke-linecap="square">
+                                                <span style="font-size:16px">80%</span>
+                                            </i-circle>
+                                        </div>
+                                    </div>
+                                    <div class="in-pro-ac-item">
+                                        <Icon custom="iconfont icon-test" class="ac-type-icon"  ></Icon>
+                                        <div class="ac-info-box">
+                                            <p>
+                                                <span class="classname-label">一年级一班</span>
+                                                <span class="ac-name-label">两位数加法</span>
+                                            </p>
+                                            <p class="ac-time-wrap">
+                                                2020.01.11 - 2020.01.22
+                                            </p>
+                                        </div>
+                                        <div class="ac-pro-box">
+                                            <i-circle :percent="80" :size="50" :stroke-width="10" :trail-width="10" stroke-linecap="square">
+                                                <span style="font-size:16px">80%</span>
+                                            </i-circle>
+                                        </div>
+                                    </div>
+                                </div>
+                            </vuescroll>
                         </div>
                     </Card>
                 </div>
                 <div class="notice-area box-item">
-                    <Card style="width:100%; height:49%; margin-top:10px;">
+                    <Card style="width:100%; height:30%; margin-top:10px;">
                         <p slot="title">
                             <Icon custom="iconfont icon-notice"></Icon>
                             学校公告
                         </p>
-                        <!--<a href="#" slot="extra">
-                            <Icon custom="iconfont icon-arrow" class="custom-arrow-icon"></Icon>
-                        </a>-->
                         <div class="card-content-box" style="min-height:300px;">
-                            <ul class="notice-list-box">
-                                <li>
-                                    <p class="notice-text">通知内容</p>
-                                    <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
-                                </li>
-                                <li>
-                                    <p class="notice-text">通知内容</p>
-                                    <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
-                                </li>
-                                <li>
-                                    <p class="notice-text">通知内容</p>
-                                    <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
-                                </li>
-                                <li>
-                                    <p class="notice-text">通知内容</p>
-                                    <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
-                                </li>
-                            </ul>
+                            <vuescroll>
+                                <ul class="notice-list-box">
+                                    <li>
+                                        <p class="notice-text">通知内容</p>
+                                        <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
+                                    </li>
+                                    <li>
+                                        <p class="notice-text">通知内容</p>
+                                        <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
+                                    </li>
+                                    <li>
+                                        <p class="notice-text">通知内容</p>
+                                        <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
+                                    </li>
+                                    <li>
+                                        <p class="notice-text">通知内容</p>
+                                        <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
+                                    </li>
+                                </ul>
+                            </vuescroll>
                         </div>
                     </Card>
-                    <Card style="width:100%; height:49%; margin-top:4%;">
+                    <Card style="width:100%; height:30%; margin-top:4%;">
                         <p slot="title">
                             <Icon custom="iconfont icon-message"></Icon>
-                            学生留言
+                            消息通知
                         </p>
                         <div class="card-content-box" style="min-height:300px;">
-                            <ul class="notice-list-box">
-                                <li>
-                                    <p class="notice-text">叶曜灵:留言内容</p>
-                                    <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
-                                </li>
-                                <li>
-                                    <p class="notice-text">李正乾:留言内容</p>
-                                    <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
-                                </li>
-                                <li>
-                                    <p class="notice-text">刘雨涵:留言内容</p>
-                                    <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
-                                </li>
-                                <li>
-                                    <p class="notice-text">李子睿:留言内容</p>
-                                    <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
-                                </li>
-                            </ul>
+                            <vuescroll>
+                                <ul class="notice-list-box">
+                                    <li>
+                                        <p class="notice-text">叶曜灵:留言内容</p>
+                                        <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
+                                    </li>
+                                    <li>
+                                        <p class="notice-text">李正乾:留言内容</p>
+                                        <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
+                                    </li>
+                                    <li>
+                                        <p class="notice-text">刘雨涵:留言内容</p>
+                                        <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
+                                    </li>
+                                    <li>
+                                        <p class="notice-text">李子睿:留言内容</p>
+                                        <Time class="notice-time" :time="((new Date()).getTime() - 60 * 3 * 1000)" />
+                                    </li>
+                                </ul>
+                            </vuescroll>
+                        </div>
+                    </Card>
+                    <Card style="width:100%; height:36%; margin-top:4%;">
+                        <p slot="title">
+                            <Icon custom="iconfont icon-message"></Icon>
+                            扩展预留
+                        </p>
+                        <div class="card-content-box" >
+                            
                         </div>
                     </Card>
                 </div>
@@ -241,5 +332,19 @@
 <style>
     .home-page-container .__view {
         height: 100%;
+        padding:16px;
+    }
+    .course-info-box .ivu-divider-inner-text:after {
+        border-color:#404040 !important;
+    }
+    .course-info-box .ivu-divider-inner-text:before {
+        border-color:#404040;
+    }
+    .course-info-box .ivu-divider-horizontal.ivu-divider-with-text-center:after,.course-info-box .ivu-divider-horizontal.ivu-divider-with-text-center:before,.course-info-box .ivu-divider-horizontal.ivu-divider-with-text-left:after,.course-info-box .ivu-divider-horizontal.ivu-divider-with-text-left:before,.course-info-box .ivu-divider-horizontal.ivu-divider-with-text-right:after, .ivu-divider-horizontal.ivu-divider-with-text-right:before {
+        border-color: #404040;
+    }
+    .home-page-container .ivu-card-body {
+        height:calc(100% - 52px);
+        padding:0px;
     }
 </style>

+ 24 - 30
TEAMModelOS/ClientApp/src/view/homepage/TeachScore.vue

@@ -8,25 +8,24 @@
                 teachMethod: undefined,
                 option: {
                     polar: {},
-                    
-                    title: {
-                        text: '85',
-                        x: 'center',
-                        z: 9999,
-                        top: '38%',
-                        textStyle: {
-                            fontSize: '50',
-                            color: '#3de16b',
-                            fontFamily: 'Lato',
-                            fontWeight: '600',
-                            textShadowColor: 'rgb(0, 0, 0)',
-                            textShadowBlur:10
-                        },
-                        show: true,
-                        backgroundColor: 'rgb(0, 0, 0)',
-                        shadowColor: 'rgb(0, 0, 0)',
-                        shadowBlur: 20
-                    },
+                    //title: {
+                    //    text: '85',
+                    //    x: 'center',
+                    //    z: 9999,
+                    //    top: '38%',
+                    //    textStyle: {
+                    //        fontSize: '50',
+                    //        color: '#3de16b',
+                    //        fontFamily: 'Lato',
+                    //        fontWeight: '600',
+                    //        textShadowColor: 'rgb(0, 0, 0)',
+                    //        textShadowBlur:10
+                    //    },
+                    //    show: true,
+                    //    //backgroundColor: 'rgba(0, 0, 0,0)',
+                    //    //shadowColor: 'rgb(0, 0, 0)',
+                    //    //shadowBlur: 20
+                    //},
                     angleAxis: {
                         interval: 1,
                         type: 'category',
@@ -79,12 +78,10 @@
                     series: [
                         {
                             type: 'pie',
-                            radius: '70%',
                             roseType: 'area',
                             label: {
                                 show: true,
-                                color: '#a5a5a5',
-                                distanceToLabelLine:-10
+                                color: '#a5a5a5'
                             },
                             labelLine: {
                                 show: false
@@ -92,10 +89,7 @@
                             data: [
                                 {
                                     value: 30, name: '小组学习',
-                                    itemStyle: { color: '#60DD88' },
-                                    label: {
-                                        show: true
-                                    }
+                                    itemStyle: { color: '#60DD88' }
                                 },
                                 {
                                     value: 25, name: '多元评价',
@@ -106,15 +100,15 @@
                                     itemStyle: { color: '#117389' }
                                 },
                                 {
-                                    value: 0, name: '全班测验',
+                                    value: 5, name: '全班测验',
                                     itemStyle: { color: '#00ffde' }
                                 },
                                 {
-                                    value: 10, name: '生本决策',
-                                    itemStyle: { color: '#9252AD' }
+                                    value: 12, name: '生本决策',
+                                    itemStyle: { color: '#99a2a9' }
                                 },
                                 {
-                                    value: 12, name: '全班互动',
+                                    value: 16, name: '全班互动',
                                     itemStyle: { color: '#9252AD' }
                                 },
                             ]

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

@@ -2,7 +2,7 @@
     <div class="create-evaluation-container">
         <div class="create-header">
             <p class="create-header-title">创建评测活动</p>
-            <Button class="btn-save" type="text" :loading="isLoading" ghost icon="ios-albums-outline" @click="saveEvaluation">保存评测</Button>
+            <Button class="btn-save" type="text" :loading="isLoading" ghost icon="ios-albums-outline" @click="saveEvaluation">发布评测</Button>
         </div>
         <div class="create-body">
             <div class="evaluation-attr-wrap">

+ 34 - 27
TEAMModelOS/ClientApp/src/view/learnactivity/ExamPaperAnalysis.less

@@ -5,18 +5,21 @@
 @primary-fontSize: 14px;
 @second-fontSize: 16px;
 
+.exam-analysis-wrap{
+    background:#FFFFFF;
+}
 .exam-analysis-title-wrap {
-  width: 100%;
-  height: 28px;
-  border-bottom: 1px solid #606060;
+    width: 100%;
+    height: 28px;
+    border-bottom: 1px solid #CCCCCC;
 
-  .exam-analysis-title {
-    font-weight: 600;
-    line-height: 25px;
-    color: deepskyblue;
-    display: inline-block;
-    border-bottom: 2px solid deepskyblue;
-  }
+    .exam-analysis-title {
+        font-weight: 600;
+        line-height: 25px;
+        color: deepskyblue;
+        display: inline-block;
+        border-bottom: 2px solid deepskyblue;
+    }
 }
 .whole-analysis-table {
   width: 100%;
@@ -27,9 +30,11 @@
     height: 35px;
     line-height: 35px;
     text-align: center;
-    background: #303030;
-    color: aqua;
-    border: 1px solid #606060;
+    background: #ffffff;
+    color: #000000;
+    font-size:16px;
+    font-weight:800;
+    border: 1px solid #CCCCCC;
   }
 
   .whole-table-body {
@@ -40,30 +45,31 @@
     .whole-table-col {
       height: 140px;
       width: 38%;
-      border-right: 1px solid #606060;
-      border-bottom: 1px solid #606060;
-      background: #353535;
-      color: white;
+      border-right: 1px solid #CCCCCC;
+      border-bottom: 1px solid #CCCCCC;
+      background: #ffffff;
+      color: #333333;
 
       &:first-child {
         width: 24%;
-        border-left: 1px solid #606060;
+        border-left: 1px solid #CCCCCC;
       }
 
       .whole-table-col-header {
         height: 70px;
         line-height: 70px;
         text-align: center;
-
+        color:#000000;
+        font-weight:900;
         &:first-child {
-          border-bottom: 1px solid #606060;
+          border-bottom: 1px solid #CCCCCC;
         }
       }
 
       .while-table-question-type{
         height:35px;
         line-height:35px;
-        border-bottom:1px solid #606060;
+        border-bottom:1px solid #CCCCCC;
         text-align:center;
         &:last-child{
           border:none;
@@ -101,10 +107,10 @@
   text-align: center;
   display: flex;
   flex-direction: row;
-  border-top: 1px solid #606060;
-  background:#353535;
+  border-top: 1px solid #CCCCCC;
+  background:#FFFFFF;
   &:last-child {
-    border-bottom: 1px solid #606060;
+    border-bottom: 1px solid #CCCCCC;
   }
 
   &:nth-child(2) {
@@ -114,11 +120,12 @@
   .question-type-table-td {
     width: 38%;
     text-align: center;
-    border-right: 1px solid #606060;
-    color:white;
+    border-right: 1px solid #CCCCCC;
+    color:#333333;
+    background:#ffffff;
     &:first-child {
       width: 24%;
-      border-left: 1px solid #606060;
+      border-left: 1px solid #CCCCCC;
     }
   }
 }

+ 5 - 5
TEAMModelOS/ClientApp/src/view/learnactivity/ExamPaperAnalysis.vue

@@ -1,5 +1,5 @@
 <template>
-    <div class="dark-iview-table exam-analysis-wrap">
+    <div class="exam-analysis-wrap">
         <div class="exam-analysis-title-wrap">
             <span class="exam-analysis-title">试卷整体分析</span>
         </div>
@@ -29,7 +29,7 @@
                 <div class="exam-analysis-title-wrap">
                     <span class="exam-analysis-title">试卷题量分布</span>
                 </div>
-                <div class="question-type-table-row" style="margin-top:15px;">
+                <div class="question-type-table-row" style="margin-top:15px;font-weight:800;">
                     <div class="question-type-table-td">
                         题型
                     </div>
@@ -142,7 +142,7 @@
                         y: '0', // 'center' | 'bottom' | {number}
                         padding: [10, 0, 10, 5], // [5, 10, 15, 20]
                         itemGap: 20,
-                        textStyle: { color: '#c3cad9' }
+                        textStyle: { color: '#000000' }
                     },
                     tooltip: {
                         trigger: 'item',
@@ -380,13 +380,13 @@
     @import './ExamPaperAnalysis.less';
 </style>
 <style lang="less">
-      .exam-analysis-wrap .ivu-table-header thead tr th {
+      /*.exam-analysis-wrap .ivu-table-header thead tr th {
           background: #303030;
       }
 
       .exam-analysis-wrap .ivu-table td {
           background: #353535;
-      }
+      }*/
 
       /*#exam-diff-chart {
       width:400px;

+ 3 - 10
TEAMModelOS/ClientApp/src/view/learnactivity/ManageEvaluation.vue

@@ -27,7 +27,7 @@
             <div class="evaluation-detail-bar">
                 <span :class="currentBraIndex == 0 ? 'evalustion-bar-item line-bottom-active line-bottom':'evalustion-bar-item line-bottom'" @click="selectBar(0)">评测信息</span>
                 <span :class="currentBraIndex == 1 ? 'evalustion-bar-item line-bottom-active line-bottom':'evalustion-bar-item line-bottom'" @click="selectBar(1)">评测数据</span>
-                <span :class="evaluationList.length == 0 ? 'edit-evaluation custom-label-disabeld':'edit-evaluation'" @click="publishEvaluation"><Icon type="ios-send" size="20" />发布评测</span>
+                <!--<span :class="evaluationList.length == 0 ? 'edit-evaluation custom-label-disabeld':'edit-evaluation'" @click="publishEvaluation"><Icon type="ios-send" size="20" />发布评测</span>-->
             </div>
             <!--评测基础信息-->
             <div :class="currentBraIndex == 0 ? 'animated fadeIn evaluation-base-info':'evaluation-base-info animated fadeOutRight'" v-show="currentBraIndex == 0">
@@ -69,7 +69,6 @@
                             <span style="margin:0px 2px;">·</span>
                             {{jsFn.getSubjectName(jsFn.getPeriod($store.state.schoolBaseInfo.schoolBaseInfo, item.periodCode), item.subjectCode)}}
                         </span>
-                        <span class="test-paper-analysis" @click="showAnalysis"><Icon :type="examAnalysisStatus ? 'md-list-box':'md-stats'" style="margin-right:5px;" />{{examAnalysisStatus ? '试卷预览':'试卷分析'}}</span>
                     </div>
                     <div class="test-paper-detail">
                         <vuescroll ref="test-paper-detail" @handle-scroll="checkBackTop">
@@ -79,8 +78,7 @@
                             </div>
                             <!--试卷题目信息-->
                             <div v-if="examPaperList.length > 0">
-                                <TestPaper v-if="!examAnalysisStatus" :class="examAnalysisStatus ? '':'animated fadeIn'" :paper="examPaperList[currentSubjectIndex]" style="color:#515a6e;" :isShowTools="isShowTools"></TestPaper>
-                                <ExamPaperAnalysis v-show="examAnalysisStatus" style="margin-top:15px;margin-right:10px;" :class="examAnalysisStatus ? 'animated fadeIn':''" ref="examPaperAnalysis" :testPaper="examPaperList[currentSubjectIndex]"></ExamPaperAnalysis>
+                                <TestPaper :paper="examPaperList[currentSubjectIndex]" style="color:#515a6e;margin-top:-10px;" :isShowTools="isShowTools"></TestPaper>
                             </div>
                             <EmptyData v-else style="margin-top:60px;"></EmptyData>
                         </vuescroll>
@@ -172,7 +170,6 @@
                     point: []
                 },
                 jsFn,
-                examAnalysisStatus: false,
                 myDate: [],
                 groupQuestion: {},
                 currentSubjectIndex: 0,
@@ -326,11 +323,8 @@
                 }
             },
             showAnalysis() {
-                this.examAnalysisStatus = !this.examAnalysisStatus
                 this.handleAnalysisData()
-                if (this.examAnalysisStatus) {
-                    this.$refs.examPaperAnalysis.drawDiffChart()
-                }
+                
             },
             /**
              * 处理试卷分析数据
@@ -486,7 +480,6 @@
                 for (let i = 0; i < groupResult.length; i++) {
                     this.groupQuestion[groupResult[i][0].type] = groupResult[i]
                 }
-                this.examAnalysisStatus = false
                 this.handleBackToTop()
 
             },

+ 126 - 0
TEAMModelOS/ClientApp/src/view/settings/Index.less

@@ -0,0 +1,126 @@
+@primaryColor: #1CC0F3;
+@borderColor: #424242;
+@second-textColor: #a5a5a5; //文本副级颜色
+
+.settings-container{
+	height: 100%;
+	display: flex;
+	flex-direction: column;
+	font-family: '微軟正黑體', 'Heiti TC' !important;
+	
+	.settings-header{
+		height: 70px;
+		border-bottom: 1px solid @borderColor;
+		
+		&-item{
+			display: inline-block;
+			height: 40px;
+			line-height: 40px;
+			margin-top: 15px;
+			margin-left: 50px;
+			color:@second-textColor;
+			cursor: pointer;
+		}
+		
+		.active-item{
+			font-size: 14px;
+			color:#fff;
+			border-bottom: 2px solid @primaryColor;
+		}
+	}
+	
+	.settings-body{
+		height: calc(100% - 70px);
+		
+		.normal-settings{
+			width: 100%;
+			height: 100%;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			
+			&-item{
+				padding: 50px 0;
+				display: flex;
+				align-items: center;
+				
+				.item-title{
+					font-size: 18px;
+					font-weight: bold;
+					color:#fff;
+					margin-left: 10%;
+					min-width: 10%;
+				}
+				
+				.item-description{
+					color:#a7a7a7;
+					min-width: 30%;
+					margin-left: 10%;
+				}
+				
+				.item-content{
+					margin-left: 5%;
+					display: flex;
+					min-width: 30%;
+					
+					.color-item{
+						position: relative;
+						display: flex;
+						width: 35px;
+						height: 35px;
+						background: #000;
+						border: 3px solid #191919;
+						cursor: pointer;
+						
+						&:last-child{
+							margin-left: 20px;
+							background: #fff;
+						}
+						
+						&-active{
+							border: 3px solid @primaryColor;
+							
+							&::after{
+								position:absolute;
+								content:'';
+								display:block;
+								width:0;
+								height:0;
+								right: -10px;
+								top:-10px;
+								transform:rotate(135deg);
+								border-width:10px;
+								border-style:solid;
+								border-color: transparent @primaryColor transparent  transparent;
+							}
+							
+							&::before{
+								content:'';
+									display:block;
+									width:5px;
+									height:8px;
+									border-right:#ffffff solid 2px;
+									border-bottom:#ffffff solid 2px;
+									transform:rotate(35deg);
+									position:absolute;
+									top:0;
+									right:0;
+									z-index:2;
+							}
+						}
+					}
+				}
+				
+				.ivu-btn{
+					width: 300px;
+					height: 45px;
+					background: @primaryColor;
+					color:#fff;
+					border: none;
+					margin: 0 auto;
+					border-radius: 0;
+				}
+			}
+		}
+	}
+}

+ 167 - 0
TEAMModelOS/ClientApp/src/view/settings/Index.vue

@@ -0,0 +1,167 @@
+<template>
+	<div class="settings-container">
+		<div class="settings-header">
+			<span :class="['settings-header-item',activeTab === '0' ?  'active-item' : '']" @click="onTabChange('0')">一般设置</span>
+			<span :class="['settings-header-item',activeTab === '1' ?  'active-item' : '']" @click="onTabChange('1')">学校管理</span>
+		</div>
+		
+		<div class="settings-body">
+			<div class="normal-settings" v-if="activeTab === '0'">
+				<div class="normal-settings-item">
+					<span class="item-title">网站语言设定</span>
+					<span class="item-description">请选择网站要用来显示选单、互动页面以及通知信息的语言</span>
+					<span class="item-content">
+						<Select v-model="curLang" style="width:200px">
+							<Option value="zh-CN">中文(简体)</Option>
+							<Option value="zh-TW">中文(繁体)</Option>
+							<Option value="en-US">英语</Option>
+						</Select>
+						<Checkbox v-model="isHomeworkLang">使用您作业系统的语系来展示</Checkbox>
+					</span>
+				</div>
+				<div class="normal-settings-item">
+					<span class="item-title">网站色彩模式</span>
+					<span class="item-description">请选择网站显示的色彩模式,以便提供最佳的用户体验</span>
+					<span class="item-content">
+						<span :class="['color-item',activeTheme === '0' ?  'color-item-active' : '']" @click="onThemeChange('0')"></span>
+						<span :class="['color-item',activeTheme === '1' ?  'color-item-active' : '']" @click="onThemeChange('1')"></span>
+					</span>
+				</div>
+				<div class="normal-settings-item">
+					<span class="item-title">菜单显示设置</span>
+					<span class="item-description">选择左侧Menu在网站载入时的预设显示模式</span>
+					<span class="item-content">
+						<RadioGroup v-model="menuStatus">
+							<Radio label="open">预设展开显示</Radio>
+							<Radio label="close">预设关闭显示</Radio>
+						</RadioGroup>
+					</span>
+				</div>
+				<div class="normal-settings-item">
+					<Button>保存变更</Button>
+				</div>
+			</div>
+		
+			<SchoolMgmt v-else></SchoolMgmt>
+		</div>
+	</div>
+</template>
+
+<script>
+	import SchoolMgmt from './SchoolMgmt.vue'
+	export default {
+		components:{ SchoolMgmt },
+		data(){
+			return {
+				activeTab:'0',
+				activeTheme:'0',
+				menuStatus:'open',
+				curLang:'zh-CN',
+				isHomeworkLang:true,
+			}
+		},
+		methods:{
+			onTabChange(index){
+				this.activeTab = index
+			},
+			onThemeChange(index){
+				this.activeTheme = index
+			}
+		}
+	}
+</script>
+
+<style lang="less" scoped>
+	@import "./Index.less";
+</style>
+
+<style lang="less">
+	.settings-container{
+		
+		.ivu-select-selection{
+			background: transparent;
+			border-color: #363738;
+			color:#a6a6a6;
+		}
+		
+		.ivu-checkbox-wrapper{
+			margin-left: 40px;
+			margin-top: 5px;
+			color:#a6a6a6;
+		}
+		
+		.ivu-checkbox{
+			margin-right: 5px;
+		}
+		
+		.ivu-radio-wrapper{
+			margin-right: 20px;
+			color:#a5a5a5;
+		}
+		
+		.ivu-radio-inner{
+			width: 18px;
+			height: 18px;
+			border-radius: 4px;
+			background-color: #0f0f0f;
+			border-color: #4d4d4d;
+			border-width: 1px;
+			margin-right: 5px;
+			
+			&::after{
+				content:'';
+				display:block;
+				width:10px;
+				height:16px;
+				border-right:#ffffff solid 3px;
+				border-bottom:#ffffff solid 3px;
+				transform:rotate(35deg);
+				position:absolute;
+				top:-4px;
+				left:4px;
+				border-radius: 0;
+				background-color: transparent;
+				border-color:#0094FF;
+			}
+		}
+		
+		.ivu-checkbox-inner{
+			width: 18px;
+			height: 18px;
+			border-radius: 4px;
+			background-color: #0f0f0f;
+			border-color: #4d4d4d;
+			border-width: 1px;
+			margin-right: 5px;
+		}
+		
+		.ivu-checkbox-checked .ivu-checkbox-inner{
+			width: 18px;
+			height: 18px;
+			border-radius: 4px;
+			background-color: #0f0f0f;
+			border-color: #4d4d4d;
+			border-width: 1px;
+			margin-right: 5px;
+			
+			&::after{
+				content:'';
+				display:block;
+				width:10px;
+				height:16px;
+				border-right:#ffffff solid 3px;
+				border-bottom:#ffffff solid 3px;
+				transform:rotate(35deg);
+				position:absolute;
+				top:-4px;
+				left:4px;
+				border-radius: 0;
+				background-color: transparent;
+				border-color:#0094FF;
+			}
+		}
+		
+		
+	
+	}
+</style>

+ 135 - 0
TEAMModelOS/ClientApp/src/view/settings/SchoolMgmt.less

@@ -0,0 +1,135 @@
+@primaryColor: #1CC0F3;
+@borderColor: #424242;
+@second-textColor: #a5a5a5; //文本副级颜色
+
+.school-container{
+	display: flex;
+	height: 100%;
+	
+	&-left{
+		width: 22%;
+		height: 100%;
+		border-right: 1px solid @borderColor;
+		
+		.school-list-wrap{
+			height: 100%;
+			overflow: hidden;
+			
+			.list-wrap{
+				width: 100%;
+				display: flex;
+				flex-direction: column;
+				padding-left: 10px;
+				padding-bottom: 50px;
+				overflow: hidden;
+				
+				.school-item{
+					position: relative;
+					width: 100%;
+					padding: 15px;
+					border-bottom: 1px solid @borderColor;
+					display: flex;
+					flex-direction: column;
+					
+					&:last-child{
+						border-bottom:none;
+					}
+					
+					&-name{
+						font-size: 18px;
+						font-weight: bold;
+						color:#fff;
+					}
+					
+					&-code{
+						margin: 5px 0;
+						color:@second-textColor;
+						letter-spacing: .6px;
+					}
+					
+					&-nums{
+						color:@primaryColor;
+						margin-top: 5px;
+						
+						.ivu-icon{
+							font-size: 18px;
+							margin-right: 5px;
+						}
+					}
+					
+					&-role{
+						position: absolute;
+						right: 20px;
+						top: 20px;
+						color:@second-textColor;
+					}
+					
+					&-btn{
+						position: absolute;
+						right: 20px;
+						bottom: 20px;
+						width: 100px;
+						height: 30px;
+						line-height: 30px;
+						border-radius: 5px;
+						color:#fff;
+						background: @primaryColor;
+						text-align: center;
+						cursor: pointer;
+						visibility: hidden;
+						
+						.ivu-icon{
+							font-size: 16px;
+							margin-right: 2px;
+							transform: rotate(90deg);
+						}
+					}
+					
+					&:hover{
+						.item-active;
+						
+						.school-item-btn{
+							visibility: visible;
+						}
+					}
+				}
+			}
+		}
+	}
+	
+	&-right{
+		// width: 72%;
+		flex: 1;
+		height: 100%;
+		
+		.search-wrap{
+			width: 100%;
+			height: 50px;
+			border-bottom: 1px solid @borderColor;
+			display: flex;
+			align-items: center;
+			padding: 0 20px;
+		}
+		
+		.table-wrap{
+			padding: 0 20px;
+		}
+	}
+	
+	&-header{
+		width: 100%;
+		height: 50px;
+		line-height: 50px;
+		padding-left: 20px;
+		color:@second-textColor;
+		border-bottom: 1px solid @borderColor;
+	}
+	
+	.item-active {
+	    background-image: -webkit-linear-gradient(90deg, rgba(30,30,30,0) 0%, rgba(110,110,110,.2) 50%, rgba(110,110,110,.4) 100%);
+	    background-image: -o-linear-gradient(90deg, rgba(30,30,30,0) 0%, rgba(110,110,110,.2) 50%, rgba(110,110,110,.4) 100%);
+	    background-image: -moz-linear-gradient(90deg, rgba(30,30,30,0) 0%, rgba(110,110,110,.2) 50%, rgba(110,110,110,.4) 100%);
+	    background-image: linear-gradient(90deg, rgba(30,30,30,0) 0%, rgba(110,110,110,.2) 50%, rgba(110,110,110,.4) 100%);
+	}
+	
+}

+ 324 - 0
TEAMModelOS/ClientApp/src/view/settings/SchoolMgmt.vue

@@ -0,0 +1,324 @@
+<template>
+	<div class="school-container">
+		<div class="school-container-left">
+			<div class="school-container-header">
+				<span>已添加或申请学校</span>
+			</div>
+			<vuescroll>
+				<div class="school-list-wrap">
+					<!-- <Loading :top="200" bgColor="rgba(103, 103, 103, 0.27)" type="1" v-show="isLoadList"></Loading> -->
+					<div class="list-wrap">
+						<div class="school-item" v-for="(item,index) in mySchoolList" :key="index">
+							<span class="school-item-name">{{ item.name }}</span>
+							<span class="school-item-code">{{ item.shortCode + ' / ' + item.code }}</span>
+							<span class="school-item-nums">
+								<span>
+									<Icon type="md-bookmarks" />
+									<span>课程数</span>
+									<span style="margin-left: 10px;">{{ item.course }}</span>
+								</span>
+								<span style="margin-left: 20px;">
+									<Icon type="md-star" />
+									<span>活动数</span>
+									<span style="margin-left: 10px;">{{ item.activity }}</span>
+								</span>
+							</span>
+							<span class="school-item-role">{{ item.role }}</span>
+							<span class="school-item-btn">
+								<Icon type="md-swap" />
+								<span>前往学校</span>
+							</span>
+						</div>
+					</div>
+				</div>
+			</vuescroll>
+		</div>
+		<div class="school-container-right">
+			<div class="school-container-header">
+				<span>申请加入学校</span>
+			</div>
+			<div class="search-wrap">
+				<Input>
+				<Icon type="ios-search" slot="prefix" />
+				</Input>
+				<Select v-model="curArea">
+					<Option value="default">大陆地区</Option>
+				</Select>
+				<Select v-model="curProvince">
+					<Option value="default">黑龙江</Option>
+				</Select>
+				<Select v-model="curCity">
+					<Option value="default">所有省辖市/界</Option>
+				</Select>
+			</div>
+			<div class="table-wrap">
+				<Table stripe :columns="schoolColumns" :data="schoolList"></Table>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				mySchoolList: [],
+				activeIndex: 0,
+				isLoadList: false,
+				allSchoolList: [],
+				curArea: 'default',
+				curProvince: 'default',
+				curCity: 'default',
+				schoolList: [{
+					name: '青城山学校',
+					shortCode: 'YNTES',
+					area: '大陆地区',
+					province: '四川 / 成都',
+					code: '16354211362',
+					course: 8,
+					activity: 17,
+					role: '教师'
+				}, {
+					name: '高新区芳草小学',
+					shortCode: 'YNTES',
+					area: '大陆地区',
+					province: '四川 / 成都',
+					code: '16354213451',
+					course: 8,
+					activity: 17,
+					role: '教师'
+				}, {
+					name: '成都师范学院',
+					shortCode: 'YNTES',
+					area: '大陆地区',
+					province: '四川 / 成都',
+					code: '16354211311',
+					course: 8,
+					activity: 17,
+					role: '教师'
+				}, {
+					name: '青城山学校',
+					shortCode: 'YNTES',
+					area: '大陆地区',
+					province: '四川 / 成都',
+					code: '16354211362',
+					course: 8,
+					activity: 17,
+					role: '教师'
+				}, {
+					name: '高新区芳草小学',
+					shortCode: 'YNTES',
+					area: '大陆地区',
+					province: '四川 / 成都',
+					code: '16354213451',
+					course: 8,
+					activity: 17,
+					role: '教师'
+				}, {
+					name: '成都师范学院',
+					shortCode: 'YNTES',
+					area: '大陆地区',
+					province: '四川 / 成都',
+					code: '16354211311',
+					course: 8,
+					activity: 17,
+					role: '教师'
+				},{
+					name: '成都师范学院',
+					shortCode: 'YNTES',
+					area: '大陆地区',
+					province: '四川 / 成都',
+					code: '16354211311',
+					course: 8,
+					activity: 17,
+					role: '教师'
+				}, {
+					name: '青城山学校',
+					shortCode: 'YNTES',
+					area: '大陆地区',
+					province: '四川 / 成都',
+					code: '16354211362',
+					course: 8,
+					activity: 17,
+					role: '教师'
+				} ],
+				schoolColumns: [{
+						title: '学校名称',
+						key: 'name',
+						width: 500,
+						// render: (h, params) => {
+						// 	return h('div', [
+						// 		h('Button', {
+						// 			props: {
+						// 				type: 'primary'
+						// 			},
+						// 			on: {
+						// 				click: () => {
+						// 				}
+						// 			}
+						// 		}, '申请加入')
+						// 	]);
+						// }
+					},
+					{
+						title: '地区',
+						key: 'area'
+					},
+					{
+						title: '省市县',
+						key: 'province'
+					},
+					{
+						title: '校简码',
+						key: 'shortCode'
+					},
+					{
+						title: '校代码',
+						key: 'code'
+					},
+					{
+						title: '',
+						render: (h, params) => {
+							return h('div', [
+								h('Button', {
+									props: {
+										type: 'primary'
+									},
+									on: {
+										click: () => {
+										}
+									}
+								}, '申请加入')
+							]);
+						}
+					}
+				]
+			}
+		},
+		created() {
+			this.mySchoolList = [{
+				name: '青城山学校',
+				shortCode: 'YNTES',
+				code: '16354211362',
+				course: 8,
+				activity: 17,
+				role: '教师'
+			}, {
+				name: '高新区芳草小学',
+				shortCode: 'YNTES',
+				code: '16354213451',
+				course: 8,
+				activity: 17,
+				role: '教师'
+			},{
+				name: '青城山学校',
+				shortCode: 'YNTES',
+				code: '16354211362',
+				course: 8,
+				activity: 17,
+				role: '教师'
+			}, {
+				name: '高新区芳草小学',
+				shortCode: 'YNTES',
+				code: '16354213451',
+				course: 8,
+				activity: 17,
+				role: '教师'
+			}, {
+				name: '成都师范学院',
+				shortCode: 'YNTES',
+				code: '16354211311',
+				course: 8,
+				activity: 17,
+				role: '教师'
+			}, {
+				name: '青城山学校',
+				shortCode: 'YNTES',
+				code: '16354211362',
+				course: 8,
+				activity: 17,
+				role: '教师'
+			}, {
+				name: '高新区芳草小学',
+				shortCode: 'YNTES',
+				code: '16354213451',
+				course: 8,
+				activity: 17,
+				role: '教师'
+			}, {
+				name: '成都师范学院',
+				shortCode: 'YNTES',
+				code: '16354211311',
+				course: 8,
+				activity: 17,
+				role: '教师'
+			}]
+		}
+	}
+</script>
+
+<style lang="less" scoped>
+	@import "./SchoolMgmt.less";
+</style>
+
+<style lang="less">
+	@borderColor: #424242;
+	@second-textColor: #CBCBCB; //文本副级颜色
+
+	.school-container-right {
+
+		.search-wrap {
+			.ivu-input {
+				background: transparent;
+				width: 250px;
+				border-color: #4a4a4a;
+			}
+
+			.ivu-select {
+				width: 200px;
+				margin-left: 20px;
+			}
+
+		}
+
+		.table-wrap {
+			.ivu-table {
+				background: transparent;
+			}
+
+			.ivu-table th,
+			.ivu-table td {
+				background: transparent;
+				color: @second-textColor;
+				border-color: @borderColor;
+				height: 60px;
+				
+				.ivu-btn{
+					visibility: hidden;
+				}
+			}
+
+			.ivu-table:before,
+			.ivu-table-border:after,
+			.ivu-table-wrapper-with-border {
+				background: @borderColor;
+				border-color: @borderColor;
+			}
+
+			.ivu-table-stripe .ivu-table-body tr:nth-child(2n) td,
+			.ivu-table-stripe .ivu-table-fixed-body tr:nth-child(2n) td {
+				background: #1e1e1e;
+			}
+
+			.ivu-table-stripe .ivu-table-body tr.ivu-table-row-hover td,
+			.ivu-table-stripe .ivu-table-fixed-body tr.ivu-table-row-hover td {
+				
+				.ivu-btn{
+					visibility: visible;
+				}
+				
+				background: #5C5A5A;
+			}
+		}
+	}
+</style>

+ 9 - 9
TEAMModelOS/ClientApp/src/view/teachcontent/index.vue

@@ -276,22 +276,22 @@
                         title: this.$t('teachContent.tableC4'),
                         slot: 'size',
                         key: 'size',
-                        width: 110,
-                        align: 'center',
-                        sortable: true
-                    },
-                    {
-                        title: this.$t('teachContent.tableC5'),
-                        key: 'relationNum',
-                        width: 160,
+                        width: 150,
                         align: 'center',
                         sortable: true
                     },
+                    //{
+                    //    title: this.$t('teachContent.tableC5'),
+                    //    key: 'relationNum',
+                    //    width: 160,
+                    //    align: 'center',
+                    //    sortable: true
+                    //},
                     {
                         title: this.$t('teachContent.tableC6'),
                         slot: 'createTime',
                         key: 'createTime',
-                        width: 200,
+                        width: 180,
                         sortable: true
                     }
                 ]

+ 5 - 4
TEAMModelOS/Controllers/Analysis/ChangeController.cs

@@ -24,13 +24,14 @@ namespace TEAMModelOS.Controllers.Analysis
     [ApiController]
     public class ChangeController : Controller
     {
-
+        private SnowflakeId SnowflakeId;
         private readonly IWebHostEnvironment _hostingEnvironment;
         public AzureCosmosFactory _cosmosrepository;
         public AzureStorageFactory azureBlobDB;
         private const string CacheCosmosPrefix = "Analysis:";
-        public ChangeController(IWebHostEnvironment hostingEnvironment, AzureCosmosFactory cosmosDBRepository, AzureStorageFactory _azureBlobDB)
+        public ChangeController(IWebHostEnvironment hostingEnvironment, AzureCosmosFactory cosmosDBRepository, AzureStorageFactory _azureBlobDB, SnowflakeId _SnowflakeId)
         {
+            SnowflakeId= _SnowflakeId;
             _hostingEnvironment = hostingEnvironment;
             _cosmosrepository = cosmosDBRepository;
             azureBlobDB = _azureBlobDB;
@@ -170,7 +171,7 @@ namespace TEAMModelOS.Controllers.Analysis
                 //考试基本信息
                 examInfo = new ExamInfo
                 {
-                    id = System.Guid.NewGuid().ToString(),
+                    id = SnowflakeId.NextId()+"",
                     code = "88924E4C-F00D-4A1D-B2C3-234F930F29D4",
                     name = s.ex_name,
                     type = s.ex_type,
@@ -197,7 +198,7 @@ namespace TEAMModelOS.Controllers.Analysis
                 string schoolName = x.info.school_name;
                 Classroom classInfo = new Classroom
                 {
-                    id = System.Guid.NewGuid().ToString(),
+                    id = SnowflakeId.NextId() + "",
                     classroomName = key,
                     //classroomType = schoolName,
                     studentCount = k,

+ 4 - 2
TEAMModelOS/Controllers/Core/BlobController.cs

@@ -21,8 +21,10 @@ namespace TEAMModelOS.Controllers.Core
     {
         
         private readonly AzureStorageFactory azureBlobDBRepository;
-        public BlobController(AzureStorageFactory _azureBlobDBRepository) {
+        private readonly SnowflakeId SnowflakeId;
+        public BlobController(AzureStorageFactory _azureBlobDBRepository, SnowflakeId _SnowflakeId) {
             azureBlobDBRepository = _azureBlobDBRepository;
+            SnowflakeId = _SnowflakeId;
         }
 
         /// <summary>
@@ -113,7 +115,7 @@ namespace TEAMModelOS.Controllers.Core
         public async Task<BaseResponse> UploadText(JosnRequest<string> request)
         {
             ResponseBuilder responseBuilder = new ResponseBuilder();
-            return responseBuilder.Data(await azureBlobDBRepository.UploadFileByContainer("hbcn", request.@params, "exam", Guid.NewGuid().ToString() + ".json")).build();
+            return responseBuilder.Data(await azureBlobDBRepository.UploadFileByContainer("hbcn", request.@params, "exam", SnowflakeId.NextId() + ".json")).build();
           
         }
         private static string ContainerUrlString(string sasUrl)

+ 7 - 54
TEAMModelOS/Controllers/Exam/ExamController.cs

@@ -18,13 +18,15 @@ namespace TEAMModelOS.Controllers
     [ApiController]
     public class ExamController : BaseController
     {
+        private readonly SnowflakeId SnowflakeId;
         private readonly AzureCosmosFactory cosmosDBV3Repository;
         private readonly AzureServiceBusFactory _serviceBus;
-        public ExamController(AzureCosmosFactory _cosmosDBV3Repository, AzureServiceBusFactory serviceBus)
+        public ExamController(AzureCosmosFactory _cosmosDBV3Repository, AzureServiceBusFactory serviceBus, SnowflakeId _SnowflakeId)
         {
             
             cosmosDBV3Repository = _cosmosDBV3Repository;
             _serviceBus = serviceBus;
+            SnowflakeId = _SnowflakeId;
         }
 
         /// <summary>
@@ -39,7 +41,7 @@ namespace TEAMModelOS.Controllers
             
             if (string.IsNullOrEmpty(request.@params.id))
             {
-                request.@params.id = Guid.NewGuid().ToString();
+                request.@params.id = SnowflakeId.NextId()+"";
                 request.@params.status = 100;
                 // await cosmosDBV3Repository.SaveOrUpdate(request.@params);
             }
@@ -51,7 +53,7 @@ namespace TEAMModelOS.Controllers
             else if (request.@params.publish.Equals("1"))
             {
                 //设定开始时间
-                string msgId = Guid.NewGuid().ToString();
+                string msgId = SnowflakeId.NextId() + "";
                 long SequenceNumber = await _serviceBus.SendMessage<ExamInfo>(Constants.TopicName, request.@params.id, request.@params.code, request.@params.startTime, 200, msgId);
                 request.@params.sequenceNumber = SequenceNumber;
             }
@@ -62,7 +64,7 @@ namespace TEAMModelOS.Controllers
             }
             await cosmosDBV3Repository.SaveOrUpdate(request.@params);
             //设定结束时间
-            string msgEndId = Guid.NewGuid().ToString();
+            string msgEndId = SnowflakeId.NextId() + "";
             await _serviceBus.SendMessage<ExamInfo>(Constants.TopicName, request.@params.id, request.@params.code, request.@params.endTime, 300, msgEndId);
             return builder.Data(request.@params).build();
         }
@@ -323,55 +325,6 @@ namespace TEAMModelOS.Controllers
                 }
             }
             return stuAnswers;
-        }
-        /// <summary>
-        /// 生成题目
-        /// </summary>
-        /// <param name="request"></param>
-        /// <returns></returns>
-        [HttpPost("Gen")]
-        public  BaseResponse  Gen(JosnRequest<List<ItemInfo>> request)
-        {
-            ResponseBuilder builder = ResponseBuilder.custom();
-            List<string> poins = new List<string>();
-            for (int i = 0; i < 30; i++)
-            {
-                poins.Add(Guid.NewGuid().ToString());
-            }
-            Random rangdomRed = new Random();
-            // Single单选,Multiple多选,Judge判断,Complete填空,Subjective问答,Compose综合
-            List<string> types = new List<string>() { "Single", "Multiple", "Judge", "Complete", "Subjective", "Compose" };
-            List<string> field = new List<string>() { "应用", "综合", "理解", "评鉴", "知识" };
-            foreach (ItemInfo item in request.@params)
-            {
-                
-                item.subjectCode = "Subject_Chinese";
-                item.periodCode = "period_2";
-                item.type = types.OrderBy(x => Guid.NewGuid()).First();
-                item.points = new List<string>() { poins.OrderBy(x => Guid.NewGuid()).First() };
-                item.level = rangdomRed.Next(1, 5);
-                item.field = field.OrderBy(x => Guid.NewGuid()).First();
-            }
-            return builder.Data(request.@params).build();
-        }
-
-
-
-        List<string> pins = new List<string>() {
-            "5a569451-d7b6-4bc5-85dc-4c97ba593090", "97752929-bee6-458e-b5ae-af16ee73a1e9",
-            "b32dcb15-9f13-4e8f-9f65-80e55e3b257d", "5160a86b-2d44-466f-bd82-ed08148f6607",
-            "9e6a3b59-bdeb-4b21-90ec-903ef9847864", "6d1f223d-a84e-4fab-b015-fe1c4298834b",
-            "72571322-43d9-4777-b3b1-a6a5a4bf4e10", "bf4707a6-f541-46b9-85b2-82aa6077ba27",
-            "9dd91708-be01-4947-850c-77b88e7cf2ad", "24d9f39f-906a-4ca6-bc4f-8f9307d51d5a",
-            "4acee7e2-434c-4257-9331-8c42fba14a3b", "170125f4-4cfc-40eb-aae4-7a82840a6297",
-            "6b14df14-17ae-4f47-a1e4-16738268feba", "a9c1ada9-232f-4993-bf63-3c279e5ecaac",
-            "4ff7b031-a45c-4b02-921e-933be73bb38a", "a96ebded-aeb0-42c8-ab90-8b1ab8a4a489",
-            "e3564799-3b9a-4b5d-a904-f09565f98890", "64b4326f-1f76-4c7c-8fb7-5940894e2205",
-            "4e43d507-8af1-4b21-b09e-7fe8533104e8", "25032d80-b88c-42c1-8ffd-1a30815859aa",
-            "b1baff75-fdf9-4020-acfb-af6497017f4b", "c6e8bdaf-9738-48f6-bd7f-5bc6d6444684",
-            "d75000f7-168a-4521-b056-780ef38114cc", "f6c768e8-12ea-445c-8df1-750736294a80",
-            "5ac2805d-b31d-44a3-9058-1239d5557270", "49512c48-f38a-452e-8bb9-170728cb271e",
-            "57088641-14d1-498d-ae8e-61627e0d8e4a", "2222f52f-cc3f-4ac3-96b8-638078455f64",
-            "1687d096-4d58-4828-97de-d31e23784b36", "45ae3d97-cd76-4c53-a821-e220367eb2c2" };
+        } 
     }
 }

+ 4 - 2
TEAMModelOS/Controllers/Exam/ImportExerciseController.cs

@@ -91,9 +91,10 @@ namespace TEAMModelOS.Controllers
         {
             ResponseBuilder builder = ResponseBuilder.custom();
             bool flag = request.@params.TryGetValue("htmlString", out object htmlString);
+            bool flagLang = request.@params.TryGetValue("lang", out object lang);
             if (flag && htmlString != null && !string.IsNullOrEmpty(htmlString.ToString()))
             {
-                LangConfig langConfig= langConfigs.Where(x => x.Lang == request.lang).FirstOrDefault();
+                LangConfig langConfig= langConfigs.Where(x => x.Lang == lang.ToString()).FirstOrDefault();
                 HtmlAnalyzeService htmlAnalyzeService = new HtmlAnalyzeService(langConfig);
                 List<Service.Models.ItemInfo> exercises = htmlAnalyzeService.AnalyzeWordAsync(htmlString.ToString());
                 return builder.Data(exercises).build();
@@ -113,9 +114,10 @@ namespace TEAMModelOS.Controllers
         {
             ResponseBuilder builder = ResponseBuilder.custom();
             bool flag = request.@params.TryGetValue("htmlString", out object htmlString);
+            bool flagLang = request.@params.TryGetValue("lang", out object lang);
             if (flag && htmlString != null && !string.IsNullOrEmpty(htmlString.ToString()))
             {
-                LangConfig langConfig = langConfigs.Where(x => x.Lang == request.lang).FirstOrDefault();
+                LangConfig langConfig = langConfigs.Where(x => x.Lang == lang.ToString()).FirstOrDefault();
                 HtmlAnalyzeService htmlAnalyzeService = new HtmlAnalyzeService(langConfig);
                 Htex exercises = await HtexService.AnalyzeHtmlToHtex(azureBlobDBRepository, htmlString.ToString(), request.lang, htmlAnalyzeService);
                 return builder.Data(exercises).build();

+ 5 - 3
TEAMModelOS/Controllers/Exam/PaperController.cs

@@ -1,4 +1,4 @@
-using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -13,10 +13,12 @@ namespace TEAMModelOS.Controllers
     [ApiController]
     public class PaperController: BaseController
     {
+        private SnowflakeId SnowflakeId;
         private readonly AzureCosmosFactory cosmosDBV3Repository;
-        public PaperController(AzureCosmosFactory _cosmosDBV3Repository)
+        public PaperController(AzureCosmosFactory _cosmosDBV3Repository, SnowflakeId _SnowflakeId)
         {
             cosmosDBV3Repository = _cosmosDBV3Repository;
+            SnowflakeId = _SnowflakeId;
         }
         /// <summary>
         /// 删除
@@ -83,7 +85,7 @@ namespace TEAMModelOS.Controllers
             ResponseBuilder builder = ResponseBuilder.custom();
             if (string.IsNullOrEmpty(request.@params.id))
             {
-                request.@params.id = Guid.NewGuid().ToString(); 
+                request.@params.id = SnowflakeId.NextId() + ""; 
                 request.@params.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
                 await cosmosDBV3Repository.SaveOrUpdate(request.@params);
             }

+ 6 - 4
TEAMModelOS/Controllers/Syllabus/ItemInfoController.cs

@@ -1,4 +1,4 @@
-using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -14,10 +14,12 @@ namespace TEAMModelOS.Controllers
     [ApiController]
     public class ItemInfoController : BaseController
     {
+        private SnowflakeId SnowflakeId;
         private readonly AzureCosmosFactory cosmosDBV3Repository;
-        public ItemInfoController(AzureCosmosFactory _cosmosDBV3Repository)
+        public ItemInfoController(AzureCosmosFactory _cosmosDBV3Repository ,SnowflakeId _SnowflakeId)
         {
             cosmosDBV3Repository = _cosmosDBV3Repository;
+            SnowflakeId = _SnowflakeId;
         }
 
         /// <summary>
@@ -33,7 +35,7 @@ namespace TEAMModelOS.Controllers
             request.@params.ForEach(x => {
               
                 if (string.IsNullOrEmpty(x.id)) {
-                    x.id = Guid.NewGuid().ToString();
+                    x.id = SnowflakeId.NextId()+"";
                 };
                 x.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
             });
@@ -48,7 +50,7 @@ namespace TEAMModelOS.Controllers
              
             if (string.IsNullOrEmpty(request.@params.id))
             {
-            request.@params.id = Guid.NewGuid().ToString();
+                request.@params.id = SnowflakeId.NextId() + "";
             };
             request.@params.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
             return builder.Data(await cosmosDBV3Repository.SaveOrUpdate(request.@params)).build();

+ 4 - 2
TEAMModelOS/Controllers/Syllabus/KnowledgeController.cs

@@ -21,11 +21,13 @@ namespace TEAMModelOS.Controllers
     //[Authorize]
     public class KnowledgeController : BaseController
     {
+        private SnowflakeId SnowflakeId;
         private AzureStorageFactory _table;
         private AzureCosmosFactory _cosmos; 
 
-        public KnowledgeController(AzureStorageFactory table, AzureCosmosFactory cosmos )
+        public KnowledgeController(AzureStorageFactory table, AzureCosmosFactory cosmos , SnowflakeId _SnowflakeId)
         {
+            SnowflakeId = _SnowflakeId;
             _table = table;
             _cosmos = cosmos;
           
@@ -288,7 +290,7 @@ namespace TEAMModelOS.Controllers
             ResponseBuilder builder = ResponseBuilder.custom();
             if (request.@params.IsNotEmpty())
             {
-                List<Knowledge> ts = await KnowledgeService.SaveOrUpdateKnowledge(_cosmos,request.@params);
+                List<Knowledge> ts = await KnowledgeService.SaveOrUpdateKnowledge(_cosmos,SnowflakeId,request.@params);
                 if (ts.Count > 0) builder.Data(ts).Extend(new Dictionary<string, object> { { "count", ts.Count } });
                 else {
                     return builder.Error(ResponseCode.FAILED, "失败!").build();

+ 4 - 3
TEAMModelOS/Controllers/Syllabus/ResourceController.cs

@@ -18,11 +18,12 @@ namespace TEAMModelOS.Controllers
     {
         private AzureStorageFactory _table;
         private AzureCosmosFactory _cosmos;
-        
-        public ResourceController(AzureStorageFactory table, AzureCosmosFactory cosmos)
+        private SnowflakeId SnowflakeId;
+        public ResourceController(AzureStorageFactory table, AzureCosmosFactory cosmos, SnowflakeId _SnowflakeId)
         {
             _table = table;
             _cosmos = cosmos;
+            SnowflakeId = _SnowflakeId;
         }
 
         /// <summary>
@@ -41,7 +42,7 @@ namespace TEAMModelOS.Controllers
                 {
                     if (item.id == null)
                     {
-                        item.id = Guid.NewGuid().ToString(); //item.sha1Code + "-" + item.extension + "-" + item.size;
+                        item.id = SnowflakeId.NextId()+""; //item.sha1Code + "-" + item.extension + "-" + item.size;
                         
                     }
                 }

+ 7 - 5
TEAMModelOS/Controllers/Task/HomeworkController.cs

@@ -28,13 +28,15 @@ namespace TEAMModelOS.Controllers.Learn
     [ApiController]
     public class HomeworkController : ControllerBase
     {
+        private SnowflakeId SnowflakeId;
         private readonly AzureCosmosFactory _cosmos;
        
         private readonly AzureServiceBusFactory _serviceBus;
-        public HomeworkController(AzureCosmosFactory cosmos , AzureServiceBusFactory serviceBus  )
+        public HomeworkController(AzureCosmosFactory cosmos , AzureServiceBusFactory serviceBus , SnowflakeId _SnowflakeId)
         {
             _cosmos = cosmos;
             _serviceBus = serviceBus;
+            SnowflakeId = _SnowflakeId;
         }
 
 
@@ -97,7 +99,7 @@ namespace TEAMModelOS.Controllers.Learn
             if (string.IsNullOrEmpty(request.@params.homeWork.id))
 
             {
-                request.@params.homeWork.id = Guid.NewGuid().ToString();
+                request.@params.homeWork.id = SnowflakeId.NextId()+"";
                 request.@params.homeWork.status = 100;
                 request.@params.reset = true;
                 request.@params.homeWork.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
@@ -113,7 +115,7 @@ namespace TEAMModelOS.Controllers.Learn
             {
                 //TimerWork<HomeWork>(request.@params.homeWork.startTime,new Dictionary<string, object> { { "id", request.@params.homeWork.id } });
                 //设定开始时间
-                string msgId = Guid.NewGuid().ToString();
+                string msgId = SnowflakeId.NextId() + "";
                 long SequenceNumber =  await _serviceBus.SendMessage<Homework>(Constants.TopicName, request.@params.homeWork.id, request.@params.homeWork.code, request.@params.homeWork.startTime,200, msgId);
                 request.@params.homeWork.sequenceNumber = SequenceNumber;
 
@@ -131,7 +133,7 @@ namespace TEAMModelOS.Controllers.Learn
             Homework homeWork = await _cosmos.SaveOrUpdate<Homework>(request.@params.homeWork);
 
             //设定结束时间
-            string msgEndId = Guid.NewGuid().ToString();
+            string msgEndId = SnowflakeId.NextId() + "";
             await _serviceBus.SendMessage<Homework>(Constants.TopicName, request.@params.homeWork.id, request.@params.homeWork.code, request.@params.homeWork.endTime,300, msgEndId);
             //_timerWorkService.TimerWork<Homework>(request.@params.homeWork.endTime, 300, new Dictionary<string, object> { { "id", request.@params.homeWork.id } });
             //清除作业
@@ -311,7 +313,7 @@ namespace TEAMModelOS.Controllers.Learn
                         //评论
                         StudentComment homeWorkComment = new StudentComment
                         {
-                            commentid = Guid.NewGuid().ToString(),
+                            commentid = SnowflakeId.NextId() + "",
                             comment = request.@params.comment,
                             createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds(),
                             fromId = request.@params.fromId,

+ 7 - 5
TEAMModelOS/Controllers/Task/LearnController.cs

@@ -22,10 +22,12 @@ namespace TEAMModelOS.Controllers.Learn
     [ApiController]
     public class LearnController: BaseController
     {
+        private SnowflakeId SnowflakeId;
         private readonly AzureCosmosFactory cosmosDBV3Repository;
         private readonly AzureServiceBusFactory _serviceBus;
-        public LearnController(AzureCosmosFactory _cosmosDBV3Repository, AzureServiceBusFactory serviceBus)
+        public LearnController(AzureCosmosFactory _cosmosDBV3Repository, AzureServiceBusFactory serviceBus, SnowflakeId _SnowflakeId)
         {
+            SnowflakeId = _SnowflakeId;
             _serviceBus = serviceBus;
             cosmosDBV3Repository = _cosmosDBV3Repository;
         }
@@ -45,7 +47,7 @@ namespace TEAMModelOS.Controllers.Learn
 
             if (request.@params.endTime > 0) {
                 //设定结束时间
-                string msgEndId = Guid.NewGuid().ToString();
+                string msgEndId = SnowflakeId.NextId()+"";
                 await _serviceBus.SendMessage<LearnTask>(Constants.TopicName, request.@params.id, request.@params.code, request.@params.endTime, 300, msgEndId);
             }
             await cosmosDBV3Repository.Save(request.@params);
@@ -94,7 +96,7 @@ namespace TEAMModelOS.Controllers.Learn
             ResponseBuilder builder = ResponseBuilder.custom();
             if (string.IsNullOrEmpty(request.@params.id))
             {
-                request.@params.id = Guid.NewGuid().ToString();
+                request.@params.id = SnowflakeId.NextId() + "";
                 request.@params.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
                 await cosmosDBV3Repository.Save(request.@params);
             }
@@ -148,7 +150,7 @@ namespace TEAMModelOS.Controllers.Learn
 
             if (string.IsNullOrEmpty(request.@params.id))
             {
-                request.@params.id = Guid.NewGuid().ToString();
+                request.@params.id = SnowflakeId.NextId() + "";
                 request.@params.createTime = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
                 await cosmosDBV3Repository.Save<LearnProcess>(request.@params);
             }
@@ -207,7 +209,7 @@ namespace TEAMModelOS.Controllers.Learn
                 {
                     if (string.IsNullOrEmpty(x.id))
                     {
-                     ///   x.id = new Guid().ToString();
+                     
                     }
                 });
                 List<LearnRecord> leanProcesses = await cosmosDBV3Repository.SaveOrUpdateAll<LearnRecord>(request.@params);

+ 6 - 5
TEAMModelOS/Controllers/Task/SurveyController.cs

@@ -22,10 +22,11 @@ namespace TEAMModelOS.Controllers
     public class SurveyController : BaseController
     {
         private readonly AzureCosmosFactory azureCosmosDBV3Repository;
- 
+        private SnowflakeId SnowflakeId;
         private readonly AzureServiceBusFactory _serviceBus;
-        public SurveyController(AzureCosmosFactory _azureCosmosDBV3Repository, AzureServiceBusFactory serviceBus)
+        public SurveyController(AzureCosmosFactory _azureCosmosDBV3Repository, AzureServiceBusFactory serviceBus, SnowflakeId _SnowflakeId)
         {
+            SnowflakeId= _SnowflakeId;
             //  _timerWorkService = timerWorkService;
             _serviceBus = serviceBus;
               azureCosmosDBV3Repository = _azureCosmosDBV3Repository;
@@ -43,7 +44,7 @@ namespace TEAMModelOS.Controllers
             //新增
             if (string.IsNullOrEmpty(request.@params.survey.id))
             {
-                request.@params.survey.id = Guid.NewGuid().ToString();
+                request.@params.survey.id = SnowflakeId.NextId()+"";
                 request.@params.survey.status = 100;
             }
             if (request.@params.survey.publishModel.Equals("0"))
@@ -54,7 +55,7 @@ namespace TEAMModelOS.Controllers
             else if (request.@params.survey.publishModel.Equals("1"))
             {
 
-                string msgId = Guid.NewGuid().ToString();
+                string msgId = SnowflakeId.NextId() + "";
                 long SequenceNumber = await _serviceBus.SendMessage<Survey>(Constants.TopicName, request.@params.survey.id, request.@params.survey.code, request.@params.survey.startTime, 200, msgId);
                 request.@params.survey.sequenceNumber = SequenceNumber;
 
@@ -65,7 +66,7 @@ namespace TEAMModelOS.Controllers
             Survey homeWork = await azureCosmosDBV3Repository.SaveOrUpdate<Survey>(request.@params.survey);
 
             //设定结束时间
-            string msgEndId = Guid.NewGuid().ToString();
+            string msgEndId = SnowflakeId.NextId() + "";
             await _serviceBus.SendMessage<Survey>(Constants.TopicName, request.@params.survey.id, request.@params.survey.code, request.@params.survey.endTime, 300, msgEndId);
 
             //清除作业

+ 6 - 5
TEAMModelOS/Controllers/Task/VoteController.cs

@@ -25,12 +25,13 @@ namespace TEAMModelOS.Controllers.Learn
     [ApiController]
     public class VoteController : BaseController
     {
-
+        private SnowflakeId SnowflakeId;
         private readonly AzureCosmosFactory _cosmos;
        
         private readonly AzureServiceBusFactory _serviceBus;
-        public VoteController(AzureCosmosFactory cosmos, AzureServiceBusFactory serviceBus)
+        public VoteController(AzureCosmosFactory cosmos, AzureServiceBusFactory serviceBus, SnowflakeId _SnowflakeId)
         {
+            SnowflakeId = _SnowflakeId;
             _cosmos = cosmos;
             _serviceBus = serviceBus;
         }
@@ -48,7 +49,7 @@ namespace TEAMModelOS.Controllers.Learn
             //新增
             if (string.IsNullOrEmpty(request.@params.vote.id))
             {
-                request.@params.vote.id = Guid.NewGuid().ToString();
+                request.@params.vote.id = SnowflakeId.NextId()+"";
                 request.@params.vote.status = 100;
             }
             if (request.@params.vote.publishModel.Equals("0"))
@@ -58,7 +59,7 @@ namespace TEAMModelOS.Controllers.Learn
                 
             } else if (request.@params.vote.publishModel.Equals("1")) {
 
-                string msgId = Guid.NewGuid().ToString();
+                string msgId = SnowflakeId.NextId() + "";
                 long SequenceNumber = await _serviceBus.SendMessage<Vote>(Constants.TopicName, request.@params.vote.id, request.@params.vote.code, request.@params.vote.startTime, 200, msgId);
                 request.@params.vote.sequenceNumber = SequenceNumber;
             }
@@ -70,7 +71,7 @@ namespace TEAMModelOS.Controllers.Learn
             //设定结束时间
             //_timerWorkService.TimerWork<Vote>(request.@params.vote.endTime, 300, new Dictionary<string, object> { { "id", request.@params.vote.id } });
             //设定结束时间
-            string msgEndId = Guid.NewGuid().ToString();
+            string msgEndId = SnowflakeId.NextId() + "";
             await _serviceBus.SendMessage<Vote>(Constants.TopicName, request.@params.vote.id, request.@params.vote.code, request.@params.vote.endTime, 300, msgEndId);
             //清除作业
             if (!request.@params.reset)

+ 4 - 4
TEAMModelOS/JsonFile/Core/LangConfig.json

@@ -1,7 +1,7 @@
 [
   {
     "Lang": "zh-CN",
-    "Name": "中国大陆",
+    "Name": "大陆",
     "Alias": "简体中文",
     "Item": {
       "Type": {
@@ -64,17 +64,17 @@
   },
   {
     "Lang": "zh-HK",
-    "Name": "中國香港",
+    "Name": "香港",
     "Alias": "繁體中文"
   },
   {
     "Lang": "zh-MO",
-    "Name": "中國澳門",
+    "Name": "澳門",
     "Alias": "繁體中文"
   },
   {
     "Lang": "zh-TW",
-    "Name": "中國台灣",
+    "Name": "台灣",
     "Alias": "繁體中文"
   }
 ]

+ 2 - 2
TEAMModelOS/Service/Syllabus/KnowledgeService.cs

@@ -26,13 +26,13 @@ namespace TEAMModelOS.Service.Services.Implement
             return idPks;
         }
 
-        public static async Task<List<Knowledge>> SaveOrUpdateKnowledge(this AzureCosmosFactory _cosmos, List<Knowledge> request)
+        public static async Task<List<Knowledge>> SaveOrUpdateKnowledge(this AzureCosmosFactory _cosmos, SnowflakeId snowflakeId, List<Knowledge> request)
         {
             foreach (Knowledge item in request)
             {
                 if (item.id == null)
                 {
-                    item.id = Guid.NewGuid().ToString();
+                    item.id = snowflakeId.NextId()+"";
                 }
                 if (item.type == 1 && item.points.Count > 0)
                 {

+ 16 - 2
TEAMModelOS/Startup.cs

@@ -32,6 +32,7 @@ namespace TEAMModelOS
 {
     public class Startup
     {
+        readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
         //private IServiceCollection _services;
         public Startup(IConfiguration configuration, IWebHostEnvironment env)
         {
@@ -76,7 +77,20 @@ namespace TEAMModelOS
                         await Task.FromResult(0);
                     };
                 });
-            
+            //設定跨域請求
+            services.AddCors(options =>
+            {
+                options.AddPolicy(MyAllowSpecificOrigins,
+                builder =>
+                {
+                    builder.WithOrigins("http://teammodelos-test.chinacloudsites.cn",
+                                        "https://www.teammodel.cn", "https://localhost:5001",
+                                        "http://localhost:5000", "http://localhost:64524",
+                                        "https://localhost:44341")
+                    .AllowAnyHeader()
+                    .AllowAnyMethod();
+                });
+            });
             services.AddAzureStorage(Configuration.GetValue<string>("Azure:Starage:ConnectionString"));            
             services.AddAzureRedis( Configuration.GetValue<string>("Azure:Redis:ConnectionString"));            
             services.AddAzureCosmos(Configuration.GetValue<string>("Azure:Cosmos:ConnectionString"));
@@ -120,7 +134,7 @@ namespace TEAMModelOS
             //app.UseSpaStaticFiles(); //使用中間件不開
             app.UseRouting();
 
-            //app.UseCors(MyAllowSpecificOrigins); //使用跨域設定
+            app.UseCors(MyAllowSpecificOrigins); //使用跨域設定
             //app.UseHttpsRedirection(); //開發中暫時關掉
             //如果应用使用身份验证/授权功能(如 AuthorizePage 或 [Authorize]),请将对 UseAuthentication 和 UseAuthorization的
             //调用放在之后、UseRouting 和 UseCors,但在 UseEndpoints之前