ソースを参照

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

chenmy 3 年 前
コミット
493a7dfd1f
90 ファイル変更880 行追加621 行削除
  1. 1 1
      TEAMModelAPI/Controllers/School/SchoolController.cs
  2. 14 54
      TEAMModelBI/Controllers/BISchool/BatchSchoolController.cs
  3. 39 4
      TEAMModelOS.FunctionV4/HttpTrigger/ScsYxptApis.cs
  4. 2 1
      TEAMModelOS.SDK/Models/Cosmos/Common/StuActivity.cs
  5. 2 0
      TEAMModelOS.SDK/Models/Service/Third/Sc/ScYxptModel.cs
  6. 5 1
      TEAMModelOS/ClientApp/src/api/studentWeb.js
  7. 4 4
      TEAMModelOS/ClientApp/src/components/evaluation/ExerciseList.vue
  8. 6 7
      TEAMModelOS/ClientApp/src/components/selflearn/NewChooseContent.vue
  9. 7 2
      TEAMModelOS/ClientApp/src/components/student-web/EventBasicInfo.vue
  10. 27 1
      TEAMModelOS/ClientApp/src/components/student-web/EventView/EventList.vue
  11. 2 0
      TEAMModelOS/ClientApp/src/locale/lang/en-US/cusMgt.js
  12. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/en-US/evaluation.js
  13. 2 1
      TEAMModelOS/ClientApp/src/locale/lang/en-US/home.js
  14. 137 129
      TEAMModelOS/ClientApp/src/locale/lang/en-US/learnActivity.js
  15. 4 2
      TEAMModelOS/ClientApp/src/locale/lang/en-US/studentWeb.js
  16. 2 1
      TEAMModelOS/ClientApp/src/locale/lang/en-US/syllabus.js
  17. 1 0
      TEAMModelOS/ClientApp/src/locale/lang/en-US/user.js
  18. 3 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/cusMgt.js
  19. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/evaluation.js
  20. 2 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/home.js
  21. 11 3
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/learnActivity.js
  22. 4 2
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/studentWeb.js
  23. 2 0
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/syllabus.js
  24. 2 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/user.js
  25. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-CN/utils.js
  26. 3 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/cusMgt.js
  27. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/evaluation.js
  28. 2 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/home.js
  29. 12 4
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/learnActivity.js
  30. 4 2
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/studentWeb.js
  31. 3 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/syllabus.js
  32. 2 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/user.js
  33. 1 1
      TEAMModelOS/ClientApp/src/locale/lang/zh-TW/utils.js
  34. 1 63
      TEAMModelOS/ClientApp/src/view/areaMgmt/AreaLayout.vue
  35. 3 2
      TEAMModelOS/ClientApp/src/view/auth/Serial.vue
  36. 1 1
      TEAMModelOS/ClientApp/src/view/classmgt/ClassNotice.vue
  37. 4 4
      TEAMModelOS/ClientApp/src/view/classmgt/ClassStudent.vue
  38. 1 1
      TEAMModelOS/ClientApp/src/view/classmgt/CreateNotice.vue
  39. 3 3
      TEAMModelOS/ClientApp/src/view/evaluation/bank/ExerciseList.vue
  40. 1 1
      TEAMModelOS/ClientApp/src/view/evaluation/bank/ShareCenter.less
  41. 14 15
      TEAMModelOS/ClientApp/src/view/evaluation/bank/ShareCenter.vue
  42. 7 5
      TEAMModelOS/ClientApp/src/view/evaluation/bank/TestPaperList.vue
  43. 1 1
      TEAMModelOS/ClientApp/src/view/evaluation/bank/index.vue
  44. 3 3
      TEAMModelOS/ClientApp/src/view/evaluation/components/BaseChild.vue
  45. 3 3
      TEAMModelOS/ClientApp/src/view/evaluation/components/BaseExerciseList.vue
  46. 13 3
      TEAMModelOS/ClientApp/src/view/evaluation/index/TestPaper.vue
  47. 2 2
      TEAMModelOS/ClientApp/src/view/homepage/HomePage.vue
  48. 5 4
      TEAMModelOS/ClientApp/src/view/homepage/MinTable.vue
  49. 1 1
      TEAMModelOS/ClientApp/src/view/jyzx/offline.vue
  50. 13 2
      TEAMModelOS/ClientApp/src/view/learnactivity/ByQuMark.vue
  51. 8 3
      TEAMModelOS/ClientApp/src/view/learnactivity/ByStuMark.vue
  52. 3 2
      TEAMModelOS/ClientApp/src/view/learnactivity/CreatePrivEva.vue
  53. 2 27
      TEAMModelOS/ClientApp/src/view/learnactivity/CreateSchoolEva.vue
  54. 91 38
      TEAMModelOS/ClientApp/src/view/learnactivity/MgtPrivEva.vue
  55. 91 56
      TEAMModelOS/ClientApp/src/view/learnactivity/MgtSchoolEva.vue
  56. 28 11
      TEAMModelOS/ClientApp/src/view/learnactivity/Scoring.vue
  57. 14 10
      TEAMModelOS/ClientApp/src/view/learnactivity/SimpleAnalysis.vue
  58. 1 1
      TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkData.vue
  59. 1 1
      TEAMModelOS/ClientApp/src/view/learnactivity/markpaper/MarkSetting.vue
  60. 4 4
      TEAMModelOS/ClientApp/src/view/newcourse/ClassTable.vue
  61. 2 2
      TEAMModelOS/ClientApp/src/view/newcourse/EvDetail.vue
  62. 7 3
      TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.less
  63. 104 63
      TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.vue
  64. 9 4
      TEAMModelOS/ClientApp/src/view/newcourse/NewCusMgt.vue
  65. 1 1
      TEAMModelOS/ClientApp/src/view/notify/CreateNotify.vue
  66. 1 1
      TEAMModelOS/ClientApp/src/view/notify/NotifyMgt.vue
  67. 1 1
      TEAMModelOS/ClientApp/src/view/schoolmgmt/RoomMgt/HiTeachLink.vue
  68. 9 6
      TEAMModelOS/ClientApp/src/view/schoolmgmt/RoomMgt/RoomMgt.vue
  69. 2 2
      TEAMModelOS/ClientApp/src/view/selflearn/ActivityInfo.vue
  70. 7 5
      TEAMModelOS/ClientApp/src/view/student-account/class/ClassMgt.vue
  71. 10 9
      TEAMModelOS/ClientApp/src/view/student-account/stuMgt/AddStudent.vue
  72. 1 1
      TEAMModelOS/ClientApp/src/view/student-account/stuMgt/ImportStudent.vue
  73. 2 2
      TEAMModelOS/ClientApp/src/view/student-account/stuMgt/StuMgt.vue
  74. 2 2
      TEAMModelOS/ClientApp/src/view/task/mark/ByStu.vue
  75. 1 1
      TEAMModelOS/ClientApp/src/view/teachcontent/ResBelong.vue
  76. 3 2
      TEAMModelOS/ClientApp/src/view/teachcontent/UploadModal.vue
  77. 1 1
      TEAMModelOS/ClientApp/src/view/teachcontent/index.vue
  78. 4 4
      TEAMModelOS/ClientApp/src/view/teachermgmt/Index.vue
  79. 3 3
      TEAMModelOS/ClientApp/src/view/teachermgmt/components/userList/Index.vue
  80. 8 0
      TEAMModelOS/ClientApp/src/view/trainList/Join.vue
  81. 2 1
      TEAMModelOS/ClientApp/src/view/user/UserCenter.vue
  82. 1 1
      TEAMModelOS/ClientApp/src/view/video/Video.vue
  83. 1 1
      TEAMModelOS/Controllers/Both/ItemController.cs
  84. 24 0
      TEAMModelOS/Controllers/Both/PaperController.cs
  85. 2 0
      TEAMModelOS/Controllers/Common/HomeworkController.cs
  86. 20 0
      TEAMModelOS/Controllers/Student/TmdUserController.cs
  87. 3 3
      TEAMModelOS/Controllers/Teacher/TeacherCommonController.cs
  88. 13 0
      TEAMModelOS/Controllers/Third/ScApiController.cs
  89. 4 1
      TEAMModelOS/Controllers/XTest/TestController.cs
  90. 3 3
      TEAMModelOS/TEAMModelOS.csproj

+ 1 - 1
TEAMModelAPI/Controllers/School/SchoolController.cs

@@ -331,7 +331,7 @@ namespace TEAMModelAPI.Controllers
         /// <returns></returns>
         [ProducesDefaultResponseType]
         [HttpPost("get-room-info")]
-        [ApiToken(Auth = "1", Name = "获取物理教室详细信息", RW = "R", Limit = false)]
+        [ApiToken(Auth = "10", Name = "获取物理教室详细信息", RW = "R", Limit = false)]
         public async Task<IActionResult> GetRoomInfo(JsonElement json)
         {
             var (id, school) = HttpContext.GetApiTokenInfo();

+ 14 - 54
TEAMModelBI/Controllers/BISchool/BatchSchoolController.cs

@@ -23,6 +23,7 @@ using Microsoft.Extensions.Configuration;
 using System.Net.Http.Json;
 using System.Net;
 using TEAMModelBI.Filter;
+using TEAMModelBI.Tool.Extension;
 
 namespace TEAMModelBI.Controllers.BISchool
 {
@@ -559,16 +560,17 @@ namespace TEAMModelBI.Controllers.BISchool
             try
             {
                 if (!jsonElement.TryGetProperty("schoolId", out JsonElement _schoolId)) return BadRequest();
-                if (!jsonElement.TryGetProperty("period", out JsonElement period)) return BadRequest();
+                //if (!jsonElement.TryGetProperty("period", out JsonElement period)) return BadRequest();
                 if (!jsonElement.TryGetProperty("picture", out JsonElement picture)) return BadRequest();
                 if (!jsonElement.TryGetProperty("size", out JsonElement size)) return BadRequest();
                 if (!jsonElement.TryGetProperty("scale", out JsonElement scale)) return BadRequest();
                 if (!jsonElement.TryGetProperty("assistId", out JsonElement _assistId)) return BadRequest();
-                if (!jsonElement.TryGetProperty("tmdId", out JsonElement _tmdId)) return BadRequest();
-                if (!jsonElement.TryGetProperty("tmdName", out JsonElement _tmdName)) return BadRequest();
+                if (!jsonElement.TryGetProperty("typt", out JsonElement _type)) return BadRequest();
+
+                var (_tmdId, _tmdName, pic, did, dname, dpic) = HttpJwtAnalysis.JwtXAuthBI(HttpContext.GetXAuth("AuthToken"), _option);
 
                 List<string> assistId = _assistId.ToObject<List<string>>();
-                List<string> periodS = period.ToObject<List<string>>();
+                //List<string> periodS = period.ToObject<List<string>>();
 
                 Dictionary<string, List<Dictionary<string, string>>> haveSchoolManger = new Dictionary<string, List<Dictionary<string, string>>>();
 
@@ -578,15 +580,16 @@ namespace TEAMModelBI.Controllers.BISchool
                 {
                     List<Period> periods = new List<Period>();
                     string campusId = Guid.NewGuid().ToString();
-                    periodS.ForEach(x =>
-                    {
-                        periods.Add(new Period { id = Guid.NewGuid().ToString(), name = x.ToString(), campusId = campusId });
-                    });
+                    //periodS.ForEach(x =>
+                    //{
+                    //    periods.Add(new Period { id = Guid.NewGuid().ToString(), name = x.ToString(), campusId = campusId });
+                    //});
 
-                    tempShool.period = periods;
+                    //tempShool.period = periods;
                     tempShool.size = !string.IsNullOrEmpty($"{size}") ? int.Parse($"{size}") : tempShool.size;
                     tempShool.scale = !string.IsNullOrEmpty($"{scale}") ? int.Parse($"{scale}") : tempShool.scale;
                     tempShool.picture = $"{picture}";
+                    tempShool.type = int.Parse($"{_type}");
                     //修改学校
                     await cosmosClient.GetContainer(Constant.TEAMModelOS, "School").ReplaceItemAsync<School>(tempShool, tempShool.id, new PartitionKey("Base"));
 
@@ -610,8 +613,7 @@ namespace TEAMModelBI.Controllers.BISchool
                                     var tems = await cosmosClient.GetContainer("TEAMModelOS", "School").DeleteItemAsync<SchoolTeacher>(item.id, new PartitionKey(item.code));
                                 }
                             }
-                        }
-                        //bool temp = item.roles.Contains("assist");                        
+                        }                   
                     }
 
                     if (assistId.Count > 0)
@@ -695,52 +697,10 @@ namespace TEAMModelBI.Controllers.BISchool
                             }
                         }
                     }
-
-                    //SchoolAssist schoolAssist = new();
-                    //schoolAssist.id = tempShool.id;
-                    //schoolAssist.code = tempShool.code;
-                    //schoolAssist.pk = tempShool.pk;
-                    //schoolAssist.ttl = tempShool.ttl;
-                    //schoolAssist.schoolCode = tempShool.schoolCode;
-                    //schoolAssist.name = tempShool.name;
-                    //schoolAssist.period = tempShool.period;
-                    //schoolAssist.campuses = tempShool.campuses;
-                    //schoolAssist.region = tempShool.region;
-                    //schoolAssist.province = tempShool.province;
-                    //schoolAssist.city = tempShool.city;
-                    //schoolAssist.dist = tempShool.dist;
-                    //schoolAssist.areaId = tempShool.areaId;
-                    //schoolAssist.size = tempShool.size;
-                    //schoolAssist.address = tempShool.address;
-                    //schoolAssist.picture = tempShool.picture;
-                    //schoolAssist.timeZone = tempShool.timeZone;
-                    //schoolAssist.type = tempShool.type;
-                    //schoolAssist.standard = tempShool.standard;
-                    //schoolAssist.hpappraise = tempShool.hpappraise;
-
-                    //List<Assist> assists = new List<Assist>();
-                    ////查询学校的顾问
-                    //string managerSql = $"SELECT DISTINCT REPLACE(c.code, 'Teacher-', '') AS schoolId, c.id, c.name FROM c WHERE ARRAY_CONTAINS(c.roles, 'assist', true) AND c.pk = 'Teacher' AND c.status = 'join' AND c.code = 'Teacher-{tempShool.id}'";
-                    //var cosmosClent = _azureCosmos.GetCosmosClient();
-                    //await foreach (var item in cosmosClent.GetContainer(Constant.TEAMModelOS, "School").GetItemQueryStreamIterator(queryText: managerSql, requestOptions: new QueryRequestOptions() { }))
-                    //{
-                    //    using var json = await JsonDocument.ParseAsync(item.ContentStream);
-                    //    foreach (var obj in json.RootElement.GetProperty("Documents").EnumerateArray())
-                    //    {
-                    //        Assist assist = new Assist
-                    //        {
-                    //            tmdId = obj.GetProperty("id").GetString(),
-                    //            tmdName = obj.GetProperty("name").GetString()
-                    //        };
-                    //        assists.Add(assist);
-                    //    }
-                    //}
-
-                    //schoolAssist.assists = assists;
                 }
 
                 //保存操作记录
-                await _azureStorage.SaveLog("TeacherRoles-update", $"{_tmdName}【{_tmdId}】修改学校功能,修改的学校:{_schoolId},{string.Join("|", periodS.ToArray())},{picture},{size},{string.Join("|", assistId.ToArray())}", _dingDing, httpContext: HttpContext);
+                await _azureStorage.SaveLog("TeacherRoles-update", $"{_tmdName}【{_tmdId}】修改学校功能,修改的学校:{_schoolId},{_type},{picture},{size},{string.Join("|", assistId.ToArray())}", _dingDing, httpContext: HttpContext);
 
 
                 return Ok(new { state = 200 });

+ 39 - 4
TEAMModelOS.FunctionV4/HttpTrigger/ScsYxptApis.cs

@@ -50,6 +50,11 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
             string data = await new StreamReader(req.Body).ReadToEndAsync();
             JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
             ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
+            string areaId = null;
+            if (data.ToObject<JsonElement>().TryGetProperty("areaId", out JsonElement _areaId))
+            {
+                areaId = $"{_areaId}";
+            }
             Code = "GetProjectInfoByTrainComID";
             parameterMap = new Dictionary<string, object>();
             parameterMap.Add("TrainComID", config.trainComID);
@@ -88,6 +93,11 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
             List<ScSchool> scSchools = new List<ScSchool>();
             string data = await new StreamReader(req.Body).ReadToEndAsync();
             JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
+            string areaId = null;
+            if (data.ToObject<JsonElement>().TryGetProperty("areaId", out JsonElement _areaId))
+            {
+                areaId = $"{_areaId}";
+            }
             ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
             Code = "GetSchoolList";
             parameterMap = new Dictionary<string, object>();
@@ -138,6 +148,11 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
             string data = await new StreamReader(req.Body).ReadToEndAsync();
             JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
             ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
+            string areaId = null;
+            if (data.ToObject<JsonElement>().TryGetProperty("areaId", out JsonElement _areaId))
+            {
+                areaId = $"{_areaId}";
+            }
             Code = "GetTeachersListByProject";
             parameterMap = new Dictionary<string, object>();
             parameterMap.Add("TrainComID", config.trainComID);
@@ -188,6 +203,11 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
             string data = await new StreamReader(req.Body).ReadToEndAsync();
             JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
             JsonElement schoolCode = data.ToObject<JsonElement>().GetProperty("schoolCode");
+            string areaId = null;
+            if(data.ToObject<JsonElement>().TryGetProperty("areaId", out JsonElement _areaId))
+            {
+                areaId = $"{_areaId}";
+            }
             ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
             Code = "GetSchoolDiagnosis";
             parameterMap = new Dictionary<string, object>();
