Quellcode durchsuchen

修改按题填写下一步的跳转逻辑

lm vor 1 Woche
Ursprung
Commit
0aa9686758

+ 19 - 13
src/components/batchSelectQuestionBatchFill/BatchSelectQuestionBatchFill.vue

@@ -29,9 +29,12 @@ import multipleSelectIcon from '@/assets/studentQuestionnaire/multiple_select_ic
 import multipleUnSelectDisabledIcon from '@/assets/studentQuestionnaire/multiple_unselect_disabled_icon.svg'
 import multipleUnSelectDisabledIcon from '@/assets/studentQuestionnaire/multiple_unselect_disabled_icon.svg'
 import multipleUnSelectIcon from '@/assets/studentQuestionnaire/multiple_unselect.svg'
 import multipleUnSelectIcon from '@/assets/studentQuestionnaire/multiple_unselect.svg'
 
 
+import {isTitleRequired} from '../titleRequiredJudge.js'
+
 interface TitleMsg {
 interface TitleMsg {
     questionTitleName:string,
     questionTitleName:string,
-    questionType:number
+    questionType:number,
+    extraConfig:string[]
 }
 }
 
 
 interface TableColumn {
 interface TableColumn {
@@ -90,19 +93,22 @@ const HandleCheck = (row,key,val)=>{
 watch(()=>tableData.value,(newVal)=>{
 watch(()=>tableData.value,(newVal)=>{
     console.log('当前表格数据变化了',newVal)
     console.log('当前表格数据变化了',newVal)
     let isFinish = true
     let isFinish = true
-    newVal.map(row=>{
-        // 选项没有被勾选
-        if(Object.values(row).filter(val=>val === true).length < 1){
-            isFinish = false
-        }
-    })
-    // 当前问卷全部填写完成
-    if(isFinish){
-        isFinishEdit.value = true
-    }else{
-    // 当前问卷没有全部填写完成
-        isFinishEdit.value = false
+    if(isTitleRequired(props.titleMsg)){
+        newVal.map(row=>{
+            // 判断选项没有被勾选
+            let optionalKeys = Object.keys(row).filter(itm=>itm.startsWith('sort_'))
+            let chooseKeys:any = []
+            optionalKeys.map(key=>{
+                if(row[key]){
+                    chooseKeys.push(key)
+                }
+            })
+            if(chooseKeys.length < 1){
+                isFinish = false
+            }
+        })
     }
     }
+    isFinishEdit.value = isFinish
 },{deep:true,immediate:true})
 },{deep:true,immediate:true})
 
 
 watch(()=>props.defaultTableData,(newVal)=>{
 watch(()=>props.defaultTableData,(newVal)=>{

+ 12 - 13
src/components/questionAndAnswerBatchFill/QuestionAndAnswerBatchFill.vue

@@ -28,10 +28,13 @@ import { onMounted, ref,watch } from 'vue';
 import QuestionTitleComponent from '../QuestionTitleComponent.vue';
 import QuestionTitleComponent from '../QuestionTitleComponent.vue';
 import Table from '@/baseComponents/Table.vue';
 import Table from '@/baseComponents/Table.vue';
 import { tableColumns } from './table.js';
 import { tableColumns } from './table.js';
+import {isTitleRequired} from '../titleRequiredJudge.js'
+
 
 
 interface TitleMsg {
 interface TitleMsg {
     questionTitleName:string,
     questionTitleName:string,
-    questionType:number
+    questionType:number,
+    extraConfig:string[]
 }
 }
 
 
 const props = defineProps({
 const props = defineProps({
@@ -76,19 +79,15 @@ const HandleCheck = (row,key,val)=>{
 watch(()=>tableData.value,(newVal)=>{
 watch(()=>tableData.value,(newVal)=>{
     console.log('当前表格数据变化了')
     console.log('当前表格数据变化了')
     let isFinish = true
     let isFinish = true
-    newVal.map(row=>{
-        // 题目没有被填写
-        if(!row.content){
-            isFinish = false
-        }
-    })
-    // 当前问卷全部填写完成
-    if(isFinish){
-        isFinishEdit.value = true
-    }else{
-    // 当前问卷没有全部填写完成
-        isFinishEdit.value = false
+    if(isTitleRequired(props.titleMsg)){
+        newVal.map(row=>{
+            // 题目没有被填写
+            if(!row.content){
+                isFinish = false
+            }
+        })
     }
     }
+    isFinishEdit.value = isFinish
 },{deep:true,immediate:true})
 },{deep:true,immediate:true})
 
 
 
 

+ 12 - 13
src/components/scoreQuestionBatchFill/ScoreQuestionBatchFill.vue

@@ -31,10 +31,13 @@ import Table from '@/baseComponents/Table.vue';
 import QuestionTypeShow from '../QuestionTypeShow.vue';
 import QuestionTypeShow from '../QuestionTypeShow.vue';
 
 
 import { tableColumns } from './table.js';
 import { tableColumns } from './table.js';
+import {isTitleRequired} from '../titleRequiredJudge.js'
+
 
 
 interface TitleMsg {
 interface TitleMsg {
     questionTitleName:string,
     questionTitleName:string,
-    questionType:number
+    questionType:number,
+    extraConfig:string[]
 }
 }
 
 
 const props = defineProps({
 const props = defineProps({
@@ -81,19 +84,15 @@ const HandleCheck = (row,key,val)=>{
 watch(()=>tableData.value,(newVal)=>{
 watch(()=>tableData.value,(newVal)=>{
     console.log('当前表格数据变化了')
     console.log('当前表格数据变化了')
     let isFinish = true
     let isFinish = true
-    newVal.map(row=>{
-        // 分数没有被选择
-        if(Number(row.score) === 0){
-            isFinish = false
-        }
-    })
-    // 当前问卷全部填写完成
-    if(isFinish){
-        isFinishEdit.value = true
-    }else{
-    // 当前问卷没有全部填写完成
-        isFinishEdit.value = false
+    if(isTitleRequired(props.titleMsg)){
+        newVal.map(row=>{
+            // 分数没有被选择
+            if(Number(row.score) === 0){
+                isFinish = false
+            }
+        })
     }
     }
+    isFinishEdit.value = isFinish
 },{deep:true,immediate:true})
 },{deep:true,immediate:true})
 
 
 
 

+ 21 - 14
src/components/singleSelectQuestionBatchFill/SingleSelectQuestionBatchFill.vue

@@ -28,11 +28,13 @@ import { tableColumns } from './table.js';
 import selectIcon from '@/assets/studentQuestionnaire/select_icon.png'
 import selectIcon from '@/assets/studentQuestionnaire/select_icon.png'
 import unselectDisabledIcon from '@/assets/studentQuestionnaire/unselect_disabled_icon.png'
 import unselectDisabledIcon from '@/assets/studentQuestionnaire/unselect_disabled_icon.png'
 import singleUnselectIcon from '@/assets/studentQuestionnaire/single_unselect.svg'
 import singleUnselectIcon from '@/assets/studentQuestionnaire/single_unselect.svg'
+import {isTitleRequired} from '../titleRequiredJudge.js'
 
 
 
 
 interface TitleMsg {
 interface TitleMsg {
     questionTitleName:string,
     questionTitleName:string,
-    questionType:number
+    questionType:number,
+    extraConfig:string[]
 }
 }
 
 
 interface TableColumn {
 interface TableColumn {
@@ -74,6 +76,8 @@ const isFinishEdit = defineModel('isFinishEdit')  //是否已经填写完成
 
 
 const tableData = ref<any[]>([])
 const tableData = ref<any[]>([])
 
 
+
+
 // 处选项的选中
 // 处选项的选中
 const HandleCheck = (row,key,val)=>{
 const HandleCheck = (row,key,val)=>{
     // 控制一行只选一个
     // 控制一行只选一个
@@ -92,21 +96,24 @@ watch(()=>props.defaultTableData,(newVal)=>{
 
 
 
 
 watch(()=>tableData.value,(newVal)=>{
 watch(()=>tableData.value,(newVal)=>{
-    console.log('当前表格数据变化了',)
+    console.log('当前表格数据变化了')
     let isFinish = true
     let isFinish = true
-    newVal.map(row=>{
-        // 选项没有被勾选
-        if(Object.values(row).filter(val=>val === true).length < 1){
-            isFinish = false
-        }
-    })
-    // 当前问卷全部填写完成
-    if(isFinish){
-        isFinishEdit.value = true
-    }else{
-    // 当前问卷没有全部填写完成
-        isFinishEdit.value = false
+    if(isTitleRequired(props.titleMsg)){
+        newVal.map(row=>{
+            // 判断选项没有被勾选
+            let optionalKeys = Object.keys(row).filter(itm=>itm.startsWith('sort_'))
+            let chooseKeys:any = []
+            optionalKeys.map(key=>{
+                if(row[key]){
+                    chooseKeys.push(key)
+                }
+            })
+            if(chooseKeys.length < 1){
+                isFinish = false
+            }
+        })
     }
     }
+    isFinishEdit.value = isFinish
 },{deep:true,immediate:true})
 },{deep:true,immediate:true})
 
 
 
 

+ 13 - 13
src/components/starRationQuestionBatchFill/StarRationQuestionBatchFill.vue

@@ -31,9 +31,13 @@ import QuestionTypeShow from '../QuestionTypeShow.vue';
 
 
 import { tableColumns } from './table.js';
 import { tableColumns } from './table.js';
 
 
+import {isTitleRequired} from '../titleRequiredJudge.js'
+
+
 interface TitleMsg {
 interface TitleMsg {
     questionTitleName:string,
     questionTitleName:string,
-    questionType:number
+    questionType:number,
+    extraConfig:string[]
 }
 }
 
 
 const props = defineProps({
 const props = defineProps({
@@ -79,19 +83,15 @@ const HandleCheck = (row,key,val)=>{
 watch(()=>tableData.value,(newVal)=>{
 watch(()=>tableData.value,(newVal)=>{
     console.log('当前表格数据变化了')
     console.log('当前表格数据变化了')
     let isFinish = true
     let isFinish = true
-    newVal.map(row=>{
-        // 分数没有被选择
-        if(Number(row.score) ===0){
-            isFinish = false
-        }
-    })
-    // 当前问卷全部填写完成
-    if(isFinish){
-        isFinishEdit.value = true
-    }else{
-    // 当前问卷没有全部填写完成
-        isFinishEdit.value = false
+    if(isTitleRequired(props.titleMsg)){
+        newVal.map(row=>{
+            // 分数没有被选择
+            if(Number(row.score) ===0){
+                isFinish = false
+            }
+        })
     }
     }
+    isFinishEdit.value = isFinish
 },{deep:true,immediate:true})
 },{deep:true,immediate:true})
 
 
 
 

+ 4 - 0
src/components/titleRequiredJudge.ts

@@ -0,0 +1,4 @@
+// 辅助函数:判断是否必填
+export const isTitleRequired = (item) => {
+  return item.extraConfig && item.extraConfig.includes('required');
+};

+ 34 - 21
src/views/questionnaireCommit/QuestionnaireCommit.vue

@@ -144,9 +144,6 @@
                         @questionAnswerChange="HandleQuestionAnswerChange"
                         @questionAnswerChange="HandleQuestionAnswerChange"
                         :defaultTableData="questionTableData"
                         :defaultTableData="questionTableData"
                     />
                     />
-                   
-
-                    <!-- 下一题  能否点击 —— 只针对必填项   需要变量判断 ———— 待完善--- -->
                     <div class="operation">
                     <div class="operation">
                         <el-button :class="[isQuestionEdit ? 'button_background' : 'is-disabled']"  
                         <el-button :class="[isQuestionEdit ? 'button_background' : 'is-disabled']"  
                             @click="isQuestionEdit ? HandleFinishCurrentQuestion() : ''">
                             @click="isQuestionEdit ? HandleFinishCurrentQuestion() : ''">
@@ -487,8 +484,7 @@ const HandleFinishReview = async ()=>{
             fullQuestionnaireAnswer.value = {}
             fullQuestionnaireAnswer.value = {}
         }
         }
         // 重新查询教师状态和问卷状态
         // 重新查询教师状态和问卷状态
-        await GetEvaluationProcessMsg()
-        await GetFullQuestionnaireData()
+        await ReloadPageData()
     }
     }
 }
 }
 
 
@@ -504,7 +500,15 @@ const singleQuestionAnswer = ref([])
 
 
 // 当前编辑的试题
 // 当前编辑的试题
 const currentEditQuestion = computed(()=>{
 const currentEditQuestion = computed(()=>{
-    return questionnaireSplitData.value?.[currentSelectedQuestionIndex.value]
+    let currentQuestion = questionnaireSplitData.value?.[currentSelectedQuestionIndex.value]
+    let extraConfig = []
+    if(Number(currentQuestion?.questionAnswerType) === 1){
+        extraConfig.push('required')
+    }
+    if(Number(currentQuestion?.questionSortRole) === 1){
+        extraConfig.push('isHorizontal')
+    }
+    return {...currentQuestion,extraConfig}
 })
 })
 
 
 
 
@@ -513,7 +517,7 @@ const questionTableColumns = ref<any[]>([])  //按题填写的表列数据
 const questionTableData = ref<any[]>([])   //按题填写的表行数据
 const questionTableData = ref<any[]>([])   //按题填写的表行数据
 
 
 
 
-// 监听按题填写时候的 表格数据渲染  studentQuestionScore 可能有问题
+// 监听按题填写时候的 表格数据渲染 
 watch(()=>currentEditQuestion.value?.questionType,(newVal)=>{
 watch(()=>currentEditQuestion.value?.questionType,(newVal)=>{
     console.log('teacherList',teacherList.value)
     console.log('teacherList',teacherList.value)
     console.log('questionaireMsg',questionaireMsg.value)
     console.log('questionaireMsg',questionaireMsg.value)
@@ -550,7 +554,11 @@ watch(()=>currentEditQuestion.value?.questionType,(newVal)=>{
                     // 评分单选时候,每个选项对应的分值 obj
                     // 评分单选时候,每个选项对应的分值 obj
                     "answerScoreObj": singleScoreObj
                     "answerScoreObj": singleScoreObj
                 }
                 }
-                let answers = stuAnswer.answerCode?.split('|') || []
+
+                let answers = []
+                if(stuAnswer.answerCode){
+                    answers = stuAnswer.answerCode?.split('|') || []
+                }
                 // 回显已经填写完的信息
                 // 回显已经填写完的信息
                 answers.map((ans)=>{
                 answers.map((ans)=>{
                     rowKeys['sort_'+ans] = true
                     rowKeys['sort_'+ans] = true
@@ -589,7 +597,10 @@ watch(()=>currentEditQuestion.value?.questionType,(newVal)=>{
                     "answerScore": ''
                     "answerScore": ''
                 }
                 }
 
 
-                let answers = stuAnswer.answerCode?.split('|') || []
+                let answers = []
+                if(stuAnswer.answerCode){
+                    answers = stuAnswer.answerCode?.split('|') || []
+                }
                 // 回显已经填写完的信息
                 // 回显已经填写完的信息
                 answers.map((ans)=>{
                 answers.map((ans)=>{
                     rowKeys['sort_'+ans] = true
                     rowKeys['sort_'+ans] = true
@@ -648,10 +659,6 @@ const HandleQuestionAnswerChange = (val)=>{
 // 当前题目 有关所有教师的评价数据提交
 // 当前题目 有关所有教师的评价数据提交
 const HandleFinishCurrentQuestion = async ()=>{
 const HandleFinishCurrentQuestion = async ()=>{
     console.log('当前题目的教师评价数据--',singleQuestionAnswer.value )
     console.log('当前题目的教师评价数据--',singleQuestionAnswer.value )
-
-    // 区分 单选 多选 问答 评价 评分
-
-
     let finalAnswerData:any[] = []
     let finalAnswerData:any[] = []
     
     
     switch(currentEditQuestion.value?.questionType){
     switch(currentEditQuestion.value?.questionType){
@@ -728,17 +735,18 @@ const HandleFinishCurrentQuestion = async ()=>{
         answerData:finalAnswerData
         answerData:finalAnswerData
     }
     }
 
 
-
     let res =  await saveEvaluationQuestionDataSplitApi(params)
     let res =  await saveEvaluationQuestionDataSplitApi(params)
     if(res?.code == 200){
     if(res?.code == 200){
         ElMessage.success('问卷评价提交成功')
         ElMessage.success('问卷评价提交成功')
-    }
 
 
-    // if((currentSelectedQuestionIndex.value + 1) < questionaireMsg.value.questionData?.length){
-    //     currentSelectedQuestionIndex.value += 1
-    // }
-    // singleQuestionAnswer.value = []
-    // isQuestionEdit.value = false
+        if((currentSelectedQuestionIndex.value + 1) < questionaireMsg.value.questionData?.length){
+            currentSelectedQuestionIndex.value += 1
+        }
+        singleQuestionAnswer.value = []
+        isQuestionEdit.value = false
+        // 重新查询 问卷内容和页面内容
+        await ReloadPageData()
+    }
 }
 }
 
 
 // 
 // 
@@ -757,9 +765,14 @@ const GetEvaluationProcessMsg = async ()=>{
     }
     }
 }
 }
 
 
-onMounted( async ()=>{
+// 重新加载页面数据
+const ReloadPageData = async ()=>{
     await GetEvaluationProcessMsg()
     await GetEvaluationProcessMsg()
     await GetFullQuestionnaireData()
     await GetFullQuestionnaireData()
+}
+
+onMounted( async ()=>{
+    await ReloadPageData()
 })
 })
 
 
 </script>
 </script>