Browse Source

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

zhouj1203@hotmail.com 4 years ago
parent
commit
e783efd3cd
28 changed files with 1021 additions and 227 deletions
  1. 7 7
      TEAMModelFunction/ActivityHttpTrigger.cs
  2. 2 2
      TEAMModelFunction/CourseServiceBus.cs
  3. 2 2
      TEAMModelFunction/TriggerExam.cs
  4. 69 58
      TEAMModelFunction/TriggerStuActivity.cs
  5. 2 2
      TEAMModelFunction/TriggerSurvey.cs
  6. 2 2
      TEAMModelFunction/TriggerVote.cs
  7. 391 0
      TEAMModelOS/ClientApp/src/assets/iconfont/demo_index.html
  8. 74 6
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.css
  9. BIN
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.eot
  10. 1 1
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.js
  11. 119 0
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.json
  12. 52 1
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.svg
  13. BIN
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.ttf
  14. BIN
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.woff
  15. BIN
      TEAMModelOS/ClientApp/src/assets/iconfont/iconfont.woff2
  16. 3 3
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReport.vue
  17. 5 3
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReportCharts/StudentScore.vue
  18. 6 6
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventList.vue
  19. 6 7
      TEAMModelOS/ClientApp/src/components/student-web/HomeView/MissionListCard.vue
  20. 10 0
      TEAMModelOS/ClientApp/src/router/routes.js
  21. 4 3
      TEAMModelOS/ClientApp/src/view/learnactivity/MgtPrivEva.vue
  22. 0 1
      TEAMModelOS/ClientApp/src/view/learnactivity/MgtSchoolEva.vue
  23. 2 8
      TEAMModelOS/ClientApp/src/view/learnactivity/PrivScoring.vue
  24. 5 5
      TEAMModelOS/ClientApp/src/view/learnactivity/Scoring.less
  25. 162 82
      TEAMModelOS/ClientApp/src/view/learnactivity/Scoring.vue
  26. 1 1
      TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkSetting.vue
  27. 88 22
      TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkView.vue
  28. 8 5
      TEAMModelOS/Controllers/Client/HiTeachController.cs

+ 7 - 7
TEAMModelFunction/ActivityHttpTrigger.cs

@@ -69,7 +69,7 @@ namespace TEAMModelFunction
                     {
                         if (!string.IsNullOrEmpty(sc.stulist))
                         {
-                            (List<string> tmdids, List<Students> studentss) = await TriggerStuActivity.GetStuList(client, new List<string>() { sc.stulist }, course.school);
+                            (List<string> tmdids, List<Students> studentss) = await TriggerStuActivity.GetStuList(client, _dingDing, new List<string>() { sc.stulist }, course.school);
                             foreach (var addStu in studentss)
                             {
                                 var stuCourse = new StuCourse
@@ -147,7 +147,7 @@ namespace TEAMModelFunction
                     {
                         sub.Add(subject.id);
                     }
-                    (List<string> tmdids, List<Students> studentss) = await TriggerStuActivity.GetStuList(client, info.classes, info.school);
+                    (List<string> tmdids, List<Students> studentss) = await TriggerStuActivity.GetStuList(client, _dingDing, info.classes, info.school);
                     List<StuActivity> stuActivities = new List<StuActivity>();
                     List<StuActivity> tmdActivities = new List<StuActivity>();
                     if (tmdids.IsNotEmpty())
@@ -195,7 +195,7 @@ namespace TEAMModelFunction
                             });
                         });
                     }
-                    await TriggerStuActivity.SaveStuActivity(client, stuActivities, tmdActivities);
+                    await TriggerStuActivity.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities);
                 }
             }
             return new OkObjectResult(new { });
@@ -241,7 +241,7 @@ namespace TEAMModelFunction
                         continue;
                     }
                    
-                    (List<string> tmdids, List<Students> studentss) = await TriggerStuActivity.GetStuList(client, info.classes, info.school);
+                    (List<string> tmdids, List<Students> studentss) = await TriggerStuActivity.GetStuList(client, _dingDing, info.classes, info.school);
                     List<StuActivity> stuActivities = new List<StuActivity>();
                     List<StuActivity> tmdActivities = new List<StuActivity>();
                     if (tmdids.IsNotEmpty())
@@ -289,7 +289,7 @@ namespace TEAMModelFunction
                             });
                         });
                     }
-                    await TriggerStuActivity.SaveStuActivity(client, stuActivities, tmdActivities);
+                    await TriggerStuActivity.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities);
                 }
             }
             return new OkObjectResult(new { });
@@ -333,7 +333,7 @@ namespace TEAMModelFunction
                     {
                         continue;
                     }
-                    (List<string> tmdids, List<Students> studentss) = await TriggerStuActivity.GetStuList(client, info.classes, info.school);
+                    (List<string> tmdids, List<Students> studentss) = await TriggerStuActivity.GetStuList(client, _dingDing, info.classes, info.school);
                     List<StuActivity> stuActivities = new List<StuActivity>();
                     List<StuActivity> tmdActivities = new List<StuActivity>();
                     if (tmdids.IsNotEmpty())
@@ -378,7 +378,7 @@ namespace TEAMModelFunction
                             });
                         });
                     }
-                    await TriggerStuActivity.SaveStuActivity(client, stuActivities, tmdActivities);
+                    await TriggerStuActivity.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities);
                 }
             }
             return new OkObjectResult(new { });

+ 2 - 2
TEAMModelFunction/CourseServiceBus.cs

@@ -42,9 +42,9 @@ namespace TEAMModelFunction
                     return;
                 }
                 //根据新增名单获取 新增的学生id 及timdid
-                (List<string> addTmdids, List<Students> addStudents) = await TriggerStuActivity.GetStuList(client, courseChange.addList, courseChange.school);
+                (List<string> addTmdids, List<Students> addStudents) = await TriggerStuActivity.GetStuList(client, _dingDing, courseChange.addList, courseChange.school);
                 //根据删除名单获取 新增的学生id 及timdid
-                (List<string> delTmdids, List<Students> delStudents) = await TriggerStuActivity.GetStuList(client, courseChange.delList, courseChange.school);
+                (List<string> delTmdids, List<Students> delStudents) = await TriggerStuActivity.GetStuList(client, _dingDing, courseChange.delList, courseChange.school);
                 foreach (var addStu in addStudents)
                 {
                     var course = new StuCourse

+ 2 - 2
TEAMModelFunction/TriggerExam.cs

@@ -90,7 +90,7 @@ namespace TEAMModelFunction
                     }
                     break;
                 case "going":
-                    (List<string> tmdids, List<Students> studentss) = await TriggerStuActivity.GetStuList(client, info.classes, info.school);
+                    (List<string> tmdids, List<Students> studentss) = await TriggerStuActivity.GetStuList(client, _dingDing, info.classes, info.school);
                     List<StuActivity> stuActivities = new List<StuActivity>();
                     List<StuActivity> tmdActivities = new List<StuActivity>();
                     if (tmdids.IsNotEmpty())
@@ -140,7 +140,7 @@ namespace TEAMModelFunction
                             });
                         });
                     }
-                    await TriggerStuActivity.SaveStuActivity(client, stuActivities, tmdActivities);
+                    await TriggerStuActivity.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities);
                     //向学生或醍摩豆账号发起通知
                     #region
                     Notice notice = new Notice()

+ 69 - 58
TEAMModelFunction/TriggerStuActivity.cs

