Kaynağa Gözat

学生端—醍摩豆账号登陆的课程、活动

XW 3 yıl önce
ebeveyn
işleme
4022e80508

+ 29 - 29
TEAMModelOS/ClientApp/src/api/studentWeb.js

@@ -1,5 +1,5 @@
 import { Random } from 'mockjs'
-import {  post } from '@/api/http'
+import { post } from '@/api/http'
 //----------
 // 使用 Mock 測試
 
@@ -100,17 +100,17 @@ for (var i = 1; i <= 30; i++) {
 
         'rightAns|1': ['A', 'B', 'C', 'D'],
         'MyAns|1': ['A', 'B', 'C', 'D', ''],
-        'ansDesc': localStorage.getItem('lang')=='tw'?[Random.cparagraph(1, 3), Random.cparagraph(1, 3), Random.cparagraph(1, 3), Random.cparagraph(1, 3)]:[Random.paragraph(1, 3), Random.paragraph(1, 3), Random.paragraph(1, 3), Random.paragraph(1, 3)],
+        'ansDesc': localStorage.getItem('lang') == 'tw' ? [Random.cparagraph(1, 3), Random.cparagraph(1, 3), Random.cparagraph(1, 3), Random.cparagraph(1, 3)] : [Random.paragraph(1, 3), Random.paragraph(1, 3), Random.paragraph(1, 3), Random.paragraph(1, 3)],
         'qtype|1': ['單選', '多選'],
-        'questionDesc': localStorage.getItem('lang')=='tw'?Random.cparagraph(1, 8):Random.paragraph(1, 8),
-        'relatedQ1': localStorage.getItem('lang')=='tw'?Random.cparagraph(1, 8):Random.paragraph(1, 8),
-        'relatedQ2': localStorage.getItem('lang')=='tw'?Random.cparagraph(1, 8):Random.paragraph(1, 8),
+        'questionDesc': localStorage.getItem('lang') == 'tw' ? Random.cparagraph(1, 8) : Random.paragraph(1, 8),
+        'relatedQ1': localStorage.getItem('lang') == 'tw' ? Random.cparagraph(1, 8) : Random.paragraph(1, 8),
+        'relatedQ2': localStorage.getItem('lang') == 'tw' ? Random.cparagraph(1, 8) : Random.paragraph(1, 8),
         "rightrate|1-100": 100,
         'img1|1-10': 'https://source.unsplash.com/random/300x200/?water',
         'img2|1-10': 'https://source.unsplash.com/random/300x200/?line',
         "haveImgAns|1-2": true,
-        'AnsImgs|1-10':'https://source.unsplash.com/random/300x200/?green',
-       
+        'AnsImgs|1-10': 'https://source.unsplash.com/random/300x200/?green',
+
     });
 
 
@@ -194,37 +194,37 @@ export default {
     },
     //查詢學生端活動信息
     getActivityInfo: function (data) {
-        return post('/student/stu-activity',data)
+        return post('/student/stu-activity', data)
     },
     //查詢學生端投票活动
     getVoteInfo: function (data) {
-        return post('/common/vote/find-id',data)
+        return post('/common/vote/find-id', data)
     },
     //查詢學生端个人投票结果
     getVoteResult: function (data) {
-        return post('/common/vote/decided',data)
+        return post('/common/vote/decided', data)
     },
     //查詢活动投票结果
     getVoteRecord: function (data) {
-        return post('/common/vote/record',data)
+        return post('/common/vote/record', data)
     },
     //提交投票结果数据
     sendVoteResult: function (data) {
-        return post('/common/vote/decide',data)
+        return post('/common/vote/decide', data)
+    },
+    //查詢學生端问卷活动
+    getSurveyInfo: function (data) {
+        return post('/common/survey/find-id', data)
+    },
+
+    //查詢學生端问卷活动
+    answerSurvey: function (data) {
+        return post('/common/survey/answer', data)
+    },
+
+    isAnswerd: function (data) {
+        return post('/common/survey/answered', data)
     },
