Pārlūkot izejas kodu

添加整卷填写的问卷保存调用

lm 1 nedēļu atpakaļ
vecāks
revīzija
9aa6bc72b4

+ 20 - 0
src/api/questionnaireCommit.ts

@@ -21,3 +21,23 @@ export const getEvaluationQuestionDataSplitApi = (data:any) => {
     data
   })
 }
+
+
+// 保存评价试卷数据(整卷填写)
+export const saveEvaluationQuestionDataApi = (data:any) => {
+    return request({
+        url: `${studentPrefix}/api/v1/assessment/center/evaluation/saveStudentEvaluationAnswer`,
+        method: 'post',
+        data
+    })
+}
+
+
+// 保存评价试卷数据(按题填写)
+export const saveEvaluationQuestionDataSplitApi = (data:any) => {
+    return request({
+        url: `${studentPrefix}/api/v1/assessment/center/evaluation/saveStudentEvaluationQuestionData`,
+        method: 'post',
+        data
+    })
+}

+ 7 - 5
src/components/QuestionTypeShow.vue

@@ -8,8 +8,8 @@
         v-if="[0,3].includes(Number(questionType))" 
         :class="{vertical:!isHorizontal}"> 
         <el-radio v-for="radioItem in questionSubOptions" 
-            :key="radioItem.id" 
-            :value="radioItem.id"
+            :key="radioItem.questionSortCode" 
+            :value="radioItem.questionSortCode"
         >
             {{ radioItem.content }}
         </el-radio>
@@ -25,9 +25,9 @@
 
         <el-checkbox 
             v-for="checkItem in questionSubOptions" 
-            :key="checkItem.id"
+            :key="checkItem.questionSortCode"
             :label="checkItem.content"
-            :value="checkItem.id"
+            :value="checkItem.questionSortCode"
         />
     </el-checkbox-group>
 
