Selaa lähdekoodia

Merge branch 'develop' of http://52.130.252.100:10000/TEAMMODEL/TEAMModelOS into develop

zj 2 vuotta sitten
vanhempi
commit
06a059b286

+ 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>

+ 8 - 0
TEAMModelOS.SDK/Models/Service/StudentService.cs

@@ -631,8 +631,10 @@ namespace TEAMModelOS.SDK
 
                 //Key:ClassNo_gradeId Value:ClassId 存放教室no及id的變數
                 Dictionary<string, (string classId, string className, string periodId, string gradeId, int year)> classNoId = new Dictionary<string, (string classId, string className, string periodId, string gradeId, int year)>();
+                List<Class> classes = new List<Class>();
                 foreach (var classInfo in classInfos)
                 {
+                    classes.Add(classInfo.Value);
                     string classGradeId = classInfo.Value.gradeId;
                     int classYear = classInfo.Value.year;
                     classNoId.Add(classInfo.Value.no + "_" + classYear,
@@ -869,6 +871,12 @@ namespace TEAMModelOS.SDK
                             {
                                 student.periodId = stud.Value.periodId;
                             }
+                            if (!string.IsNullOrWhiteSpace(student.classId)) {
+                                var clazz =  classes.FindAll(x => x.id.Equals(student.classId));
+                                if (clazz.IsNotEmpty()) {
+                                    student.graduate = clazz[0].graduate;
+                                }
+                            }
                             if (!isUpPwDone)
                             {
                                 student.pw = stud.Value.pw;

+ 0 - 1
TEAMModelOS.SDK/Models/Service/StudyService.cs

@@ -23,7 +23,6 @@ namespace TEAMModelOS.SDK.Models.Service
             try
             {
                 var html = Constant.html.Replace("{c.cname}", cname).Replace("{c.sname}", sname).Replace("{c.gname}", gname).Replace("{c.details}", details);
-                List<Task<string>> tasks = new List<Task<string>>();
                 GlobalSettings globalSettings = new GlobalSettings();
                 globalSettings.ColorMode = ColorMode.Color;
                 globalSettings.Orientation = Orientation.Portrait;

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 35 - 35
TEAMModelOS/ClientApp/public/lang/en-US.js


+ 1 - 1
TEAMModelOS/ClientApp/public/lang/zh-CN.js

@@ -1298,7 +1298,7 @@ const LANG_ZH_CN = {
             image: '图片',
             file: '附件',
             link: '超链接',
-            cw: '课件第',
+            cw: '教材第',
             page: '页',
             pageNoRcd: '此页没有互动数据',
             di: '第',

+ 9 - 9
TEAMModelOS/ClientApp/public/lang/zh-TW.js

@@ -1299,7 +1299,7 @@ const LANG_ZH_TW = {
             image: '圖片',
             file: '附件',
             link: '超連結',
-            cw: '課件第',
+            cw: '教材第',
             page: '頁',
             pageNoRcd: '此頁沒有互動數據',
             di: '第',
@@ -1835,7 +1835,7 @@ const LANG_ZH_TW = {
         acCount: '活動概覽',
         goingList: '進行中',
         scNotice: '學校公告',
-        msg: '息通知',
+        msg: '息通知',
         sysMsg: '小豆助手',
         avgScore: '平均互動指數',
         col1: '小組學習',
@@ -2588,8 +2588,8 @@ const LANG_ZH_TW = {
             noAuth: '未授權',
             noSchool: '未加入學校',
             sort1: '重新挑選試卷',
-            sort2: '閱卷評暫不支持以題號排序的試卷,請重新挑選試卷',
-            sort3: '閱卷評不能挑選以題號排序的試卷',
+            sort2: '閱卷評暫不支持以題號排序的試卷,請重新挑選試卷',
+            sort3: '閱卷評不能挑選以題號排序的試卷',
         },
         //ManualPaper.vue
         manual: {
@@ -3662,7 +3662,7 @@ const LANG_ZH_TW = {
 
         //ClassMgt.vue
         className: '名稱',
-        yearGrade: '學級/年級',
+        yearGrade: '年級/學級',
         untimed: '未到入學時間',
         graduated: '已畢業',
         classLabel: '班級編號',
@@ -3674,7 +3674,7 @@ const LANG_ZH_TW = {
         all: '全部',
         noSet: '未設定',
         newClass: '建立班級',
-        gradeWarning1: '請設定學級/年級',
+        gradeWarning1: '請設定年級/學級',
         classRep: '班級重複',
         updOk: '修改成功',
         updErr: '修改失敗',
@@ -4110,7 +4110,7 @@ const LANG_ZH_TW = {
         importOk: '匯入成功',
         importErr: '匯入失敗',
         sit: '匯入學生範本:',
-        sit0: 'no: 填,學生座號',
+        sit0: 'no: 填,學生座號',
         sit1: 'id: 必填,學生學號(4-12位數字)',
         sit2: 'pw: 選填,密碼(若不輸入,預設和學生學號相同)',
         sit3: 'name: 必填,學生姓名',
@@ -4176,7 +4176,7 @@ const LANG_ZH_TW = {
                 joinClass: "我參與學習的課程",
                 title1: "您還沒有加入課程",
                 title2: "快去輸入邀請碼,加入課程進行學習吧",
-                addModal: "輸入您想加入程的邀請碼",
+                addModal: "輸入您想加入程的邀請碼",
             },
             toLook: "現在去看",
             tip1: "第",
@@ -6790,7 +6790,7 @@ const LANG_ZH_TW = {
         fontColor: '字體顏色',
         newNotice: '新通知',
         clearAllMsgs: '清空訊息',
-        clearAllTip: '確認清空所有消息通知?',
+        clearAllTip: '確認清空所息通知?',
         noData: '暫無',
         noJoinSchool: '暫未加入學校',
         noShoolTip: '用戶暫無學校清單資料',

+ 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 => {

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

@@ -63,7 +63,7 @@
         <!--学生账号table-->
         <div class="sc-content" style="position: relative; padding-left: 15px" :style="{width: '100%',transition: 'all 0.7s'}">
             <Scroll :on-reach-bottom="scrollLoad" height="750" :distance-to-edge="[15, 15]">
-                <Table ref="selection" :columns="tableColumns" :data="tableShowData" @on-selection-change="(selection)=>{selections = selection}">
+                <Table ref="selection" :columns="tableColumns" :data="tableShowData" @on-selection-change="(selection)=>{selections = selection}" @on-filter-change="handleFilterData">
                     <template slot-scope="{ row }" slot="header">
                         <PersonalPhoto :name="row.name" :picture="row.picture" />
                     </template>
@@ -275,6 +275,7 @@ export default {
             callback()
         }
         return {
+            imeiFilter:'',
             graduateList: [],
             isGraduate: false,
             imeiTips: '',
@@ -685,6 +686,7 @@ export default {
             }
         },
         initData() {
+            let _this = this
             this.tableColumns = [
                 {
                     type: 'selection',
@@ -769,10 +771,34 @@ export default {
                 this.tableColumns.splice(8, 0, {
                     title: this.$t('stuAccount.imei'),
                     slot: 'imei',
-                    align: 'center'
+                    align: 'center',
+                    key:'imei',
+                    filters: [
+                        {
+                            label: '已绑定',
+                            value: 1
+                        },
+                        {
+                            label: '未绑定',
+                            value: 2
+                        }
+                    ],
+                    filterMultiple: false,
+                    filterMethod (value, row) {
+                        return true
+                    }
                 })
             }
         },
+        handleFilterData(data){
+            console.log(data)
+            if(data._filterChecked.length){
+                this.imeiFilter = data._filterChecked[0]
+            }else{
+                this.imeiFilter = ''
+            }
+            this.filterData()
+        },
         /**基础查询数据 */
         baseFindStudent(params) {
             this.tableLoading = true
@@ -863,6 +889,17 @@ export default {
                 })
             }
 
+            //imei筛选
+            if(this.imeiFilter){
+                data = data.filter(item=>{
+                    if(this.imeiFilter == 1){
+                        return !!item.imei
+                    }else if(this.imeiFilter == 2){
+                        return !item.imei
+                    }
+                })
+            }
+
             this.tableFilterData = data
             this.pointNum = this.basicCount
             this.tableShowData = data.slice(0, this.basicCount)

+ 12 - 4
TEAMModelOS/ClientApp/src/view/teachermgmt/components/mgt/TeacherMgt.vue

@@ -548,12 +548,13 @@ export default {
                         let flag = params.row.permissions?.some(item => {
                             return !p.includes(item)
                         })
-
+                        let areaId = sessionStorage.getItem('areaId')
+                        let isArea = (params.row.areas?.length && !!params.row.areas.find(r => r.areaId == areaId))
                         // 区级管理员 || 校级管理员
-                        if (params.row.areas?.length || params.row.roles?.includes('admin')) {
+                        if (isArea || params.row.roles?.includes('admin')) {
                             let text = ''
-                            if (params.row.areas?.length) text = this.$t('teachermgmt.table.text4')
-                            if (params.row.roles?.includes('admin')) text = `${text}${params.row.areas?.length ? '、' : ''}${this.$t('teachermgmt.table.text3')}`
+                            if (isArea) text = this.$t('teachermgmt.table.text4')
+                            if (params.row.roles?.includes('admin')) text = `${text}${isArea ? '、' : ''}${this.$t('teachermgmt.table.text3')}`
                             return h(
                                 'span',
                                 {
@@ -1357,6 +1358,13 @@ export default {
         teachers: {
             handler(n, o) {
                 this.getTeachersTemp()
+                if (n && n.length) {
+                    setTimeout(() => {
+                        this.curPage = 1
+                        this.tableDataShow = []
+                        this.scrollLoad()
+                    }, 0)
+                }
             },
             deep: true,
             immediate: true

+ 49 - 39
TEAMModelOS/Controllers/Normal/ArtSettingController.cs

@@ -69,51 +69,61 @@ namespace TEAMModelOS.Controllers
         [AuthToken(Roles = "teacher,student,admin,area")]
 #endif
         public async Task<IActionResult> FindArtPapers(JsonElement request) {
-            try {
-                School school = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>("hbcn", new PartitionKey("Base"));
-                var subjects= school.period.SelectMany(x => x.subjects).Where(y => !string.IsNullOrWhiteSpace(y.bindId) && (y.bindId.Equals("subject_painting") ||y.bindId.Equals("subject_music")));
-                if (subjects.Any())
-                {
-                    List<Paper> papers = new List<Paper>();
-                    string sql = $"select value c  from c where c.subjectId in ({string.Join(",", subjects.Select(x => $"'{x.id}'"))}) ";
-                    await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
-                        .GetItemQueryIterator<Paper>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Paper-{school.id}") }))
-                    {
-                        papers.Add(item);
-                    }
-                    List<dynamic> papersData = new List<dynamic>();
-                    papers.ForEach(x =>
+            try 
+            {
+                request.TryGetProperty("schoolCode", out JsonElement _schoolCode);
+                ///request.TryGetProperty("areaId", out JsonElement _areaId);
+                List<School> schools = new List<School>();
+                School schoolHbcn = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>("hbcn", new PartitionKey("Base"));
+                schools.Add(schoolHbcn);
+                if (!string.IsNullOrWhiteSpace("_schoolCode")) {
+                    School schoolSelf = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>("hbcn", new PartitionKey("Base"));
+                    schools.Add(schoolSelf);
+                }
+                List<dynamic> papersData = new List<dynamic>();
+                foreach (var school in schools) {
+                    var subjects = school.period.SelectMany(x => x.subjects).Where(y => !string.IsNullOrWhiteSpace(y.bindId) && (y.bindId.Equals("subject_painting") || y.bindId.Equals("subject_music")));
+                    if (subjects.Any())
                     {
-                        var period = school.period.Find(z => z.id.Equals(x.periodId));
-                        if (period != null)
+                        List<Paper> papers = new List<Paper>();
+                        string sql = $"select value c  from c where c.subjectId in ({string.Join(",", subjects.Select(x => $"'{x.id}'"))}) ";
+                        await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
+                            .GetItemQueryIterator<Paper>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Paper-{school.id}") }))
                         {
-                            var subject = subjects.Where(z => z.id.Equals(x.subjectId));
-                            if (subjects.Any())
+                            papers.Add(item);
+                        }
+
+                        papers.ForEach(x =>
+                        {
+                            var period = school.period.Find(z => z.id.Equals(x.periodId));
+                            if (period != null)
                             {
-                                papersData.Add(new
+                                var subject = subjects.Where(z => z.id.Equals(x.subjectId));
+                                if (subjects.Any())
                                 {
-                                    x.id,
-                                    x.name,
-                                    x.blob,
-                                    x.score,
-                                    count = x.scoring.Count,
-                                    x.periodId,
-                                    periodName = period.name,
-                                    periodTypes = period.type,
-                                    x.subjectId,
-                                    subjectBindId = subject.First().bindId,
-                                    subjectName = subject.First().name,
-                                    x.createTime,
-                                    x.gradeIds
-                                });
+                                    papersData.Add(new
+                                    {
+                                        x.id,
+                                        x.name,
+                                        x.blob,
+                                        x.score,
+                                        count = x.scoring.Count,
+                                        x.periodId,
+                                        periodName = period.name,
+                                        periodTypes = period.type,
+                                        x.subjectId,
+                                        subjectBindId = subject.First().bindId,
+                                        subjectName = subject.First().name,
+                                        x.createTime,
+                                        x.gradeIds
+                                    });
+                                }
                             }
-                        }
-                    });
-                    return Ok(new { status=0, papers = papersData });
-                }
-                else {
-                    return Ok(new { status = 1, msg = "没有艺术评价的科目。" });
+                        });
+                      
+                    }
                 }
+                return Ok(new { status = 0, papers = papersData });
             } catch (Exception ex) {
                 await _dingDing.SendBotMsg($"find-art-papers\n{ex.Message}\n{ex.StackTrace}",GroupNames.醍摩豆服務運維群組);
                 return Ok(new { status = 1, msg = "系统异常" });