@@ -210,8 +230,8 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
                             List<ScPDiagnosis> diagnoses = result.content.ToObject<List<ScPDiagnosis>>();
                             if (diagnoses.IsNotEmpty())
                             {
-                                projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = diagnoses });
-                                await _azureStorage.SaveOrUpdate<ScProjectDiagnosis>(new ScProjectDiagnosis { RowKey = $"{ps.pid}-{schoolCode}", PartitionKey = "ScSchoolDiagnosis", abilityNos = diagnoses.ToJsonString() });
+                                projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = diagnoses, });
+                                await _azureStorage.SaveOrUpdate<ScProjectDiagnosis>(new ScProjectDiagnosis {schoolCode=$"{schoolCode}",areaId= areaId, RowKey = $"{ps.pid}-{schoolCode}", PartitionKey = "ScSchoolDiagnosis", abilityNos = diagnoses.ToJsonString() });
                             }
                         }
                         else
@@ -262,6 +282,11 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
             List<ScsProjectDiagnosis> projects = new List<ScsProjectDiagnosis>();
             string data = await new StreamReader(req.Body).ReadToEndAsync();
             JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
+            string areaId = null;
+            if (data.ToObject<JsonElement>().TryGetProperty("areaId", out JsonElement _areaId))
+            {
+                areaId = $"{_areaId}";
+            }
             ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
             Code = "GetProjectDiagnosis";
             parameterMap = new Dictionary<string, object>();
@@ -283,7 +308,7 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
                             if (diagnoses.IsNotEmpty())
                             {
                                 projects.Add(new ScsProjectDiagnosis { project = ps, diagnoses = diagnoses });
-                                await _azureStorage.SaveOrUpdate<ScProjectDiagnosis>(new ScProjectDiagnosis { RowKey = $"{ps.pid}", PartitionKey = "ScProjectDiagnosis", abilityNos = diagnoses.ToJsonString() });
+                                await _azureStorage.SaveOrUpdate<ScProjectDiagnosis>(new ScProjectDiagnosis { areaId=areaId, RowKey = $"{ps.pid}", PartitionKey = "ScProjectDiagnosis", abilityNos = diagnoses.ToJsonString() });
                             }
                         }
                         else
@@ -335,6 +360,11 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
             List<string> abilityNos = new List<string>();
             string data = await new StreamReader(req.Body).ReadToEndAsync();
             JsonElement accessConfig = data.ToObject<JsonElement>().GetProperty("accessConfig");
+            string areaId = null;
+            if (data.ToObject<JsonElement>().TryGetProperty("areaId", out JsonElement _areaId))
+            {
+                areaId = $"{_areaId}";
+            }
             JsonElement pxid = data.ToObject<JsonElement>().GetProperty("pxid");
             ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
             Code = "GetDiagnosisListByProject_V2";
@@ -354,7 +384,7 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
                     }
                     if (abilityNos.IsNotEmpty())
                     {
-                        await _azureStorage.SaveOrUpdate<ScTeacherDiagnosis>(new ScTeacherDiagnosis { RowKey = $"{pxid}", PartitionKey = "ScTeacherDiagnosis", abilityNos = abilityNos.ToJsonString() });
+                        await _azureStorage.SaveOrUpdate<ScTeacherDiagnosis>(new ScTeacherDiagnosis {areaId=areaId, RowKey = $"{pxid}", PartitionKey = "ScTeacherDiagnosis", abilityNos = abilityNos.ToJsonString() });
                     }
                 }
                 else
@@ -400,6 +430,11 @@ namespace TEAMModelOS.FunctionV4.HttpTrigger
             JsonElement pxid = data.ToObject<JsonElement>().GetProperty("pxid");
             JsonElement tid = data.ToObject<JsonElement>().GetProperty("tid");
             ScAccessConfig config = $"{accessConfig}".ToObject<ScAccessConfig>();
+            string areaId = null;
+            if (data.ToObject<JsonElement>().TryGetProperty("areaId", out JsonElement _areaId))
+            {
+                areaId = $"{_areaId}";
+            }
             Code = "GetSingleTeacherByProject";
             parameterMap = new Dictionary<string, object>();
             parameterMap.Add("TrainComID", config.trainComID);

+ 2 - 1
TEAMModelOS.SDK/Models/Cosmos/Common/StuActivity.cs

@@ -67,7 +67,8 @@ namespace TEAMModelOS.SDK.Models
         /// </summary>
         public int taskStatus { get; set; } = -1;
         //写入投票记录,评测作答记录等,自行定义相关规范
-        public List<JsonElement> extParam { get; set; } = new List<JsonElement>();
+      //  public List<JsonElement> extParam { get; set; } = new List<JsonElement>();
+        public Dictionary<string, JsonElement> ext { get; set; } = new Dictionary<string, JsonElement>();
         /// 评分状态,0,未评分, 1已评分
         public int sStatus { get; set; } = 0;
     }

+ 2 - 0
TEAMModelOS.SDK/Models/Service/Third/Sc/ScYxptModel.cs

@@ -31,6 +31,7 @@ namespace TEAMModelOS.SDK.Models
         public string abilityNos { get; set; }
         public string pd { get; set; }
         public string areaId{get;set;}