@@ -18,78 +18,89 @@ namespace TEAMModelFunction
     public class TriggerStuActivity
     {
 
-        public static async Task<string> SaveStuActivity(CosmosClient client,List<StuActivity> stuActivities,List<StuActivity> tmdActivities) {
-            if (stuActivities.IsNotEmpty())
-            {
-                foreach (var x in stuActivities)
+        public static async Task<string> SaveStuActivity(CosmosClient client, DingDing _dingDing, List<StuActivity> stuActivities,List<StuActivity> tmdActivities) {
+            try {
+                if (stuActivities.IsNotEmpty())
                 {
-                    await client.GetContainer("TEAMModelOS", "Student").UpsertItemAsync(x, new PartitionKey(x.code));
+                    foreach (var x in stuActivities)
+                    {
+                        await client.GetContainer("TEAMModelOS", "Student").UpsertItemAsync(x, new PartitionKey(x.code));
+                    }
                 }
-            }
-            if (tmdActivities.IsNotEmpty())
-            {
-                foreach (var x in tmdActivities)
+                if (tmdActivities.IsNotEmpty())
                 {
-                    await client.GetContainer("TEAMModelOS", "Teacher").UpsertItemAsync(x, new PartitionKey(x.code));
+                    foreach (var x in tmdActivities)
+                    {
+                        await client.GetContainer("TEAMModelOS", "Teacher").UpsertItemAsync(x, new PartitionKey(x.code));
+                    }
                 }
+            } catch (Exception ex) {
+                await _dingDing.SendBotMsg($"OS,TriggerStuActivity-SaveStuActivity\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
             }
             return ""; 
         }
-         
-        public  static async Task<(List<string> tmdids,List<Students> studentss)> GetStuList(  CosmosClient client, List<string> classes,string  school) {
-            List<string> tmdids = new List<string>();
-            List<Students> studentss = new List<Students>();
-            if (!classes.IsNotEmpty()) { return (tmdids, studentss); }
-            List<string> sqlList = new List<string>();
-            classes.ForEach(x => { sqlList.Add($" '{x}' "); });
-            string sql = string.Join(" , ", sqlList);
-            List<StuList> schList = new List<StuList>();
-            List<Student> students = new List<Student>();
-            if (!string.IsNullOrEmpty(school)) {
-                await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<StuList>(queryText: $"select value(c) from c where c.id in ({sql})",
-                requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"StuList-{school}") }))
-                {
-                    schList.Add(item);
-                }
+
+        public static async Task<(List<string> tmdids, List<Students> studentss)> GetStuList(CosmosClient client, DingDing _dingDing, List<string> classes, string school) {
+            try {
+                List<string> tmdids = new List<string>();
+                List<Students> studentss = new List<Students>();
+                if (!classes.IsNotEmpty()) { return (tmdids, studentss); }
+                List<string> sqlList = new List<string>();
+                classes.ForEach(x => { sqlList.Add($" '{x}' "); });
+                string sql = string.Join(" , ", sqlList);
+                List<StuList> schList = new List<StuList>();
+                List<Student> students = new List<Student>();
+                if (!string.IsNullOrEmpty(school)) {
+                    await foreach (var item in client.GetContainer("TEAMModelOS", "School").GetItemQueryIterator<StuList>(queryText: $"select value(c) from c where c.id in ({sql})",
+                    requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"StuList-{school}") }))
+                    {
+                        schList.Add(item);
+                    }
 
 
-                await foreach (var item in client.GetContainer("TEAMModelOS", "Student").GetItemQueryIterator<Student>(queryText: $"select value(c) from c where c.classId in ({sql})",
-                    requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Base-{school}") }))
+                    await foreach (var item in client.GetContainer("TEAMModelOS", "Student").GetItemQueryIterator<Student>(queryText: $"select value(c) from c where c.classId in ({sql})",
+                        requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"Base-{school}") }))
+                    {
+                        students.Add(item);
+                    }
+                }
+                List<StuList> tchLists = new List<StuList>();
+                await foreach (var item in client.GetContainer("TEAMModelOS", "Teacher").GetItemQueryIterator<StuList>(queryText: $"select value(c) from c where c.id in ({sql})",
+                    requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"StuList") }))
                 {
-                    students.Add(item);
+                    tchLists.Add(item);
                 }
+
+                schList.ForEach(x => {
+                    if (x.students.IsNotEmpty())
+                    {
+                        studentss.AddRange(x.students);
+                    }
+                    if (x.tmids.IsNotEmpty())
+                    {
+                        tmdids.AddRange(x.tmids);
+                    }
+                });
+                tchLists.ForEach(x =>
+                {
+                    if (x.students.IsNotEmpty()) {
+                        studentss.AddRange(x.students);
+                    }
+                    if (x.tmids.IsNotEmpty())
+                    {
+                        tmdids.AddRange(x.tmids);
+                    }
+                });
+                students.ForEach(x => {
+                    studentss.Add(new Students { id = x.id, code = x.code, schoolId = x.schoolId });
+                });
+                return (tmdids, studentss);
             }
-            List<StuList> tchLists = new List<StuList>();
-            await foreach (var item in client.GetContainer("TEAMModelOS", "Teacher").GetItemQueryIterator<StuList>(queryText: $"select value(c) from c where c.id in ({sql})",
-                requestOptions: new QueryRequestOptions() { PartitionKey = new Azure.Cosmos.PartitionKey($"StuList") }))
+            catch (Exception ex)
             {
-                tchLists.Add(item);
+                await _dingDing.SendBotMsg($"OS,TriggerStuActivity-SaveStuActivity\n{ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組);
             }
-          
-            schList.ForEach(x => { 
-                if (x.students.IsNotEmpty()) 
-                { 
-                    studentss.AddRange(x.students);
-                }
-                if (x.tmids.IsNotEmpty())
-                {
-                    tmdids.AddRange(x.tmids);
-                }
-            });
-            tchLists.ForEach(x => 
-            {
-                if (x.students.IsNotEmpty()) { 
-                    studentss.AddRange(x.students);
-                }
-                if (x.tmids.IsNotEmpty())
-                {
-                    tmdids.AddRange(x.tmids);
-                }
-            });
-            students.ForEach(x => {
-                studentss.Add(new Students { id = x.id, code = x.code,schoolId=x.schoolId });
-            });
-            return (tmdids,studentss);
+            return (null, null);
         }
     }
 }

+ 2 - 2
TEAMModelFunction/TriggerSurvey.cs

@@ -70,7 +70,7 @@ namespace TEAMModelFunction
                         }
                         break;
                     case "going":
-                        (List<string> tmdids,List<Students> students) =   await TriggerStuActivity. GetStuList(client, survey.classes, survey.school);
+                        (List<string> tmdids,List<Students> students) =   await TriggerStuActivity. GetStuList(client, _dingDing, survey.classes, survey.school);
 #if DEBUG
                         await _dingDing.SendBotMsg($"问卷调查{tdata.id}写入学生表作为活动列表!", GroupNames.成都开发測試群組);
 #endif
@@ -118,7 +118,7 @@ namespace TEAMModelFunction
                                 });
                             });
                         }
-                        await TriggerStuActivity.SaveStuActivity(client, stuActivities, tmdActivities);
+                        await TriggerStuActivity.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities);
                         //向学生或醍摩豆账号发起通知
                         #region
                         Notice notice = new Notice()

+ 2 - 2
TEAMModelFunction/TriggerVote.cs

@@ -73,7 +73,7 @@ namespace TEAMModelFunction
                         break;
                     case "going":
                         
-                        (List<string> tmdids, List<Students> students) = await TriggerStuActivity.GetStuList(client, vote.classes, vote.school);
+                        (List<string> tmdids, List<Students> students) = await TriggerStuActivity.GetStuList(client, _dingDing, vote.classes, vote.school);
                         List<string> tmds = vote.tmdids.IsNotEmpty() ? vote.tmdids : new List<string>() ;
                         if (tmdids.IsNotEmpty()) {
                             tmds.AddRange(tmdids);
@@ -124,7 +124,7 @@ namespace TEAMModelFunction
                                 });
                             });
                         }
-                        await TriggerStuActivity.SaveStuActivity(client, stuActivities, tmdActivities);
+                        await TriggerStuActivity.SaveStuActivity(client, _dingDing, stuActivities, tmdActivities);
                         //向学生或醍摩豆账号发起通知
                         #region
                         Notice notice = new Notice()

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

@@ -31,6 +31,108 @@
       <div class="content unicode" style="display: block;">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+              <span class="icon iconfont">&#xe6f1;</span>