@@ -96,7 +96,8 @@ import {ref, watch} from 'vue'
 interface Option {
     content: String
     score?: Number|String,
-    id?: Number|string
+    id?: Number|string,
+    questionSortCode:Number|string
 }
 const props = defineProps({
     questionType:{  //题目展示类型  单选0/多选1/问答2/评分单选3 / 评分题4
@@ -144,6 +145,7 @@ const HandleChange = (val)=>{
 watch(()=>props.defaultQuestionVal,(newVal)=>{
     console.log('props.defaultQuestionVal',newVal)
     questionVal.value = newVal
+    emit('formChange',newVal)
 },{immediate:true})
 
 </script>

+ 52 - 4
src/components/QuestionnaireQuestionList.vue

@@ -17,7 +17,7 @@
                     :questionSubOptions="item.options"
                     :evaluationType="Number(item.questionAnswerClass)"
                     :questionScore="Number(item.questionScore)"
-                    @formChange="(val)=>HandleFormChange(val,item.id)"
+                    @formChange="(val)=>HandleFormChange(val, item)"
                     :defaultQuestionVal="item.answer"
                 ></QuestionTypeShow>
             </div>
@@ -44,7 +44,7 @@ interface QuestionMsg {
     options:QuestionOpt[],   //单选、多选的选项配置
     answer:string | [] | undefined | null,     //问题答案
     questionTitleName:string,   //问题名称
-    questionType:number,    //问题类型
+    questionType:number,    //问题类型  单选 0   评分单选 3  多选 1  评分题 5  问答题  2
     questionAnswerType:number,    // 是否必答,0-否,1-是
     questionSortRole:number,   // 0-竖排,1-横排
     questionScore:string,  //问题满分
@@ -68,8 +68,56 @@ const emit = defineEmits(['formListAnswerChange'])
 const questionListRef = defineModel('questionListRef')
 
 const formQuestionAnswerList = ref<Record<string, any>>({})
-const HandleFormChange = (val:any,keyId:string)=>{
-    formQuestionAnswerList.value[keyId] = val
+const HandleFormChange = (val:any,questionItm:QuestionMsg)=>{
+    const {questionType,id:keyId,questionScore, } = questionItm
+    // 最终返回的表单项的数据结构
+    switch(Number(questionType)){
+        case 0:   //单选
+            formQuestionAnswerList.value[keyId] = {
+                questionId: keyId,
+                answerCode: val,
+                studentAnswer: "",
+                studentQuestionScore: 0,
+                studentAnswerScore: 0
+            }
+            break;
+        case 1:   //多选
+            formQuestionAnswerList.value[keyId] = {
+                questionId: keyId,
+                answerCode: val.join('|'),
+                studentAnswer: "",
+                studentQuestionScore: 0,
+                studentAnswerScore: 0
+            }
+            break;
+        case 2:   //问答
+            formQuestionAnswerList.value[keyId] = {
+                questionId: keyId,
+                answerCode: '',
+                studentAnswer: val,
+                studentQuestionScore: 0,
+                studentAnswerScore: 0
+            }
+            break;
+        case 3:   //评分单选
+            formQuestionAnswerList.value[keyId] = {
+                questionId: keyId,
+                answerCode: val,
+                studentAnswer: '',
+                studentQuestionScore: 0,
+                studentAnswerScore: 0
+            }
+            break;
+        case 5:   //评分题
+            formQuestionAnswerList.value[keyId] = {
+                questionId: keyId,
+                answerCode: '',
+                studentAnswer: '',
+                studentQuestionScore: questionScore,
+                studentAnswerScore: val
+            }
+            break;
+    }
     emit('formListAnswerChange',formQuestionAnswerList.value)
 }
 </script>

+ 40 - 7
src/views/questionnaireCommit/QuestionnaireCommit.vue

@@ -190,6 +190,7 @@
 <script setup lang="ts">
 import { ref,onMounted, reactive, computed,watch } from 'vue';
 import { useRouter } from 'vue-router';
+import { ElMessage } from 'element-plus';
 
 import TabSearch from '@/baseComponents/TabSearch.vue';
 import QuestionnaireQuestionList from '@/components/QuestionnaireQuestionList.vue';
@@ -206,7 +207,9 @@ import { subjectToColor,fillOutStatusToColor,
 import { useTimeCountDown } from '@/utils/dateTransform';
 import {getExcelColumn} from '@/utils/numberConvertExcelColumn'
 
-import { getEvaluationQuestionDataApi, getEvaluationQuestionDataSplitApi } from '@/api/questionnaireCommit'
+import { getEvaluationQuestionDataApi, getEvaluationQuestionDataSplitApi, 
+        saveEvaluationQuestionDataApi, saveEvaluationQuestionDataSplitApi 
+    } from '@/api/questionnaireCommit'
 import {getEvaluationProcessMsgApi} from '@/api/selfQuestionnaireProcess'
 
 import redTimeIcon from '@/assets/icon/red_time_icon.svg'
@@ -297,6 +300,7 @@ const questionaireMsg = computed(()=>{
         let addedQuestionList = currentSelectedQuestionnaireData.value?.questionData?.map(item=>{
             let options = item.answerData.map(opt=>{
                 return{
+                    questionSortCode:String(opt.questionSortCode),  //选项的序号 
                     answerCode: opt.answerCode,
                     content: opt.answerName,
                     score: opt.answerScore,
@@ -317,7 +321,7 @@ const questionaireMsg = computed(()=>{
             if(item.questionType === 0 || item.questionType === 3){
                 item.answerData.map(opt=>{
                     if(opt.answerCode){
-                        defaultAnswer = opt.answerId
+                        defaultAnswer = opt.answerCode
                     }
                 })
             // 多选  
@@ -325,7 +329,7 @@ const questionaireMsg = computed(()=>{
                 defaultAnswer = []
                 item.answerData.map(opt=>{
                     if(opt.answerCode){
-                        defaultAnswer.push(opt.answerId)
+                        defaultAnswer.push(opt.answerCode)
                     }
                 })
             //问答  
@@ -333,7 +337,7 @@ const questionaireMsg = computed(()=>{
                 defaultAnswer = item.studentAnswer
             //评分
             } else if(item.questionType === 5){
-                defaultAnswer = item.studentQuestionScore
+                defaultAnswer = item.studentAnswerScore
             }
 
             console.log('defaultAnswer',defaultAnswer)  
@@ -347,6 +351,8 @@ const questionaireMsg = computed(()=>{
                 answer:defaultAnswer,  //获取默认answer
             }
         })
+
+        console.log('默认初始赋值——————addedQuestionList',addedQuestionList)
         return{
             assessmentTitle:currentSelectedQuestionnaireData.value?.assessmentName,  //问卷标题
             assessmentIllustrate:currentSelectedQuestionnaireData.value?.assessmentIllustrate,  //问卷简介
@@ -406,7 +412,11 @@ const GetFullQuestionnaireData = async ()=>{
     if(res?.code == 200){
         teacherQuestionnaireData.value = res?.data
     }
-    // 同时 要初始化第一个展示的教师问卷 __展示第一个 或者展示 最后一个提交的问卷
+
+    // 如果当前没有选中的教师问卷,则默认选中第一个教师问卷
+    if(currentActiveTeacherId.value){
+        return
+    }
     currentActiveTeacherId.value = teacherList.value?.[0]?.teacherId || ''
 }
 
@@ -453,8 +463,30 @@ const HandleQuestionnaireFormChange = (val)=>{
     fullQuestionnaireAnswer.value = val
 }
 // 问卷整卷提交
-const HandleFinishReview = ()=>{
-    fullQuestionnaireAnswer.value = {}
+const HandleFinishReview = async ()=>{
+    console.log('整卷提交的问卷答案--',fullQuestionnaireAnswer.value)
+
+    let params = {
+        evaluationCodeRelationId: currentSelectedQuestionnaireData.value.evaluationCodeRelationId,
+        assessmentId: currentSelectedQuestionnaireData.value.assessmentId,
+        answerData: Object.values(fullQuestionnaireAnswer.value)
+    }
+
+    let res = await saveEvaluationQuestionDataApi(params)
+
+    if(res?.code == 200){
+        ElMessage.success('问卷评价提交成功')
+        // 找到当前选中的教师
+        let currentIndex = teacherList.value.findIndex(item=>{
+            return item.teacherId == currentActiveTeacherId.value
+        })
+        // 跳转到下一个教师的问卷
+        currentActiveTeacherId.value = teacherList.value?.[currentIndex + 1]?.teacherId || ''
+        fullQuestionnaireAnswer.value = {}
+        // 重新查询教师状态和问卷状态
+        await GetEvaluationProcessMsg()
+        await GetFullQuestionnaireData()
+    }
 }
 
 
@@ -478,6 +510,7 @@ const questionTableColumns = ref<any[]>([])  //按题填写的表列数据
 const questionTableData = ref<any[]>([])   //按题填写的表行数据
 
 
+// 监听按题填写时候的 表格数据渲染  studentQuestionScore 可能有问题
 watch(()=>currentEditQuestion.value?.questionType,(newVal)=>{
     console.log('teacherList',teacherList.value)
     console.log('questionaireMsg',questionaireMsg.value)