+        public string schoolCode { get; set; }
     }
     public class ScDiagnosis
     {
@@ -116,6 +117,7 @@ namespace TEAMModelOS.SDK.Models
     {
         public ScsProject project { get; set; }
         public List<ScPDiagnosis> diagnoses { get; set; }
+       
     }
     public class ScPDiagnosis
     {

+ 5 - 1
TEAMModelOS/ClientApp/src/api/studentWeb.js

@@ -314,5 +314,9 @@ export default {
 
     getClassRecord: function(data) {
         return post("/common/lesson-record/get-lesson-record", data)
-    }
+    },
+
+    getTeacherName: function(data) {
+        return post("/tmduser/init/get-tmd-info", data)
+    },
 }

+ 4 - 4
TEAMModelOS/ClientApp/src/components/evaluation/ExerciseList.vue

@@ -44,11 +44,11 @@
 								<div class="item-explain-details">
 									<!-- 问答题答案 -->
 									<div v-if="item.type === 'subjective' || item.type === 'complete' || item.type === 'connector' || item.type === 'correct'">
-										<span v-for="(answer, index) in item.answer" :key="index" v-html="item.answer.length ? answer : $t('evaluation.noAnswer')"></span>
+										<span v-for="(answer, index) in item.answer" :key="index" v-html="item.answer.length ? answer : $t('utils.noData')"></span>
 									</div>
 									<!-- 问答题答案 -->
 									<div v-else-if="item.type === 'judge'">
-										<span>{{ item.answer.length ? (item.answer[0] === 'A' ? $t('evaluation.isTrue') : $t('evaluation.isFalse')) : $t('evaluation.noAnswer') }}</span>
+										<span>{{ item.answer.length ? (item.answer[0] === 'A' ? $t('evaluation.isTrue') : $t('evaluation.isFalse')) : $t('utils.noData') }}</span>
 									</div>
 									<!-- 其余题型答案 -->
 									<div v-else>
@@ -60,14 +60,14 @@
 							<div class="item-explain">
 								<span class="explain-title">【{{$t('evaluation.explain')}}】</span>
 								<div class="item-explain-details">
-									<span v-html="item.explain || $t('evaluation.noExplain')"></span>
+									<span v-html="item.explain || $t('utils.noData')"></span>
 								</div>
 							</div>
 							<!-- 知识点部分 -->
 							<div class="item-explain">
 								<span class="explain-title">【{{$t('evaluation.knowledgePoints')}}】</span>
 								<div class="item-explain-details">
-									<span v-if="!item.knowledge || !item.knowledge.length">{{$t('evaluation.noPoints')}}</span>
+									<span v-if="!item.knowledge || !item.knowledge.length">{{ $t('utils.noData') }}</span>
 									<div v-else>
 										<span v-for="(point, pointIndex) in item.knowledge" class="item-point-tag" :key="pointIndex">
 											{{ point }}

+ 6 - 7
TEAMModelOS/ClientApp/src/components/selflearn/NewChooseContent.vue

@@ -535,14 +535,13 @@ export default {
                 }
                 this.$api.blob.listBlobInfo(params, sasRes.url).then(
                     (res) => {
-                        console.log('资源信息', res)
                         this.fileList[this.contentFilter.scope][this.contentFilter.fileType] = res
                         this.fileListShow = this.fileList[this.contentFilter.scope][this.contentFilter.fileType]
                         this.searchBefore = [...this.fileListShow]
                         this.handleCheckStatus()
                     },
                     (err) => {
-                        this.$Message.error('API Error')
+                        // this.$Message.error('API Error')
                     }
                 ).finally(() => {
                     setTimeout(() => {
@@ -586,7 +585,7 @@ export default {
             this.currentVolumeIndex = 0
             this.$api.syllabus.GetVolumes(this.syllabusFilter).then(
                 (res) => {
-                    if (res.error == null) {
+                    if (!res.error) {
                         this.volumeList = res.volumes
                         if (this.volumeList.length == 0) {
                             this.syllabusList.length = []
@@ -595,11 +594,11 @@ export default {
                             this.getSyllabus()
                         }
                     } else {
-                        this.$Message.error('API error111!')
+                        this.$Message.error(this.$t('syllabus.getSyllabusErr'))
                     }
                 },
                 (err) => {
-                    this.$Message.error('API error222!')
+                    // this.$Message.error('API error222!')
                 }
             )
         },
@@ -612,11 +611,11 @@ export default {
                     if (!res.error) {
                         this.syllabusList = res
                     } else {
-                        this.$Message.error('API error!')
+                        this.$Message.error(this.$t('syllabus.getSyllabusErr1'))
                     }
                 },
                 (err) => {
-                    this.$Message.error('API error!')
+                    // this.$Message.error('API error!')
                 }
             )
         },

+ 7 - 2
TEAMModelOS/ClientApp/src/components/student-web/EventBasicInfo.vue

@@ -22,13 +22,18 @@
                             </span>
                             <!-- <span class="base-info-text" v-if="getCurrentLang()=='en'">{{ transSubjecttoEn(info.eventSubject) }}</span> -->
                         </span>
+
+                        <span style="margin-left: 30px;" v-if="info.creatorName">
+                            <Icon type="ios-contact-outline" style="font-weight: bold; margin-right: 5px;" />{{ $t('studentWeb.baseInfo.teacher')}}
+                            <span class="base-info-text">{{ info.creatorName }}</span>
+                        </span>
                     </li>
                     <li v-if="info.eventType == 'Vote'">
-                        <svg-icon icon-class="teacher" class="base-info-icon" />投票类型:
+                        <svg-icon icon-class="teacher" class="base-info-icon" />{{ $t('studentWeb.baseInfo.voteType') }}
                         <span class="base-info-text">{{ times }}</span>
                     </li>
                     <li v-if="from === 'hiteach'">
-                        <Icon type="md-timer" class="base-info-icon" />时长:
+                        <Icon type="md-timer" class="base-info-icon" />{{ $t('studentWeb.baseInfo.timeLong') }}
                         <span class="base-info-text">{{ info.time }}</span>
                     </li>
                     <li v-if="from != '通知' && from != 'hiteach'">

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

@@ -111,6 +111,18 @@
                                             v-else>
                                         {{ $t('studentWeb.public.private') }}
                                     </span>
+                                    <!-- 课中评量才判断:qamode:0(书面问答),1(纸本测验) -->
+                                    <!-- <span v-if="item.source === '1'" style="margin-left: 10px;">
+                                        <span style="border: 1px solid #8fc07b; padding: 0 5px; border-radius: 3px; color: #8fc07b;"
+                                              v-if="item.qamode"
+                                        >
+                                            纸本测验
+                                        </span>
+                                        <span style="border: 1px solid #acab88; padding: 0 5px; border-radius: 3px; color: #acab88;"
+                                                v-else>
+                                            书面问答
+                                        </span>
+                                    </span> -->
                                 </p>
                             </div>
                             <div v-if="item.eventType === 'Vote'" class="list-new-test">
@@ -520,7 +532,7 @@ import { mapGetters, mapState } from 'vuex';
                 this.predealMockdatafirstItem();
             },
             // 展示活动
-            sentSelectedEventTitle(item) {
+            async sentSelectedEventTitle(item) {
                 /* this.$router.push({
                     path: "/studentWeb/eventView",
                     query: {
@@ -528,6 +540,9 @@ import { mapGetters, mapState } from 'vuex';
                         type: item.eventType
                     }
                 }) */
+                if(item.eventType === 'Exam') {
+                    item.creatorName = await this.getTeacherName(item.creatorId)
+                }
                 // 活动信息
                 this.$store.commit("SetPaperInfo", item)
                 ////螢幕寬度<767px時,直接關掉sidebar
@@ -595,6 +610,17 @@ import { mapGetters, mapState } from 'vuex';
                 }
             },
 
+            getTeacherName(id) {
+                return new Promise((r, j) => {
+                    this.$api.studentWeb.getTeacherName({id}).then(res => {
+                        r(res.name)
+                    }).catch(e => {
+                        j(e)
+                    })
+                })
+                
+            },
+
             /* =======未调用======== */
             //取得目前滑鼠座標
             getCursorPosition() {

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

@@ -134,6 +134,7 @@ export default {
     attendRate: '出席率:',
     rcdScore: '總計分:',
     interactNum: '互動總數:',
+    cusInfoErr:'査詢課程資訊失敗',
 
     //ManageClass.vue
     stuMgt: 'Student Management',
@@ -319,6 +320,7 @@ export default {
     customNameList: 'Self-customized List',
     teaTimeWraning: 'The teacher already has courses scheduled for this time period',
     classTimeWarning: 'The class already has courses scheduled for this time period',
+    teaListErr:'査詢教師名單异常',
 
     // JoinClass.vue
     join: {

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

@@ -230,7 +230,7 @@ export default {
 		createSheet:'Generate Answer Card',
 		reCreateSheet:'Regenerate',
 		choosePaper:'Select exam file',
-		choosed:'Selected',
+		choosed:'Deselect',
 		searchPaper:'Enter exam file name to search...'
 	},
 	importFile:{

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

@@ -74,5 +74,6 @@ export default{
     allThan80: 'T&P≥70',
     semesterCount: "This semester's lesson",
     weekCount: "This week's lesson",
-    dayCount: "Today's lesson"
+    dayCount: "Today's lesson",
+    cusTableErr:'獲取課表失敗'
 }

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

@@ -1,12 +1,12 @@
 export default {
     //MgtSchoolEva.vue
-	school:'School',
-	area:'District',
-	noFound:"Can't find the current activity!",
-	deleteAreaTitle:'Delete District Activity',
-	deleteAreaTip:'If the district activity is deleted, the related school will not be able to participate in the activity. Confirm to delete the activity?',
-	deleteAreaFail:'Failed to delete',
-	notSupportType:'Uploading files of this format is not supported!',
+    school: 'School',
+    area: 'District',
+    noFound: "Can't find the current activity!",
+    deleteAreaTitle: 'Delete District Activity',
+    deleteAreaTip: 'If the district activity is deleted, the related school will not be able to participate in the activity. Confirm to delete the activity?',
+    deleteAreaFail: 'Failed to delete',
+    notSupportType: 'Uploading files of this format is not supported!',
     mgtScEv: {
         listLabel: 'Assessment List',
         period: 'School System:',
@@ -49,15 +49,20 @@ export default {
         ftType: 'Type:',
         ftMode: 'Method:',
         search: 'Search',
-        taskTips:'You can start marking tasks and assign assessment responses data to teachers for online marking.',
-        editEndTime:'Modify Ending Time',
-        endTimeHolder:'Please set the assessment end time',
-        updOk:'Modified successfully',
-        updErr:'Failed to modify',
+        taskTips: 'You can start marking tasks and assign assessment responses data to teachers for online marking.',
+        editEndTime: 'Modify Ending Time',
+        endTimeHolder: 'Please set the assessment end time',
+        updOk: 'Modified successfully',
+        updErr: 'Failed to modify',
         edName: '修改評測名稱',
         edNameHolder: '請輸入評測名稱',
-        scoreStatus:'待評分',
-        hasDel:'此評測已被删除'
+        scoreStatus: '待評分',
+        scoreStatus1:'已評分',
+        hasDel: '此評測已被删除',
+        actionErr: '操作失敗',
+        classInfoErr: '査詢班級資訊失敗',
+        evListErr: '査詢評測清單失敗',
+        exInfoErr: '査詢評測詳情失敗'
     },
 
     //CreateEv
@@ -116,11 +121,11 @@ export default {
         delOk: 'Delete successfully',
         pdTips: 'Please select the school system!',
         defaultPaper: '(Please pick or import exam files)',
-        ansTime:'Answering Time:',
-        ansTimeTips:'(Default is 0, which means unlimited time)',
-        sheetErr:'Failed to process the answer card',
-        noAuth:'Not authorized',
-        noSchool:'Not joined a school'
+        ansTime: 'Answering Time:',
+        ansTimeTips: '(Default is 0, which means unlimited time)',
+        sheetErr: 'Failed to process the answer card',
+        noAuth: 'Not authorized',
+        noSchool: 'Not joined a school'
     },
     // ManualPaper.vue
     manual: {
@@ -158,7 +163,7 @@ export default {
         stuAns: '【Student Response】',
         mark: 'Annotate',
         quAns: '【Answer】',
-        question:'【Question】',
+        question: '【Question】',
         noAnswer: 'No answer set',
         anaLabel: '【Explanation】',
         noAna: 'No explanation yet',
@@ -191,7 +196,7 @@ export default {
         hMillion: 'One hundred million',
         noStuAns: 'Not answered',
         noStuAns1: 'Not answered yet',
-        ansErr:'Answer Data Abnormal',
+        ansErr: 'Answer Data Abnormal',
         trueAns: 'Correct',
         falseAns: 'Incorrect',
         //Scoring.vue
@@ -216,41 +221,42 @@ export default {
         view: 'View',
         requesting: 'Data request in progress, please wait ...',
         dataError: 'Data request abnormal, please refresh the page and try again',
-        byStuMark:'Mark By People',
-        byQuMark:'Mark By Question',
+        byStuMark: 'Mark By People',
+        byQuMark: 'Mark By Question',
         fastScore1: '全部滿分',
         fastScore2: '全部零分',
         fastScore3: '未答零分',
         fastScore4: '未閱零分',
         fastScore5: '未閱滿分',
-        noStuAnswer:"Students didn't answer yet",
-        toggleQu:'Switch Question',
-        viewMark:'View Annotation',
-        markLabel:'Annotation',
-        saveScoreTitle:'Save Score',
-        saveScoreContent:'The scores you modified have not been saved yet, do you want to save them?',
-        orgImg:'Original Image',
-        myMark:'My Annotation',
-        viewOrigin:'View original exam file',
-        noOrData:'No original exam file data yet',
-        answerDataErr:'Anomalies in student response data',
-        stuNoAns:'Student did not answer',
-        stuRpt:'Student Report',
-        tableTitleTips:'Reminder:The table header shows the question number and the correct rate of the corresponding question, click for details',
-        quTitle:'Question Analysis',
-        tipsLabel:'Reminder:',
-        crtTips1:"1. Subjective questions are judged to be correct if the student scores 80% of the question's allocated points",
-        crtTips2:'2. For more detailed data analysis, please go to Learning Analysis.',
-        crtErr:'Failed to load data',
-        noSeeRpt:'Students have not yet answered and cannot view their individual reports',
-        crtRateTitle:'Correct Rate Statistics',
-        crtLabel:'Correct',
-        wrongLabel:'Incorrect',
-        wrongQuTips:'You can view the incorrectly answered question statistics only after the assessment is finished',
-        exportData:'Export Data',
-        exporting:'Exporting...',
-        exportTips:'The assessment is in progress and some students have not yet answered. Are you sure you want to export the data?',
-        noQuMark:'已完成所有題目評分,暫無未閱題目'
+        noStuAnswer: "Students didn't answer yet",
+        toggleQu: 'Switch Question',
+        viewMark: 'View Annotation',
+        markLabel: 'Annotation',
+        saveScoreTitle: 'Save Score',
+        saveScoreContent: 'The scores you modified have not been saved yet, do you want to save them?',
+        orgImg: 'Original Image',
+        myMark: 'My Annotation',
+        viewOrigin: 'View original exam file',
+        noOrData: 'No original exam file data yet',
+        answerDataErr: 'Anomalies in student response data',
+        stuNoAns: 'Student did not answer',
+        stuRpt: 'Student Report',
+        tableTitleTips: 'Reminder:The table header shows the question number and the correct rate of the corresponding question, click for details',
+        quTitle: 'Question Analysis',
+        tipsLabel: 'Reminder:',
+        crtTips1: "1. Subjective questions are judged to be correct if the student scores 80% of the question's allocated points",
+        crtTips2: '2. For more detailed data analysis, please go to Learning Analysis.',
+        crtErr: 'Failed to load data',
+        noSeeRpt: 'Students have not yet answered and cannot view their individual reports',
+        crtRateTitle: 'Correct Rate Statistics',
+        crtLabel: 'Correct',
+        wrongLabel: 'Incorrect',
+        wrongQuTips: 'You can view the incorrectly answered question statistics only after the assessment is finished',
+        exportData: 'Export Data',
+        exporting: 'Exporting...',
+        exportTips: 'The assessment is in progress and some students have not yet answered. Are you sure you want to export the data?',
+        noQuMark: '已完成所有題目評分,暫無未閱題目',
+        noUpd:'暫未修改分數'
     },
 
     //SimpleAnalysis.vue
@@ -273,9 +279,11 @@ export default {
         avgScore: 'Average Statistics',
         totalLabel: 'Total Quantity',
         scoreMat: 'Score Segment Statistics',
-        complyNum:'Passer',
-        failedNum:'Non-Passer',
-        complyCount:'Passer Number Statistics'
+        complyNum: 'Passer',
+        failedNum: 'Non-Passer',
+        complyCount: 'Passer Number Statistics',
+        simpleErr: '查詢統計數據失敗',
+        dataErr:'評測統計數據出錯啦'
     },
 
     mark: {
@@ -319,8 +327,8 @@ export default {
         scanProg: '掃描進度',
         assignStatus: '閱卷分配',
         errDeclare: 'Abnormality Report',
-        errTeacher:'Abnormality Handler',
-        arbTeacher:'Arbitration Teacher',
+        errTeacher: 'Abnormality Handler',
+        arbTeacher: 'Arbitration Teacher',
         arbDeclare: 'Arbitration Paper',
         markProg: 'Marking Progress',
         name: 'Name',
@@ -329,80 +337,80 @@ export default {
         action: 'Operate',
         addTeaTitle: 'Add Marking Teacher',
         markNum: 'Marking Quantity',
-        noPublish:'No marking task yet',
-        publish:'Start Task',
-        startTime:'Start Time',
-        endTime:'End Time',
-        allocation:'Assigning Method',
-        allocationByStu:'By People',
-        allocationByQu:'By Question',
-        openArb:'Enable Arbitration',
-        yes:'Yes',
-        no:'No',
-        allQu:'All Question',
-        noSet:'Not set yet',
-        quNoSet:'題號設置',
-        startErr:'Please set the start time',
-        endErr:'Please set the end time',
-        typeErr:'Please set the assigning method',
-        numErr:'Please set the marking times',
-        markerErr:'Please set the marking teacher',
-        markQuNo:'Marking Question No.',
-        rmvTitle:'Remove Teacher',
-        rmvContent:'Are you sure to remove ',
-        baseErr:'Please complete the settings',
-        teacherErr:'Please complete the settings',
-        saveOk:'Save successfully!',
-        saveErr:'Failed to save!',
-        deleteOk:'Delete successfully',
-        deleteErr:'Failed to delete',
-        byStuTips:'Mark the entire exam file',
-        byQuTips:'Mark the assigned questions',
-        quBlock:'Question Assignment',
-        addBlock:'Add Assignment',
-        quLabel:'Question',
-        objcTips:'Reminder:Objective questions are automatically graded by the system and do not need to be graded by teachers.',
-        teaLabel:'Teacher',
-        isArbTips:'Please set whether arbitration is required',
-        arbTeaTips:'Please set the arbitration teacher',
-        errTeaTips:'Please set the abnormality handling teacher',
-        orderIndex:'Serial No.',
-        quNo:'Question No.',
-        teaCount:'Teacher No.',
-        markCount:'閱卷量',
-        delBlockTitle:'Delete Assignment',
-        delBlockCont:'Are you sure to delete the current question assignment settings?',
-        selectQuTips:'Please select a question to be assigned',
-        selectTeaTips:'Please set the marking teacher',
-        lastQu:'Questions are not all assigned',
-        reapQu:'There are questions that are repeatedly assigned',
-        objectiveLabel:'(Objective)',
-        alreadyLabel:'(Already)',
+        noPublish: 'No marking task yet',
+        publish: 'Start Task',
+        startTime: 'Start Time',
+        endTime: 'End Time',
+        allocation: 'Assigning Method',
+        allocationByStu: 'By People',
+        allocationByQu: 'By Question',
+        openArb: 'Enable Arbitration',
+        yes: 'Yes',
+        no: 'No',
+        allQu: 'All Question',
+        noSet: 'Not set yet',
+        quNoSet: '題號設置',
+        startErr: 'Please set the start time',
+        endErr: 'Please set the end time',
+        typeErr: 'Please set the assigning method',
+        numErr: 'Please set the marking times',
+        markerErr: 'Please set the marking teacher',
+        markQuNo: 'Marking Question No.',
+        rmvTitle: 'Remove Teacher',
+        rmvContent: 'Are you sure to remove ',
+        baseErr: 'Please complete the settings',
+        teacherErr: 'Please complete the settings',
+        saveOk: 'Save successfully!',
+        saveErr: 'Failed to save!',
+        deleteOk: 'Delete successfully',
+        deleteErr: 'Failed to delete',
+        byStuTips: 'Mark the entire exam file',
+        byQuTips: 'Mark the assigned questions',
+        quBlock: 'Question Assignment',
+        addBlock: 'Add Assignment',
+        quLabel: 'Question',
+        objcTips: 'Reminder:Objective questions are automatically graded by the system and do not need to be graded by teachers.',
+        teaLabel: 'Teacher',
+        isArbTips: 'Please set whether arbitration is required',
+        arbTeaTips: 'Please set the arbitration teacher',
+        errTeaTips: 'Please set the abnormality handling teacher',
+        orderIndex: 'Serial No.',
+        quNo: 'Question No.',
+        teaCount: 'Teacher No.',
+        markCount: '閱卷量',
+        delBlockTitle: 'Delete Assignment',
+        delBlockCont: 'Are you sure to delete the current question assignment settings?',
+        selectQuTips: 'Please select a question to be assigned',
+        selectTeaTips: 'Please set the marking teacher',
+        lastQu: 'Questions are not all assigned',
+        reapQu: 'There are questions that are repeatedly assigned',
+        objectiveLabel: '(Objective)',
+        alreadyLabel: '(Already)',
         exTag: '異常',
         scoreTips: '溫馨提示:客觀題已由系統自動評分,下面只顯示了需要人工評分的主觀題題號。',
-        feedback:'反饋:',
-        exStatus:'狀態:未處理',
-        continueMark:'繼續閱卷',
-        exTitle:'異常原因',
-        exReason1:'答案不清晰,看不清楚',
-        exReason2:'答案圖片不完整',
-        exReason3:'其他原因',
-        exHolder:'異常原因...',
-        exceptionOk:'上報成功',
-        exceptionErr:'上報失敗',
-        noExTips:'請選擇異常原因',
-        markSaveOk:'批註保存成功',
-        hasNoMarkQu:'還有未閱題目',
-        markSetLabel:'Marking Settings',
-        markTime:'Time:',
-        allocationType:'Method:',
-        markCount:'Marking Times:',
-        examSubject:'Subject:',
-        delTask:'Delete Marking Task',
-        delTaskTips:'When you delete a marking task, all the marking tasks of assigned teachers and marking data of the currently assessment will be deleted. Are you sure you want to delete it?',
-        distribution:'題目配分:',
-        loadAll:'已加載所有數據',
-        
+        feedback: '反饋:',
+        exStatus: '狀態:未處理',
+        continueMark: '繼續閱卷',
+        exTitle: '異常原因',
+        exReason1: '答案不清晰,看不清楚',
+        exReason2: '答案圖片不完整',
+        exReason3: '其他原因',
+        exHolder: '異常原因...',
+        exceptionOk: '上報成功',
+        exceptionErr: '上報失敗',
+        noExTips: '請選擇異常原因',
+        markSaveOk: '批註保存成功',
+        hasNoMarkQu: '還有未閱題目',
+        markSetLabel: 'Marking Settings',
+        markTime: 'Time:',
+        allocationType: 'Method:',
+        markCount: 'Marking Times:',
+        examSubject: 'Subject:',
+        delTask: 'Delete Marking Task',
+        delTaskTips: 'When you delete a marking task, all the marking tasks of assigned teachers and marking data of the currently assessment will be deleted. Are you sure you want to delete it?',
+        distribution: '題目配分:',
+        loadAll: '已加載所有數據',
+
         //ByqU.vue & ByStu.vue
         quit: '退出閱卷',
         examName: '考試名稱:',
@@ -427,7 +435,7 @@ export default {
         unmark: '未閱',
         fullScore: '滿分',
         zeroScore: '零分',
-        halfRight:'半對',
+        halfRight: '半對',
         submit: '提交分數/批註',
         setting1: '打分自動切換學生',
         setting2: '完成批閱自動彈出切換',

+ 4 - 2
TEAMModelOS/ClientApp/src/locale/lang/en-US/studentWeb.js

@@ -289,8 +289,10 @@ export default {
     baseInfo: {
         subject: 'Subject:',
         teacher: 'Teacher:',
-        period: 'Activity Duration:',
-        postTime: 'Start Time:',
+        voteType: "投票類型:",
+        timeLong: "時長:",
+        period: 'Activity Duration:',
+        postTime: 'Start Time:',
         classTime: 'Class time',
         unFinished: 'Unfinished',
         Fineshed: 'Completed',

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

@@ -142,5 +142,6 @@ export default {
 	cancelShare: 'Cancel Share',
 	cancelTip1: 'Are you sure to cancel share with',
 	cancelTip2: '?',
-
+	getSyllabusErr: '獲取册別失敗',
+	getSyllabusErr1: '獲取課綱失敗'
 }

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

@@ -39,4 +39,5 @@ export default{
 	toSchool:'Go To School Platform',
     schoolMgt:'School Management',
     systemSet:'System Settings',
+    updErr:'修改失敗'
 }

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

@@ -32,7 +32,7 @@ export default {
     delOk:'删除成功!',
     delErr:'删除失败!',
     addOk:'添加成功!',
-    addErr:'添加成功!',
+    addErr:'添加失败!',
     editOk:'修改成功!',
     editErr:'修改失败!',
     formTips:'请检查课程信息!',
@@ -134,6 +134,7 @@ export default {
     attendRate:'出席率:',
     rcdScore:'总计分:',
     interactNum:'互动总数:',
+    cusInfoErr:'查询课程信息失败',
 
     //ManageClass.vue
     stuMgt:'学生管理',
@@ -319,6 +320,7 @@ export default {
     customNameList:'教学班',
     teaTimeWraning:'该教师此时段已有课程安排',
     classTimeWarning:'该班级此时段已有课程安排',
+    teaListErr:'查询教师名单异常',
 
     // JoinClass.vue
     join:{

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

@@ -231,7 +231,7 @@ export default {
 		createSheet:'生成答题卡',
 		reCreateSheet:'重新生成',
 		choosePaper:'选择试卷',
-		choosed:'选择',
+		choosed:'取消选择',
 		searchPaper:'输入试卷名称进行搜索...'
 	},
 	importFile:{

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

@@ -74,5 +74,6 @@ export default{
     allThan80:'T&P≥70',
     semesterCount:'本学期课例',
     weekCount:'本周课例',
-    dayCount:'今日课例'
+    dayCount:'今日课例',
+    cusTableErr:'获取课表失败'
 }

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

@@ -57,7 +57,12 @@ export default {
         edName:'修改评测名称',
         edNameHolder:'请输入评测名称',
         scoreStatus:'待评分',
-        hasDel:'此评测已被删除'
+        scoreStatus1:'已评分',
+        hasDel:'此评测已被删除',
+        actionErr:'操作失败',
+        classInfoErr:'查询班级信息失败',
+        evListErr:'查询评测列表失败',
+        exInfoErr:'查询评测详情失败'
     },
 
     //CreateEv
@@ -250,7 +255,8 @@ export default {
         exportData:'导出数据',
         exporting:'正在导出',
         exportTips:'评测进行中,有些学生尚未作答,确认导出数据吗?',
-        noQuMark:'已完成所有题目评分,暂无未阅题目'
+        noQuMark:'已完成所有题目评分,暂无未阅题目',
+        noUpd:'暂未修改分数'
     },
 
     //SimpleAnalysis.vue
@@ -275,7 +281,9 @@ export default {
         scoreMat: '分数段统计',
         complyNum: '及格',
         failedNum: '不及格',
-        complyCount:'及格人数统计'
+        complyCount:'及格人数统计',
+        simpleErr:'查询统计数据失败',
+        dataErr:'评测统计数据出错啦'
     },
 
     mark: {

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

@@ -289,8 +289,10 @@ export default {
     baseInfo: {
         subject: '学科:',
         teacher: '教师:',
-        period: '活动期限:',
-        postTime: '发布时间:',
+        voteType: "投票类型:",
+        timeLong: "时长:",
+        period: '活动期限:',
+        postTime: '发布时间:',
         classTime: '上课时间',
         unFinished: '未完成',
         Fineshed: '已完成',

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

@@ -142,5 +142,7 @@ export default{
 	cancelShare:'取消分享',
 	cancelTip1:'确认取消对',
 	cancelTip2:'的分享?',
+	getSyllabusErr:'获取册别失败',
+	getSyllabusErr1:'获取课纲失败'
 	
 }

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

@@ -38,5 +38,6 @@ export default{
     toArea:'前往区级平台',
 	toSchool:'前往校级平台',
     schoolMgt:'学校管理',
-    systemSet:'系统设置'
+    systemSet:'系统设置',
+    updErr:'修改失败'
 }

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

@@ -22,7 +22,7 @@ export default {
 	fontSize:'字体大小',
 	fontColor:'字体颜色',
 	newNotice:'新通知',
-	noData:'暂无数据',
+	noData:'暂无',
 	clearAllMsgs:'清空消息',
 	clearAllTip:'确认清空所有消息通知?',
 	noJoinSchool:'暂未加入学校',

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

@@ -94,7 +94,7 @@ export default {
     ev: '評量',
     vote: '投票',
     qu: '問卷',
-    hw: '作',
+    hw: '作',
     sl: '自主學習',
     acTime: '活動時間',
     private: '個人',
@@ -134,6 +134,7 @@ export default {
     attendRate: '出席率:',
     rcdScore: '總計分:',
     interactNum: '互動總數:',
+    cusInfoErr:'査詢課程資訊失敗',
 
     //ManageClass.vue
     stuMgt: '學生管理',
@@ -319,6 +320,7 @@ export default {
     customNameList: '自定義名單',
     teaTimeWraning: '該教師此時段已有課程安排',
     classTimeWarning: '該班級此時段已有課程安排',
+    teaListErr:'査詢教師名單异常',
 
     // JoinClass.vue
     join: {

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

@@ -230,7 +230,7 @@ export default {
 		createSheet:'生成答題卡',
 		reCreateSheet:'重新生成',
 		choosePaper: '選擇試卷',
-		choosed: '選擇',
+		choosed: '取消選擇',
 		searchPaper: '輸入試卷名稱進行搜尋…'
 	},
 	importFile: {

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

@@ -74,5 +74,6 @@ export default {
     allThan80: 'T&P≥70',
     semesterCount:'本學期課例',
     weekCount:'本週課例',
-    dayCount:'今日課例'
+    dayCount:'今日課例',
+    cusTableErr:'獲取課表失敗'
 }

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

@@ -56,8 +56,13 @@ export default {
         updErr: '修改失敗',
         edName: '修改評測名稱',
         edNameHolder: '請輸入評測名稱',
-        scoreStatus:'待評分',
-        hasDel:'此評測已被删除'
+        scoreStatus: '待評分',
+        scoreStatus1:'已評分',
+        hasDel: '此評測已被删除',
+        actionErr: '操作失敗',
+        classInfoErr: '査詢班級資訊失敗',
+        evListErr: '査詢評測清單失敗',
+        exInfoErr: '査詢評測詳情失敗'
     },
 
     //建立評量學校/個人
@@ -250,7 +255,8 @@ export default {
         exportData: '導出數據',
         exporting: '正在導出',
         exportTips: '評測進行中,有些學生尚未作答,確認導出數據嗎? ',
-        noQuMark: '已完成所有題目評分,暫無未閱題目'
+        noQuMark: '已完成所有題目評分,暫無未閱題目',
+        noUpd:'暫未修改分數'
     },
 
     //SimpleAnalysis.vue
@@ -275,7 +281,9 @@ export default {
         scoreMat: '分數段統計',
         complyNum: '及格',
         failedNum: '不及格',
-        complyCount: '及格人數統計'
+        complyCount: '及格人數統計',
+        simpleErr: '查詢統計數據失敗',
+        dataErr:'評測統計數據出錯啦'
     },
 
     mark: {

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

@@ -289,8 +289,10 @@ export default {
     baseInfo: {
         subject: '學科:',
         teacher: '教師:',
-        period: '活動期限:',
-        postTime: '發佈時間:',
+        voteType: "投票類型:",
+        timeLong: "時長:",
+        period: '活動期限:',
+        postTime: '發佈時間:',
         classTime: '上課時間',
         unFinished: '未完成',
         Fineshed: '已完成',

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

@@ -1,5 +1,5 @@
 export default {
-	noMatchTerm:'無匹配學期',
+	noMatchTerm: '無匹配學期',
 	emptyTip: '空目錄冊別無法進行分享!',
 	chooseChapterTip: '請先選擇需要收藏的章節!',
 	chooseVolumeTip: '請選擇已創建的冊別或者新建冊別!',
@@ -142,4 +142,6 @@ export default {
 	cancelShare: '取消分享',
 	cancelTip1: '確認取消對',
 	cancelTip2: '的分享?',
+	getSyllabusErr: '獲取册別失敗',
+	getSyllabusErr1: '獲取課綱失敗'
 }

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

@@ -38,5 +38,6 @@ export default{
     toArea:'前往區級平台',
 	toSchool:'前往校級平臺',
     schoolMgt:'學校管理',
-    systemSet:'系統設置'
+    systemSet:'系統設置',
+    updErr:'修改失敗'
 }

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

@@ -24,7 +24,7 @@ export default {
 	newNotice: '新通知',
 	clearAllMsgs:'清空消息',
 	clearAllTip:'確認清空所有消息通知?',
-	noData: '暫無資料',
+	noData: '暫無',
 	noJoinSchool: '暫未加入學校',
 	noShoolTip: '用戶暫無學校清單資料',
 	getDataFail: '獲取資料失敗',

+ 1 - 63
TEAMModelOS/ClientApp/src/view/areaMgmt/AreaLayout.vue

@@ -239,62 +239,7 @@ export default {
         changeMenuStatus() {
             this.$refs.side1.toggleCollapse()
             this.$EventBus.$emit('onCollapseChange', this.isCollapsed)
-        },
-        // 获取账号详细信息,用来验证大陆站用户是否完成手机号绑定
-        getIdInfo() {
-            let host = this.$store.state.config.China.coreAPIUrl
-            let clientId = this.$store.state.config.China.clientID
-            let idToken = localStorage.getItem('id_token')
-            let tokenData = jwtDecode(idToken)
-            let nonce = tokenData ? tokenData.nonce : ''
-            let params = {
-                "grant_type": "get",
-                "nonce": nonce,
-                "client_id": clientId,
-                "id_token": idToken
-            }
-            this.$api.service.getIdProfile(host, params).then(
-                res => {
-                    console.log(res)
-                    if (!res.error) {
-                        if (!res.mobile) {
-                            this.$Notice.warning({
-                                title: this.$t('home.verifyPhTitle'),
-                                duration: 0,
-                                render: (h, params) => {
-                                    return h('span', {
-                                        style: {
-                                            color: 'red'
-                                        }
-                                    }, [
-                                        h('span', this.$t('home.verifyPh') + ', '),
-                                        h('a', {
-                                            domProps: {
-                                                innerHTML: this.$t('home.toPhone')
-                                            },
-                                            on: {
-                                                'click': () => {
-                                                    this.$router.push({
-                                                        path: '/home/userCenter'
-                                                    })
-                                                }
-                                            }
-                                        })
-                                    ])
-                                }
-                            })
-                        } else {
-                            this.hasVerify = true
-                        }
-                    } else {
-                        this.$Message.error('API Error')
-                    }
-                },
-                err => {
-                    console.log(err)
-                }
-            )
-        },
+        }
     },
     computed: {
         rotateIcon() {
@@ -330,13 +275,6 @@ export default {
             this.isShowLogo = cloudSetting.logoStatus === 'open'
         }
         this.srvAdr = this.$store.state.config.srvAdr
-        //只有大陆站才验证手机号
-        if (this.srvAdr == 'China') {
-            // 暂不提示
-            // this.getIdInfo()
-        } else {
-            this.hasVerify = true
-        }
         //判断是否绑定手机、加入学校
         this.$Notice.destroy()
     },

+ 3 - 2
TEAMModelOS/ClientApp/src/view/auth/Serial.vue

@@ -256,11 +256,12 @@ export default {
                             this.sltSerial = []
                         }
                     } else {
-                        this.$Message.error('API error!')
+                        // this.$Message.error('API error!')
+                        this.$Message.success(this.$t('schoolBaseInfo.saveErr'))
                     }
                 },
                 err => {
-                    this.$Message.error('API error!')
+                    // this.$Message.error('API error!')
                 }
             )
         },

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

@@ -123,7 +123,7 @@ export default {
                     })
                 },
                 err => {
-                    this.$Message.error('API error!')
+                    // this.$Message.error('API error!')
                 }
             )
         },

+ 4 - 4
TEAMModelOS/ClientApp/src/view/classmgt/ClassStudent.vue

@@ -508,7 +508,7 @@ export default {
                                 this.tableLoading = false
                             },
                             err => {
-                                this.$Message.error('API error!')
+                                // this.$Message.error('API error!')
                                 this.tableLoading = false
                             }
                         )
@@ -535,7 +535,7 @@ export default {
                                     this.$Message.success(this.$t('cusMgt.resetPwOk'))
                                 },
                                 err => {
-                                    this.$Message.error('API ERROR!')
+                                    // this.$Message.error('API ERROR!')
                                 }
                             ).finally(() => {
                                 this.tableLoading = false
@@ -664,11 +664,11 @@ export default {
                         this.$Message.success(this.$t('cusMgt.saveOk'))
                         this.updated = false
                     } else {
-                        this.$Message.error('API error!')
+                        this.$Message.success(this.$t('cusMgt.saveErr'))
                     }
                 },
                 (err) => {
-                    this.$Message.error('API error!')
+                    // this.$Message.error('API error!')
                 }
             ).finally(() => {
                 this.tableLoading = false

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

@@ -183,7 +183,7 @@ export default {
                     })
                 },
                 err => {
-                    this.$Message.error('API error!')
+                    // this.$Message.error('API error!')
                 }
             )
         }

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

@@ -164,7 +164,7 @@
 									</div>
 									<!-- 判断题答案 -->
 									<div v-else-if="item.type === 'judge'">
-										<span>{{ item.answer.length ? (item.answer[0] === 'A' ? $t('evaluation.isTrue') : $t('evaluation.isFalse')) : $t('evaluation.noAnswer') }}</span>
+										<span>{{ item.answer.length ? (item.answer[0] === 'A' ? $t('evaluation.isTrue') : $t('evaluation.isFalse')) : $t('utils.noData') }}</span>
 									</div>
 									<!-- 其余题型答案 -->
 									<div v-else>
@@ -177,14 +177,14 @@
 							<div class="item-explain">
 								<span class="explain-title">【{{$t('evaluation.explain')}}】</span>
 								<div class="item-explain-details">
-									<span v-html="item.explain ||$t('evaluation.noExplain')"></span>
+									<span v-html="item.explain ||$t('utils.noData')"></span>
 								</div>
 							</div>
 							<!-- 知识点部分 -->
 							<div class="item-explain">
 								<span class="explain-title">【{{$t('evaluation.knowledgePoints')}}】</span>
 								<div class="item-explain-details">
-									<span v-if="!item.knowledge || !item.knowledge.length">{{$t('evaluation.noPoints')}}</span>
+									<span v-if="!item.knowledge || !item.knowledge.length">{{ $t('utils.noData') }}</span>
 									<div v-else>
 										<span v-for="(point, index) in item.knowledge" class="item-point-tag" :key="index">
 											{{ point }}

+ 1 - 1
TEAMModelOS/ClientApp/src/view/evaluation/bank/ShareCenter.less

@@ -11,7 +11,7 @@
     background-color: white;
 	position: sticky;
 	top:0;
-	z-index: 999;
+	z-index: 99;
 	
 	
 	.share-center-tab{

+ 14 - 15
TEAMModelOS/ClientApp/src/view/evaluation/bank/ShareCenter.vue

@@ -2,7 +2,7 @@
 	<div class="share-center-container">
 		<div class="share-center-tab-wrap">
 			<span @click="tabClick('item')"
-				:class="['share-center-tab',tabName == 'item' ? 'share-center-tab-active':'']">
+				:class="['share-center-tab',tabName == 'exercise' ? 'share-center-tab-active':'']">
 				分享个人试题
 			</span>
 			<span @click="tabClick('paper')"
@@ -20,15 +20,15 @@
 			<div class="share-content-left">
 				<vuescroll>
 					<ExerciseList ref="exListRef" isComponent @chooseQuChange="chooseQuChange"
-						v-if="tabName === 'item'">
+						v-if="tabName === 'exercise'">
 					</ExerciseList>
 					<BasePaperList ref="paperListRef" isComponent chooseModel @onPaperChange="onPaperChange" v-else></BasePaperList>
 				</vuescroll>
 			</div>
 			<div class="share-content-right">
-				<p class="title" v-if="tabName === 'item'">已选试题({{ selectedItems.length }})</p>
+				<p class="title" v-if="tabName === 'exercise'">已选试题({{ selectedItems.length }})</p>
 				<p class="title" v-if="tabName === 'paper'">已选试卷({{ selectedPapers.length }})</p>
-				<div class="selected-wrap" v-if="tabName === 'item'">
+				<div class="selected-wrap" v-if="tabName === 'exercise'">
 					<EmptyData v-if="!selectedItems.length"></EmptyData>
 					<div class="selected-list" v-else>
 						<div class="selected-item text-cut" v-for="(item,index) in selectedItems" :key="index">
@@ -86,7 +86,7 @@
 				selectedItems: [],
 				selectedPapers: [],
 				btnLoading: false,
-				tabName: 'item',
+				tabName: 'exercise',
 				schoolInfo: {},
 				sharePeriodId: '',
 				shareSubjectId: '',
@@ -99,7 +99,7 @@
 		},
 		created() {
 			let tabName = this.$route.params.tabName
-			this.tabName = tabName || 'item'
+			this.tabName = tabName || 'exercise'
 			this.getSchoolInfo()
 			
 			
@@ -140,7 +140,7 @@
 				this.schoolBlobClient = await this.initBlobClient('school')
 				this.privateBlobClient = await this.initBlobClient('private')
 				this.btnLoading = true
-				if(this.tabName === 'item'){
+				if(this.tabName === 'exercise'){
 					// 对所有分享的题目进行信息补充及保存事件处理
 					this.selectedItems.forEach(item => {
 						item.scope = 'school'
@@ -179,13 +179,12 @@
 				// 执行分享同步操作
 				Promise.all(promiseArr).then(result => {
 					this.$Message.success('分享成功!')
-					if(this.tabName === 'item'){
-						this.$refs.exListRef.selectedArr = []
-						this.selectedItems = []
-					}else{
-						this.$refs.paperListRef.checkedPaperList = []
-						this.selectedPapers = []
-					}
+					this.$router.push({
+						name:'schoolBank',
+						params:{
+							tabName:this.tabName
+						}
+					})
 				}).catch(e => {
 					console.log(e)
 					this.$Message.success('分享失败!')
@@ -309,7 +308,7 @@
 		},
 		computed:{
 			btnDisable(){
-				return (this.tabName === 'item' && !this.selectedItems.length) || (this.tabName === 'paper' && !this.selectedPapers.length)
+				return (this.tabName === 'exercise' && !this.selectedItems.length) || (this.tabName === 'paper' && !this.selectedPapers.length)
 			}
 		}
 	}

+ 7 - 5
TEAMModelOS/ClientApp/src/view/evaluation/bank/TestPaperList.vue

@@ -100,11 +100,11 @@
 
 			<!-- 预览试卷部分 -->
 			<div class="pl-review-wrap animated fadeIn" v-if="isPreview">
-				<div class="pl-review-wrap-left">
-					<TestPaper :paper="evaluationInfo" isExamPaper hidePie></TestPaper>
+				<div class="pl-review-wrap-left" :style="{ width: isComponent ? '100%' : '75%' }">
+					<TestPaper :paper="evaluationInfo" isExamPaper hidePie :isSharePreview="isComponent" @exitPreview="exitPreview"></TestPaper>
 				</div>
 
-				<div class="pl-review-wrap-right">
+				<div class="pl-review-wrap-right" v-if="!isComponent">
 					<h2>{{$t('evaluation.paperList.paperAnalysis')}}</h2>
 					<p style="margin-bottom: 20px;margin-top: 10px;">
 						({{$t('evaluation.paperList.totalScore')}}:{{ evaluationInfo.score }}
@@ -213,7 +213,9 @@
 			this.isShowSchoolBank = this.$route.name === "schoolBank";
 		},
 		methods: {
-
+			exitPreview(){
+				this.isPreview = false
+			},
 			onCheckPaper(item) {
 				console.log(item)
 				this.checkedPaperList.push(item)
@@ -226,7 +228,7 @@
 			},
 
 			async onPreviewPaper(paper) {
-				if (this.chooseModel) {
+				if (this.chooseModel && !this.isComponent) {
 					this.$emit('previewPaper', paper)
 					return
 				}

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

@@ -111,7 +111,7 @@
 				this.$router.push({
 					name: 'shareCenter',
 					params: {
-						tabName: this.currentTab === 'exercise' ? 'item' : 'paper'
+						tabName: this.currentTab
 					}
 				})
 			},

+ 3 - 3
TEAMModelOS/ClientApp/src/view/evaluation/components/BaseChild.vue

@@ -39,7 +39,7 @@
 							<!-- 问答题答案 -->
 							<div v-if="item.type === 'subjective' || item.type === 'complete'">
 								<span v-for="(answer,index) in item.answer" :key="index"
-									v-html="item.answer && item.answer.length ? answer : $t('evaluation.noAnswer')"></span>
+									v-html="item.answer && item.answer.length ? answer : $t('utils.noData')"></span>
 							</div>
 							<!-- 问答题答案 -->
 							<div v-else-if="item.type === 'judge'">
@@ -56,14 +56,14 @@
 					<div class="item-explain">
 						<span class="explain-title">【{{$t('evaluation.explain')}}】</span>
 						<div class="item-explain-details">
-							<span v-html="item.explain || $t('evaluation.noExplain')"></span>
+							<span v-html="item.explain || $t('utils.noData')"></span>
 						</div>
 					</div>
 					<!-- 知识点部分 -->
 					<div class="item-explain">
 						<span class="explain-title">【{{$t('evaluation.knowledgePoints')}}】</span>
 						<div class="item-explain-details">
-							<span v-if="!item.knowledge || !item.knowledge.length">{{$t('evaluation.noPoints')}}</span>
+							<span v-if="!item.knowledge || !item.knowledge.length">{{ $t('utils.noData') }}</span>
 							<div v-else>
 								<span v-for="(point,index) in item.knowledge" :key="index" class="item-point-tag">
 									<span>{{ point }}</span>

+ 3 - 3
TEAMModelOS/ClientApp/src/view/evaluation/components/BaseExerciseList.vue

@@ -116,7 +116,7 @@
 										<div
 											v-if="item.type === 'subjective' || item.type === 'complete' || item.type === 'connector' || item.type === 'correct'">
 											<span v-for="(answer,index) in item.answer" :key="index"
-												v-html="item.answer.length ? answer : $t('evaluation.noAnswer')"></span>
+												v-html="item.answer.length ? answer : $t('utils.noData')"></span>
 										</div>
 										<!-- 问答题答案 -->
 										<div v-else-if="item.type === 'judge'">
@@ -133,7 +133,7 @@
 								<div class="item-explain" v-show="isShowAnswer">
 									<span class="explain-title">【{{$t('evaluation.explain')}}】</span>
 									<div class="item-explain-details">
-										<span v-html="item.explain || $t('evaluation.noExplain')"></span>
+										<span v-html="item.explain || $t('utils.noData')"></span>
 									</div>
 								</div>
 								<!-- 知识点部分 -->
@@ -141,7 +141,7 @@
 									<span class="explain-title">【{{$t('evaluation.knowledgePoints')}}】</span>
 									<div class="item-explain-details">
 										<span
-											v-if="!item.knowledge || !(_.compact(item.knowledge).length)">{{$t('evaluation.noPoints')}}</span>
+											v-if="!item.knowledge || !(_.compact(item.knowledge).length)">{{ $t('utils.noData') }}</span>
 										<div v-else>
 											<span v-for="(point,index) in item.knowledge" :key="index"
 												class="item-point-tag">

+ 13 - 3
TEAMModelOS/ClientApp/src/view/evaluation/index/TestPaper.vue

@@ -52,9 +52,11 @@
 							<Button class="base-info-btn" type="info" @click="isShowAnalysis = !isShowAnalysis"
 								v-show="paperInfo.item.length && !isHideAnalysis">{{ isShowAnalysis ? this.$t('evaluation.paperList.paperDetails') : this.$t('evaluation.paperList.paperAnalysis')}}</Button>
 							<Button class="base-info-btn" type="info" @click="downloadSheet" :loading="downLoading"
-								v-show="paperInfo.item.length && paperInfo.id && paper.sheet && !hideSheet">{{ $t('evaluation.paperList.goAnswerSheet') }}</Button>
+								v-show="paperInfo.item.length && paperInfo.id && paper.sheet && !hideSheet && !isSharePreview">{{ $t('evaluation.paperList.goAnswerSheet') }}</Button>
 							<Button class="base-info-btn" type="info" @click="goAnswerSheet"
-								v-show="paperInfo.item.length && paperInfo.id && !hideSheet">{{ paper.sheet ?  $t('evaluation.paperList.reCreateSheet') : $t('evaluation.paperList.createSheet') }}</Button>
+								v-show="paperInfo.item.length && paperInfo.id && !hideSheet && !isSharePreview">{{ paper.sheet ?  $t('evaluation.paperList.reCreateSheet') : $t('evaluation.paperList.createSheet') }}</Button>
+							<Button class="base-info-btn" type="info" @click="exitPreview"
+								v-show="paperInfo.item.length && paperInfo.id && isSharePreview">{{ $t('evaluation.index.backList') }}</Button>
 						</div>
 					</div>
 					<!-- 试卷头部信息 -->
@@ -152,7 +154,11 @@
 			hideSheet: {
 				type: Boolean,
 				default: false
-			}
+			},
+			isSharePreview: {
+				type: Boolean,
+				default: false
+			},
 		},
 		data() {
 			return {
@@ -208,6 +214,10 @@
 			}
 		},
 		methods: {
+			/* 退出预览 */
+			exitPreview(){
+				this.$emit('exitPreview')
+			},
 			/* 手动保存 */
 			doSaveEdit(){
 				this.editLoading = true

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

@@ -443,7 +443,7 @@ export default {
                     this.noticeList = res.notices
                 },
                 err => {
-                    this.$Message.error('API error!')
+                    // this.$Message.error('API error!')
                 }
             )
         },
@@ -579,7 +579,7 @@ export default {
 
                 },
                 err => {
-                    this.$Message.error('API error!')
+                    // this.$Message.error('API error!')
                 }
             ).finally(() => {
                 this.isLoading = false

+ 5 - 4
TEAMModelOS/ClientApp/src/view/homepage/MinTable.vue

@@ -214,24 +214,25 @@ export default {
                                             })
                                         }
                                     } catch (e) {
-                                        this.$Message.error('API ERROR!')
+                                        // this.$Message.error('API ERROR!')
                                     }
                                 }
                                 this.dataToTable()
                             },
                             err => {
-                                this.$Message.error('API ERROR')
+                                // this.$Message.error('API ERROR')
                             }
                         ).finally(() => {
                             this.tabalLoading = false
                         })
 
                     } else {
-                        this.$Message.error('API ERROR!')
+                        // this.$Message.error('API ERROR!')
+                        this.$Message.error(this.$t('home.cusTableErr'))
                     }
                 },
                 (err) => {
-                    this.$Message.error('API ERROR!')
+                    // this.$Message.error('API ERROR!')
                 }
             )
         },

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

@@ -781,7 +781,7 @@ export default {
                 ).blob_uri
                 let host = blobUrl.substring(0, blobUrl.lastIndexOf("/"))
                 let cont = blobUrl.substring(blobUrl.lastIndexOf("/") + 1)
-                let path = `train/${this.activity[this.activeIndex].id}`
+                let path = `train/${this.activity[this.activeIndex].id}/${this.$store.state.userInfo.TEAMModelId}`
                 let statusCode = 0
                 if(this.answerList) {
                     statusCode = await this.deleteBlobPrefix(cont, path)

+ 13 - 2
TEAMModelOS/ClientApp/src/view/learnactivity/ByQuMark.vue

@@ -32,7 +32,7 @@
                 <span class="base-info-item" style="white-space: nowrap;">
                     {{$t('learnActivity.score.quIndex')}}
                 </span>
-                <span :class="['qu-order-tag-def', quIndex == index ? 'qu-order-tag-active' : '' ]" v-for="(item,index) in quNoList" :key="index" @click="quIndex = index">
+                <span :class="['qu-order-tag-def', quIndex == index ? 'qu-order-tag-active' : '' ]" v-for="(item,index) in quNoList" :key="index" @click="selectQu(index)">
                     {{item.label}}
                 </span>
             </div>
@@ -231,6 +231,12 @@ export default {
         }
     },
     methods: {
+        selectQu(index){
+            if(this.isUpd){
+                this.saveScore()
+            }
+            this.quIndex = index
+        },
         /**
          * score 分数
          * isAll 是否所有 false -> 筛选未作答
@@ -397,6 +403,10 @@ export default {
             this.markStatus = true
         },
         saveScore() {
+            if(!this.isUpd){
+                this.$Message.warning(this.$t('learnActivity.score.noUpd'))
+                return
+            }
             let saveList = []
             for (const key in this.preSaveList) {
                 saveList.push(this.preSaveList[key])
@@ -415,12 +425,13 @@ export default {
                 "school": this.examInfo.scope == 'school' ? this.$store.state.userInfo.schoolCode : this.$store.state.userInfo.TEAMModelId,
                 "subjectId": this.subjectId
             }
+            let d = this._.cloneDeep(saveList)
             this.$api.learnActivity.UpsertAllRecord(requestData).then(res => {
                 if (res.error == null) {
                     this.successTips()
+                    this.$emit('updScore', d)
                     //TODO 清空预保存学生
                     this.preSaveList = {}
-                    this.$emit('updScore', saveList)
                 } else {
                     this.$Message.error(this.$t('learnActivity.score.saveSocreErr'))
                 }

+ 8 - 3
TEAMModelOS/ClientApp/src/view/learnactivity/ByStuMark.vue

@@ -710,6 +710,11 @@ export default {
 
         //保存学生分数
         saveScore() {
+            if(!this.isUpd){
+                this.$Message.warning(this.$t('learnActivity.score.noUpd'))
+                return
+            }
+            let d = this._.cloneDeep(this.studentAnswer)
             let requestData = {
                 "id": this.examId,
                 "code": this.owner == 'school' ? this.$store.state.userInfo.schoolCode : this.$store.state.userInfo.TEAMModelId,
@@ -724,10 +729,10 @@ export default {
                 "subjectId": this.subjectId
             }
             this.$api.learnActivity.UpsertAllRecord(requestData).then(res => {
-                if (res.error == null) {
+                if (!res.error) {
                     this.$Message.success(this.$t('learnActivity.score.saveScoreOk'))
                     this.isUpd = false
-                    this.$emit('updScore', [this.studentAnswer])
+                    this.$emit('updScore', [d])
                     if (!this.studentAnswer.scores.includes(-1)) {
                         this.isComplete = true
                     }
@@ -805,7 +810,7 @@ export default {
         pStudentAnswer: {
             async handler(newValue, oldValue) {
                 this.studentAnswer = this._.cloneDeep(newValue || {})
-                console.log(this.studentAnswer)
+                this.isComplete = false
                 //处理默认显示批注
                 this.markFlag = {}
                 if (this.studentAnswer.mark) {

+ 3 - 2
TEAMModelOS/ClientApp/src/view/learnactivity/CreatePrivEva.vue

@@ -391,7 +391,8 @@ export default {
             this.$api.learnActivity.SaveExamInfo(requestData).then(
                 res => {
                     if (res.error) {
-                        this.$Message.error('API ERROR!')
+                        // this.$Message.error('API ERROR!')
+                        this.$Message.error(this.$t('learnActivity.mark.saveErr'))
                         this.isLoading = false
                         return
                     }
@@ -507,7 +508,7 @@ export default {
                 },
                 err => {
                     this.isLoading = false
-                    this.$Message.error('API ERROR!')
+                    // this.$Message.error('API ERROR!')
                 }
             )
         },

+ 2 - 27
TEAMModelOS/ClientApp/src/view/learnactivity/CreateSchoolEva.vue

@@ -562,31 +562,6 @@ export default {
                 }
             }
         },
-        /**
-         * 保存试卷
-         * @param paperInfo
-         * @param index
-         */
-        saveTestPaper(paperInfo, index) {
-            if (this.examInfo.id == undefined) {
-                this.isLoading = true
-                this.saveEvaluation()
-            } else {
-                this.checkPaper(paperInfo)
-                this.$api.learnActivity.SaveExamPaper(paperInfo).then(
-                    res => {
-                        if (res.error == null) {
-                            this.evaluationInfo.paperInfo[index].id = res.result.data.id
-                        } else {
-                            this.$Message.error('API ERROR!')
-                        }
-                    },
-                    err => {
-                        this.$Message.error('API ERROR!')
-                    }
-                )
-            }
-        },
         async saveEvaluation() {
             //表单验证
             let flag = true
@@ -671,7 +646,8 @@ export default {
             this.$api.learnActivity.SaveExamInfo(requestData).then(
                 res => {
                     if (res.error) {
-                        this.$Message.error('API ERROR!')
+                        // this.$Message.error('API ERROR!')
+                        this.$Message.error(this.$t('learnActivity.mark.saveErr'))
                         this.isLoading = false
                         return
                     }
@@ -773,7 +749,6 @@ export default {
                 },
                 err => {
                     this.isLoading = false
-                    this.$Message.error('API ERROR!')
                 }
             )
         },

+ 91 - 38
TEAMModelOS/ClientApp/src/view/learnactivity/MgtPrivEva.vue

@@ -32,9 +32,13 @@
                                 <span class="ev-info-tag ev-tag-common">{{getTypeLabel(item.type)}}</span>
                                 <!-- 评测模式 -->
                                 <span class="ev-info-tag ev-tag-common">{{getModeLabel(item.source)}}</span>
-                                <!-- 活动状态 -->
-                                <span class="evaluation-status-tag ev-tag-common" :style="{ borderColor: item.statusColor, color: item.statusColor}">
-                                    {{ item.statusText }}
+                                <!-- 活动进度状态 -->
+                                <span class="evaluation-status-tag ev-tag-common" :style="{ borderColor: item.progColor, color: item.progColor}">
+                                    {{ item.progText }}
+                                </span>
+                                <!-- 活动评分状态 -->
+                                <span v-show="item.scoreText" class="evaluation-status-tag ev-tag-common" :style="{ borderColor: item.scoreColor, color: item.scoreColor}">
+                                    {{ item.scoreText }}
                                 </span>
                                 <!-- 立即结束 -->
                                 <span v-if="item.progress == 'going'" class="handle-end-tag ev-tag-common" @click="handleEnd(index)">
@@ -280,11 +284,12 @@ export default {
                                 this.$Message.success(this.$t('learnActivity.mgtScEv.stopOk'))
                                 this.evaListShow[index].progress = 'finish'
                             } else {
-                                this.$Message.error('API ERROR!')
+                                // this.$Message.error('API ERROR!')
+                                this.$Message.error(this.$t('learnActivity.mgtScEv.actionErr'))
                             }
                         },
                         err => {
-                            this.$Message.error('API ERROR!')
+                            // this.$Message.error('API ERROR!')
                         }
                     )
                 }
@@ -308,10 +313,11 @@ export default {
                     code: requestData
                 }).then(
                     res => {
-                        if (res.error == null) {
+                        if (!res.error) {
                             this.targetList = res.result.data
                         } else {
-                            this.$Message.error('API ERROR!')
+                            // this.$Message.error('API ERROR!')
+                            this.$Message.error(this.$t('learnActivity.mgtScEv.classInfoErr'))
                         }
                     },
                     err => {
@@ -399,9 +405,6 @@ export default {
         selectSubject(index) {
             this.curSubIndex = index
         },
-        selectBar(index) {
-            this.curBarIndex = index
-        },
         dateFormat(timestamp) {
             let date = new Date(timestamp)
             let Y = date.getFullYear()
@@ -412,24 +415,23 @@ export default {
             return `${Y}-${M < 9 ? '0' + (M + 1) : M + 1}-${D} ${H < 10 ? '0' + H : H}:${MIN < 10 ? '00' : MIN}`
         },
         getEvStatusInfo(progress, isScore) {
-            let info = {
-                // color: '#ed4014'
-            }
+            let info = {}
             if (progress == 'pending') {
-                info.text = this.$t('learnActivity.mgtScEv.pending')
-                info.color = '#2d8cf0'
-            }
-            if (progress == 'going') {
-                info.text = this.$t('learnActivity.mgtScEv.going')
-                info.color = '#19be6b'
+                info.progText = this.$t('learnActivity.mgtScEv.pending')
+                info.progColor = '#2d8cf0'
+            } else if (progress == 'going') {
+                info.progText = this.$t('learnActivity.mgtScEv.going')
+                info.progColor = '#19be6b'
+            } else if (progress == 'finish') {
+                info.progText = this.$t('learnActivity.mgtScEv.finish')
+                info.progColor = '#515a6e'
             }
-            if (progress == 'finish' && isScore === 0) {
-                info.text = this.$t('learnActivity.mgtScEv.scoreStatus')
-                info.color = '#ff9900'
-            }
-            if (progress == 'finish' && isScore === 1) {
-                info.text = this.$t('learnActivity.mgtScEv.finish')
-                info.color = '#515a6e'
+            if (isScore === 0) {
+                info.scoreText = this.$t('learnActivity.mgtScEv.scoreStatus')
+                info.scoreColor = '#ff9900'
+            } else if (isScore === 1) {
+                info.scoreText = this.$t('learnActivity.mgtScEv.scoreStatus1')
+                info.scoreColor = '#515a6e'
             }
             return info
         },
@@ -446,20 +448,23 @@ export default {
                         })
                         res.examInfo.forEach(item => {
                             let statusInfo = this.getEvStatusInfo(item.progress, item.sStatus)
-                            item.statusText = statusInfo.text
-                            item.statusColor = statusInfo.color
+                            item.progText = statusInfo.progText
+                            item.progColor = statusInfo.progColor
+                            item.scoreText = statusInfo.scoreText
+                            item.scoreColor = statusInfo.scoreColor
                         })
                         this.evaluationList = res.examInfo
                         this.evaListShow = res.examInfo
                         if (this.evaListShow.length) this.selectEvaluation(0)
 
                     } else {
-                        this$Message.error('API ERROR!')
+                        // this.$Message.error('API ERROR!')
+                        this.$Message.error(this.$t('learnActivity.mgtScEv.evListErr'))
                     }
                 }
             )
         },
-        selectEvaluation(index) {
+        checkScoreSave(fn, index) {
             let compStu = this.$refs['score-box'] ? this.$refs['score-box'].$refs['byStuMark'] : null
             let compQu = this.$refs['score-box'] ? this.$refs['score-box'].$refs['byQuMark'] : null
             if ((compStu && compStu.isUpd) || (compQu && compQu.isUpd)) {
@@ -474,16 +479,33 @@ export default {
                         } else if (compQu && compQu.isUpd) {
                             compQu.saveScore()
                         }
-                        this.toEvaluation(index)
+                        if (fn) fn(index)
                     },
                     onCancel: () => {
-                        this.toEvaluation(index)
+                        if (compStu && compStu.isUpd) {
+                            compStu.isUpd = false
+                        } else if (compQu && compQu.isUpd) {
+                            compStu.preSaveList = {}
+                        }
+                        if (fn) fn(index)
                     }
                 })
             } else {
-                this.toEvaluation(index)
+                if (fn) fn(index)
             }
         },
+        selectEvaluation(index) {
+            this.checkScoreSave(this.toEvaluation, index)
+        },
+        selectBar(index) {
+            this.checkScoreSave(this.handleSelectBar, index)
+        },
+        handleSelectBar(index) {
+            this.curBarIndex = index
+            this.$nextTick(() => {
+                if (this.$refs['score-box']) this.$refs['score-box'].showTest = false
+            })
+        },
         toEvaluation(index) {
             this.curSubIndex = 0
             this.curEvaIndex = index
@@ -524,23 +546,51 @@ export default {
                                 resData.papers[index].sheetNo = sheetNo
                                 //补充评测状态信息
                                 let statusInfo = this.getEvStatusInfo(resData.progress, resData.sStatus)
-                                resData.statusText = statusInfo.text
-                                resData.statusColor = statusInfo.color
+                                resData.progText = statusInfo.progText
+                                resData.progColor = statusInfo.progColor
+                                resData.scoreText = statusInfo.scoreText
+                                resData.scoreColor = statusInfo.scoreColor
                             }
                         }
                         this.evaListShow.splice(this.curEvaIndex, 1, resData)
                         this.examDetaiInfo = resData
                     } else {
-                        this.$Message.error('API ERROR!')
+                        // this.$Message.error('API ERROR!')
+                        this.$Message.error(this.$t('learnActivity.mgtScEv.exInfoErr'))
                     }
                 },
                 err => {
-                    this.$Message.error('API ERROR!')
+                    // this.$Message.error('API ERROR!')
                 }
             ).finally(() => {
                 this.isLoading = false;
             })
-        }
+        },
+        beforeunloadHandler(e) {
+            let compStu = this.$refs['score-box'] ? this.$refs['score-box'].$refs['byStuMark'] : null
+            let compQu = this.$refs['score-box'] ? this.$refs['score-box'].$refs['byQuMark'] : null
+            if ((compStu && compStu.isUpd) || (compQu && compQu.isUpd)) {
+                e = e || window.event
+                if (e) {
+                    e.returnValue = '关闭提示'
+                }
+                return '关闭提示'
+            }
+        },
+    },
+    mounted() {
+        // 监听浏览器刷新事件
+        window.addEventListener('beforeunload', e => this.beforeunloadHandler(e))
+        // 处理浏览器返回事件
+        // if (window.history && window.history.pushState) {
+        //     // 向历史记录中插入了当前页
+        //     history.pushState(null, null, document.URL);
+        //     window.addEventListener('popstate', this.goBack, false);
+        // }
+    },
+    destroyed() {
+        window.removeEventListener('beforeunload', e => this.beforeunloadHandler(e))
+        window.removeEventListener('popstate', this.goBack, false);
     },
     created() {
         if (this.$route.name == 'privateEvaluation') {
@@ -588,6 +638,9 @@ export default {
                 }
             }
         },
+    },
+    beforeRouteLeave(to, from, next) {
+        this.checkScoreSave(next)
     }
 }
 </script>

+ 91 - 56
TEAMModelOS/ClientApp/src/view/learnactivity/MgtSchoolEva.vue

@@ -64,9 +64,13 @@
                                 <!-- 评测模式 -->
                                 <span class="ev-info-tag ev-tag-common">{{getModeLabel(item.source)}}</span>
                                 <span class="ev-info-tag ev-tag-common">{{getTypeLabel(item.type)}}</span>
-                                <!-- 活动状态 -->
-                                <span class="evaluation-status-tag ev-tag-common" :style="{ borderColor: item.statusColor, color: item.statusColor}">
-                                    {{ item.statusText }}
+                                <!-- 活动进度状态 -->
+                                <span class="evaluation-status-tag ev-tag-common" :style="{ borderColor: item.progColor, color: item.progColor}">
+                                    {{ item.progText }}
+                                </span>
+                                <!-- 活动评分状态 -->
+                                <span class="evaluation-status-tag ev-tag-common" :style="{ borderColor: item.scoreColor, color: item.scoreColor}">
+                                    {{ item.scoreText }}
                                 </span>
                                 <!-- 立即结束 -->
                                 <span v-if="item.progress == 'going'" class="handle-end-tag ev-tag-common" @click="handleEnd(index)">
@@ -376,11 +380,12 @@ export default {
                                 this.evaListShow[index].progress = 'finish'
                                 this.reload()
                             } else {
-                                this.$Message.error('API ERROR!')
+                                // this.$Message.error('API ERROR!')
+                                this.$Message.error(this.$t('learnActivity.mgtScEv.actionErr'))
                             }
                         },
                         err => {
-                            this.$Message.error('API ERROR!')
+                            // this.$Message.error('API ERROR!')
                         }
                     )
                 }
@@ -415,10 +420,11 @@ export default {
                     code: requestData
                 }).then(
                     res => {
-                        if (res.error == null) {
+                        if (!res.error) {
                             this.targetList = res.result.data
                         } else {
-                            this.$Message.error('API ERROR!')
+                            // this.$Message.error('API ERROR!')
+                            this.$Message.error(this.$t('learnActivity.mgtScEv.classInfoErr'))
                         }
                     },
                     err => {
@@ -509,9 +515,7 @@ export default {
         selectSubject(index) {
             this.curSubIndex = index
         },
-        selectBar(index) {
-            this.curBarIndex = index
-        },
+
         dateFormat(timestamp) {
             let date = new Date(timestamp)
             let Y = date.getFullYear()
@@ -522,24 +526,23 @@ export default {
             return `${Y}-${M < 9 ? '0' + (M + 1) : M + 1}-${D} ${H < 10 ? '0' + H : H}:${MIN < 10 ? '00' : MIN}`
         },
         getEvStatusInfo(progress, isScore) {
-            let info = {
-                // color: '#ed4014'
-            }
+            let info = {}
             if (progress == 'pending') {
-                info.text = this.$t('learnActivity.mgtScEv.pending')
-                info.color = '#2d8cf0'
-            }
-            if (progress == 'going') {
-                info.text = this.$t('learnActivity.mgtScEv.going')
-                info.color = '#19be6b'
+                info.progText = this.$t('learnActivity.mgtScEv.pending')
+                info.progColor = '#2d8cf0'
+            } else if (progress == 'going') {
+                info.progText = this.$t('learnActivity.mgtScEv.going')
+                info.progColor = '#19be6b'
+            } else if (progress == 'finish') {
+                info.progText = this.$t('learnActivity.mgtScEv.finish')
+                info.progColor = '#515a6e'
             }
-            if (progress == 'finish' && isScore === 0) {
-                info.text = this.$t('learnActivity.mgtScEv.scoreStatus')
-                info.color = '#ff9900'
-            }
-            if (progress == 'finish' && isScore === 1) {
-                info.text = this.$t('learnActivity.mgtScEv.finish')
-                info.color = '#515a6e'
+            if (isScore === 0) {
+                info.scoreText = this.$t('learnActivity.mgtScEv.scoreStatus')
+                info.scoreColor = '#ff9900'
+            } else if (isScore === 1) {
+                info.scoreText = this.$t('learnActivity.mgtScEv.scoreStatus1')
+                info.scoreColor = '#515a6e'
             }
             return info
         },
@@ -557,8 +560,10 @@ export default {
                         })
                         res.examInfo.forEach(item => {
                             let statusInfo = this.getEvStatusInfo(item.progress, item.sStatus)
-                            item.statusText = statusInfo.text
-                            item.statusColor = statusInfo.color
+                            item.progText = statusInfo.progText
+                            item.progColor = statusInfo.progColor
+                            item.scoreText = statusInfo.scoreText
+                            item.scoreColor = statusInfo.scoreColor
                         })
                         this.evaluationList = res.examInfo
                         this.evaListShow = res.examInfo
@@ -572,7 +577,8 @@ export default {
                             }
                         }
                     } else {
-                        this.$Message.error('API ERROR!')
+                        // this.$Message.error('API ERROR!')
+                        this.$Message.error(this.$t('learnActivity.mgtScEv.evListErr'))
                         this.isLoading = false
                     }
                 },
@@ -581,7 +587,7 @@ export default {
                 }
             )
         },
-        selectEvaluation(index) {
+        checkScoreSave(fn, index) {
             let compStu = this.$refs['score-box'] ? this.$refs['score-box'].$refs['byStuMark'] : null
             let compQu = this.$refs['score-box'] ? this.$refs['score-box'].$refs['byQuMark'] : null
             if ((compStu && compStu.isUpd) || (compQu && compQu.isUpd)) {
@@ -596,16 +602,33 @@ export default {
                         } else if (compQu && compQu.isUpd) {
                             compQu.saveScore()
                         }
-                        this.toEvaluation(index)
+                        if (fn) fn(index)
                     },
                     onCancel: () => {
-                        this.toEvaluation(index)
+                        if (compStu && compStu.isUpd) {
+                            compStu.isUpd = false
+                        } else if (compQu && compQu.isUpd) {
+                            compStu.preSaveList = {}
+                        }
+                        if (fn) fn(index)
                     }
                 })
             } else {
-                this.toEvaluation(index)
+                if (fn) fn(index)
             }
         },
+        selectEvaluation(index) {
+            this.checkScoreSave(this.toEvaluation, index)
+        },
+        selectBar(index) {
+            this.checkScoreSave(this.handleSelectBar, index)
+        },
+        handleSelectBar(index) {
+            this.curBarIndex = index
+            this.$nextTick(() => {
+                if (this.$refs['score-box']) this.$refs['score-box'].showTest = false
+            })
+        },
         toEvaluation(index) {
             this.curSubIndex = 0
             this.curEvaIndex = index
@@ -646,22 +669,51 @@ export default {
                             resData.papers[index].sheetNo = sheetNo
                             //补充评测状态信息
                             let statusInfo = this.getEvStatusInfo(resData.progress, resData.sStatus)
-                            resData.statusText = statusInfo.text
-                            resData.statusColor = statusInfo.color
+                            resData.progText = statusInfo.progText
+                            resData.progColor = statusInfo.progColor
+                            resData.scoreText = statusInfo.scoreText
+                            resData.scoreColor = statusInfo.scoreColor
                         }
                         this.evaListShow.splice(this.curEvaIndex, 1, resData)
                         this.examDetaiInfo = resData
                     } else {
-                        this.$Message.error('API ERROR!')
+                        this.$Message.error(this.$t('learnActivity.mgtScEv.exInfoErr'))
+                        // this.$Message.error('API ERROR!')
                     }
                 },
                 err => {
-                    this.$Message.error('API ERROR!')
+                    // this.$Message.error('API ERROR!')
                 }
             ).finally(() => {
                 this.isLoading = false;
             })
-        }
+        },
+        beforeunloadHandler(e) {
+            let compStu = this.$refs['score-box'] ? this.$refs['score-box'].$refs['byStuMark'] : null
+            let compQu = this.$refs['score-box'] ? this.$refs['score-box'].$refs['byQuMark'] : null
+            if ((compStu && compStu.isUpd) || (compQu && compQu.isUpd)) {
+                e = e || window.event
+                if (e) {
+                    e.returnValue = '关闭提示'
+                }
+                return '关闭提示'
+            }
+        },
+        // goBack(){}
+    },
+    mounted() {
+        // 监听浏览器刷新事件
+        window.addEventListener('beforeunload', e => this.beforeunloadHandler(e))
+        // 处理浏览器返回事件
+        // if (window.history && window.history.pushState) {
+        //     // 向历史记录中插入了当前页
+        //     history.pushState(null, null, document.URL);
+        //     window.addEventListener('popstate', this.goBack, false);
+        // }
+    },
+    destroyed() {
+        window.removeEventListener('beforeunload', e => this.beforeunloadHandler(e))
+        window.removeEventListener('popstate', this.goBack, false);
     },
     created() {
         this.scope = 'school'
@@ -690,24 +742,7 @@ export default {
         }
     },
     beforeRouteLeave(to, from, next) {
-        let comp = this.$refs['score-box'] ? this.$refs['score-box'].$refs['byStuMark'] : undefined
-        if (comp && comp.isUpd) {
-            this.$Modal.confirm({
-                title: this.$t('learnActivity.score.saveScoreTitle'),
-                content: this.$t('learnActivity.score.saveScoreContent'),
-                okText: this.$t('learnActivity.mark.yes'),
-                cancelText: this.$t('learnActivity.mark.no'),
-                onOk: () => {
-                    comp.saveScore()
-                    next()
-                },
-                onCancel: () => {
-                    next()
-                }
-            })
-        } else {
-            next()
-        }
+        this.checkScoreSave(next)
     }
 }
 </script>

+ 28 - 11
TEAMModelOS/ClientApp/src/view/learnactivity/Scoring.vue

@@ -68,7 +68,7 @@
                     <Loading :top="200" type="1" style="text-align:center" v-show="dataLoading"></Loading>
                 </div>
                 <!-- 按题批阅 -->
-                <div class="scoring-handle-box" v-if="showTest && markType== 'byQu'">
+                <div class="scoring-handle-box" v-show="showTest && markType== 'byQu'">
                     <ByQuMark @updScore="updScore" :paper="paperInfo" :examInfo="examInfo" ref="byQuMark" :stusInfo="studentScore" :classId="chooseClass" :subjectId="chooseSubject"></ByQuMark>
                     <Loading :top="200" type="1" style="text-align:center" v-show="dataLoading"></Loading>
                 </div>
@@ -245,9 +245,6 @@ export default {
         }
     },
     methods: {
-        toggleMarkType() {
-            this.markType = this.markType == 'byQu' ? 'byStu' : 'byQu'
-        },
         exportData() {
             if (this.examInfo.progress == 'going') {
                 this.$Modal.confirm({
@@ -387,7 +384,7 @@ export default {
                             filename: sName
                         })
                     }
-                    excel.export_array_to_sheet(sheets,this.examInfo.name)
+                    excel.export_array_to_sheet(sheets, this.examInfo.name)
                 },
                 err => {
                     console.error(err)
@@ -489,7 +486,10 @@ export default {
             this.currentPage = page
             this.tableData = this.studentScore.slice(start, end)
         },
-        toggleScoreStatus() {
+        /**
+         * 检查评测打分
+         */
+        checkScoreSave(fn) {
             if (this.$refs['byStuMark']?.isUpd || this.$refs['byQuMark']?.isUpd) {
                 this.$Modal.confirm({
                     title: this.$t('learnActivity.score.saveScoreTitle'),
@@ -500,28 +500,42 @@ export default {
                         if (this.$refs['byStuMark'].isUpd) {
                             this.$refs['byStuMark'].saveScore()
                             this.$refs['byStuMark'].isComplete = false
-                            this.showTest = !this.showTest
+                            if (fn) fn()
                         } else {
                             this.$refs['byQuMark'].saveScore()
+                            if (fn) fn()
                         }
                     },
                     onCancel: () => {
                         if (this.$refs['byStuMark'].isUpd) {
                             this.$refs['byStuMark'].isUpd = false
                             this.$refs['byStuMark'].isComplete = false
-                            this.showTest = !this.showTest
+                            if (fn) fn()
                         } else {
                             this.$refs['byQuMark'].preSaveList = {}
+                            if (fn) fn()
                         }
 
                     }
                 })
             } else {
                 this.$refs['byStuMark'].isComplete = false
-                this.showTest = !this.showTest
                 this.$refs['byQuMark'] && (this.$refs['byQuMark'].preSaveList = {})
+                if (fn) fn()
             }
         },
+        toggleMarkType() {
+            this.checkScoreSave(this.handleMarkType)
+        },
+        handleMarkType() {
+            this.markType = this.markType == 'byQu' ? 'byStu' : 'byQu'
+        },
+        toggleScoreStatus() {
+            this.checkScoreSave(this.handleScoreStatus)
+        },
+        handleScoreStatus() {
+            this.showTest = !this.showTest
+        },
         updScore(data) {
             if (this.$refs['simpleData'] && this.examInfo.progress === 'finish') {
                 this.$refs['simpleData'].findSimpleAna()
@@ -603,8 +617,11 @@ export default {
             }
         },
         //获取当前学生信息
-        setStuInfo(data) {
+        async setStuInfo(data) {
             if (data) {
+                if (this.$refs['byStuMark'] && this.$refs['byStuMark'].isUpd) {
+                    await this.$refs['byStuMark'].saveScore()
+                }
                 this.chooseStudent.name = data.label
                 let student = this.tableData.find(i => i.id == data.value)
                 this.chooseStudent.type = student?.type
@@ -614,7 +631,7 @@ export default {
                     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 ? this.paperInfo[this.chooseClass].studentAns.mark[answerIndex] || '' : '' //批注
-                    this.chooseStudent["status"] = false;
+                    this.chooseStudent["status"] = false
                 }
             }
         },

+ 14 - 10
TEAMModelOS/ClientApp/src/view/learnactivity/SimpleAnalysis.vue

@@ -1,6 +1,9 @@
 <template>
     <div>
-        <div class="overview-box" v-if="examInfo.progress == 'finish'">
+        <div v-if="dataErr" class="data-err-wrap">
+            <EmptyData :textContent="$t('learnActivity.simple.dataErr')"></EmptyData>
+        </div>
+        <div class="overview-box" v-if="examInfo.progress == 'finish' && !dataErr">
             <!-- 总人数 -->
             <div class="count-box">
                 <span class="count-subject-num">{{examInfo.stuCount}}</span>
@@ -42,7 +45,7 @@
                 </span>
             </div>
         </div>
-        <div class="overview-box" style="justify-content: space-around;padding-top:40px" v-if="examInfo.progress == 'finish'">
+        <div class="overview-box" style="justify-content: space-around;padding-top:40px" v-if="examInfo.progress == 'finish' && !dataErr">
             <ScoreMatrix :pieData="scoreSegment"></ScoreMatrix>
             <Comply :complyData="complyData"></Comply>
             <AvgCompare :pieData="simpleData.averageMap"></AvgCompare>
@@ -138,6 +141,7 @@ export default {
     },
     data() {
         return {
+            dataErr:false,
             simpleData: {},
             allData: {},
             calculating: false
@@ -190,14 +194,15 @@ export default {
                         }
 
                     } else {
-                        this.$Message.error('API ERROR!')
+                        this.dataErr = true
+                        this.$Message.error(this.$t('learnActivity.simple.simpleErr'))
                     }
                 },
                 err => {
-                    this.$Message.error('API ERROR!')
+                    this.dataErr = true
                 }
             ).finally(() => {
-                this.isLoading = false;
+                this.isLoading = false
             })
         },
     },
@@ -205,11 +210,6 @@ export default {
         examInfo: {
             handler() {
                 if (this.examInfo.progress == 'finish') {
-                    // if (this.allData[this.examInfo.id]) {
-                    //     this.simpleData = this.allData[this.examInfo.id]
-                    // } else {
-                    //     this.findSimpleAna()
-                    // }
                     this.findSimpleAna()
                 }
             },
@@ -318,6 +318,10 @@ export default {
 }
 </script>
 <style lang="less" scoped>
+.data-err-wrap{
+    background: #f9f9f9;
+    padding: 10px 0px 40px 0px;
+}
 .overview-box {
     width: 100%;
     flex-wrap: wrap;

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

@@ -254,7 +254,7 @@ export default {
                     }
                 },
                 err => {
-                    this.$Message.error('API error')
+                    // this.$Message.error('API error')
                 }
             )
         }

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

@@ -881,7 +881,7 @@ export default {
                 }
             },
             err => {
-                this.$Message.error('user/setSchoolTeacher API error!')
+                // this.$Message.error('user/setSchoolTeacher API error!')
             }
         )
         //初始化起止时间

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

@@ -260,7 +260,6 @@ export default {
         }
     },
     methods: {
-
         //查询名单列表
         findStuList() {
             let params = {
@@ -273,7 +272,8 @@ export default {
                     if (res && res.groups) {
                         this.stuList = res.groups
                     } else {
-                        this.$Message.error('API error')
+                        // this.$Message.error('API error')
+                        this.$Message.error(this.$t('cusMgt.teaListErr'))
                     }
                 },
                 err => {
@@ -371,11 +371,11 @@ export default {
                                     this.mLoading = true
                                 })
                             } else {
-                                this.$Message.error('API error')
+                                // this.$Message.error('API error')
                             }
                         },
                         err => {
-                            this.$Message.error('API error')
+                            // this.$Message.error('API error')
                         }
                     )
 

