HiITEdenX 2 éve
szülő
commit
02dacaa74a

+ 63 - 71
TEAMModelOS.FunctionV4/CosmosDB/TriggerHomework.cs

@@ -191,99 +191,91 @@ namespace TEAMModelOS.FunctionV4
 
             }
             List<string> sub = new();
-            try
-            {
-                if (work.tchLists.Count == 0) {
-                    if (work.targets.Count > 0)
+            if (work.tchLists.Count == 0) {
+                if (work.targets.Count > 0)
+                {
+                    foreach (var course in work.targets)
                     {
-                        foreach (var course in work.targets)
+                        var info = course.ToObject<List<string>>();
+                        if (info.Count > 1)
                         {
-                            var info = course.ToObject<List<string>>();
-                            if (info.Count > 1)
-                            {
-                                sub.Add(info[0]);
-                            }
+                            sub.Add(info[0]);
                         }
                     }
                 }
-                
             }
-            catch (Exception e)
+            
+            if (addTmdidsCls.IsNotEmpty())
             {
-                await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}研修作业活动发布对象异常{e.Message}\n{e.StackTrace}", GroupNames.醍摩豆服務運維群組);
-            }
-            finally {
-                if (addTmdidsCls.IsNotEmpty())
+                addTmdidsCls.ForEach(x =>
                 {
-                    addTmdidsCls.ForEach(x =>
+                    HashSet<string> classIds = new HashSet<string>();
+                    classLists.ForEach(z =>
                     {
-                        HashSet<string> classIds = new HashSet<string>();
-                        classLists.ForEach(z =>
+                        z.members.ForEach(y =>
                         {
-                            z.members.ForEach(y =>
+                            if (y.id.Equals(x.id) && y.type == 1)
                             {
-                                if (y.id.Equals(x.id) && y.type == 1)
-                                {
-                                    classIds.Add(z.id);
-                                }
-                            });
+                                classIds.Add(z.id);
+                            }
                         });
-                        int sta = -1;
-                        if (tac.Count > 0)
+                    });
+                    int sta = -1;
+                    if (tac.Count > 0)
+                    {
+                        StuActivity activity = tac.Where(t => t.code.Equals($"Activity-{x.id}")).FirstOrDefault();
+                        if (activity != null)
                         {
-                            StuActivity activity = tac.Where(t => t.code.Equals($"Activity-{x.id}")).FirstOrDefault();
-                            if (activity != null)
-                            {
-                                sta = activity.taskStatus;
-                            }
+                            sta = activity.taskStatus;
                         }
-                        tmdActivities.Add(new StuActivity
-                        {
-                            pk = "Activity",
-                            id = work.id,
-                            code = $"Activity-{x.id}",
-                            type = "Homework",
-                            name = work.name,
-                            startTime = work.startTime,
-                            endTime = work.endTime,
-                            scode = work.code,
-                            scope = work.scope,
-                            school = work.school,
-                            creatorId = work.creatorId,
-                            subjects = sub,
-                            blob = work.blob,
-                            owner = work.owner,
-                            createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
-                            taskStatus = sta,
-                            mustSubmit = work.mustSubmit,
-                            classIds = classIds.ToList()
-                        });
+                    }
+                    tmdActivities.Add(new StuActivity
+                    {
+                        pk = "Activity",
+                        id = work.id,
+                        code = $"Activity-{x.id}",
+                        type = "Homework",
+                        name = work.name,
+                        startTime = work.startTime,
+                        endTime = work.endTime,
+                        scode = work.code,
+                        scope = work.scope,
+                        school = work.school,
+                        creatorId = work.creatorId,
+                        subjects = sub,
+                        blob = work.blob,
+                        owner = work.owner,
+                        createTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
+                        taskStatus = sta,
+                        mustSubmit = work.mustSubmit,
+                        classIds = classIds.ToList()
                     });
-                }
-                if (addStudentsCls.IsNotEmpty())
+                });
+            }
+            if (addStudentsCls.IsNotEmpty())
+            {
+                addStudentsCls.ForEach(x =>
                 {
-                    addStudentsCls.ForEach(x =>
+                    HashSet<string> classIds = new HashSet<string>();
+                    classLists.ForEach(z =>
                     {
-                        HashSet<string> classIds = new HashSet<string>();
-                        classLists.ForEach(z =>
+                        z.members.ForEach(y =>
                         {
-                            z.members.ForEach(y =>
+                            if (y.id.Equals(x.id) && y.type == 2)
                             {
-                                if (y.id.Equals(x.id) && y.type == 2)
-                                {
-                                    classIds.Add(z.id);
-                                }
-                            });
+                                classIds.Add(z.id);
+                            }
                         });
-                        int sta = -1;
-                        if (tac.Count > 0)
+                    });
+                    int sta = -1;
+                    if (tac.Count > 0)
+                    {
+                        StuActivity activity = tac.Where(t => t.code.Equals($"Activity-{x.code.Replace("Base-", "")}-{x.id}")).FirstOrDefault();
+                        if (activity != null)
                         {
-                            StuActivity activity = tac.Where(t => t.code.Equals($"Activity-{x.code.Replace("Base-", "")}-{x.id}")).FirstOrDefault();
-                            if (activity != null)
-                            {
-                                sta = activity.taskStatus;
-                            }
+                            sta = activity.taskStatus;
                         }
+                    }
 
                         stuActivities.Add(new StuActivity
                         {

+ 23 - 0
TEAMModelOS.SDK/DI/CoreAPI/CoreAPIHttpService.cs

@@ -47,6 +47,29 @@ namespace TEAMModelOS.SDK
             _httpClient = httpClient;
             options = optionsMonitor;
         }
+        /*
+        hubName	string	Optional	指定要傳送到哪個訊息中樞,若沒給則不傳送端外通知,只會發送端內通知。(目前只有"hita"及"hita5"能使用)
+        sender	string	Optional	發送訊息的來源端
+        tags	string array	Required	接收對象或手機註冊的tag,ID或服務等...
+        title	string	Optional	標題,會"直接"顯示於端外通知的title位置
+        body	string	Optional	正文,會"直接"顯示於端外通知的body位置
+        eventId	string	Optional	事件ID
+        eventName	string	Optional	事件名稱
+        data	string	Optional	額外資料
+         */
+        /// <summary>
+        ///  發送端內外通知
+        /// </summary>
+        /// <param name="clientID"></param>
+        /// <param name="clientSecret"></param>
+        /// <param name="location"></param>
+        /// <param name="url"></param>
+        /// <param name="data"></param>
+        /// <returns></returns>
+        public async Task<(HttpStatusCode code, string content)> PushNotify(Dictionary<string, object> data, string location, IConfiguration _configuration, DI.DingDing _dingDing) {
+            return (HttpStatusCode.BadRequest, null);
+        }
+
         /// <summary>
         ///  发送短信验证码
         /// </summary>

+ 94 - 94
TEAMModelOS/ClientApp/src/api/ability.js

@@ -1,96 +1,96 @@
 import { post } from '@/api/http'
 export default {
-	getAreaSetting: function(data) {
-        return post('/school/area-setting/find-id', data)
-    },
-	saveAreaSetting: function(data) {
-        return post('/school/area-setting/upsert', data)
-    },
-    // 更新册别
-    SaveOrUpdateVolume: function(data) {
-        return post('/research/ability/upsert', data)
-    },
-	FindVolumes:function(data) {
-        return post('/research/ability/find', data)
-    },
-	FindAbilityById:function(data) {
-	    return post('/research/ability/find-id', data)
+	getAreaSetting: function (data) {
+		return post('/school/area-setting/find-id', data)
 	},
-	DeleteVolume:function(data) {
-	    return post('/research/ability/delete', data)
+	saveAreaSetting: function (data) {
+		return post('/school/area-setting/upsert', data)
 	},
-	GetTreeByVolume:function(data) {
-	    return post('/research/ability-task/find-id', data)
+	// 更新册别
+	SaveOrUpdateVolume: function (data) {
+		return post('/research/ability/upsert', data)
 	},
-	UpsertTree:function(data) {
-	    return post('/research/ability-task/upsert-tree', data)
+	FindVolumes: function (data) {
+		return post('/research/ability/find', data)
 	},
-	DeleteTree:function(data) {
-	    return post('/research/ability-task/delete', data)
+	FindAbilityById: function (data) {
+		return post('/research/ability/find-id', data)
 	},
-	ShareTree:function(data) {
-	    return post('/teacher/share/to', data)
+	DeleteVolume: function (data) {
+		return post('/research/ability/delete', data)
 	},
-	FindShare:function(data) {
-	    return post('/teacher/share/find', data)
+	GetTreeByVolume: function (data) {
+		return post('/research/ability-task/find-id', data)
 	},
-	ViewShare:function(data) {
-	    return post('/teacher/share/view-share', data)
+	UpsertTree: function (data) {
+		return post('/research/ability-task/upsert-tree', data)
 	},
-	ShareAgree:function(data) {
-	    return post('/teacher/share/agree-share', data)
+	DeleteTree: function (data) {
+		return post('/research/ability-task/delete', data)
 	},
-	CheckLink:function(data) {
-	    return post('/common/syllabus/check-link', data)
+	ShareTree: function (data) {
+		return post('/teacher/share/to', data)
+	},
+	FindShare: function (data) {
+		return post('/teacher/share/find', data)
+	},
+	ViewShare: function (data) {
+		return post('/teacher/share/view-share', data)
+	},
+	ShareAgree: function (data) {
+		return post('/teacher/share/agree-share', data)
+	},
+	CheckLink: function (data) {
+		return post('/research/ability-task/check-link', data)
 	},
 	// 查找知识块数量
 	FindBlockCount: function (data) {
 		return post('/knowledges/find-count', data)
 	},
 	/* 问卷相关 */
-	getSurveyList:function (data) {
+	getSurveyList: function (data) {
 		return post('/common/TrSurvey/find', data)
 	},
-	getSurveySummary:function (data) {
+	getSurveySummary: function (data) {
 		return post('/common/TrSurvey/find-summary', data)
 	},
-	saveSurvey:function (data) {
+	saveSurvey: function (data) {
 		return post('/common/TrSurvey/save', data)
 	},
-	deleteSurvey:function (data) {
+	deleteSurvey: function (data) {
 		return post('/common/TrSurvey/delete', data)
 	},
 	/* 投票相关 */
-	getVoteList:function (data) {
+	getVoteList: function (data) {
 		return post('/common/TrVote/find', data)
 	},
-	getVoteSummary:function (data) {
+	getVoteSummary: function (data) {
 		return post('/common/TrVote/find-summary', data)
 	},
-	saveVote:function (data) {
+	saveVote: function (data) {
 		return post('/common/TrVote/save', data)
 	},
-	deleteVote:function (data) {
+	deleteVote: function (data) {
 		return post('/common/TrVote/delete', data)
 	},
 	/* 评测相关 */
-	getExamList:function (data) {
+	getExamList: function (data) {
 		return post('/common/ExamLite/find', data)
 	},
-	getExamSummary:function (data) {
+	getExamSummary: function (data) {
 		return post('/common/ExamLite/find-summary', data)
 	},
-	saveExam:function (data) {
+	saveExam: function (data) {
 		return post('/common/ExamLite/save', data)
 	},
-	deleteExam:function (data) {
+	deleteExam: function (data) {
 		return post('/common/ExamLite/delete', data)
 	},
 	//作业相关
-	saveWork:function (data) {
+	saveWork: function (data) {
 		return post('/common/work/save', data)
 	},
-	getWorkSummary:function (data) {
+	getWorkSummary: function (data) {
 		return post('/common/work/find-summary', data)
 	},
 	//数据统计API
@@ -104,105 +104,105 @@ export default {
 	getSchList: function (data) {
 		return post('/school/area/find', data)
 	},
-	
+
 	//根据区id查询学校及分组情况
-	findAreaGroup(data){
+	findAreaGroup(data) {
 		return post('/school/area/find-group', data)
 	},
-	
+
 	//根据区id查询学校及分组情况
-	saveAreaVote(data){
+	saveAreaVote(data) {
 		return post('/school/area/save-vote', data)
 	},
-	
-	getAreaVoteById(data){
+
+	getAreaVoteById(data) {
 		return post('/school/area/find-vote-id', data)
 	},
-	
-	getAreaSurveyById(data){
+
+	getAreaSurveyById(data) {
 		return post('/school/area/find-survey-id', data)
 	},
-	
-	getAreaVotes(data){
+
+	getAreaVotes(data) {
 		return post('/school/area/find-all-vote', data)
 	},
-	
+
 	//根据区id查询学校及分组情况
-	saveAreaSurveys(data){
+	saveAreaSurveys(data) {
 		return post('/school/area/save-survey', data)
 	},
-	
-	getAreaSurveys(data){
+
+	getAreaSurveys(data) {
 		return post('/school/area/find-all-survey', data)
 	},
-	
-	getAreaVoteTeachers(data){
+
+	getAreaVoteTeachers(data) {
 		return post('/school/area/find-all-vote-teachers', data)
 	},
-	
-	getAreaSurveyTeachers(data){
+
+	getAreaSurveyTeachers(data) {
 		return post('/school/area/find-all-survey-teachers', data)
 	},
-	
+
 	//区级资源管理
-	getResAndPolicy(data){
+	getResAndPolicy(data) {
 		return post('/standard-file/find-id', data)
 	},
-	upsertResAndPolicy(data){
+	upsertResAndPolicy(data) {
 		return post('/standard-file/upsert', data)
 	},
 	//获取区级统计数据
-	getAreaData(data){
-		return post('/research/statistics-area',data)
+	getAreaData(data) {
+		return post('/research/statistics-area', data)
 		// return post('/research/get-area-statistics',data)
 	},
 	//获取区级统计数据(简易版数据)
-	getAreaDataSimple(data){
-		return post('/research/statistics-area-simple',data)
+	getAreaDataSimple(data) {
+		return post('/research/statistics-area-simple', data)
 		// return post('/research/get-area-statistics',data)
 	},
 	//获取校级统计数据
-	getSchoolData(data){
-		return post('/research/get-school-appraise',data)
+	getSchoolData(data) {
+		return post('/research/get-school-appraise', data)
 		// return post('/research/get-school-statistics',data)
 	},
 	// 更新能力点的选修必修
-	upsertCurrency(data){
-		return post('/research/ability/upsert-currency',data)
+	upsertCurrency(data) {
+		return post('/research/ability/upsert-currency', data)
 	},
 	/* 获取学校研修记录 */
-	getSchoolAppraise(data){
-		return post('/research/get-school-appraise',data)
+	getSchoolAppraise(data) {
+		return post('/research/get-school-appraise', data)
 	},
-	fixMd5Duration(data){
-		return post('/fix-data/fix-md5-duration',data)
+	fixMd5Duration(data) {
+		return post('/fix-data/fix-md5-duration', data)
 	},
 	/* 获取某个人的认证材料 */
-	getCertByTmdId(data){
-		return post('/research/ability/sub-opt',data)
+	getCertByTmdId(data) {
+		return post('/research/ability/sub-opt', data)
 	},
 	/* 获取某个人的课堂实录 */
-	getVideoByTmdId(data){
-		return post('/research/class-video/opt',data)
+	getVideoByTmdId(data) {
+		return post('/research/class-video/opt', data)
 	},
 	/* 设置互评开关 */
-	setHpAppraise(data){
-		return post('/school/init/set-school-info',data)
+	setHpAppraise(data) {
+		return post('/school/init/set-school-info', data)
 	},
 	/* 设置最终考核结果 */
-	setFinalScore(data){
-		return post('/research/upsert-teacher-finalScore',data)
+	setFinalScore(data) {
+		return post('/research/upsert-teacher-finalScore', data)
 	},
 	/* 批量修改课堂实录 */
-	batchVideo(data){
-		return post('/research/class-video/score-teacher-classvideo',data)
+	batchVideo(data) {
+		return post('/research/class-video/score-teacher-classvideo', data)
 	},
 	/* 批量修改认证材料 */
-	batchAbility(data){
-		return post('/research/ability/score-teacher-submit',data)
+	batchAbility(data) {
+		return post('/research/ability/score-teacher-submit', data)
 	},
 	/* 获取评论内容 */
-	getReplyInfo(data){
-		return post('/research/ability/get-reply-info',data)
+	getReplyInfo(data) {
+		return post('/research/ability/get-reply-info', data)
 	},
 }

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

@@ -160,6 +160,17 @@
                                 <!-- <p class="list-item-time isScore" v-show="timeStatus(item) == 'finish'">
                                     得分率:20%
                                 </p> -->
+                                <p v-if="item.owner === 'school'">
+                                    <span v-if="item.ext">
+                                        <span v-if="item.ext.subjects">
+                                            <span v-for="(item, index) in item.ext.subjects" :key="index"
+                                                class="tag-style tag-subject text-long" :title="item.name"
+                                            >
+                                                {{ item.name }}
+                                            </span>
+                                        </span>
+                                    </span>
+                                </p>
                                 <!-- <p style="font-size:12px; margin-top: 5px; word-break: keep-all;">
                                     <span v-if="item.ext">
                                         <span v-if="item.ext.subjects">
@@ -610,7 +621,7 @@ import QuesNaire from "./EventContentTypeTemplate/QuesNaire";
                             if(this.showType.length === 1) {
                             // if(this.showType[0] === 'Exam') {
                                 return this.showType.includes(item.type) && item.classIds.includes(this.courseNow.list) &&
-                                    (item.subjects.includes(this.courseNow.subject.id) || item.subjects.includes(this.courseNow.id))
+                                    (item.owner === 'school' ? item.creatorId === this.courseNow.roster.teacherId : (item.subjects.includes(this.courseNow.subject.id) || item.subjects.includes(this.courseNow.id)))
                             } else {
                                 return this.showType.includes(item.type)
                             }

+ 4 - 3
TEAMModelOS/ClientApp/src/components/student-web/HomeView/newHomeView.vue

@@ -642,7 +642,7 @@ export default {
         },
         sentSelectedEventTitle(item) {
             if(item.type === "Exam" || item.type === "Homework") {
-                let index =  this.getCourseIndex(item.subjects, item.classIds)
+                let index =  this.getCourseIndex(item.owner === 'school' ? item.creatorId : item.subjects, item.classIds, item.owner === 'school')
                 if(index === -1) {
                     this.$Message.error("未找到发布该活动的课程")
                 } else {
@@ -714,10 +714,11 @@ export default {
                 })
             }
         },
-        getCourseIndex(ids, classIds) {
+        getCourseIndex(ids, classIds, isSchool) {
             return this.getAllCourse.findIndex(course => {
                 // 要同时匹配课程和班级id
-                return (ids.includes(course.id) || ids.includes(course.subject.id)) && classIds.includes(course.list)
+                // 学校发布的只匹配老师和名单
+                return (isSchool ? ids === course.roster.teacherId : (ids.includes(course.id) || ids.includes(course.subject.id))) && classIds.includes(course.list)
             })
         },
     },

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

@@ -224,7 +224,7 @@ export default {
             state.schoolProfile.productSum = data.productSum //学校购买服务模组信息
             state.osblob_sas = data.osblob_sas
             state.osblob_uri = data.osblob_uri
-            sessionStorage.setItem('standard', data.school_base.standard)
+            // sessionStorage.setItem('standard', data.school_base.standard)
         },
         setStudentProfile(state, data) {
             state.studentProfile.blob_uri = data.blob_uri // 學生在學校的Blob網址

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

@@ -974,6 +974,7 @@ export default {
         if (syllabusLinks.length) {
           this.$api.ability.CheckLink({
             "links": syllabusLinks,
+            "standard": this.curStandard,
             "code": this.curCode,
             "scope": this.curScope
           }).then(res => {