+                <div class="name">退出</div>
+                <div class="code-name">&amp;#xe6f1;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe6c2;</span>
+                <div class="name">左退出</div>
+                <div class="code-name">&amp;#xe6c2;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe624;</span>
+                <div class="name">重阅客观题</div>
+                <div class="code-name">&amp;#xe624;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe650;</span>
+                <div class="name">刷新</div>
+                <div class="code-name">&amp;#xe650;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe625;</span>
+                <div class="name">放大镜</div>
+                <div class="code-name">&amp;#xe625;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe631;</span>
+                <div class="name">开始批注</div>
+                <div class="code-name">&amp;#xe631;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe688;</span>
+                <div class="name">取消全屏</div>
+                <div class="code-name">&amp;#xe688;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe6c4;</span>
+                <div class="name">箭头</div>
+                <div class="code-name">&amp;#xe6c4;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe626;</span>
+                <div class="name">笑脸</div>
+                <div class="code-name">&amp;#xe626;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe790;</span>
+                <div class="name">矩形</div>
+                <div class="code-name">&amp;#xe790;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe627;</span>
+                <div class="name">椭圆</div>
+                <div class="code-name">&amp;#xe627;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe641;</span>
+                <div class="name">定位</div>
+                <div class="code-name">&amp;#xe641;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe727;</span>
+                <div class="name">移动</div>
+                <div class="code-name">&amp;#xe727;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe628;</span>
+                <div class="name">异常流程</div>
+                <div class="code-name">&amp;#xe628;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe620;</span>
+                <div class="name">043操作_缩小</div>
+                <div class="code-name">&amp;#xe620;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xe655;</span>
+                <div class="name">全屏</div>
+                <div class="code-name">&amp;#xe655;</div>
+              </li>
+          
+            <li class="dib">
+              <span class="icon iconfont">&#xeb98;</span>
+                <div class="name">取消全屏_o</div>
+                <div class="code-name">&amp;#xeb98;</div>
+              </li>
+          
             <li class="dib">
               <span class="icon iconfont">&#xe636;</span>
                 <div class="name">多评仲裁</div>
@@ -615,6 +717,159 @@
       <div class="content font-class">
         <ul class="icon_lists dib-box">
           
+          <li class="dib">
+            <span class="icon iconfont icon-quit1"></span>
+            <div class="name">
+              退出
+            </div>
+            <div class="code-name">.icon-quit1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-quit2"></span>
+            <div class="name">
+              左退出
+            </div>
+            <div class="code-name">.icon-quit2
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-review"></span>
+            <div class="name">
+              重阅客观题
+            </div>
+            <div class="code-name">.icon-review
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-fresh"></span>
+            <div class="name">
+              刷新
+            </div>
+            <div class="code-name">.icon-fresh
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-larger"></span>
+            <div class="name">
+              放大镜
+            </div>
+            <div class="code-name">.icon-larger
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-mark"></span>
+            <div class="name">
+              开始批注
+            </div>
+            <div class="code-name">.icon-mark
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-cancel-full-screen"></span>
+            <div class="name">
+              取消全屏
+            </div>
+            <div class="code-name">.icon-cancel-full-screen
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-arrow-mark"></span>
+            <div class="name">
+              箭头
+            </div>
+            <div class="code-name">.icon-arrow-mark
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-smile"></span>
+            <div class="name">
+              笑脸
+            </div>
+            <div class="code-name">.icon-smile
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-rect"></span>
+            <div class="name">
+              矩形
+            </div>
+            <div class="code-name">.icon-rect
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-oval"></span>
+            <div class="name">
+              椭圆
+            </div>
+            <div class="code-name">.icon-oval
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-position"></span>
+            <div class="name">
+              定位
+            </div>
+            <div class="code-name">.icon-position
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-move1"></span>
+            <div class="name">
+              移动
+            </div>
+            <div class="code-name">.icon-move1
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-exception"></span>
+            <div class="name">
+              异常流程
+            </div>
+            <div class="code-name">.icon-exception
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-smaller"></span>
+            <div class="name">
+              043操作_缩小
+            </div>
+            <div class="code-name">.icon-smaller
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-full-screen"></span>
+            <div class="name">
+              全屏
+            </div>
+            <div class="code-name">.icon-full-screen
+            </div>
+          </li>
+          
+          <li class="dib">
+            <span class="icon iconfont icon-cancel-full"></span>
+            <div class="name">
+              取消全屏_o
+            </div>
+            <div class="code-name">.icon-cancel-full
+            </div>
+          </li>
+          
           <li class="dib">
             <span class="icon iconfont icon-arb"></span>
             <div class="name">
@@ -1445,6 +1700,142 @@
       <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-quit1"></use>
+                </svg>
+                <div class="name">退出</div>
+                <div class="code-name">#icon-quit1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-quit2"></use>
+                </svg>
+                <div class="name">左退出</div>
+                <div class="code-name">#icon-quit2</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-review"></use>
+                </svg>
+                <div class="name">重阅客观题</div>
+                <div class="code-name">#icon-review</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-fresh"></use>
+                </svg>
+                <div class="name">刷新</div>
+                <div class="code-name">#icon-fresh</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-larger"></use>
+                </svg>
+                <div class="name">放大镜</div>
+                <div class="code-name">#icon-larger</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-mark"></use>
+                </svg>
+                <div class="name">开始批注</div>
+                <div class="code-name">#icon-mark</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-cancel-full-screen"></use>
+                </svg>
+                <div class="name">取消全屏</div>
+                <div class="code-name">#icon-cancel-full-screen</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-arrow-mark"></use>
+                </svg>
+                <div class="name">箭头</div>
+                <div class="code-name">#icon-arrow-mark</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-smile"></use>
+                </svg>
+                <div class="name">笑脸</div>
+                <div class="code-name">#icon-smile</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-rect"></use>
+                </svg>
+                <div class="name">矩形</div>
+                <div class="code-name">#icon-rect</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-oval"></use>
+                </svg>
+                <div class="name">椭圆</div>
+                <div class="code-name">#icon-oval</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-position"></use>
+                </svg>
+                <div class="name">定位</div>
+                <div class="code-name">#icon-position</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-move1"></use>
+                </svg>
+                <div class="name">移动</div>
+                <div class="code-name">#icon-move1</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-exception"></use>
+                </svg>
+                <div class="name">异常流程</div>
+                <div class="code-name">#icon-exception</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-smaller"></use>
+                </svg>
+                <div class="name">043操作_缩小</div>
+                <div class="code-name">#icon-smaller</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-full-screen"></use>
+                </svg>
+                <div class="name">全屏</div>
+                <div class="code-name">#icon-full-screen</div>
+            </li>
+          
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#icon-cancel-full"></use>
+                </svg>
+                <div class="name">取消全屏_o</div>
+                <div class="code-name">#icon-cancel-full</div>
+            </li>
+          
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#icon-arb"></use>

File diff suppressed because it is too large
+ 74 - 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


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