+ 2 - 2
TEAMModelOS/ClientApp/src/view/newcourse/EvDetail.vue

@@ -118,11 +118,11 @@ export default {
                         }
 
                     } else {
-                        this.$Message.error('API ERROR!')
+                        this.$Message.warning(this.$t('learnActivity.mgtScEv.exInfoErr'))
                     }
                 },
                 err => {
-                    this.$Message.error('API ERROR!')
+                    // this.$Message.error('API ERROR!')
                 }
             ).finally(() => {
                 this.isLoading = false

+ 7 - 3
TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.less

@@ -137,11 +137,11 @@
 .evaluation-status-tag {
     padding: 0px 2px;
     border: 1px solid #1CC0F3;
-    margin-left: 4px;
-    margin-right: 4px;
+    // margin-left: 4px;
+    margin-right: 8px;
     border-radius: 2px;
     font-size: 12px;
-    vertical-align: top;
+    // vertical-align: top;
 }
 .ev-attr-wrap{
     margin-right: 20px;
@@ -474,4 +474,8 @@
     font-size: 16px;
     display: none;
     margin-top: -5px;
+}
+.ev-description-wrap{
+    display: flex;
+    justify-content: space-between;
 }

+ 104 - 63
TEAMModelOS/ClientApp/src/view/newcourse/MyCourse.vue

@@ -195,21 +195,6 @@
                                         <ListItemMeta @click.native="toAcDetail(index)" class="ac-item-warp">
                                             <p slot="title" class="record-name">
                                                 {{item.name}}
-                                                <!-- 评测模式 -->
-                                                <span v-show="curAcType === 'ev'" class="evaluation-status-tag" style="color:#0BADD4">
-                                                    {{getModeLabel(item.source)}}
-                                                </span>
-                                                <span v-show="curAcType === 'ev'" class="evaluation-status-tag" style="color:#0BADD4">
-                                                    {{getTypeLabel(item.type)}}
-                                                </span>
-                                                <!-- 学校|个人 -->
-                                                <span class="evaluation-status-tag" :style="{ borderColor: item.owner == 'school' ? '#0BADD4' : '#ff9900', color: (item.owner == 'school' ? '#0BADD4' : '#ff9900')}">
-                                                    {{ item.owner == 'school' ? $t('cusMgt.school') : $t('cusMgt.private') }}
-                                                </span>
-                                                <!-- 评测状态 -->
-                                                <span class="evaluation-status-tag" :style="{ borderColor: item.progress == 'pending' ? '#0BADD4' : item.progress == 'going' ? '#1CC0F3' : '#ed4014', color: (item.progress == 'pending' ? '#0BADD4' : item.progress == 'going' ? '#1CC0F3' : '#ed4014')}">
-                                                    {{ item.progress == 'pending' ? $t('learnActivity.mgtScEv.pending') : item.progress == 'going' ? $t('learnActivity.mgtScEv.going') : $t('learnActivity.mgtScEv.finish') }}
-                                                </span>
                                             </p>
                                             <span slot="avatar" style="margin-top:12px;display: inline-block;margin-left:10px;">
                                                 <Icon v-if="curAcType == 'ev'" custom="iconfont icon-test" size="24" color="#8685EF" />
@@ -218,18 +203,41 @@
                                                 <Icon v-else-if="curAcType == 'hw'" custom="iconfont icon-hw" size="24" color="#CCC" />
                                                 <Icon v-else custom="iconfont icon-learning-self" size="24" color="#CCC" />
                                             </span>
-                                            <div slot="description">
-                                                <span class="ev-attr-wrap">
-                                                    <span class="attr-label">
-                                                        <Icon type="md-time" size="16" />
-                                                        {{$t('cusMgt.acTime')}}:
+                                            <div slot="description" class="ev-description-wrap">
+                                                <p>
+                                                    <!-- 评测模式 -->
+                                                    <span v-show="curAcType === 'ev'" class="evaluation-status-tag" style="color:#0BADD4">
+                                                        {{getModeLabel(item.source)}}
                                                     </span>
-                                                    <span class="attr-value">
-                                                        {{dateFormat(item.startTime)}}
-                                                        -
-                                                        {{dateFormat(item.endTime)}}
+                                                    <span v-show="curAcType === 'ev'" class="evaluation-status-tag" style="color:#0BADD4">
+                                                        {{getTypeLabel(item.type)}}
                                                     </span>
-                                                </span>
+                                                    <!-- 学校|个人 -->
+                                                    <span class="evaluation-status-tag" :style="{ borderColor: item.owner == 'school' ? '#0BADD4' : '#ff9900', color: (item.owner == 'school' ? '#0BADD4' : '#ff9900')}">
+                                                        {{ item.owner == 'school' ? $t('cusMgt.school') : $t('cusMgt.private') }}
+                                                    </span>
+                                                    <!-- 活动进度状态 -->
+                                                    <span class="evaluation-status-tag ev-tag-common" :style="{ borderColor: item.progColor, color: item.progColor}">
+                                                        {{ item.progText }}
+                                                    </span>
+                                                    <!-- 活动评分状态 -->
+                                                    <span  v-show="item.scoreText" class="evaluation-status-tag ev-tag-common" :style="{ borderColor: item.scoreColor, color: item.scoreColor}">
+                                                        {{ item.scoreText }}
+                                                    </span>
+                                                </p>
+                                                <p>
+                                                    <span class="ev-attr-wrap">
+                                                        <span class="attr-label">
+                                                            <Icon type="md-time" size="16" />
+                                                            {{$t('cusMgt.acTime')}}:
+                                                        </span>
+                                                        <span class="attr-value">
+                                                            {{dateFormat(item.startTime)}}
+                                                            -
+                                                            {{dateFormat(item.endTime)}}
+                                                        </span>
+                                                    </span>
+                                                </p>
                                             </div>
                                         </ListItemMeta>
                                     </ListItem>
@@ -585,6 +593,27 @@ export default {
         }
     },
     methods: {
+        getEvStatusInfo(progress, isScore) {
+            let info = {}
+            if (progress == 'pending') {
+                info.progText = this.$t('learnActivity.mgtScEv.pending')
+                info.progColor = '#2d8cf0'
+            } else if (progress == 'going') {
+                info.progText = this.$t('learnActivity.mgtScEv.going')
+                info.progColor = '#19be6b'
+            } else if (progress == 'finish') {
+                info.progText = this.$t('learnActivity.mgtScEv.finish')
+                info.progColor = '#515a6e'
+            }
+            if (isScore === 0) {
+                info.scoreText = this.$t('learnActivity.mgtScEv.scoreStatus')
+                info.scoreColor = '#ff9900'
+            } else if (isScore === 1) {
+                info.scoreText = this.$t('learnActivity.mgtScEv.scoreStatus1')
+                info.scoreColor = '#515a6e'
+            }
+            return info
+        },
         /**获取type对应的label */
         getTypeLabel(code) {
             for (let item of this.$GLOBAL.EV_TYPE()) {
@@ -857,7 +886,7 @@ export default {
                                         })
                                     }
                                 } catch (e) {
-                                    this.$Message.error('API ERROR!')
+                                    // this.$Message.error('API ERROR!')
                                 }
                             }
 
