فهرست منبع

修改被删除的投票和问卷显示

XW 4 سال پیش
والد
کامیت
a3dcf9ed09

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

@@ -225,4 +225,9 @@ export default {
 	isAnswerd: function (data) {
 	    return post('/common/survey/answered',data)
 	},
+
+    // 删除不存在的投票和问卷
+    delActivity: function (data) {
+        return post("/common/delete-activity", data)
+    }
 }

+ 14 - 7
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContent.vue

@@ -1,26 +1,26 @@
 <template>
     <div class="event-content">
         <!--<VoteHint v-if="this.$store.getters.getisVoteResulthover==true"/>-->
-        <div v-if="this.$store.getters.getIsSelectedNow">
+        <div v-if="getIsSelectedNow">
 
-            <!--<div v-if="this.$store.getters.getItemTitle.eventType=='preview'">
+            <!--<div v-if="getItemTitle.eventType=='preview'">
               <PreviewMission/>
             </div>
-            <div v-if="this.$store.getters.getItemTitle.eventType=='homeWork'">
+            <div v-if="getItemTitle.eventType=='homeWork'">
               <Homework/>
             </div>-->
-            <div v-if="this.$store.getters.getItemTitle.eventType == 'Exam'">
+            <div v-if="getItemTitle.eventType == 'Exam'">
                 <PaperView />
             </div>
-            <div v-if="this.$store.getters.getItemTitle.eventType == 'Vote'">
+            <div v-if="getItemTitle.eventType == 'Vote'">
                 <Vote />
             </div>
-            <div v-if="this.$store.getters.getItemTitle.eventType == 'Survey'">
+            <div v-if="getItemTitle.eventType == 'Survey'">
                 <QuesNaire />
             </div>
         </div>
         <!-- 如果篩選時未選的時候預設顯示列表第一個-->
-        <div class="noSelected" v-if="!this.$store.getters.getIsSelectedNow">
+        <div class="noSelected" v-if="!getIsSelectedNow">
             <h3>{{$t("studentWeb.event.selectActivity")}}</h3>
         </div>
 
@@ -34,6 +34,7 @@
     import PaperView from "./EventContentTypeTemplate/PaperView";
     import VoteHint from "./EventContentTypeTemplate/VoteHint";
     import QuesNaire from "./EventContentTypeTemplate/QuesNaire";
+import { mapGetters } from 'vuex';
     export default {
         name: "EventContent",
         components: {
@@ -51,6 +52,12 @@
         data() {
             return {
             };
+        },
+        computed: {
+            ...mapGetters([
+                "getIsSelectedNow",
+                "getItemTitle"
+            ])
         }
     };
 </script>

+ 19 - 17
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/LessonTestReport.vue

@@ -1,11 +1,11 @@
 <template>
     <div class="lesson-test-report">
         <div class="scoreboard">
-            <div v-show="$store.getters.getItemTitle.progress == 'finish' && testState == 1">
+            <div v-show="getItemTitle.progress == 'finish' && testState == 1">
                 <svg-icon icon-class="handonHint" class="warm-icon" />
                 <span class="warm-hint">{{ $t("studentWeb.exam.timeoutHint") }}</span>
             </div>
-            <span v-show="$store.getters.getItemTitle.progress != 'finish' && testState == 1" @click="showTest" style="color: #03966a;width: 100%;cursor: pointer;font-size:18px;font-weight: 800;text-align: center">
+            <span v-show="getItemTitle.progress != 'finish' && testState == 1" @click="showTest" style="color: #03966a;width: 100%;cursor: pointer;font-size:18px;font-weight: 800;text-align: center">
                 {{$t("studentWeb.exam.report.anwser")}}
             </span>
             <h4 v-show='testState == 2'>{{$t("studentWeb.exam.report.noRes")}}</h4>
@@ -315,6 +315,7 @@
     import LessonTestReportCharts from "./LessonTestReportCharts/LessonTestReportCharts";
     import Loading from "vue-loading-overlay";
     import "vue-loading-overlay/dist/vue-loading.css";
+import { mapGetters } from 'vuex';
     export default {
         name: "LessonTestReport",
         components: {
@@ -344,17 +345,17 @@
                 //loading畫面
                 closeAnsDetail: false,
                 checkedAns: ["right", "wrong", "noAns"],
-                testState: 0,// 表示有没有作答
+                testState: 0, //表示有没有作答
                 paperData: [], //所有题目信息
-                ansData: [],
+                ansData: [], //题目的作答答案
                 repairSource: {
                     normal: [],
                     file: []
                 },
                 repairData: [],
-                previewStatus: false,
+                previewStatus: false, //展示补救资源
                 previewFile: {},
-                numPages:null
+                numPages: null
             };
         },
         mounted() {
@@ -366,7 +367,7 @@
                 this.previewStatus = !this.previewStatus
                 this.previewFile = {}
             },
-           async getItemData(data) {
+            async getItemData(data) {
                this.previewStatus = false
                 if (data.file) {
                     this.previewFile = this._.cloneDeep(data)
@@ -444,7 +445,6 @@
             },
             showTest() {
                 if (this.examInfo.subject !== undefined) {
-                    console.log(this.examInfo);
                     this.$store.commit("ToggleLessonTestPopWithSubject", this.examInfo)
                 }
             },
@@ -478,11 +478,11 @@
                     }
                 }
             },