@@ -5,6 +5,125 @@
   "css_prefix_text": "icon-",
   "description": "",
   "glyphs": [
+    {
+      "icon_id": "20402185",
+      "name": "退出",
+      "font_class": "quit1",
+      "unicode": "e6f1",
+      "unicode_decimal": 59121
+    },
+    {
+      "icon_id": "20797205",
+      "name": "左退出",
+      "font_class": "quit2",
+      "unicode": "e6c2",
+      "unicode_decimal": 59074
+    },
+    {
+      "icon_id": "6657857",
+      "name": "重阅客观题",
+      "font_class": "review",
+      "unicode": "e624",
+      "unicode_decimal": 58916
+    },
+    {
+      "icon_id": "7821176",
+      "name": "刷新",
+      "font_class": "fresh",
+      "unicode": "e650",
+      "unicode_decimal": 58960
+    },
+    {
+      "icon_id": "11746730",
+      "name": "放大镜",
+      "font_class": "larger",
+      "unicode": "e625",
+      "unicode_decimal": 58917
+    },
+    {
+      "icon_id": "17772905",
+      "name": "开始批注",
+      "font_class": "mark",
+      "unicode": "e631",
+      "unicode_decimal": 58929
+    },
+    {
+      "icon_id": "19594588",
+      "name": "取消全屏",
+      "font_class": "cancel-full-screen",
+      "unicode": "e688",
+      "unicode_decimal": 59016
+    },
+    {
+      "icon_id": "609204",
+      "name": "箭头",
+      "font_class": "arrow-mark",
+      "unicode": "e6c4",
+      "unicode_decimal": 59076
+    },
+    {
+      "icon_id": "2121741",
+      "name": "笑脸",
+      "font_class": "smile",
+      "unicode": "e626",
+      "unicode_decimal": 58918
+    },
+    {
+      "icon_id": "6266248",
+      "name": "矩形",
+      "font_class": "rect",
+      "unicode": "e790",
+      "unicode_decimal": 59280
+    },
+    {
+      "icon_id": "11468160",
+      "name": "椭圆",
+      "font_class": "oval",
+      "unicode": "e627",
+      "unicode_decimal": 58919
+    },
+    {
+      "icon_id": "13453213",
+      "name": "定位",
+      "font_class": "position",
+      "unicode": "e641",
+      "unicode_decimal": 58945
+    },
+    {
+      "icon_id": "7015472",
+      "name": "移动",
+      "font_class": "move1",
+      "unicode": "e727",
+      "unicode_decimal": 59175
+    },
+    {
+      "icon_id": "2945812",
+      "name": "异常流程",
+      "font_class": "exception",
+      "unicode": "e628",
+      "unicode_decimal": 58920
+    },
+    {
+      "icon_id": "1308035",
+      "name": "043操作_缩小",
+      "font_class": "smaller",
+      "unicode": "e620",
+      "unicode_decimal": 58912
+    },
+    {
+      "icon_id": "2678622",
+      "name": "全屏",
+      "font_class": "full-screen",
+      "unicode": "e655",
+      "unicode_decimal": 58965
+    },
+    {
+      "icon_id": "5387942",
+      "name": "取消全屏_o",
+      "font_class": "cancel-full",
+      "unicode": "eb98",
+      "unicode_decimal": 60312
+    },
     {
       "icon_id": "7361888",
       "name": "多评仲裁",

File diff suppressed because it is too large
+ 52 - 1
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


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

@@ -441,13 +441,13 @@
             },
             //处理学生作答数据blob地址
             formUrl(data) { 
-                console.log(data)
-                console.log(this.$store.getters.getItemTitle)
                 let a = ""
                 if (data.blob.indexOf('https://teammodelstorage') > -1) {
                     a = data.blob
                 } else {
-                    let url = data.scope == 'school' ? JSON.parse(decodeURIComponent(localStorage.student_profile, "utf-8")).blob_uri : JSON.parse(decodeURIComponent(localStorage.user_profile, "utf-8")).blob_uri
+                    let blobUrl = JSON.parse(decodeURIComponent(localStorage.student_profile, "utf-8")).blob_uri
+                    let studentBlob = blobUrl.split('/')
+                    let url = data.scope == 'school' ? blobUrl : "https://" + studentBlob[studentBlob.length - 2] + '/' + this.$store.getters.getItemTitle.creatorId
                     a = `${url}/exam/${data.blob}`
                 }
                 return a 

+ 5 - 3
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReportCharts/StudentScore.vue

@@ -288,14 +288,16 @@
                 }
             },
             formUrl(data) {  //处理学生作答数据blob地址
-                let container = data.code
                 let a = ""
                 if (data.blob.indexOf('https://teammodelstorage') > -1) {
                     a = data.blob
                 } else {
-                    a = `${this.$GLOBAL.BLOB_URL}/${container}/exam/${data.blob}`
+                    let blobUrl = JSON.parse(decodeURIComponent(localStorage.student_profile, "utf-8")).blob_uri
+                    let studentBlob = blobUrl.split('/')
+                    let url = data.scope == 'school' ? blobUrl : "https://" + studentBlob[studentBlob.length - 2] + '/' + this.$store.getters.getItemTitle.creatorId
+                    a = `${url}/exam/${data.blob}`
                 }
-                return a
+                return a 
             },
             async getStudentData(data,score,ans) {
                 let paper = []

+ 6 - 6
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventList.vue

@@ -67,12 +67,12 @@
                         <li class="list-item-icon">
                             <svg-icon v-if="item.eventType == 'HomeWork'" icon-class="doc" />
                             <svg-icon v-if="item.eventType == 'Preview'"  icon-class="selflearninginTime" />
-                            <svg-icon v-if="item.eventType == 'Exam'||item.eventType == 'exam'" icon-class="multiTest" />
-                            <svg-icon v-if="item.eventType == 'Vote'||item.eventType == 'vote'" icon-class="vote" />
-                            <svg-icon v-if="item.eventType == 'Survey'||item.eventType == 'survey'" icon-class="quesnaire" />
+                            <svg-icon v-if="item.eventType == 'Exam'" icon-class="multiTest" />
+                            <svg-icon v-if="item.eventType == 'Vote'" icon-class="vote" />
+                            <svg-icon v-if="item.eventType == 'Survey'" icon-class="quesnaire" />
                         </li>
                         <li class="list-item-info"
-                            v-if="item.eventType == 'Exam'||item.eventType == 'exam'">
+                            v-if="item.eventType == 'Exam'">
                             <p class="list-item-title">
                                 <span class="list-item-typeMark">{{item.owner == 'school' ? $t('studentWeb.public.schoolExam'):$t('studentWeb.public.privateExam')}}</span>
                                 <span>{{ item.name }}</span>
@@ -82,7 +82,7 @@
                             </p>
                         </li>             
                         <li class="list-item-info"
-                            v-if="item.eventType == 'Vote'||item.eventType == 'vote'">
+                            v-if="item.eventType == 'Vote'">
                             <p class="list-item-title">
                                 <span class="list-item-typeMark">{{item.owner == 'school' ? $t('studentWeb.public.schoolVote'):$t('studentWeb.public.privateVote')}}</span>
                                 <span>{{ item.name }}</span>
@@ -92,7 +92,7 @@
                             </p>
                         </li>       
                         <li class="list-item-info"
-                            v-if="item.eventType == 'Survey'||item.eventType == 'survey'">
+                            v-if="item.eventType == 'Survey'">
                             <p class="list-item-title">
                                 <span class="list-item-typeMark">{{item.owner == 'school' ? $t('studentWeb.public.schoolSurvey'):$t('studentWeb.public.privateSurvey')}}</span>
                                 <span>{{ item.name }}</span>

+ 6 - 7
TEAMModelOS/ClientApp/src/components/student-web/HomeView/MissionListCard.vue

@@ -19,17 +19,17 @@
                             <svg-icon v-if="item.eventType == 'Homework'" icon-class="doc" />
                             <svg-icon v-if="item.eventType == 'Learn'"
                                       icon-class="selflearninginTime" />
-                            <svg-icon v-if="item.eventType == 'Exam'||item.eventType == 'exam' "
+                            <svg-icon v-if="item.eventType == 'Exam'"
                                       icon-class="test"
                                       class="reset-testIcon" />
-                            <svg-icon v-if="item.eventType == 'Vote'||item.eventType == 'vote'" icon-class="vote" />
-                            <svg-icon v-if="item.eventType == 'Survey'||item.eventType == 'survey'" icon-class="quesnaire" />
+                            <svg-icon v-if="item.eventType == 'Vote'" icon-class="vote" />
+                            <svg-icon v-if="item.eventType == 'Survey'" icon-class="quesnaire" />
                         </li>
                         <li class="list-item-info">
                             <p class="list-item-title">
-                                <span v-show="item.eventType == 'Exam'||item.eventType == 'exam'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolExam'):$t('studentWeb.public.privateExam')}}</span>
-                                <span v-show="item.eventType == 'Vote'||item.eventType == 'vote'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolVote'):$t('studentWeb.public.privateVote')}}</span>
-                                <span v-show="item.eventType == 'Survey'||item.eventType == 'survey'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolSurvey'):$t('studentWeb.public.privateSurvey')}}</span>
+                                <span v-show="item.eventType == 'Exam'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolExam'):$t('studentWeb.public.privateExam')}}</span>
+                                <span v-show="item.eventType == 'Vote'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolVote'):$t('studentWeb.public.privateVote')}}</span>
+                                <span v-show="item.eventType == 'Survey'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolSurvey'):$t('studentWeb.public.privateSurvey')}}</span>
                                 <span>{{ item.name }}</span>
                                 <div style="float:right;margin-top:-20px">
                                     <div class="list-item-unDone" v-show="timeStatus(item) == 'going'">
@@ -149,7 +149,6 @@
                 return Random.integer(70, 96);
             },
             timeStatus(data) {
-                console.log(data)
                 let date = (new Date()).getTime() //当前时间
                 if (date >= data.endTime) {
                     return 'finish'

+ 10 - 0
TEAMModelOS/ClientApp/src/router/routes.js

@@ -61,6 +61,11 @@ export const routes = [
 		path: '/joinclass',
 		component: resolve => require(['@/view/joinclass/JoinClass.vue'], resolve)
 	},
+	{
+		path: '/MarkView',
+		name:'FullMarkView',
+		component: resolve => require(['@/view/learnactivity/markpaper/MarkView.vue'], resolve)
+	},
 	{
 		path: '/schoolList',
 		component: Home,
@@ -202,6 +207,11 @@ export const routes = [
 			}
 			]
 		},
+		{
+			path: 'MarkView',
+			name:'MarkView',
+			component: resolve => require(['@/view/learnactivity/markpaper/MarkView.vue'], resolve)
+		},
 		//校园基础数据管理
 		{
 			name: 'system',

+ 4 - 3
TEAMModelOS/ClientApp/src/view/learnactivity/MgtPrivEva.vue

@@ -81,7 +81,7 @@
                 </div>
                 <!-- 试卷评测打分 -->
                 <div :class="curBarIndex == 0 ? 'animated fadeIn evaluation-base-info':'evaluation-base-info animated fadeOutRight'" v-show="curBarIndex == 0">
-                    <PrivScoring :examInfo="examDetaiInfo" ref="score-box"></PrivScoring>
+                    <Scoring :examInfo="examDetaiInfo" ref="score-box"></Scoring>
                 </div>
             </div>
         </Split>
@@ -89,11 +89,12 @@
 </template>
 <script>
 import TestPaper from '@/view/evaluation/index/TestPaper.vue'
-import PrivScoring from './PrivScoring.vue'
+// import PrivScoring from './PrivScoring.vue'
+import Scoring from './Scoring.vue'
 export default {
     components: {
         TestPaper,
-        PrivScoring
+        Scoring
     },
     inject: ['reload'],
     data() {

+ 0 - 1
TEAMModelOS/ClientApp/src/view/learnactivity/MgtSchoolEva.vue

@@ -351,7 +351,6 @@ export default {
 
         //查询评测列表
         findEvaluation() {
-            console.log('123456', this.$access.hasRole('admin'))
             let requestData = {
                 code: this.scope == 'school' ? this.$store.state.userInfo.schoolCode : this.$store.state.userInfo.TEAMModelId,
                 classIds: this.$access.hasRole('admin') ? undefined : this.$store.state.userInfo.teachClasses.concat(this.$store.state.userInfo.mgtClasses)

+ 2 - 8
TEAMModelOS/ClientApp/src/view/learnactivity/PrivScoring.vue

@@ -3,14 +3,12 @@
         <vuescroll ref="score-main-warp">
             <SimpleAnalysis :examInfo="examInfo" v-show="!showTest" :overviewInfo="overviewInfo"></SimpleAnalysis>
             <div class="ev-target-box dark-iview-select">
-                <!-- <span class="filter-label" v-if="examInfo.grades && examInfo.grades.length > 0">{{$t('learnActivity.score.gradeLabel')}}</span>
-                <Select filterable v-model="chooseGrade" class="filter-select" size="small" v-if="examInfo.grades && examInfo.grades.length > 0" style="margin-right:5px" transfer>
-                    <Option v-for="(item,index) in examInfo.grades" :value="item.id" :key="index">{{ item.name }}</Option>
-                </Select> -->
+                <!-- 筛选班级 -->
                 <span>{{$t('learnActivity.score.classLabel')}}</span>
                 <Select filterable v-model="chooseClass" class="filter-select" style="width:140px;" @on-change="getClassStudent" size="small" transfer>
                     <Option v-for="(item,index) in classList" :value="item.id" :key="index">{{ item.name }}</Option>
                 </Select>
+                <!-- 筛选学生 -->
                 <span style="margin-left:5px" v-show="showTest">{{$t('learnActivity.score.stuLabel')}}</span>
                 <Select filterable v-model="chooseStudent.id" label-in-value class="filter-select" style="width:140px;" size="small" clearable @on-change="setStuInfo" v-show="showTest" transfer>
                     <Option v-for="(item,index) in students" :value="item.id" :key="index">
@@ -148,8 +146,6 @@ export default {
                 default:
                     break
             }
-            console.log('1', this.studentScore[0].name)
-            console.log(2, this.originData[0].name)
             this.pageChange(1)
         },
         // 页面size变化
@@ -280,7 +276,6 @@ export default {
                 }
                 this.$set(this.paperInfo[this.chooseClass], "students", classStu)
                 this.students = []
-                
                 this.studentScore = []
                 this.tableColumn = [...this.scoreList]
                 let defSocre = []
@@ -549,7 +544,6 @@ export default {
                 //发布对象为校本名单
                 if (this.examInfo.scope == 'school') {
                     this.showTest = false
-                    //classStudents 监听评测数据的时候就获取了
                     let classes = this.classStudents.map(item=>{
                         return {
                             id: item[0].classId,

+ 5 - 5
TEAMModelOS/ClientApp/src/view/learnactivity/Scoring.less

@@ -99,9 +99,9 @@
     z-index: 9999;
     width: 100%;
     height: 100%;
-    position: fixed;
-    bottom: 0;
-    right: 0;
-    top: 0;
-    left: 0;
+    // position: fixed;
+    // bottom: 0;
+    // right: 0;
+    // top: 0;
+    // left: 0;
 }

+ 162 - 82
TEAMModelOS/ClientApp/src/view/learnactivity/Scoring.vue

@@ -3,18 +3,22 @@
         <vuescroll ref="score-main-warp">
             <SimpleAnalysis :examInfo="examInfo" v-show="!showTest" :overviewInfo="overviewInfo"></SimpleAnalysis>
             <div class="ev-target-box dark-iview-select">
-                <span class="filter-label" v-if="examInfo.grades && examInfo.grades.length > 0">{{$t('learnActivity.score.gradeLabel')}}</span>
-                <Select filterable v-model="chooseGrade" class="filter-select" size="small" v-if="examInfo.grades && examInfo.grades.length > 0" style="margin-right:5px" transfer>
+                <!-- 筛选年级 这里也可以根据owner判断是否筛选年级 -->
+                <span class="filter-label" v-if="examInfo.owner == 'school'">{{$t('learnActivity.score.gradeLabel')}}</span>
+                <Select filterable v-model="chooseGrade" class="filter-select" size="small" v-if="examInfo.owner == 'school'" style="margin-right:5px" transfer>
                     <Option v-for="(item,index) in examInfo.grades" :value="item.id" :key="index">{{ item.name }}</Option>
                 </Select>
+                <!-- 筛选班级 -->
                 <span>{{$t('learnActivity.score.classLabel')}}</span>
                 <Select filterable v-model="chooseClass" class="filter-select" style="width:140px;" @on-change="getClassStudent" size="small" transfer>
                     <Option v-for="(item,index) in classList" :value="item.id" :key="index">{{ item.name }}</Option>
                 </Select>
-                <span class="filter-label" v-show="examInfo.code == 'Exam-'+$store.state.userInfo.schoolCode">{{$t('learnActivity.score.subjectLabel')}}</span>
-                <Select filterable v-model="chooseSubject" class="filter-select" size="small" @on-change="getCurPaper" v-show="examInfo.code == 'Exam-'+$store.state.userInfo.schoolCode" transfer>
+                <!-- 筛选学科 应该根据owner判断是否需要筛选学科 -->
+                <span class="filter-label" v-if="examInfo.owner == 'school'">{{$t('learnActivity.score.subjectLabel')}}</span>
+                <Select filterable v-model="chooseSubject" class="filter-select" size="small" @on-change="getCurPaper" v-if="examInfo.owner == 'school'" transfer>
                     <Option v-for="(item,index) in examInfo.subjects" :value="item.id" :key="index">{{ item.name }}</Option>
                 </Select>
+                <!-- 筛选学生 -->
                 <span style="margin-left:5px" v-show="showTest">{{$t('learnActivity.score.stuLabel')}}</span>
                 <Select filterable v-model="chooseStudent.id" label-in-value class="filter-select" style="width:140px;" size="small" clearable @on-change="setStuInfo" v-show="showTest" transfer>
                     <Option v-for="(item,index) in students" :value="item.id" :key="index">
@@ -22,6 +26,7 @@
                         {{ item.name }}
                     </Option>
                 </Select>
+                <!-- 切换打分UI -->
                 <span v-show="showTest" class="common-icon-text" style=" float: right; margin-right: 25px;" @click="toggleScoreStatus" icon="md-apps">
                     <Icon :custom="showTest ? 'iconfont icon-table':'iconfont icon-scoring'" style="margin-right:5px;" />
                     {{showTest ? $t('learnActivity.score.scoreView'):$t('learnActivity.score.scoring')}}
@@ -36,9 +41,6 @@
                             <span style="color:#2db7f5;" v-else>{{row.data[qIndex]}}</span>
                         </div>
                     </template>
-                    <!-- <template slot-scope="{ row,index }" slot="total">
-                        <strong>{{getcount(studentScore[row._index].data)}}</strong>
-                    </template> -->
                     <!-- 1: 未作答 2:未评分 3:已评分 -->
                     <template slot-scope="{ row,index }" slot="status">
                         <span class="stu-status-tag" @click="getStuScore(row,0)" :style="{'background':row.status == 1 ? '#c5c8ce' : row.status == 2 ? '#ff9900' : '#19be6b', 'cursor':row.status == 1 ? 'text':'pointer'}">
@@ -57,14 +59,11 @@
                 </div>
             </div>
         </vuescroll>
-        <!-- <div class="mark-viewer">
-            <MarkView></MarkView>
-        </div> -->
+
     </div>
 </template>
 <script>
 import PaperScore from "./PaperScore.vue";
-import MarkView from "./markpaper/MarkView.vue";
 import SimpleAnalysis from "./SimpleAnalysis.vue";
 export default {
     props: {
@@ -76,7 +75,7 @@ export default {
         }
     },
     components: {
-        PaperScore, SimpleAnalysis, MarkView
+        PaperScore, SimpleAnalysis
     },
     data() {
         return {
@@ -216,6 +215,7 @@ export default {
         //点击学生题号前往评分页面
         getStuScore(data, qIndex) {
             if (data.status == 2 || data.status == 3) {
+                //暂时注释原来的评分页面
                 this.$refs['paperScore'].isComplete = false
                 this.showTest = true
                 this.defaultIndex = qIndex
@@ -226,9 +226,18 @@ export default {
                 if (answerIndex >= 0) {
                     this.chooseStudent["scores"] = this.paperInfo[this.chooseClass].studentAns.studentScores[answerIndex]
                     this.chooseStudent["answers"] = this.paperInfo[this.chooseClass].studentAns.studentAnswers[answerIndex]
-                    this.chooseStudent["mark"] = this.paperInfo[this.chooseClass].studentAns.mark[answerIndex] || '' //批注
+                    this.chooseStudent["mark"] = this.paperInfo[this.chooseClass].studentAns.mark ? this.paperInfo[this.chooseClass].studentAns.mark[answerIndex] || '' : '' //批注
                     this.chooseStudent["status"] = false
                 }
+
+                // 前往新的阅卷页面
+                // this.$router.push({
+                //     name: 'MarkView',
+                //     params: {
+                //         type: 1,
+                //         from: this.$route.name
+                //     }
+                // })
             }
         },
         //获取当前学生信息
@@ -240,7 +249,7 @@ export default {
                 if (answerIndex >= 0) {
                     this.chooseStudent["scores"] = this.paperInfo[this.chooseClass].studentAns.studentScores[answerIndex];
                     this.chooseStudent["answers"] = this.paperInfo[this.chooseClass].studentAns.studentAnswers[answerIndex];
-                    this.chooseStudent["mark"] = this.paperInfo[this.chooseClass].studentAns.mark[answerIndex];
+                    this.chooseStudent["mark"] = this.paperInfo[this.chooseClass].studentAns.mark ? this.paperInfo[this.chooseClass].studentAns.mark[answerIndex] || '' : '' //批注
                     this.chooseStudent["status"] = false;
                 }
             }
@@ -255,64 +264,140 @@ export default {
                 }
             }, 0);
         },
-        // 获取班级名单
-        getClassStudent() {
+        // 获取班级名单 使用PrivScoring.vue方法,兼容班级和自定义名单功能
+        // getClassStudent() {
+        //     this.tableData = []
+        //     if (!this.chooseClass) return
+        //     this.showTest = false
+        //     this.tableLoading = true
+        //     let requestData = {
+        //         ids: [this.chooseClass],
+        //         scope: this.examInfo.scope == 'private' ? 'private' : 'school',
+        //         // school_code: this.examInfo.scope == 'private' ? this.$store.state.userInfo.TEAMModelId : this.$store.state.userInfo.schoolCode,
+        //         school_code: this.$store.state.userInfo.schoolCode
+        //     };
+        //     this.$api.schoolSetting.getClassroomStudent(requestData).then((res) => {
+        //         if (!res.error) {
+        //             if (!this.paperInfo[this.chooseClass]) {
+        //                 this.paperInfo[this.chooseClass] = {}
+        //             }
+        //             let classStu = {
+        //                 students: res.stus.length ? res.stus[0] : [],
+        //                 id: this.chooseClass
+        //             }
+        //             this.$set(this.paperInfo[this.chooseClass], "students", classStu)
+        //             this.students = []
+        //             this.studentScore = []
+        //             this.tableColumn = [...this.scoreList]
+        //             let defSocre = []
+        //             if (this.examInfo.progress == 'pending') {//如果评测未发布,没有学生数据,则直接渲染表格
+        //                 this.quCount = this.paperInfo.item ? this.paperInfo.item.length : 0
+        //                 for (let i = 0; i < this.quCount; i++) {
+        //                     let data = {
+        //                         title: "Q" + (i + 1),
+        //                         slot: "qu" + i,
+        //                         align: "center",
+        //                         minWidth: 65,
+        //                     }
+        //                     this.tableColumn.push(data)
+        //                     defSocre.push(-1)
+        //                 }
+        //                 let classStu = this.paperInfo[this.chooseClass].students.students
+        //                 for (let k = 0; k < classStu.length; k++) {
+        //                     let score = {}
+        //                     score.name = classStu[k].name
+        //                     score.id = classStu[k].id
+        //                     score.data = defSocre
+        //                     score.total = 0
+        //                     score.status = 1
+        //                     this.studentScore.push(score)
+        //                 }
+        //                 this.pageChange(1)
+        //                 this.tableLoading = false
+        //             } else {//如果获取进行中或已结束则需要拉取学生数据
+        //                 this.getStudentAnswer()
+        //             }
+
+        //         } else {
+        //             this.$Message.error("API ERROR!");
+        //         }
+        //     })
+        // },
+        async getClassStudent() {
             this.tableData = []
             if (!this.chooseClass) return
             this.showTest = false
             this.tableLoading = true
-            let requestData = {
-                ids: [this.chooseClass],
-                scope: this.examInfo.scope == 'private' ? 'private' : 'school',
-                // school_code: this.examInfo.scope == 'private' ? this.$store.state.userInfo.TEAMModelId : this.$store.state.userInfo.schoolCode,
-                school_code: this.$store.state.userInfo.schoolCode
-            };
-            this.$api.schoolSetting.getClassroomStudent(requestData).then((res) => {
-                if (!res.error) {
-                    if (!this.paperInfo[this.chooseClass]) {
-                        this.paperInfo[this.chooseClass] = {}
+            let stuRes = undefined
+            try {
+                //个人自定义名单则直接根据学生id换name
+                if (this.examInfo.scope == 'private') {
+                    let stuListInfo = this.privStuList.find(item => {
+                        return item.id == this.chooseClass
+                    })
+                    if (stuListInfo) {
+                        stuRes = await this.$api.courseMgmt.findStuSummary({
+                            students: stuListInfo.students
+                        })
                     }
-                    let classStu = {
-                        students: res.stus.length ? res.stus[0] : [],
-                        id: this.chooseClass
+                }
+                //校本名单或教室则根据班级id或学生
+                else {
+                    let requestData = {
+                        ids: [this.chooseClass],
+                        scope: this.examInfo.scope,
+                        // school_code: this.examInfo.scope == 'private' ? this.$store.state.userInfo.TEAMModelId : this.$store.state.userInfo.schoolCode,
+                        school_code: this.$store.state.userInfo.schoolCode
                     }
-                    this.$set(this.paperInfo[this.chooseClass], "students", classStu)
-                    this.students = []
-                    this.studentScore = []
-                    this.tableColumn = [...this.scoreList]
-                    let defSocre = []
-                    if (this.examInfo.progress == 'pending') {//如果评测未发布,没有学生数据,则直接渲染表格
-                        this.quCount = this.paperInfo.item ? this.paperInfo.item.length : 0
-                        for (let i = 0; i < this.quCount; i++) {
-                            let data = {
-                                title: "Q" + (i + 1),
-                                slot: "qu" + i,
-                                align: "center",
-                                minWidth: 65,
-                            }
-                            this.tableColumn.push(data)
-                            defSocre.push(-1)
-                        }
-                        let classStu = this.paperInfo[this.chooseClass].students.students
-                        for (let k = 0; k < classStu.length; k++) {
-                            let score = {}
-                            score.name = classStu[k].name
-                            score.id = classStu[k].id
-                            score.data = defSocre
-                            score.total = 0
-                            score.status = 1
-                            this.studentScore.push(score)
+                    stuRes = await this.$api.schoolSetting.getClassroomStudent(requestData)
+                }
+            } catch (e) {
+                this.$Message.error('API ERROR')
+                this.tableLoading = false
+            }
+            if (!stuRes.error) {
+                if (!this.paperInfo[this.chooseClass]) {
+                    this.paperInfo[this.chooseClass] = {}
+                }
+                let classStu = {
+                    students: this.examInfo.scope == 'private' ? stuRes.stus || [] : stuRes.stus ? stuRes.stus[0] : [],
+                    id: this.chooseClass
+                }
+                this.$set(this.paperInfo[this.chooseClass], "students", classStu)
+                this.students = []
+                this.studentScore = []
+                this.tableColumn = [...this.scoreList]
+                let defSocre = []
+                if (this.examInfo.progress == 'pending') {//如果评测未发布,没有学生数据,则直接渲染表格
+                    this.quCount = this.paperInfo.item ? this.paperInfo.item.length : 0
+                    for (let i = 0; i < this.quCount; i++) {
+                        let data = {
+                            title: "Q" + (i + 1),
+                            slot: "qu" + i,
+                            align: "center",
+                            minWidth: 65,
                         }
-                        this.pageChange(1)
-                        this.tableLoading = false
-                    } else {//如果获取进行中或已结束则需要拉取学生数据
-                        this.getStudentAnswer()
+                        this.tableColumn.push(data)
+                        defSocre.push(-1)
                     }
-
-                } else {
-                    this.$Message.error("API ERROR!");
+                    let classStu = this.paperInfo[this.chooseClass].students.students
+                    for (let k = 0; k < classStu.length; k++) {
+                        let score = {}
+                        score.name = classStu[k].name
+                        score.id = classStu[k].id
+                        score.data = defSocre
+                        score.total = 0
+                        score.status = 1
+                        this.studentScore.push(score)
+                    }
+                    this.pageChange(1)
+                    this.tableLoading = false
+                } else {//如果获取进行中或已结束则需要拉取学生数据
+                    this.getStudentAnswer()
                 }
-            })
+            } else {
+                this.$Message.error("API ERROR!");
+            }
         },
         //计算总览数据
         calcOverView(data) {
@@ -482,12 +567,12 @@ export default {
                 if (n.subjects && n.subjects.length) {
                     this.chooseSubject = n.subjects[0].id;
                 }
-
                 if (n.grades && n.grades.length) {
                     this.chooseGrade = n.grades[0].id;
                 }
                 if (n.papers && n.papers.length) {
-                    if (n.code == 'Exam' + this.$store.state.userInfo.schoolCode) { //**现在不能通过scope判断是校本还是个人发布的评测
+                    // if (n.code == 'Exam' + this.$store.state.userInfo.schoolCode) { //**现在不能通过scope判断是校本还是个人发布的评测
+                    if (n.owner == 'school') { //**现在不能通过scope判断是校本还是个人发布的评测,后面讨论添加了owner字段区分个人评测还是校本评测
                         let res = n.papers.find((item) => {
                             return item.subjectId == this.chooseSubject;
                         });
@@ -498,6 +583,7 @@ export default {
                 } else {
                     this.paperInfo = {};
                 }
+                // 这里与PrivScoring.vue还少一段代码,不确定是否需要,暂时没有复制过来
             },
             deep: true,
         },
@@ -539,27 +625,23 @@ export default {
                 //发布对象为校本名单
                 if (this.examInfo.scope == 'school') {
                     this.showTest = false
-                    let classes = this.schoolClassList.filter(item => {
-                        return this.examInfo.classes.indexOf(item.id) >= 0 && (item.gradeId == this.chooseGrade || !this.chooseGrade)
-                    })
+                    let classes = []
+                    // 校本会有年级条件
+                    if (this.examInfo.owner == 'school') {
+                        classes = this.schoolClassList.filter(item => {
+                            return this.examInfo.classes.indexOf(item.id) >= 0 && (item.gradeId == this.chooseGrade || !this.chooseGrade)
+                        })
+                    } else {
+                        classes = this.schoolClassList.filter(item => {
+                            return this.examInfo.classes.indexOf(item.id) >= 0 
+                        })
+                    }
                     return classes
                 }
                 // 发布对象为个人创建的自定义名单
                 else {
                     //根据classes查询班级信息
                     if (!this.privStuList) {
-                        // this.$api.schoolSetting.getClassByIds({
-                        //     code: this.$store.state.userInfo.TEAMModelId,
-                        //     ids: this.examInfo.classes
-                        // }).then(
-                        //     res => {
-                        //         if (res.className && res.className.length) this.chooseClass = res.className[0].id
-                        //         this.privStuList = res.className
-                        //     },
-                        //     err => {
-                        //         console.log(err)
-                        //     }
-                        // )
                         //查询当前老师所有stulist
                         let params = {
                             code: this.$store.state.userInfo.TEAMModelId,
@@ -587,8 +669,6 @@ export default {
             }
         },
     },
-    mounted() {
-    },
     created() {
         this.$store.dispatch('user/getSchoolProfile').then(
             res => {

+ 1 - 1
TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkSetting.vue

@@ -33,7 +33,7 @@
                             </Col>
                             <Col :md="24" :lg="24" :xl="12" :xxl="12">
                             <FormItem :label="$t('learnActivity.mark.scoreDiff')" class="setting-item-wrap">
-                                <InputNumber :max="2" :min="1" v-model="setting.err"></InputNumber>
+                                <InputNumber :max="2" :min="1" v-model="setting.point"></InputNumber>
                             </FormItem>
                             </Col>
                         </Row>

+ 88 - 22
TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkView.vue

@@ -1,18 +1,41 @@
 <template>
     <div class="mark-area">
         <!-- 头部基础信息 -->
-        <div class="mark-header">
-            <img src="@/assets/mark/tmd-logo.png" class="tmd-logo">
+        <div class="mark-header" v-show="markMode == 'paper'">
+            <span class="quit-marking-text">
+                <Icon custom="iconfont icon-quit2" class="quit-marking-icon" title="退出阅卷" @click="test"/>
+                <!-- 退出阅卷 -->
+            </span>
+            <span class="info-label">考试名称:</span>
+            <span class="info-value">一年级数学期末考试</span>
+            <span class="info-label">学生:</span>
+            <span class="info-value">基金会</span>
+            <span class="info-label">分数:</span>
+            <span class="info-value">82</span>
+            <span class="info-label">当前题号:</span>
+            <span class="info-value">{{quIndex}}</span>
+            <div class="btn-wrap">
+                <!-- <Button type="text" custom-icon="iconfont icon-exception" class="action-btn" @click="test">异常申报</Button> -->
+                <span class="action-btn">
+                    <Icon custom="iconfont icon-exception" class="action-btn-icon"/>
+                    异常申报
+                </span>
+            </div>
+        </div>
+        <!-- 头部基础信息 -->
+        <!-- <div class="mark-header" v-show="markMode == 'qu'">
+            <span class="info-label">考试名称:</span>
+            <span class="info-value">一年级数学期末考试</span>
             <span class="info-label">考号:</span>
             <span class="info-value">140015511064</span>
-            <span class="info-label">题号:</span>
+            <span class="info-label">当前题号:</span>
             <span class="info-value">{{quIndex}}</span>
             <span class="info-label">试卷类型:</span>
             <span class="info-value">正常卷</span>
             <div class="btn-wrap">
                 <Button icon="md-arrow-round-back" class="action-btn" @click="test">退出阅卷</Button>
             </div>
-        </div>
+        </div> -->
         <div class="mark-main">
             <!-- 工具条 -->
             <div class="mark-tools-wrap">
@@ -32,8 +55,8 @@
                 </Poptip>
                 <Icon custom="iconfont icon-fresh" class="tool-icon" title="清除批注" @click="clear" />
                 <Icon custom="iconfont icon-review" class="tool-icon" title="重阅" />
-                <Icon custom="iconfont icon-cancel-full" class="tool-icon" title="取消全屏" />
-                <Icon custom="iconfont icon-exception" class="tool-icon exception-icon" title="异常申报" color="#ed4014" />
+                <Icon :custom="isFull ? 'iconfont icon-cancel-full' : 'iconfont icon-full-screen'" class="tool-icon" :title="isFull ? '取消全屏' : '全屏'" @click="togglefull"/>
+                <!-- <Icon custom="iconfont icon-exception" class="tool-icon exception-icon" title="异常申报" color="#ed4014" /> -->
                 <!-- <Icon v-for="(item,index) in iconList" :key="index" :custom="item.icon" :class="['tool-icon', activeIcon == index ? 'tool-icon-active':'']" :title="item.title" @click="(item.click)(index)" :color="item.color" /> -->
             </div>
             <div class="mark-stage">
@@ -196,10 +219,17 @@ export default {
             isDltText: false,
             imgs: [],
             curImg: undefined,
-            counter: 0
+            counter: 0,
+            markMode: 'paper', //阅卷模式
+            isFull:false, //是否为全屏模式
         }
     },
     methods: {
+        togglefull(){
+            this.$router.push({
+                name: this.isFull ? 'MarkView' : 'FullMarkView'
+            })
+        },
         //提交分数
         submit() {
             this.counter++
@@ -231,7 +261,12 @@ export default {
             this.stage.add(this.orgLayer)
         },
         test() {
+            console.log(this.$route)
             console.log(this.stage)
+            // 返回页面
+            this.$router.push({
+                name: this.$route.params.from
+            })
         },
         uuid() {
             function S4() {
@@ -316,7 +351,7 @@ export default {
                     _this.markLayer.add(_this.tr)
                 })
                 this.text.on('mouseout', (evt) => {
-                    eevt.cancelBubble = true //阻止事件冒泡
+                    evt.cancelBubble = true //阻止事件冒泡
                     evt.target.draggable(false)
                     let nodes = _this.tr.nodes()
                     if (_this.mouseStatus == 'resize' && nodes.length == 0) _this.mouseStatus = _this.resizeBefore
@@ -813,7 +848,9 @@ export default {
 
         //模拟按题阅卷和整体阅卷
         let routeData = this.$route
-        this.mode = routeData.query.type
+        // this.mode = routeData.params.type
+        if(routeData.name == 'FullMarkView') this.isFull = true
+        this.mode = 1
 
         //监听删除按键,删除图形
         document.onkeydown = e => {
@@ -833,6 +870,17 @@ export default {
 }
 </script>
 <style scoped lang="less">
+.quit-marking-icon {
+    display: inline-block;
+    font-size: 18px;
+    width: 40px;
+    text-align: center;
+    cursor: pointer;
+    color: black;
+}
+.quit-marking-text {
+    margin-right: 15px;
+}
 .expression-box {
     max-width: 300px;
     display: flex;
@@ -848,6 +896,10 @@ export default {
     display: flex;
     justify-content: center;
     width: 100%;
+    padding: 10px;
+}
+#container {
+    max-width: 100%;
 }
 .qu-tips-box {
     & :nth-child(1)::before {
@@ -868,6 +920,7 @@ export default {
     display: inline-block;
     margin-right: 15px;
     color: #909090;
+    font-size: 12px;
     &::before {
         content: "";
         width: 15px;
@@ -963,10 +1016,15 @@ export default {
 }
 .btn-wrap {
     float: right;
-    padding-right: 15px;
+    // padding-right: 15px;
 }
 .action-btn {
     margin-left: 10px;
+    cursor: pointer;
+}
+.action-btn-icon{
+    display: inline-block;
+    margin-right: 5px;
 }
 .tmd-logo {
     width: 35px;
@@ -978,14 +1036,19 @@ export default {
     width: 100%;
     height: 100%;
     user-select: none;
+    // padding: 5px;
 }
 .mark-header {
-    height: 45px;
+    height: 50px;
     width: 100%;
     border-bottom: 1px solid #e1e1e1;
     background: #fafafa;
-    line-height: 45px;
+    line-height: 50px;
     text-align: left;
+    padding: 0px 18px 0px 0px;
+    box-shadow: 0px 2px 3px 0px rgba(100, 100, 100, 0.2);
+    position: relative;
+    z-index: 99;
     .info-label {
         color: #909090;
     }
@@ -996,11 +1059,13 @@ export default {
 .mark-main {
     display: flex;
     flex-direction: row;
-    height: calc(100% - 46px);
+    height: calc(100% - 50px);
 }
 .mark-tools-wrap {
-    // width: 60px;
-    flex: 0 0 60px;
+    position: relative;
+    box-shadow: 2px 0px 5px 0px rgba(100, 100, 100, 0.2);
+    z-index: 9;
+    flex: 0 0 40px;
     height: 100%;
     display: flex;
     flex-direction: column;
@@ -1011,7 +1076,6 @@ export default {
     flex: 1;
     overflow: hidden;
     background: white;
-    padding: 4px;
     text-align: center;
     position: relative;
     height: 100%;
@@ -1032,19 +1096,21 @@ export default {
     }
 }
 .score-wrap {
-    // width: 241px;
+    position: relative;
+    box-shadow: -2px 0px 5px 0px rgba(100, 100, 100, 0.2);
+    z-index: 9;
     flex: 0 0 241px;
     height: 100%;
     border-left: 1px solid #e1e1e1;
     background: #fafafa;
 }
 .tool-icon {
-    font-size: 30px;
+    font-size: 20px;
     cursor: pointer;
-    height: 50px;
-    line-height: 50px;
-    border-bottom: 1px solid #e1e1e1;
-    width: 59px;
+    height: 40px;
+    line-height: 40px;
+    // border-bottom: 1px solid #e1e1e1;
+    width: 39px;
     &:hover {
         color: #1cc0f3;
         box-shadow: 0 5px 10px -8px #1cc0f3;

File diff suppressed because it is too large
+ 8 - 5
TEAMModelOS/Controllers/Client/HiTeachController.cs