@@ -887,7 +916,7 @@ export default {
                     })
                 },
                 err => {
-                    this.$Message.error('API ERROR')
+                    // this.$Message.error('API ERROR')
                 }
             ).finally(() => {
                 this.listLoading = false
@@ -947,11 +976,13 @@ export default {
         },
         //时间戳转换
         dateFormat(timestamp) {
-            var date = new Date(timestamp)
-            var Y = date.getFullYear() + '/'
-            var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '/'
-            var D = date.getDate() + ' '
-            return Y + M + D;
+            let date = new Date(timestamp)
+            let Y = date.getFullYear()
+            let M = date.getMonth()
+            let D = date.getDate()
+            let H = date.getHours()
+            let MIN = date.getMinutes()
+            return `${Y}-${M < 9 ? '0' + (M + 1) : M + 1}-${D} ${H < 10 ? '0' + H : H}:${MIN < 10 ? '00' : MIN}`
         },
         //获取活动列表
         getActivityList() {
@@ -993,6 +1024,14 @@ export default {
                     if (!res.error) {
                         switch (this.curAcType) {
                             case 'ev':
+                                // 处理活动状态
+                                res.datas.forEach(item => {
+                                    let statusInfo = this.getEvStatusInfo(item.progress, item.sStatus)
+                                    item.progText = statusInfo.progText
+                                    item.progColor = statusInfo.progColor
+                                    item.scoreText = statusInfo.scoreText
+                                    item.scoreColor = statusInfo.scoreColor
+                                })
                                 this.evList = res.datas
                                 break
                             case 'vote':
@@ -1013,7 +1052,7 @@ export default {
                     }
                 },
                 err => {
-                    this.$Message.error('API error')
+                    // this.$Message.error('API error')
                 }
             )
         },
@@ -1030,7 +1069,8 @@ export default {
                         })
                         this.evList = res.examInfo
                     } else {
-                        this.$Message.error('API ERROR!')
+                        // this.$Message.error('API ERROR!')
+                        this.$Message.warning(this.$t('learnActivity.mgtScEv.evListErr'))
                     }
                 }
             )
