Quellcode durchsuchen

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

zhouj1203@hotmail.com vor 4 Jahren
Ursprung
Commit
b0bb896748

+ 21 - 15
TEAMModelOS/ClientApp/src/api/courseMgmt.js

@@ -1,69 +1,75 @@
-import { fetch, post } from '@/api/http'
+锘縤mport { fetch, post } from '@/api/http'
 export default {
+    //鑾峰彇璇剧▼鍒楄〃
     findCourse: function (data) {
         return post('/school/course/find', data)
     },
+    //鑾峰彇璇剧▼瀹屾暣淇℃伅
+    findCusInfo: function (data) {
+        return post('/school/course/find-summary', data)
+    },
     saveOrUpdateCourse: function (data) {
         return post('/school/course/upsert', data)
     },
     deleteCourse: function (data) {
         return post('/school/course/delete', data)
     },
-    //批量删除课程
+    //鎵归噺鍒犻櫎璇剧▼
     deleteCourseAll: function (data) {
         return post('/school/course/delete-all', data)
     },
-    //管理员保存排课数据——单堂设置
+    //管理员保存排课数据——单堂设置
     upsertPlanDto: function (data) {
         return post('/school/course/upsert-management', data)
     },
-    //管理员保存排课数据——批量导入
+    //管理员保存排课数据——批量导入
     importAllPlan: function (data) {
         return post('/api/Course/importAllPlan', data)
     },
-    //任课教师保存课程附属信息
+    //浠昏�鏁欏笀淇濆瓨璇剧▼闄勫睘淇℃伅
     upsertPlan: function (data) {
         return post('/api/Course/upsertPlan', data)
     },
-    //查询课程安排数据
+    //鏌ヨ�璇剧▼瀹夋帓鏁版嵁
     findPlan: function (data) {
         return post('/school/course/find-management', data)
     },
-    //删除课程安排数据
+    //鍒犻櫎璇剧▼瀹夋帓鏁版嵁
     deletePlan: function (data) {
         return post('/api/Course/deletePlan', data)
     },
-    //删除一节课的安排
+    //删除一节课的安排
     deleteTime: function (data) {
         return post('/api/Course/deleteTime', data)
     },
-    //获取教室关联的学生(移动到班级api管理)
+    //获取教室关联的学生(移动到班级api管理)
     getClassroomStudent: function (data) {
        return post('/student/class/find', data)
     },
-    //虚拟教室添加学生
+    //铏氭嫙鏁欏�娣诲姞瀛︾敓
     addClassroom: function (data) {
         return post('/api/ClassStudent/upsert', data)
     },
-    //获取教师列表
+    //鑾峰彇鏁欏笀鍒楄〃
     getSchoolTeacher: function (data) {
         return post('/school/teacher/get-teacher-all', data)
     },
-    //获取教师标准课程列表
+    //鑾峰彇鏁欏笀鏍囧噯璇剧▼鍒楄〃
     getSchoolCusMgt: function (data) {
         return post('/school/course/find-course', data)
     },
-    //获取教师个人课程列表
+    //鑾峰彇鏁欏笀涓�汉璇剧▼鍒楄〃
     getPrivateCusMgt: function (data) {
         return post('/school/course/find-teacher-course', data)
     },
-    //新增/修改个人课程
+    //鏂板�/淇�敼涓�汉璇剧▼
     upsertPrivateCus: function (data) {
         return post('/school/course/upsert-teacher-course', data)
     },
-    //更新保存标准课程公告
+    //鏇存柊淇濆瓨鏍囧噯璇剧▼鍏�憡
     upsertNotice: function (data) {
         return post('/school/course/upsert-notice', data)
     }
 
+
 }

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

@@ -175,6 +175,9 @@ export default {
     //查詢學生端投票结果
     getVoteResult: function (data) {
         return post('/common/vote/record',data)
+    },
+    //提交投票结果数据
+    sendVoteResult: function (data) {
+        return post('/common/vote/decide',data)
     }
-}
-
+}

+ 4 - 0
TEAMModelOS/ClientApp/src/assets/student-web/component_styles/vote.css

@@ -22,6 +22,10 @@
   border: none;
 }
 .vote .checkAnswer .testBtn input[type="checkbox"]:checked ~ .testbg span {
+  color: #5e5a6e;
+  font-weight: bolder;
+}
+.vote .checkAnswer .testBtn input[type="checkbox"]:checked ~ .testbg .vote-info {
   color: #fff;
   font-weight: bolder;
 }