-	//查詢學生端问卷活动
-	getSurveyInfo: function (data) {
-	    return post('/common/survey/find-id',data)
-	},
-	
-	//查詢學生端问卷活动
-	answerSurvey: function (data) {
-	    return post('/common/survey/answer',data)
-	},
-	
-	isAnswerd: function (data) {
-	    return post('/common/survey/answered',data)
-	},
 
     // 删除不存在的投票和问卷
     delActivity: function (data) {
@@ -241,22 +241,22 @@ export default {
         return post("/student/get-school-info", data)
     },
 
-    // 获取教室关联的学生(教师端)
+    // 获取教室关联的学生(教师端接口)
     getClassroomStudent: function (data) {
         return post('/school/classroom/find-students', data)
     },
 
-    // 根据stulist ids换取详细信息(教师端)
+    // 根据stulist ids换取详细信息(教师端接口)
     findListSummary: function (data) {
         return post('/school/course/get-summary-list', data)
     },
 
-    // 根据学生id换取详细信息(教师端)
+    // 根据学生id换取详细信息(教师端接口)
     findStuSummary: function (data) {
         return post('/student/get-summary-student', data)
     },
 
-    // 获取教师列表(教师端)
+    // 获取教师列表(教师端接口)
     getSchoolTeacher: function (data) {
         return post('/school/teacher/get-teacher-all', data)
     },

+ 2 - 2
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperView.vue

@@ -113,7 +113,7 @@
                 this.isLoad = true
                 if (this.getItemTitle.name !== undefined && this.getItemTitle) {
                     let paper = this.getItemTitle
-                    let codes = this.getItemTitle.scope == 'school' ? this.getItemTitle.school : this.getItemTitle.creatorId
+                    let codes = paper.scope == 'school' ? paper.school : paper.creatorId
                     let req = {
                         id: paper.id,
                         studentId: this.$store.state.userInfo.sub,
@@ -225,7 +225,7 @@
                             exam = item
                         }
                     }
-                    if (exam.id == undefined) { 
+                    if (exam.id == undefined) {
                         this.selectData = await this.$evTools.getStuPaper(code)
                         this.examData.push(this.selectData)
                     } else {

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

@@ -290,8 +290,10 @@
 			// 获取blob里的问卷内容
 			getBlobItems(qnItem) {
 				return new Promise(async (resolve, reject) => {
-					let schoolBlobHost = JSON.parse(decodeURIComponent(localStorage.student_profile, "utf-8")).blob_uri
-					let privateBlobHost = schoolBlobHost.slice(0, schoolBlobHost.lastIndexOf('/')) + '/' +  qnItem.creatorId
+					let profile = localStorage.student_profile || localStorage.user_profile
+					let curBlobHost = JSON.parse(decodeURIComponent(profile, "utf-8")).blob_uri
+					let schoolBlobHost = curBlobHost.slice(0, curBlobHost.lastIndexOf('/')) + '/' +  localStorage.getItem('login_schoolCode')
+					let privateBlobHost = curBlobHost.slice(0, curBlobHost.lastIndexOf('/')) + '/' +  qnItem.creatorId
 					let cntr = qnItem.scope === 'school' ? this.$store.state.userInfo.azp : qnItem.creatorId
 					let blobHost = qnItem.scope === 'school' ?  schoolBlobHost : privateBlobHost
 					// 根据试卷的Blob地址 去读取JSON文件
@@ -325,7 +327,9 @@
 			// 获取blob里的问卷信息
 			getBlobJsonFile(scope, url, container) {
 				return new Promise(async (resolve, reject) => {
-					let blobUrl = JSON.parse(decodeURIComponent(localStorage.student_profile, "utf-8")).blob_uri
+					console.log(...arguments)
+					let profile = localStorage.student_profile || localStorage.user_profile
+					let blobUrl = JSON.parse(decodeURIComponent(profile, "utf-8")).blob_uri
 					let blobHost = blobUrl.slice(0, blobUrl.lastIndexOf('/')) + '/' +  container
 					// 根据试卷的Blob地址 去读取JSON文件
 					let sasString = scope === 'private' ? await this.$tools.getPrivateSas(container) : await this.$tools.getSchoolSas(container)

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

@@ -144,69 +144,6 @@
                         </div>
                     </div>
                 </vuescroll>
-                
-
-
-                <!-- <div :id="`event${item.id}`"
-                     class="list-item"
-                     @click="sentSelectedEventTitle(item)"
-                     :class="{ 'list-item-selected': selectedCondition(item) }"
-                     v-for="(item, index) in eventShow"
-                     v-if="isListNoItem == false"
-                     :key="index"
-                >
-                    <ul>
-                        <li class="list-item-icon">
-                            <svg-icon v-if="item.eventType == 'HomeWork'" icon-class="doc" />
-                            <svg-icon v-if="item.eventType == 'Preview'"  icon-class="selflearninginTime" />
-                            <svg-icon v-if="item.eventType == 'Exam'" icon-class="multiTest" />
-                            <svg-icon v-if="item.eventType == 'Vote'" icon-class="vote" />
-                            <svg-icon v-if="item.eventType == 'Survey'" icon-class="quesnaire" />
-                        </li>
-                        <li class="list-item-info"
-                            v-if="item.eventType == 'Exam'">
-                            <p class="list-item-title">
-                                <span class="list-item-typeMark">{{item.owner == 'school' ? $t('studentWeb.public.schoolExam'):$t('studentWeb.public.privateExam')}}</span>
-                                <span>{{ item.name }}</span>
-                            </p>
-                            <p class="list-item-time">
-                                {{ dateFormat(item.startTime) }} ~ {{ dateFormat(item.endTime) }}
-                            </p>
-                            <p class="list-item-time" v-show="timeStatus(item) == 'finish'">
-                                得分率:20%
-                            </p>
-                        </li>
-                        <li class="list-item-info"
-                            v-if="item.eventType == 'Vote'">
-                            <p class="list-item-title">
-                                <span class="list-item-typeMark">{{item.owner == 'school' ? $t('studentWeb.public.schoolVote'):$t('studentWeb.public.privateVote')}}</span>
-                                <span>{{ item.name }}</span>
-                            </p>
-                            <p class="list-item-time">
-                                {{ dateFormat(item.startTime) }} ~ {{ dateFormat(item.endTime) }}
-                            </p>
-                        </li>
-                        <li class="list-item-info"
-                            v-if="item.eventType == 'Survey'">
-                            <p class="list-item-title">
-                                <span class="list-item-typeMark">{{item.owner == 'school' ? $t('studentWeb.public.schoolSurvey'):$t('studentWeb.public.privateSurvey')}}</span>
-                                <span>{{ item.name }}</span>
-                            </p>
-                            <p class="list-item-time">
-                                {{ dateFormat(item.startTime) }} ~ {{ dateFormat(item.endTime) }}
-                            </p>
-                        </li>
-                        <li class="list-item-unDone" v-show="timeStatus(item) == 'going'">
-                            <div class="isAllowRetry">{{$t("studentWeb.public.going")}}</div>
-                        </li>
-                        <li class="list-item-unDone" v-show="timeStatus(item) == 'finish'">
-                            <div class="isOvertime">{{$t("studentWeb.public.finish")}}</div>
-                        </li>
-                        <li class="list-item-unDone" v-show="timeStatus(item) == 'finish' && item.eventType == 'Exam'">
-                            <div class="">{{$t("studentWeb.exam.report.wrongPractice")}}</div>
-                        </li>
-                    </ul>
-                </div> -->
                 <div class="list-end"></div>
             </div>
         </div>
@@ -332,35 +269,41 @@ import { mapGetters, mapState } from 'vuex';
             getActivityInfo() {
                 this.eventList.length = 0
                 this.isListNoItem = true;
-                if (this.studentProfile.classinfo.id !== "") {
-                    let classInfo = [this.studentProfile.classinfo.id]
-                    if (this.studentProfile.courses.length) {
-                        for (let item of this.studentProfile.courses) {
-                            classInfo.push(item.id)
-                        }
+
+                let params = {}
+                // 醍摩豆登陆——> roles有teacher
+                if (this.$store.state.userInfo.roles.includes("teacher")) {
+                    params = {
+                        userid: this.userInfo.sub,
+                        userType: "tmdid",
+                        school: this.schoolCode
                     }
-                    let params = {
+                }
+                // 学生账号登陆
+                else {
+                    params = {
                         userid: this.userInfo.sub,
                         userType: "schoolid",
                         school: this.schoolCode
                     }
-                    this.$api.studentWeb.getActivityInfo(params).then(res => {
-                        if (res) {
-                            let data = []
-                            for (let item of res.datas) {
-                                item.eventType = item.type
-                                item.progress = this.timeStatus(item)
-                                data.push(item)
-                            }
-                            this.eventList = [...data]
-                            this.eventList = this.eventList.sort(function (a, b) {
-                                return b.startTime - a.startTime //时间正序
-                            });
-                            this.eventShow = [...this.eventList]
-                            this.isListNoItem = false
-                        }
-                    })
+                    
                 }
+                this.$api.studentWeb.getActivityInfo(params).then(res => {
+                    if (res) {
+                        let data = []
+                        for (let item of res.datas) {
+                            item.eventType = item.type
+                            item.progress = this.timeStatus(item)
+                            data.push(item)
+                        }
+                        this.eventList = [...data]
+                        this.eventList = this.eventList.sort(function (a, b) {
+                            return b.startTime - a.startTime //时间正序
+                        });
+                        this.eventShow = [...this.eventList]
+                        this.isListNoItem = false
+                    }
+                })
             },
             //时间格式化处理
             dateFormat(timestamp) {

+ 6 - 1
TEAMModelOS/ClientApp/src/components/student-web/HomeView/CourseList.vue

@@ -321,8 +321,13 @@ export default {
                 userid: this.$store.state.userInfo.sub,
                 school: this.$store.state.userInfo.azp
             }
+            if(this.$store.state.userInfo.roles.includes("teacher")) {
+                param.userType = "tmdid"
+            } else {
+                param.userType = "schoolid"
+            }
             this.$api.studentWeb.getClassList(param).then(res => {
-                if(res.courses.length > 0) {
+                if(res.courses.length) {
                     // 表定课程
                     var fixList = []
                     // 临时课程

+ 10 - 1
TEAMModelOS/ClientApp/src/components/student-web/HomeView/CourseListView.vue

@@ -37,7 +37,16 @@ export default {
   methods: {
     // 查找班级
     findSchoolInfo() {
-      this.$api.studentWeb.getSchoolInfo({}).then(res => {
+      let params = {}
+      // 醍摩豆登陆——> roles有teacher
+      if (this.$store.state.userInfo.roles.includes("teacher")) {
+          params = {userType: "tmdid"}
+      }
+      // 学生账号登陆
+      else {
+          params = {userType: "schoolid"}
+      }
+      this.$api.studentWeb.getSchoolInfo(params).then(res => {
         if(res.status == 200) {
           this.period = res.school_base.period
           this.roomList = res.school_rooms

+ 41 - 57
TEAMModelOS/ClientApp/src/components/student-web/HomeView/MissionListCard.vue

@@ -47,43 +47,6 @@
                         </div> -->
                     </div>
                 </div>
-
-                <!-- <div :id="`event${item.eventID}`"
-                    class="list-item"
-                    @click="sentSelectedEventTitle(item)"
-                    v-for="(item, index) in testData" :key="index">
-                    <ul>
-                        <li class="list-item-icon">
-                            <svg-icon v-if="item.eventType == 'Homework'" icon-class="doc" />
-                            <svg-icon v-if="item.eventType == 'Learn'"
-                                      icon-class="selflearninginTime" />
-                            <svg-icon v-if="item.eventType == 'Exam'"
-                                      icon-class="test"
-                                      class="reset-testIcon" />
-                            <svg-icon v-if="item.eventType == 'Vote'" icon-class="vote" />
-                            <svg-icon v-if="item.eventType == 'Survey'" icon-class="quesnaire" />
-                        </li>
-                        <li class="list-item-info">
-                            <p class="list-item-title">
-                                <span v-show="item.eventType == 'Exam'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolExam'):$t('studentWeb.public.privateExam')}}</span>
-                                <span v-show="item.eventType == 'Vote'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolVote'):$t('studentWeb.public.privateVote')}}</span>
-                                <span v-show="item.eventType == 'Survey'" class="list-item-typeMark">{{item.owner == 'school'? $t('studentWeb.public.schoolSurvey'):$t('studentWeb.public.privateSurvey')}}</span>
-                                <span>{{ item.name }}</span>
-                                <div style="float:right;margin-top:-20px">
-                                    <div class="list-item-unDone" v-show="timeStatus(item) == 'going'">
-                                        <span class="isAllowRetry">{{$t("studentWeb.public.going")}}</span>
-                                    </div>
-                                    <div class="list-item-unDone" v-show="timeStatus(item) == 'finish'">
-                                        <span class="isOvertime">{{$t("studentWeb.public.finish")}}</span>
-                                    </div>
-                                </div>
-                            </p>
-                            <p class="list-item-time">
-                                {{ dateFormat(item.startTime) }} ~ {{ dateFormat(item.endTime) }}
-                            </p>
-                        </li>
-                    </ul>
-                </div> -->
             </Scroll>
             <div class="list-end"></div>
         </Card>
@@ -91,6 +54,7 @@
 </template>
 
 <script>
+    import { mapState } from 'vuex';
     import PreviewProgressPie from "../EventView/PreviewProgressPie";
     export default {
         name: "MissionListCard",
@@ -133,32 +97,46 @@
         methods: {
             //获取新活动信息数据
             getActivityInfo() {
-                if (this.$store.state.user.studentProfile.classinfo.id !== "") {
+                let params = {}
+                // 醍摩豆登陆——> roles有teacher
+                if (this.$store.state.userInfo.roles.includes("teacher")) {
+                    params = {
+                        userid: this.userInfo.sub,
+                        userType: "tmdid",
+                        school: this.user.schoolCode
+                    }
+                }
+                // 学生账号登陆
+                else {
+                    params = {
+                        userid: this.userInfo.sub,
+                        userType: "schoolid",
+                        school: this.user.schoolCode
+                    }
+                    
+                }
+                this.$api.studentWeb.getActivityInfo(params).then(res => {
+                    if (res.datas.length) {
+                        let data = []
+                        for (let item of res.datas) {
+                            item.eventType = item.type
+                            data.push(item)
+                        }
+                        this.testData = [...this.testData, ...data]
+                        this.testData = this.testData.sort(function (a, b) {
+                            return b.startTime - a.startTime //时间正序
+                        });
+                    }
+                })
+                /* if (this.$store.state.user.studentProfile.classinfo.id !== "") {
                     let classInfo = [this.$store.state.user.studentProfile.classinfo.id]
                     if (this.$store.state.user.studentProfile.courses.length) {
                         for (let item of this.$store.state.user.studentProfile.courses){
                             classInfo.push(item.id)
                         }
                     }
-                    let params = {
-                        userid: this.$store.state.userInfo.sub,
-                        userType: "schoolid",
-                        school: this.$store.state.user.schoolCode
-                    }
-                    this.$api.studentWeb.getActivityInfo(params).then(res => {
-                        if (res.datas.length) {
-                            let data = []
-                            for (let item of res.datas) {
-                                item.eventType = item.type
-                                data.push(item)
-                            }
-                            this.testData = [...this.testData, ...data]
-                            this.testData = this.testData.sort(function (a, b) {
-                                return b.startTime - a.startTime //时间正序
-                            });
-                        }
-                    })
-                }
+                    
+                } */
             },
             //处理时间结构
             dateFormat(timestamp) {
@@ -219,6 +197,12 @@
                 }
             },
         },
+        computed: {
+            ...mapState({
+                userInfo: state => state.userInfo,
+                user: state => state.user,
+            })
+        }
     };
 </script>
 

+ 3 - 2
TEAMModelOS/ClientApp/src/utils/evTools.js

@@ -496,8 +496,9 @@ export default {
 	/* 获取完整的试卷数据 */
 	getStuPaper(paper, examScope) {
 		let curScope = examScope || paper.scope
-		return new Promise(async (r,j) => {
-			let blobHost = JSON.parse(decodeURIComponent(localStorage.student_profile, "utf-8")).blob_uri
+		return new Promise(async (r, j) => {
+			let profile = localStorage.student_profile || localStorage.user_profile
+			let blobHost = JSON.parse(decodeURIComponent(profile, "utf-8")).blob_uri
 			let splitHost = blobHost.split('/')
 			// 根据试卷的Blob地址 去读取JSON文件
 			let sasString = curScope === 'school' ? await $tools.getSchoolSas(paper.code) : await $tools.getPrivateSas(paper.code)