@@ -1638,12 +1678,12 @@ export default {
                         }
 
                     } else {
-                        this.$Message.error('API ERROR!')
+                        // this.$Message.error('API ERROR!')
                         this.listLoading = false
                     }
                 },
                 (err) => {
-                    this.$Message.error('API ERROR!')
+                    // this.$Message.error('API ERROR!')
                     this.listLoading = false
                 }
             )
@@ -1793,33 +1833,34 @@ export default {
         this.initData()
     },
     activated() {
-        let delId = this.$route.query.delId
-        console.log(this.curAcType)
-        if (delId) {
-            let index, data
-            switch (this.curAcType) {
-                case 'ev':
-                    data = this.evList
-                    break
-                case 'vote':
-                    data = this.voteList
-                    break
-                case 'qu':
-                    data = this.quList
-                    break
-                case 'hw':
-                    data = this.hwList
-                    break
-                case 'sl':
-                    data = this.slList
-                    break
-                default:
-                    break
-            }
-            if (data) index = data.findIndex(item => item.id === delId)
-            console.log(index)
-            if (index > -1) data.splice(index, 1)
-        }
+        this.getActivityList()
+        // let delId = this.$route.query.delId
+        // console.log(this.curAcType)
+        // if (delId) {
+        //     let index, data
+        //     switch (this.curAcType) {
+        //         case 'ev':
+        //             data = this.evList
+        //             break
+        //         case 'vote':
+        //             data = this.voteList
+        //             break
+        //         case 'qu':
+        //             data = this.quList
+        //             break
+        //         case 'hw':
+        //             data = this.hwList
+        //             break
+        //         case 'sl':
+        //             data = this.slList
+        //             break
+        //         default:
+        //             break
+        //     }
+        //     if (data) index = data.findIndex(item => item.id === delId)
+        //     console.log(index)
+        //     if (index > -1) data.splice(index, 1)
+        // }
     },
     watch: {
         '$store.state.userInfo.schoolCode': {

+ 9 - 4
TEAMModelOS/ClientApp/src/view/newcourse/NewCusMgt.vue

@@ -1171,7 +1171,7 @@ export default {
                         scope: 'school'
                     }).then(
                         (res) => {
-                            if (res.error == null) {
+                            if (!res.error) {
                                 this.addCourseStatus = false
                                 if (this.actionType == 0) {
                                     this.courseList.push(this._.cloneDeep(this.courseBaseInfo))
@@ -1190,11 +1190,16 @@ export default {
                                 this.filterByPeriod()
                                 this.$refs['courseBaseInfo'].resetFields()
                             } else {
-                                this.$Message.error('API ERROR!')
+                                // this.$Message.error('API ERROR!')
+                                if (this.actionType === 0) {
+                                    this.$Message.success(this.$t('cusMgt.addErr'))
+                                }else{
+                                    this.$Message.success(this.$t('cusMgt.editErr'))
+                                }
                             }
                         },
                         (err) => {
-                            this.$Message.error('API ERROR!')
+                            // this.$Message.error('API ERROR!')
                         }
                     )
                 } else {
@@ -1250,7 +1255,7 @@ export default {
                 }
             },
             err => {
-                this.$Message.error('user/setSchoolTeacher API error!')
+                // this.$Message.error('user/setSchoolTeacher API error!')
             }
         )
         this.findStuList()

+ 1 - 1
TEAMModelOS/ClientApp/src/view/notify/CreateNotify.vue

@@ -159,7 +159,7 @@ export default {
                     })
                 },
                 err => {
-                    this.$Message.error('API error!')
+                    // this.$Message.error('API error!')
                 }
             )
         }