-            //获取学生作答数据
+            // 获取学生作答数据
             async getItem(data) {
                 let datas = []
                 if (data !== undefined) {
-                    let codes = this.$store.getters.getItemTitle
+                    let codes = this.getItemTitle
                     let code = {
                         scope: codes.scope,
                         code: codes.scope === 'school' ? codes.school : codes.creatorId,
@@ -496,7 +496,7 @@
                     return []
                 }
             },
-            //处理学生作答数据blob地址
+            // 处理学生作答数据blob地址
             formUrl(data) { 
                 let a = ""
                 if (data.blob.indexOf('https://teammodelstorage') > -1) {
@@ -504,7 +504,7 @@
                 } else {
                     let blobUrl = JSON.parse(decodeURIComponent(localStorage.student_profile, "utf-8")).blob_uri
                     let studentBlob = blobUrl.split('/')
-                    let url = data.scope == 'school' ? blobUrl : "https://" + studentBlob[studentBlob.length - 2] + '/' + this.$store.getters.getItemTitle.creatorId
+                    let url = data.scope == 'school' ? blobUrl : "https://" + studentBlob[studentBlob.length - 2] + '/' + this.getItemTitle.creatorId
                     a = `${url}/exam/${data.blob}`
                 }
                 return a 
@@ -513,9 +513,9 @@
                 let paper = []
                 this.paperData.length = 0
                 this.ansData.length = 0
-                let data = this.$store.getters.getPaperInfo.item
+                let data = this.getPaperInfo.item
                 let exam = [...data]
-                if (this.$store.getters.getPaperInfo.item.length) {
+                if (this.getPaperInfo.item.length) {
                     for (let i = 0; i < exam.length; i++) {
                         if (exam[i].repair == undefined) {
                             exam[i].repair = []
@@ -562,9 +562,11 @@
             },
         },
         computed: {
+            ...mapGetters([
+                "getItemTitle",
+                "getPaperInfo",
+            ]),
             testScore() {
-                console.log(this.examInfo);
-                console.log(this.paperInfo);
                 let data = 0
                 if (this.examInfo.subject !== undefined) {
                     for (let item of this.examInfo.stuScore) {
@@ -589,7 +591,7 @@
                         noAns:0,
                         wrong:0,
                     }
-                    if (this.paperData[0]!= undefined) {
+                    if (this.paperData[0] != undefined) {
                         for (let i = 0; i < this.examInfo.stuScore.length; i++) {
                             if (this.examInfo.stuScore[i] == -1) {
                                 info.noAns++

+ 0 - 1
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/PaperTest.vue

@@ -272,7 +272,6 @@
             Complete
         },
         created() {
-            console.log(this.getItemTitle);
             this.WarmMessageisOpen = false;
             this.showMessageNum = 0;
         },

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

@@ -1,7 +1,7 @@
 <template>
     <div class="lesson-test">
         <br />
-        <PaperTest :papers="selectData" v-if="this.$store.getters.getisOpenLessonTestPopNow" /> 
+        <PaperTest :papers="selectData" v-if="getisOpenLessonTestPopNow" /> 
         <div>
             <div class="load-box">
                 <load :active.sync="isLoad"
@@ -27,7 +27,7 @@
                                  :class="['paper-item',item.paperId == chooseData.paperId ? 'paper-choose' : '']"
                                  @click="opentestWithSubject(item)">
                                 <svg-icon icon-class="test" class="title-icon" />
-                                <span style="margin-top:5px">{{ item.subject.name }}{{$store.getters.getItemTitle.scope == 'school' ? $t('studentWeb.exam.isSubject'):''}}</span>
+                                <span style="margin-top:5px">{{ item.subject.name }}{{getItemTitle.scope == 'school' ? $t('studentWeb.exam.isSubject'):''}}</span>
                                 <div :class="{ unfinished: item.stuAns.length == 0 ,finished:item.stuAns.length != 0 }">
                                     <Icon style="margin-top:-10px;margin-left:-8px;" type="ios-checkmark" size="36" />
                                 </div>
@@ -43,7 +43,7 @@
                     </div>
                 </TabPane>
                 <!-- 成绩分析 -->
-                <TabPane :label="$t('studentWeb.exam.gradeReport')" v-if="isTestOver && $store.getters.getItemTitle.owner == 'school'" name="analyse">
+                <TabPane :label="$t('studentWeb.exam.gradeReport')" v-if="isTestOver && getItemTitle.owner == 'school'" name="analyse">
                     <div class="title-rect-group">
                         <!-- <div class="title-rect" /> -->
                         <h2 class="title-rect-name">{{$t("studentWeb.exam.gradeAnalyse")}}</h2>
@@ -60,6 +60,7 @@
 <script>
     import Load from "vue-loading-overlay";
     import "vue-loading-overlay/dist/vue-loading.css";
+import { mapGetters } from 'vuex';
     import EventBasicInfo from "../../EventBasicInfo";
     import LessonTestReport from "./LessonTestReport";
     import StudentScore from "./LessonTestReportCharts/StudentScore";
@@ -78,7 +79,7 @@
         },
         mounted() {
             this.selectTab = "test"
-            this.privateType = this.$store.getters.getItemTitle.owner
+            this.privateType = this.getItemTitle.owner
         },
         data() {
             return {
@@ -110,9 +111,9 @@
                 this.chooseData = {}
                 this.isTestOver = false
                 this.isLoad = true
-                if (this.$store.getters.getItemTitle.name !== undefined) {
-                    let paper = this.$store.getters.getItemTitle
-                    let codes = this.$store.getters.getItemTitle.scope == 'school' ? this.$store.getters.getItemTitle.school : this.$store.getters.getItemTitle.creatorId
+                if (this.getItemTitle.name !== undefined) {
+                    let paper = this.getItemTitle
+                    let codes = this.getItemTitle.scope == 'school' ? this.getItemTitle.school : this.getItemTitle.creatorId
                     let req = {
                         id: paper.id,
                         studentId: this.$store.state.userInfo.sub,
@@ -178,8 +179,7 @@
                 this.isLoad = true
                 this.selectData = {}
                 this.chooseData = {}
-                console.log(this.$store.getters.getItemTitle);
-                let codes = this.$store.getters.getItemTitle.scope == 'school' ? data.school : data.creatorId
+                let codes = this.getItemTitle.scope == 'school' ? data.school : data.creatorId
                 if (data.blob !== undefined && data.blob !== "") {
                     let code = {
                         scope: this.paperCtn,
@@ -235,8 +235,13 @@
             },
         },
         computed: {
+            ...mapGetters([
+                "getisOpenLessonTestPopNow",
+                "getItemTitle",
+                "getCurrentSubject",
+            ]),
             listData() {
-                return this.$store.getters.getCurrentSubject;
+                return this.getCurrentSubject;
             }
         },
         watch: {
@@ -251,7 +256,7 @@
             },
             listData: {
                 handler() {
-                    if (this.$store.getters.getCurrentSubject == '') {
+                    if (this.getCurrentSubject == '') {
                         this.getPaperData()
                     }
                 },

+ 48 - 22
TEAMModelOS/ClientApp/src/components/student-web/EventView/EventContentTypeTemplate/QuesNaire.vue

@@ -94,6 +94,7 @@
 	import QuesNaireReport from "./QuesNaireReport";
 	import EventBasicInfo from "../../EventBasicInfo";
 	import BillBoardandLightBox from "../../EventView/BillBoardandLightBox";
+import { mapGetters } from 'vuex';
 	export default {
 		name: "QuesNaire",
 		components: {
@@ -181,22 +182,22 @@
 				this.WarmMessageisOpen = false;
 			},
 			createdSaveCheckers() {
-				if (this.$store.getters.getResetSurvey == true) {
+				if (this.getResetSurvey == true) {
 					this.checkers = [];
 					var mockcheckersheet = [];
 					for (let i = 0; i < 10; i++) {
 						if (
-							this.$store.getters.getItemTitle.isDone == false &&
-							this.$store.getters.getFinishedItem.includes(
-								this.$store.getters.getItemTitle.eventID
+							this.getItemTitle.isDone == false &&
+							this.getFinishedItem.includes(
+								this.getItemTitle.eventID
 							) == false
 						) {
 							mockcheckersheet.push([]);
 						} else if (
-							this.$store.getters.getFinishedItem.includes(
-								this.$store.getters.getItemTitle.eventID
+							this.getFinishedItem.includes(
+								this.getItemTitle.eventID
 							) == true ||
-							this.$store.getters.getItemTitle.isDone == true
+							this.getItemTitle.isDone == true
 						) {
 							mockcheckersheet.push("B");
 						}
@@ -211,7 +212,7 @@
 				}
 			},
 			qesNaire() {
-				return this.$store.getters.getItemTitle.qesNaire;
+				return this.getItemTitle.qesNaire;
 			},
 			
 			/* 判断当前学生是否已作答该问卷 */
@@ -227,23 +228,27 @@
 			//获取投票数据
 			// 获取surveyInfo的数据
 			async getSurveyInfo() {
-				if (this.$store.getters.getItemTitle.id) {
+				if (this.getItemTitle.id) {
 					let params = {
-						"id": this.$store.getters.getItemTitle.id,
-						"code": this.$store.getters.getItemTitle.scode
+						"id": this.getItemTitle.id,
+						"code": this.getItemTitle.scode
 					}
 					let isAnswerd = await this.isAnswerd(params)
 					if(!isAnswerd){
 						// 没有提交
 						this.$api.studentWeb.getSurveyInfo(params).then(async res => {
 							if (res) {
-								this.surveyInfo = res.survey
-								this.surveyInfo.items = await this.getBlobItems(res.survey)
-								this.submitArr = []
-								this.surveyInfo.items.forEach(i => {
-									this.submitArr.push([])
-								})
-								this.$forceUpdate()
+								if(res.status == 404) {
+									this.delActivity()
+								} else if(res.status == 200) {
+									this.surveyInfo = res.survey
+									this.surveyInfo.items = await this.getBlobItems(res.survey)
+									this.submitArr = []
+									this.surveyInfo.items.forEach(i => {
+										this.submitArr.push([])
+									})
+									this.$forceUpdate()
+								}
 							}
 						}).catch(err => {
 							console.log(err)
@@ -251,12 +256,25 @@
 					}else{
 						this.alreadyAnswered = true
 					}
-					
 				}
-				
-				console.log(this.alreadyAnswered)
-				console.log(this.surveyInfo)
 			},
+			// 删除不存在的问卷
+            delActivity() {
+                let param = {
+                    'id': this.getItemTitle.id,
+                    'code': this.getItemTitle.code,
+                    "role": "teacher"
+                }
+                this.$api.studentWeb.delActivity(param).then(res => {
+                    if(res) {
+						if(res.status == 500) {
+							this.$Message.warning('问卷已删除!')
+						}
+					}
+                }).finally(()=>{
+                    this.isLoad = false
+                })
+            },
 
 			// 获取blob里的问卷内容
 			getBlobItems(qnItem) {
@@ -332,6 +350,14 @@
 				deep: true
 			},
 		},
+		
+		computed: {
+			...mapGetters([
+				"getItemTitle",
+				"getResetSurvey",
+				"getFinishedItem"
+			])	
+		},
 	};
 </script>
 

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

@@ -10,7 +10,7 @@
         <EventBasicInfo />
         <div>
             <!--超时-->
-            <div v-if="this.$store.getters.getItemTitle.endTime <= '2020.02.10'">
+            <div v-if="getItemTitle.endTime <= '2020.02.10'">
                 <br />
                 <div class="dec animate__animated animate__bounceInLeft">
                     <svg-icon icon-class="handonHint" class="warm-icon" />
@@ -126,6 +126,7 @@
     import BillBoardandLightBox from "../../EventView/BillBoardandLightBox";
     import VoteResultChart from "./VoteResultChart";
     import Load from "vue-loading-overlay";
+    import { mapGetters } from 'vuex';
     export default {
         name: "Vote",
         components: {
@@ -164,11 +165,11 @@
         methods: {
             //获取个人投票结果数据
             getVoteRecord() {
-                if (this.$store.getters.getItemTitle.id) {
+                if (this.getItemTitle.id) {
                     this.voteRes = {}
                     let params = {
-                        "id": this.$store.getters.getItemTitle.id,
-                        "code": this.$store.getters.getItemTitle.scode,
+                        "id": this.getItemTitle.id,
+                        "code": this.getItemTitle.scode,
                         "userid": this.$store.state.userInfo.sub
                     }
                     this.$api.studentWeb.getVoteResult(params).then(res => {
@@ -185,37 +186,60 @@
             },
             //获取活动投票结果数据
             getVoteInfo() {
-                if (this.$store.getters.getItemTitle.id) {
+                if (this.getItemTitle.id) {
                     let params = {
-                        "id": this.$store.getters.getItemTitle.id,
-                        "code": this.$store.getters.getItemTitle.scode
+                        "id": this.getItemTitle.id,
+                        "code": this.getItemTitle.scode
                     }
                     this.isLoad = true
                     this.$api.studentWeb.getVoteInfo(params).then(res => {
                         if (res) {
-                            this.showResult = false
-                            this.isResult = false
-                            for (let item of res.vote.options) {
-                                item.count = 0
-                            }
-                            this.voteInfo = res.vote
-                            if (res.vote.progress == "finish") {
-                                this.getVoteRecord()
-                                this.getVoteRes()
-                                this.isResult = true
-                            } else {
-                                this.getVoteRecord()
+                            if(res.status == 404) {
+                                this.delActivity()
+                            } else if(res.status == 200) {
+                                this.showResult = false
+                                this.isResult = false
+                                for (let item of res.vote.options) {
+                                    item.count = 0
+                                }
+                                this.voteInfo = res.vote
+                                if (res.vote.progress == "finish") {
+                                    this.getVoteRecord()
+                                    this.getVoteRes()
+                                    this.isResult = true
+                                } else {
+                                    this.getVoteRecord()
+                                }
                             }
                         }
+                    }).catch(err => {
+                        console.log(err)
                     })
                 }
             },
-           async getVoteRes() {
+            async getVoteRes() {
                 if (this.voteInfo.recordUrl !== "") {
                     let data = await this.getBlobItems(this.voteInfo)
                     this.setData(data[0])
                 }
             },
+            // 删除不存在的投票
+            delActivity() {
+                let param = {
+                    'id': this.getItemTitle.id,
+                    'code': this.getItemTitle.code,
+                    "role": "teacher"
+                }
+                this.$api.studentWeb.delActivity(param).then(res => {
+                    if(res) {
+                        if(res.status == 500) {
+                            this.$Message.warning('投票已删除!')
+                        }
+                    }
+                }).finally(()=>{
+                    this.isLoad = false
+                })
+            },
             // 获取blob里的试题数据
             getBlobItems(qnItem) {
                 let key = this.voteInfo.code.split('-')
@@ -364,8 +388,8 @@
                 this.clickbutnoChoose = false;
                 if (this.voteChecked.length) {
                     let params = {
-                        "id": this.$store.getters.getItemTitle.id,
-                        "code": this.$store.getters.getItemTitle.scode,
+                        "id": this.getItemTitle.id,
+                        "code": this.getItemTitle.scode,
                         "option": {}
                     }
                     for (let item of this.voteChecked) {
@@ -396,8 +420,11 @@
             },
         },
         computed: {
+            ...mapGetters([
+                "getItemTitle",
+            ]),
             listData() {
-                return this.$store.getters.getItemTitle.id;
+                return this.getItemTitle.id;
             },
             voteCount() {
                 if (this.voteInfo.voteNum !== undefined) {

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

@@ -1,8 +1,8 @@
 <template>
     <div class="event-view">
-        <EventList :class="{ 'hide-sidebars': $store.getters.getSidebarisOpen == false}"></EventList>
-        <EventContentArea :class="{'eventContentArea-Span': $store.getters.getSidebarisOpen == false}"></EventContentArea>
-        <!--<CommentList v-if=" $store.getters.getOpenCommentList == true && $store.getters.getSidebarisOpen == false" />-->
+        <EventList :class="{ 'hide-sidebars': getSidebarisOpen == false}"></EventList>
+        <EventContentArea :class="{'eventContentArea-Span': getSidebarisOpen == false}"></EventContentArea>
+        <!--<CommentList v-if=" $store.getters.getOpenCommentList == true && getSidebarisOpen == false" />-->
     </div>
 </template>
 
@@ -10,6 +10,7 @@
     import CommentList from "./CommentList.vue";
     import EventList from "./EventList";
     import EventContentArea from "./EventContentArea.vue";
+    import { mapGetters } from 'vuex';
     export default {
         name: "EventView",
         components: {
@@ -38,7 +39,7 @@
                 this.selectedEventStatusNow = "所有活動狀態";
                 this.eventTypeCheckers = [];
                 let targetItem = document.getElementById(
-                    `event${this.$store.getters.getItemTitle.eventID}`
+                    `event${this.getItemTitle.eventID}`
                 );
                 let scrollList = document.querySelectorAll(".event-list .list-block")[0];
 
@@ -59,7 +60,7 @@
             gotoNextItem() {
                 let nextItems = [];
                 for (let i = 0; i <= this.mockdata.length; i++) {
-                    if (this.$store.getters.getItemTitle == this.mockdata[i]) {
+                    if (this.getItemTitle == this.mockdata[i]) {
                         let j = i + 1;
                         if (
                             j < this.mockdata.length && this.eventPageType.includes(this.mockdata[j].eventType)
@@ -97,6 +98,12 @@
                 }
             },
         },
+        computed: {
+            ...mapGetters([
+                "getSidebarisOpen",
+                "getItemTitle"
+            ])
+        }
     };
 </script>
 <style scoped>