+ 68 - 23
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/Vote.vue

@@ -68,7 +68,7 @@
               <div class="title-rect-group">
                   <div class="title-rect" />
                   <h2 class="title-rect-name">{{ $t("studentWeb.vote.bollotbox") }}</h2>
-                  <p style="margin-left:15px;margin-top:2px">剩余票数 <span @click="getVote" style="font-size:16px">{{voteInfo.voteNum}}</span><span> 票</span></p>
+                  <p style="margin-left:15px;margin-top:2px">剩余票数 <span @click="getVote" style="font-size:16px">{{voteCount}}</span><span> 票</span></p>
                   </div>
           </div>
           <!--和評測模組一樣-->
@@ -85,9 +85,9 @@
                       <InputNumber v-model="item.count" 
                                    :formatter="value => `${value}票`"
                                    :parser="value => value.replace('票', '')"
-                                   :min="1"
+                                   :min="0"
                                    v-if="voteInfo.repeat"
-                                   controls-outside
+                                   @on-change="setVoteNum(item)"
                       >
                       </InputNumber>
                   </div>
@@ -179,12 +179,12 @@ export default {
             getVoteResult() {
                 if (this.$store.getters.getItemTitle.id) {
                     this.voteRes = {}
-                    
                     let params = {
-                        "id": "ff86005f-fc57-4a73-a5b7-551b45e446e7",
-                        "code": "Vote-1595321354",
-                        "userid": "123132123"
+                        "id": this.$store.getters.getItemTitle.id,
+                        "code": this.$store.getters.getItemTitle.scode,
+                        "userid": this.$store.state.userInfo.sub
                     }
+                    console.log('777777', params)
                     this.$api.studentWeb.getVoteResult(params).then(res => {
                         if (res) {
                             console.log('获取投票结果数据')
@@ -213,6 +213,7 @@ export default {
                         })
                 }
             },
+
             //获取投票结果
             getVote(data) {
                 if (!this.voteInfo.repeat) {
@@ -315,26 +316,51 @@ export default {
                     this.nextItem = nextItems[0];
                 }
             },
+            setVoteNum(data) {
+                if (this.isOverCount) {
+                    data.count = 0
+                }
+            },
             submitMessage() {
-                if (this.voteChecked != "") {
-                    this.clickbutnoChoose = false;
+                console.log(this.voteInfo)
+                console.log(this.voteChecked)
+                this.clickbutnoChoose = false;
+                if (this.voteChecked.length) {
                     this.WarmMessageisOpen = true;
                     this.isFirstVoted = true;
-                    this.$store.commit(
-                        "SavefinishedItemID",
-                        this.$store.getters.getItemTitle.eventID
-                    );
-                    setTimeout(() => {
-                        this.WarmMessageisOpen = false;
-                    }, 2000);
-                    this.previewNext();
-                    //加入下一個活動的提示框
-                    console.log(localStorage.getItem("hintNextItem")); //讀取是否顯示提示下一個
-                    if (localStorage.getItem("hintNextItem") != "false") {
-                        setTimeout(() => {
-                            this.isHintNextItem = true;
-                        }, 4000);
+                    console.log(this.$store.getters.getItemTitle)
+                    let params = {
+                        "id": this.$store.state.userInfo.sub,
+                        "code": this.$store.getters.getItemTitle.id,
+                        "option": {}
                     }
+                    for (let item of this.voteChecked) {
+                        params.option[item.code] = item.count
+                    }
+                    console.log(params)
+                    this.$api.studentWeb.sendVoteResult(params).then(res => {
+                        console.log(res)
+                        //if (res) {
+                        //    console.log('获取投票结果数据')
+                        //    console.log(res)
+                        //    this.voteRes = res
+                        //    this.timeStatus(this.voteInfo, this.voteRes)
+                        //    //this.voteInfo = res.vote
+                        //}
+                        setTimeout(() => {
+                            this.WarmMessageisOpen = false;
+                        }, 2000);
+                    })
+
+                    //this.previewNext();
+                    //加入下一個活動的提示框
+                    //console.log(localStorage.getItem("hintNextItem")); //讀取是否顯示提示下一個
+                    //if (localStorage.getItem("hintNextItem") != "false") {
+                    //    setTimeout(() => {
+                    //        this.isHintNextItem = true;
+                    //    }, 4000);
+                    //}
+                    this.voteChecked = []
                 } else if (this.voteChecked == "") {
                     this.clickbutnoChoose = true;
                 }
@@ -367,6 +393,24 @@ export default {
         computed: {
             listData() {
                 return this.$store.getters.getItemTitle.id;
+            },
+            voteCount() {
+                if (this.voteInfo.voteNum !== undefined) {
+                    console.log('00000000000',this.voteInfo)
+                    let num = 0
+                    this.isOverCount = false
+                    for (let item of this.voteInfo.options) {
+                        if (item.count !== null) {
+                            num += item.count
+                        }
+                    }
+                    if (num > this.voteInfo.voteNum) {
+                        this.isOverCount = true
+                        this.$Message.warning("已超出最大投票数量!")
+                        return 0
+                    }
+                    return this.voteInfo.voteNum - num
+                }
             }
         },
         watch: {
@@ -379,6 +423,7 @@ export default {
                 // 深度观察监听
                 deep: true
             },
+
             listData: {
                 handler() {
                     if (this.$store.getters.getItemTitle.id !== '') {

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

@@ -256,13 +256,11 @@
             getActivityInfo() {
                 if (this.$store.state.user.studentProfile.classinfo.id !== "") {
                     let params = {
-                        "userid": "123",
+                        "userid": this.$store.state.userInfo.sub,
                         "classes": [
-                            "hbcn0906",
-                            "hbcn0910",
-                            "hbcn0989"
+                            this.$store.state.user.studentProfile.classinfo.id
                         ],
-                        "school": "hbcn"
+                        "school": this.$store.state.user.schoolCode
                     }
                     this.$api.studentWeb.getActivityInfo(params).then(res => {
                         if (res.datas.length) {

+ 3 - 5
TEAMModelOS/ClientApp/src/components/student-web/HomeView/MissionListCard.vue

@@ -123,13 +123,11 @@
             getActivityInfo() {
                 if (this.$store.state.user.studentProfile.classinfo.id !== "") {
                     let params = {
-                        "userid": "123",
+                        "userid": this.$store.state.userInfo.sub,
                         "classes": [
-                            "hbcn0906",
-                            "hbcn0910",
-                            "hbcn0989"
+                            this.$store.state.user.studentProfile.classinfo.id
                         ],
-                        "school": "hbcn"
+                        "school": this.$store.state.user.schoolCode
                     }
                     this.$api.studentWeb.getActivityInfo(params).then(res => {
                         console.log(res)

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

@@ -476,7 +476,7 @@ export default {
                         let schoolBlob = undefined
                         let targetFolder = 'exam/' + examId + '/paper/'
                         let count = 0
-                        requestData.papers.forEach(async (item,index) => {
+                        requestData.papers.forEach(async (item, index) => {
                             if (item.blob.indexOf('/exam/') == 0) {
                                 if (++count == (requestData.papers.length)) {
                                     setTimeout(() => {
@@ -559,10 +559,14 @@ export default {
                         paper.field = []
                         for (let k = 0; k < rule[i].slides.length; k++) {
                             if (rule[i].slides[k].type !== 'compose') {
-                                paper.answers.push(rule[i].slides[k].scoring.ans)
+                                // paper.answers.push(rule[i].slides[k].scoring.ans)
+                                // paper.point.push(rule[i].slides[k].scoring.score)
+                                // paper.knowledge.push(rule[i].slides[k].scoring.knowledge ? rule[i].slides[k].scoring.knowledge : [])
+                                // if (rule[i].slides[k].scoring.field) paper.field.push(rule[i].slides[k].scoring.field)
+                                paper.answers.push(rule[i].slides[k].scoring.ans ? rule[i].slides[k].scoring.ans : [])
                                 paper.point.push(rule[i].slides[k].scoring.score)
                                 paper.knowledge.push(rule[i].slides[k].scoring.knowledge ? rule[i].slides[k].scoring.knowledge : [])
-                                if (rule[i].slides[k].scoring.field) paper.field.push(rule[i].slides[k].scoring.field)
+                                paper.field.push(rule[i].slides[k].scoring.field ? rule[i].slides[k].scoring.field : [])
                             }
                         }
                         paperDto.push(paper)

+ 8 - 4
TEAMModelOS/ClientApp/src/view/learnactivity/CreateSchoolEva.vue

@@ -555,7 +555,7 @@ export default {
                         let privateBlob = undefined
                         let targetFolder = 'exam/' + examId + '/paper/'
                         let count = 0
-                        requestData.papers.forEach(async (item,index) => {
+                        requestData.papers.forEach(async (item, index) => {
                             if (item.blob.indexOf('/exam/') == 0) {
                                 if (++count == (requestData.papers.length)) {
                                     setTimeout(() => {
@@ -637,10 +637,14 @@ export default {
                         paper.field = []
                         for (let k = 0; k < rule[i].slides.length; k++) {
                             if (rule[i].slides[k].type !== 'compose') {
-                                paper.answers.push(rule[i].slides[k].scoring.ans)
+                                // paper.answers.push(rule[i].slides[k].scoring.ans)
+                                // paper.point.push(rule[i].slides[k].scoring.score)
+                                // paper.knowledge.push(rule[i].slides[k].scoring.knowledge ? rule[i].slides[k].scoring.knowledge : [])
+                                // if (rule[i].slides[k].scoring.field) paper.field.push(rule[i].slides[k].scoring.field)
+                                paper.answers.push(rule[i].slides[k].scoring.ans ? rule[i].slides[k].scoring.ans : [])
                                 paper.point.push(rule[i].slides[k].scoring.score)
                                 paper.knowledge.push(rule[i].slides[k].scoring.knowledge ? rule[i].slides[k].scoring.knowledge : [])
-                                if (rule[i].slides[k].scoring.field) paper.field.push(rule[i].slides[k].scoring.field)
+                                paper.field.push(rule[i].slides[k].scoring.field ? rule[i].slides[k].scoring.field : [])
                             }
                         }
                         paperDto.push(paper)
@@ -675,7 +679,7 @@ export default {
         if (routerData !== undefined) {
             this.startTime = new Date(routerData.startTime)
             this.endTime = new Date(routerData.endTime)
-            routerData.subjectIds = routerData.subjects.map(item=>{
+            routerData.subjectIds = routerData.subjects.map(item => {
                 return item.id
             })
             routerData.paperInfo = []

+ 52 - 12
TEAMModelOS/ClientApp/src/view/newcourse/NewCusMgt.vue

@@ -526,6 +526,7 @@ export default {
             this.courseListShow = this.courseList.filter(item => {
                 return item.period.id == this.filterPeriod
             })
+            this.getCusInfo()
         },
         getTeahcers(val) {
             this.courseBaseInfo.teachers.length = []
@@ -551,26 +552,26 @@ export default {
             })
         },
         //获取课程列表
-        getCourseInfo() {
+        getCourseList() {
             this.tableLoading = true
             let requestData = {
-                'school_code': this.$store.state.userInfo.schoolCode,
+                'code': this.$store.state.userInfo.schoolCode,
                 'scope': 'school'
             }
             this.$api.courseMgmt.findCourse(requestData).then(
                 (res) => {
                     if (res) {
                         this.courseList = res.courses
-                        if (this.filterPeriod) {
-                            this.filterByPeriod()
-                        } else {
-                            this.courseListShow = [...this.courseList]
+                        if (this.courseList.length > 0) {
+                            if (this.filterPeriod) {
+                                this.filterByPeriod()
+                            } else {
+                                this.courseListShow = [...this.courseList]
+                                this.getCusInfo()
+                            }
                         }
-                        console.log(this.courseListShow)
-                    }
-                },
-                (err) => {
 
+                    }
                 }
             ).finally(() => {
                 setTimeout(() => {
@@ -578,7 +579,31 @@ export default {
                 }, 500)
             })
         },
-
+        //获取课程完整信息
+        getCusInfo() {
+            if (!this.courseListShow[this.curCusIndex].teachers) {
+                let requestData = {
+                    'code': this.$store.state.userInfo.schoolCode,
+                    'scope': 'school',
+                    'id': this.courseListShow[this.curCusIndex].id
+                }
+                this.$api.courseMgmt.findCusInfo(requestData).then(
+                    (res) => {
+                        if (!res.error) {
+                            // [this.curCusIndex] = res.courses[0]
+                            if(res.courses &&  res.courses.length > 0){
+                                res.courses[0].schedule = res.courses[0].schedule ? res.courses[0].schedule : []
+                            }
+                            this.$set(this.courseListShow,this.curCusIndex,res.courses[0])
+                        }
+                    }
+                ).finally(() => {
+                    setTimeout(() => {
+                        this.tableLoading = false
+                    }, 500)
+                })
+            }
+        },
         //显示新增/编辑课程对话框
         showAddCourse(type) {
             this.addCourseStatus = true
@@ -737,7 +762,7 @@ export default {
         )
         this.$store.dispatch('teachers/getTeacherList').then(res => {
         })
-        this.getCourseInfo()
+        this.getCourseList()
     },
     computed: {
         //级联选择年级班级
@@ -780,6 +805,21 @@ export default {
             }
             return name
         },
+        //当前老师的课程安排
+        teaSchd(){
+            if(this.courseListShow && this.courseListShow[this.curCusIndex] && this.courseListShow[this.curCusIndex].teachers){
+                return this.courseListShow[this.curCusIndex].schedule.filter(item=>{
+                    return item.teacher.id == this.courseListShow[this.curCusIndex].teachers[this.curTeaIndex].id
+                })
+            }else{
+                return []
+            }
+        }
+    },
+    watch:{
+        curCusIndex(){
+            this.getCusInfo()
+        }
     }
 }
 </script>

+ 1 - 1
TEAMModelOS/Controllers/Common/ExamController.cs

@@ -583,7 +583,7 @@ namespace TEAMModelOS.Controllers
             try
             {
                 if (!request.TryGetProperty("id", out JsonElement id)) return BadRequest();
-                if (!request.TryGetProperty("code", out JsonElement code)) return BadRequest();
+                //if (!request.TryGetProperty("code", out JsonElement code)) return BadRequest();
                 if (!request.TryGetProperty("point", out JsonElement point)) return BadRequest();
                 if (!request.TryGetProperty("studentId", out JsonElement studentId)) return BadRequest();
                 if (!request.TryGetProperty("classId", out JsonElement classId)) return BadRequest();

+ 35 - 0
TEAMModelOS/Controllers/Common/SurveyController.cs

@@ -331,6 +331,41 @@ namespace TEAMModelOS.Controllers
         }
 
 
+        /// <summary>
+        /// 问卷答案提交
+        /// </summary>
+        /// <redis>
+        /// Survey:Record:e6b887f8-adb5-3677-bcc7-3b36450909df_Survey-1595321354 {"C":2,"A":2,"other":2}
+        /// </redis>
+        /// <param name="request">
+        /// !"id":"aaaa"
+        /// !"code":"Survey-hbcn"/"code":"Survey-1606285227"
+        /// !"record":[["A","B"],["A"],["D"],[],["建议提升服务质量"]]
+        /// </param>
+        /// <returns>
+        /// msgid=0投票失败,1提交成功,2不在时间范围内,3不在发布范围内,6未设置投票项
+        /// </returns>
+        [ProducesDefaultResponseType]
+        [HttpPost("answered")]
+        //[AuthToken(Roles = "teacher,student")]
+        public async Task<IActionResult> Answered(JsonElement request)
+        {
+            //  var (userid, _, _, _) = HttpContext.GetAuthTokenInfo();
+            if (!request.TryGetProperty("id", out JsonElement id))
+            {
+                return BadRequest();
+            }
+            //活动分区
+            if (!request.TryGetProperty("code", out JsonElement code))
+            {
+                return BadRequest();
+            }
+
+
+            else { return Ok(new { msgid = 0 }); }
+        }
+
+
         /// <summary>
         /// 问卷记录 当活动没结算且没有BlobUrl时则调用此接口
         /// </summary>

+ 2 - 2
TEAMModelOS/Controllers/Common/VoteController.cs

@@ -68,12 +68,12 @@ namespace TEAMModelOS.Controllers.Learn
             {
                 //新增Vote
                 var client = _azureCosmos.GetCosmosClient();
-               
+                request.code = request.pk + "-" + request.code;
                 long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
                 request.createTime = now;
                 if (string.IsNullOrEmpty(request.id))
                 {
-                    request.code = request.pk + "-" + request.code;
+                   
                     request.id = Guid.NewGuid().ToString();
                     if (request.startTime > now)
                     {

+ 1 - 0
TEAMModelOS/Services/Common/ActivityStudentService.cs

@@ -542,6 +542,7 @@ namespace TEAMModelOS.Services.Common
                                 //await Task.WhenAll(tasks);
                                 //保存当前提交人的记录
                                 await _azureStorage.UploadFileByContainer(survey.owner,new { record= record, userid, time = curr }.ToJsonString(), "survey", $"{survey.id}/urecord/{userid}.json");
+                                await azureRedis.GetRedisClient(8).SetAddAsync($"Survey:Submit:{survey.id}", userid);
                                 msgid = 1;
                             }
                             else {