+ 1 - 1
TEAMModelOS/ClientApp/src/view/notify/NotifyMgt.vue

@@ -122,7 +122,7 @@ export default {
                     })
                 },
                 err => {
-                    this.$Message.error('API error!')
+                    // this.$Message.error('API error!')
                 }
             )
         },

+ 1 - 1
TEAMModelOS/ClientApp/src/view/schoolmgmt/RoomMgt/HiTeachLink.vue

@@ -245,7 +245,7 @@ export default {
                     data = res.serial
                 },
                 (err) => {
-                    this.$Message.error('API error!')
+                    // this.$Message.error('API error!')
                 }
             )
             return data

+ 9 - 6
TEAMModelOS/ClientApp/src/view/schoolmgmt/RoomMgt/RoomMgt.vue

@@ -306,7 +306,8 @@ export default {
                             // this.$set(this.allClassCus, roomId, )
                             this.isLoading = false
                         } else {
-                            this.$Message.error('API error!')
+                            // this.$Message.error('API error!')
+                            this.$Message.error(this.$t('cusMgt.cusInfoErr'))
                             this.isLoading = false
                         }
                     },
@@ -395,11 +396,12 @@ export default {
                             // this.$store.dispatch('user/addSchoolRoom', this.roomListShow[this.curRoomIndex])
                         }
                     } else {
-                        this.$Message.error('API error!')
+                        // this.$Message.error('API error!')
+                        this.$Message.error(this.$t('schoolBaseInfo.saveErr'))
                     }
                 },
                 err => {
-                    this.$Message.error('API error!')
+                    // this.$Message.error('API error!')
                 }
             )
         },
@@ -437,7 +439,7 @@ export default {
                     this.roomListShow.splice(index, 1)
                 },
                 err => {
-                    this.$Message.error('API error!')
+                    // this.$Message.error('API error!')
                 }
             )
         },
@@ -499,11 +501,12 @@ export default {
                                 this.updated = false
                                 this.addRoomStatus = false
                             } else {
-                                this.$Message.error('API error!')
+                                // this.$Message.error('API error!')
+                                this.$Message.error(this.$t('schoolBaseInfo.saveErr'))
                             }
                         },
                         err => {
-                            this.$Message.error('API error!')
+                            // this.$Message.error('API error!')
                         }
                     ).finally(
                         () => {

+ 2 - 2
TEAMModelOS/ClientApp/src/view/selflearn/ActivityInfo.vue

@@ -311,11 +311,11 @@
                             this.$Message.success('撤销成功!')
                             this.classList[this.curClassIndex][this.learnContent.id] = undefined
                         } else {
-                            this.$Message.error('API error!')
+                            // this.$Message.error('API error!')
                         }
                     },
                     (err) => {
-                        this.$Message.error('API error!')
+                        // this.$Message.error('API error!')
                     }
                 )
             },

+ 7 - 5
TEAMModelOS/ClientApp/src/view/student-account/class/ClassMgt.vue

@@ -871,11 +871,12 @@ export default {
                                         this.updated = false
                                     }
                                 } else {
-                                    this.$Message.error('API error!')
+                                    // this.$Message.error('API error!')
+                                    this.$Message.success(this.$t('schoolBaseInfo.saveErr'))
                                 }
                             },
                             err => {
-                                this.$Message.error('API error!')
+                                // this.$Message.error('API error!')
                             }
                         ).finally(
                             () => {
@@ -935,7 +936,7 @@ export default {
                         }
                     },
                     (err) => {
-                        this.$Message.error('API error!')
+                        // this.$Message.error('API error!')
                     }
                 ).finally(() => {
                     this.isListLoading = false
@@ -1005,11 +1006,12 @@ export default {
                                 }
                                 this.filterByYear(false)
                             } else {
-                                this.$Message.error('API error!')
+                                // this.$Message.error('API error!')
+                                this.$Message.success(this.$t('schoolBaseInfo.saveErr'))
                             }
                         },
                         err => {
-                            this.$Message.error('API error!')
+                            // this.$Message.error('API error!')
                         }
                     ).finally(
                         () => {

+ 10 - 9
TEAMModelOS/ClientApp/src/view/student-account/stuMgt/AddStudent.vue

@@ -190,7 +190,7 @@ export default {
             if (!value) {
                 return callback(new Error(this.$t('stuAccount.stuIdErr')))
             }
-            if(value.length < 4 || value.length > 12){
+            if (value.length < 4 || value.length > 12) {
                 callback(new Error(this.$t('stuAccount.stuIdErr1')))
                 return
             }
@@ -284,7 +284,7 @@ export default {
             if (this.searchGrade > -1) {
                 let year = this.$jsFn.getYearByGrade(this.schoolBase, this.searchPeriod, this.searchGrade)
                 console.log(year)
-                data = data.filter((item)=>{
+                data = data.filter((item) => {
                     return item.year == year && item.periodId == this.searchPeriod
                 })
                 return data
@@ -361,17 +361,18 @@ export default {
                                     this.$refs.updateForm.resetFields()
                                     this.uploadLoading = false
                                 } else {
-                                    this.$Message.error('API error!')
+                                    // this.$Message.error('API error!')
+                                    this.$Message.error(this.bizType == 2 ? this.$t('stuAccount.updErr') : this.$t('stuAccount.addErr'))
                                 }
                                 this.isLoading = false
                             },
                             (err) => {
-                                this.$Message.error('API error!')
+                                // this.$Message.error('API error!')
                                 this.isLoading = false
                             }
                         )
                     }
-                } 
+                }
                 // 新增学生
                 else {
                     this.isLoading = true
@@ -389,7 +390,7 @@ export default {
                             }
                         ]
                     if (this.isRepeat(apiData[0])) {
-                        this.$Message.error('請檢查 帳號資訊 或 座號重複 了。')
+                        // this.$Message.error('請檢查 帳號資訊 或 座號重複 了。')
                         this.isLoading = false
                     } else {
                         this.$api.stuAccount.saveStudent(this.$store.state.userInfo.schoolCode, apiData).then(
@@ -406,7 +407,7 @@ export default {
                                 this.isLoading = false
                             },
                             (err) => {
-                                this.$Message.error('API error!')
+                                // this.$Message.error('API error!')
                                 this.isLoading = false
                             }
                         )
@@ -437,10 +438,10 @@ export default {
         }
     },
     created() {
-        
+
     },
     mounted() {
-        
+
     },
     watch: {
         studentInfo: {

+ 1 - 1
TEAMModelOS/ClientApp/src/view/student-account/stuMgt/ImportStudent.vue

@@ -440,7 +440,7 @@ export default {
                             this.initData()
                             this.uploadLoading = false
                         } else {
-                            this.$Message.error('API error!')
+                            // this.$Message.error('API error!')
                         }
                     },
                     (err) => {

+ 2 - 2
TEAMModelOS/ClientApp/src/view/student-account/stuMgt/StuMgt.vue

@@ -300,7 +300,7 @@ export default {
                             this.$Message.success(this.$t('cusMgt.resetPwOk'))
                         },
                         err => {
-                            this.$Message.error('API ERROR!')
+                            // this.$Message.error('API ERROR!')
                         }
                     ).finally(() => {
                         this.tableLoading = false
@@ -505,7 +505,7 @@ export default {
                                 this.tableLoading = false
                             },
                             err => {
-                                this.$Message.error('API error!')
+                                // this.$Message.error('API error!')
                                 this.tableLoading = false
                             }
                         )

+ 2 - 2
TEAMModelOS/ClientApp/src/view/task/mark/ByStu.vue

@@ -554,11 +554,11 @@ export default {
                             }
                         }
                     } else {
-                        this.$Message.error('API ERROR')
+                        // this.$Message.error('API ERROR')
                     }
                 },
                 err => {
-                    this.$Message.error('API ERROR')
+                    // this.$Message.error('API ERROR')
                 }
             )
         },

+ 1 - 1
TEAMModelOS/ClientApp/src/view/teachcontent/ResBelong.vue

@@ -62,7 +62,7 @@ export default {
                 }
             },
             (err) => {
-                this.$Message.error('API error!')
+                // this.$Message.error('API error!')
             }
         )
     },

+ 3 - 2
TEAMModelOS/ClientApp/src/view/teachcontent/UploadModal.vue

@@ -362,11 +362,12 @@ export default {
                                 this.$emit("successData", this.uploadedList.filter(item => item.status == 1))
                                 this.uploadedList = []
                             } else {
-                                this.$Message.error('API error')
+                                // this.$Message.error('API error')
+                                this.$Message.error(this.$t('updModal.updErr'))
                             }
                         },
                         err => {
-                            this.$Message.error('API error')
+                            // this.$Message.error('API error')
                         }
                     )
                 }

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

@@ -1242,7 +1242,7 @@ export default {
                     }
                 },
                 (err) => {
-                    this.$Message.error('API error!')
+                    // this.$Message.error('API error!')
                 }
             )
         }

+ 4 - 4
TEAMModelOS/ClientApp/src/view/teachermgmt/Index.vue

@@ -62,11 +62,11 @@ export default {
       this.$store.dispatch('user/getSchoolTeacher').then(
         res => {
           if (res.code == 0) {
-            this.$Message.error('API error')
+            // this.$Message.error('API error')
           }
         },
         err => {
-          this.$Message.error('user/setSchoolTeacher API error!')
+          // this.$Message.error('user/setSchoolTeacher API error!')
         }
       )
     },
@@ -75,11 +75,11 @@ export default {
       this.$store.dispatch('user/getSchoolAuthorityList').then(
         res => {
           if (res.code == 0) {
-            alert('API error')
+            // alert('API error')
           }
         },
         err => {
-          alert('user/getSchoolAuthorityList API error: ' + err)
+          // alert('user/getSchoolAuthorityList API error: ' + err)
         }
       )
     }

+ 3 - 3
TEAMModelOS/ClientApp/src/view/teachermgmt/components/userList/Index.vue

@@ -894,7 +894,7 @@ export default {
                                 }
                             },
                             err => {
-                                this.$Message.error('user/setSchoolUser API error: ' + err)
+                                // this.$Message.error('user/setSchoolUser API error: ' + err)
                             }
                         )
                     }
@@ -1043,7 +1043,7 @@ export default {
                         this.closeAuthSeting()
                     },
                     err => {
-                        this.$Message.error('user/setSchoolUser API error: ' + err)
+                        // this.$Message.error('user/setSchoolUser API error: ' + err)
                     }
                 )
             } else {
@@ -1128,7 +1128,7 @@ export default {
                                 this.closeAuthSeting()
                             },
                             err => {
-                                this.$Message.error('user/setSchoolUser API error: ' + err)
+                                // this.$Message.error('user/setSchoolUser API error: ' + err)
                             }
                         )
                     }

+ 8 - 0
TEAMModelOS/ClientApp/src/view/trainList/Join.vue

@@ -122,6 +122,7 @@ export default {
         return {
             isProvince: false,
             ptList: [],
+            emptyGroup:[],
             groupData: [],
             isUpdGroup: false,
             groupName: '',
@@ -374,14 +375,19 @@ export default {
             )
         },
         groupToList() {
+            console.log('拖动')
             let data = this._.cloneDeep(this.groupData)
             let teachers = []
+            this.emptyGroup = []
             data.forEach(item => {
                 item.teachers.forEach(teacher => {
                     teacher.groupId = item.groupId
                     teacher.groupName = item.groupName
                     teachers.push(teacher)
                 })
+                if(!item.teachers.length){
+                    this.emptyGroup.push(item)
+                }
             })
             this.trainList.members = teachers
             this.isUpdGroup = true
@@ -600,7 +606,9 @@ export default {
                 // data.sort((a, b) => {
                 //     return a.groupName ? -1 : 1
                 // })
+                console.log(this.emptyGroup)
                 this.groupData = data
+                this.groupData.push(...this.emptyGroup)
             },
             deep: true,
             immediate: true

+ 2 - 1
TEAMModelOS/ClientApp/src/view/user/UserCenter.vue

@@ -417,7 +417,8 @@ export default {
                         if (res.error == 3) {
                             this.$Message.error(this.$t('user.codeErr'))
                         } else {
-                            this.$Message.error('API Error')
+                            // this.$Message.error('API Error')
+                            this.$Message.error(this.$t('user.updErr'))
                         }
                     }
                 },

+ 1 - 1
TEAMModelOS/ClientApp/src/view/video/Video.vue

@@ -233,7 +233,7 @@
 					}
 				},
 				err => {
-					this.$Message.error('user/setSchoolTeacher API error!')
+					// this.$Message.error('user/setSchoolTeacher API error!')
 				}
 			)
 

+ 1 - 1
TEAMModelOS/Controllers/Both/ItemController.cs

@@ -354,7 +354,7 @@ namespace TEAMModelOS.Controllers
                     var response = await client.GetContainer(Constant.TEAMModelOS, "School").ReadItemStreamAsync(itemInfo.id, new PartitionKey($"{itemInfo.code}"));
                     if (response.Status == 200)
                     {
-                        return Ok();
+                        return Ok(new { code=409,msg="题目已经存在"});
                     }
                     else
                     {

+ 24 - 0
TEAMModelOS/Controllers/Both/PaperController.cs

@@ -201,6 +201,30 @@ namespace TEAMModelOS.Controllers
             }*/
 
         }
+
+        /// <summary>
+        /// 保存试卷
+        /// </summary>
+        /// <param name="request"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+        //[AuthToken(Roles = "teacher")]
+        [HttpPost("check-paper-name")]
+        [Authorize(Roles = "IES")]
+        public async Task<IActionResult> CheckPaperName(JsonElement request) {
+            var client = _azureCosmos.GetCosmosClient();
+            if (!request.TryGetProperty("scope", out JsonElement _scope)) return BadRequest();
+            if (!request.TryGetProperty("name", out JsonElement _name)) return BadRequest();
+            if (!request.TryGetProperty("code", out JsonElement _code)) return BadRequest();
+            string tbname = $"{_scope}".Equals("private") ? "Teacher" : "School";
+            string sql = $"select * from  c where c.name='{_name}' ";
+            List<Paper> papers = new List<Paper>();
+            await foreach (var item in client.GetContainer(Constant.TEAMModelOS, tbname).GetItemQueryIterator<Paper>(sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Paper-{_code}") }))
+            {
+                papers.Add(item);
+            }
+            return Ok(new { papers });
+        }
         /// <summary>
         /// 保存试卷
         /// </summary>

+ 2 - 0
TEAMModelOS/Controllers/Common/HomeworkController.cs

@@ -636,6 +636,7 @@ namespace TEAMModelOS.Controllers.Learn
                                             record.content = content;
                                             record.answer = $"{_answer}";
                                             record.submitCount += 1;
+                                            record.time = now;
                                             await client.GetContainer(Constant.TEAMModelOS, tbname).ReplaceItemAsync<HomeworkRecord>(record, $"{_id}", new PartitionKey(pk));
                                             taskStatus = 1;
                                             msgid = 1;
@@ -687,6 +688,7 @@ namespace TEAMModelOS.Controllers.Learn
                                     record.content = content;
                                     record.answer = $"{_answer}";
                                     record.submitCount += 1;
+                                    record.time = now;
                                     await client.GetContainer(Constant.TEAMModelOS, tbname).ReplaceItemAsync<HomeworkRecord>(record, $"{_id}", new PartitionKey(partitionKey));
                                     taskStatus = 1;
                                     msgid = 1;

+ 20 - 0
TEAMModelOS/Controllers/Student/TmdUserController.cs

@@ -165,5 +165,25 @@ namespace TEAMModelOS.Controllers
 
             return (blob_uri, blob_sas);
         }
+        [ProducesDefaultResponseType]
+        [HttpPost("get-tmd-info")]
+        [Authorize(Roles = "IES")]
+        public async Task<ActionResult> getTmdInfo(JsonElement request)
+        {
+            if (!request.TryGetProperty("id", out JsonElement id)) return BadRequest();
+            Teacher teacher = new();
+            try {
+                var client = _azureCosmos.GetCosmosClient();
+                var response = await client.GetContainer(Constant.TEAMModelOS, "Teacher").ReadItemStreamAsync(id.GetString(), new PartitionKey("Base"));
+                if (response.Status == 200)
+                {
+                    using var json = await JsonDocument.ParseAsync(response.ContentStream);
+                    teacher = json.ToObject<Teacher>();
+                }
+            } catch (Exception e) {
+                await _dingDing.SendBotMsg($"IES5,{_option.Location},tmduser/init/getTmdInfo()\n{e.Message}{e.StackTrace}", GroupNames.醍摩豆服務運維群組);
+            }
+            return Ok(new { id = teacher.id,name = teacher.name });
+        }
     }
 }

+ 3 - 3
TEAMModelOS/Controllers/Teacher/TeacherCommonController.cs

@@ -291,7 +291,7 @@ namespace TEAMModelOS.Controllers
             if (!string.IsNullOrWhiteSpace(school) && classes.IsNotEmpty())
             {
                 //string querySchool = $" SELECT distinct  value c   FROM c {joinSqlClasses} {joinSqlSubjects}  where {stimesql}  {etimesql}  {progresssql}  {typesql}  {andSqlSubjects}  {tgSql}";
-                string querySchoolclss = $" SELECT distinct c.owner, c.id,c.code, c.classes,c.stuLists,c.subjects,c.progress,c.scope,c.startTime,c.school,c.creatorId,c.name,c.pk ,c.endTime,c.source,c.type   FROM c {joinSqlClasses}   where   {pksql}    {classesSql}";
+                string querySchoolclss = $" SELECT distinct c.owner,c.sStatus, c.id,c.code, c.classes,c.stuLists,c.subjects,c.progress,c.scope,c.startTime,c.school,c.creatorId,c.name,c.pk ,c.endTime,c.source,c.type   FROM c {joinSqlClasses}   where   {pksql}    {classesSql}";
                 //查询数据归属学校的
                 await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(querySchoolclss, continuationToken: continuationTokenSchool, requestOptions: new QueryRequestOptions() { MaxItemCount = topcout, PartitionKey = new PartitionKey($"{type}-{school}") }))
                 {
@@ -310,7 +310,7 @@ namespace TEAMModelOS.Controllers
                         }
                     }
                 }
-                string querySchoollist = $" SELECT distinct c.owner, c.id,c.code, c.classes,c.stuLists,c.subjects,c.progress,c.scope,c.startTime,c.school,c.creatorId,c.name,c.pk ,c.endTime ,c.source,c.type  FROM c {joinSqlStulist}   where   {pksql}    {stuListsSql}";
+                string querySchoollist = $" SELECT distinct c.owner,c.sStatus, c.id,c.code, c.classes,c.stuLists,c.subjects,c.progress,c.scope,c.startTime,c.school,c.creatorId,c.name,c.pk ,c.endTime ,c.source,c.type  FROM c {joinSqlStulist}   where   {pksql}    {stuListsSql}";
                 await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(querySchoollist, continuationToken: continuationTokenSchool, requestOptions: new QueryRequestOptions() { MaxItemCount = topcout, PartitionKey = new PartitionKey($"{type}-{school}") }))
                 {
                     using var json = await JsonDocument.ParseAsync(item.ContentStream);
@@ -340,7 +340,7 @@ namespace TEAMModelOS.Controllers
 
                 }
             }
-            string queryTeacher = $" SELECT distinct c.owner, c.id,c.code, c.classes,c.stuLists,c.subjects,c.progress,c.scope,c.startTime,c.school,c.creatorId,c.name,c.pk ,c.endTime ,c.source,c.type FROM c   where   {pksql}  ";
+            string queryTeacher = $" SELECT distinct c.owner,c.sStatus, c.id,c.code, c.classes,c.stuLists,c.subjects,c.progress,c.scope,c.startTime,c.school,c.creatorId,c.name,c.pk ,c.endTime ,c.source,c.type FROM c   where   {pksql}  ";
             //查询数据归属学校的
             await foreach (var item in client.GetContainer(Constant.TEAMModelOS, "Common").GetItemQueryStreamIterator(queryTeacher, continuationToken: continuationTokenSchool, requestOptions: new QueryRequestOptions() { MaxItemCount = topcout, PartitionKey = new PartitionKey($"{type}-{id}") }))
             {

+ 13 - 0
TEAMModelOS/Controllers/Third/ScApiController.cs

@@ -97,6 +97,19 @@ namespace TEAMModelOS.Controllers
         /// <param name="json"></param>
         /// <returns></returns>
         [ProducesDefaultResponseType]
+        [HttpPost("sc/fix-table-data")]
+        [AllowAnonymous]
+        public async Task<IActionResult> FixTableData(JsonElement json ) {
+
+            // _azureStorage.FindListByDict()
+            return Ok();
+        }
+        /// <summary>
+        ///
+        /// </summary>
+        /// <param name="json"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
         [HttpPost("sc/get-list")]
         [AllowAnonymous]
         public async Task<IActionResult> GetProjectList(List<Unbind> unbinds)

+ 4 - 1
TEAMModelOS/Controllers/XTest/TestController.cs

@@ -652,11 +652,14 @@ namespace TEAMModelOS.Controllers
         [HttpPost("get-ip")]
         public async Task<IActionResult> GetIp(JsonElement request)
         {
+            StuActivity item = request.GetProperty("item").ToObject<StuActivity>();
+            item = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Student").ReplaceItemAsync<StuActivity>(item, "c32da77f-7d4b-6d78-ae13-edad028b8c79", new PartitionKey("Activity-hbcn-hbcn070201"));
+            item = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "Student").ReadItemAsync<StuActivity>("c32da77f-7d4b-6d78-ae13-edad028b8c79", new PartitionKey("Activity-hbcn-hbcn070201"));
             string _researchKey = Regex.Replace($"{request.GetProperty("key")}", "[ \\[ \\] \\^ \\-|()【】/' {}_*×――(^)$%~!@#$…&%¥—+=<>《》!!???::•`·、。,;,.;\"‘’“”-]", " ");
             string[] mm = Regex.Split(_researchKey, "\\s+", RegexOptions.IgnoreCase);
             var token = await CoreTokenExtensions.CreateAccessToken("c7317f88-7cea-4e48-ac57-a16071f7b884", "kguxh:V.PLmxBdaI@jnrTrDSth]A3346", "China");
             string ip = await _searcher.SearchIpAsync($"{request.GetProperty("ip")}");
-            return Ok(new { ip, token.AccessToken,token.TokenType,token.IdToken, mm });
+            return Ok(new { item, ip, token.AccessToken,token.TokenType,token.IdToken, mm });
         }
     }
 

+ 3 - 3
TEAMModelOS/TEAMModelOS.csproj

@@ -31,9 +31,9 @@
     <SpaRoot>ClientApp\</SpaRoot>
     <DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
     <UserSecretsId>078b5d89-7d90-4f6a-88fc-7d96025990a8</UserSecretsId>
-    <Version>5.2202.24</Version>
-    <AssemblyVersion>5.2202.24.1</AssemblyVersion>
-    <FileVersion>5.2202.24.1</FileVersion>
+    <Version>5.2202.25</Version>
+    <AssemblyVersion>5.2202.25.1</AssemblyVersion>
+    <FileVersion>5.2202.25.1</FileVersion>
     <Description>TEAMModelOS(IES5)版本更新。</Description>
     <PackageReleaseNotes>6.0版本说明</PackageReleaseNotes>
   </PropertyGroup>