ソースを参照

添加整卷填写接口数据渲染

lm 2 週間 前
コミット
74d09fe17d

+ 14 - 0
src/api/questionnaireCommit.ts

@@ -0,0 +1,14 @@
+import request from '../utils/request.ts'
+
+
+let studentPrefix = import.meta.env.VITE_API_STUDENT_PRE 
+
+
+// 查询评价试卷数据
+export const getEvaluationQuestionDataApi = (data:any) => {
+  return request({
+    url: `${studentPrefix}/api/v1/assessment/center/evaluation/queryEvaluationQuestionData`,
+    method: 'post',
+    data
+  })
+}

+ 15 - 14
src/components/commonDictConvert.ts

@@ -2,29 +2,29 @@
 export const subjectToColor = (subject)=>{
     switch(subject){
         case '班主任':
-            return { name: '班主任', color: '#6A8AEC' }
+            return { name: subject, color: '#6A8AEC' }
         case '语文':
-            return { name: '语文', color: '#91CC75' }
+            return { name: subject, color: '#91CC75' }
         case '数学':
-            return { name: '数学', color: '#FAC858' }
+            return { name: subject, color: '#FAC858' }
         case '英语':
-            return { name: '英语', color: '#EE6666' }
+            return { name: subject, color: '#EE6666' }
         case '物理':
-            return { name: '物理', color: '#817BE2' }
+            return { name: subject, color: '#817BE2' }
         case '化学':
-            return { name: '化学', color: '#73C0DE' }
+            return { name: subject, color: '#73C0DE' }
         case '生物':
-            return { name: '生物', color: '#3BA272' }
+            return { name: subject, color: '#3BA272' }
         case '政治':
-            return { name: '政治', color: '#63A1FF' }
+            return { name: subject, color: '#63A1FF' }
         case '历史':
-            return { name: '历史', color: '#FC8452' }
+            return { name: subject, color: '#FC8452' }
         case '地理':
-            return { name: '地理', color: '#9A60B4' }
+            return { name: subject, color: '#9A60B4' }
         case '道法':
-            return { name: '道法', color: '#FF869D' }
+            return { name: subject, color: '#FF869D' }
         default:
-            return { name: '其他', color: '#C495FA' }
+            return { name: subject, color: '#C495FA' }
     }
 }
 
@@ -48,6 +48,7 @@ export const qustionTypeToName = (type)=>{
 
 
 //  evaluationStatus: number   //评价状态  0-待评价  1-进行中  2-已评价
+
 type QuestionnaireStatus  = 'done' | 'pending' | 'unfinish' | string
 // 科目教师问卷评价进度 状态转换
 export const fillOutStatusToColor = (status:number|string)=>{
@@ -66,12 +67,12 @@ export const IsSubjectQuestionnaireUnFinish = (status:number)=>{
 }
 
 
+// studentAnswerStatus  //题目的填写状态   学生答题是否完成   0 否  1 是
 // 按题填写的 试题 是否处于已完成状态
 export const IsSplitQuestionnaireFinish = (status)=>{
-    return Number(status) === 2
+    return Number(status) === 1
 }
 // 按题填写的试题是否处于 未完成状态
-
 export const IsSplitQuestionnaireUnFinish = (status)=>{
     return Number(status) === 0
 }

+ 1 - 1
src/utils/request.ts

@@ -43,7 +43,7 @@ service.interceptors.response.use(
       // 特殊状态码处理,如 token 失效等
       if (res.code === 401) {
         // 跳转登录页
-        window.location.href = '/'
+        window.location.href =  window.location.hash.startsWith('#/main') ?  '/' : '/#/app'
       }
 
       return Promise.reject(res.msg || '请求失败')

+ 53 - 22
src/views/questionnaireCommit/QuestionnaireCommit.vue

@@ -23,7 +23,7 @@
                 />
 
                 <div class="info_tip">
-                    <span class="process_tip">总进度:{{  (teacherList.filter(item=>item.status == 'done')?.length / teacherList.length) * 100 }}%</span>
+                    <span class="process_tip">总进度:{{ questionnaireProgress }}</span>
                     <span class="time_tip">
                         <img :src="redTimeIcon" alt="">
                         剩余时间:{{ deadlineCountDown?.day + '天' + deadlineCountDown?.hours + '时' + deadlineCountDown?.minutes + '分'  }}</span>
@@ -46,16 +46,16 @@
                 <ul class="teacher_list">
                     <li v-for="(teacher,index) in teacherList" :key="teacher.id" 
                         :class="['teacher_card',{active:currentActiveTeacherIndex === index},
-                                {disabled:IsSubjectQuestionnaireUnFinish(teacher.status)}]" 
-                        @click="IsSubjectQuestionnaireUnFinish(teacher.status) ? '' : HandleSubjectTeacherChange(index,teacher)">
-                        <div class="teacher_tag" :style="{backgroundColor:subjectToColor(teacher.subject)?.color}">
-                            {{ teacher.subject }}
+                                {disabled:IsSubjectQuestionnaireUnFinish(teacher.evaluationStatus)}]" 
+                        @click="IsSubjectQuestionnaireUnFinish(teacher.evaluationStatus) ? '' : HandleSubjectTeacherChange(index,teacher)">
+                        <div class="teacher_tag" :style="{backgroundColor:subjectToColor(teacher.evaluationSubjectName)?.color}">
+                            {{ teacher.evaluationSubjectName }}
                         </div>
                         <div class="info_text">
-                            <div class="teacher_name">{{ teacher.name }}</div>
+                            <div class="teacher_name">{{ teacher.teacherName }}</div>
                             <div class="status" 
-                                :style="{color:fillOutStatusToColor(teacher.status)?.color}"
-                            >{{ fillOutStatusToColor(teacher.status)?.label }}</div>
+                                :style="{color:fillOutStatusToColor(teacher.evaluationStatus)?.color}"
+                            >{{ fillOutStatusToColor(teacher.evaluationStatus)?.label }}</div>
                         </div>
                     </li>
                 </ul>
@@ -168,7 +168,9 @@
                                     disabled:defaultQuestionnaireMode=='split' && IsSplitQuestionnaireUnFinish(question.status)}]">
                             {{ index + 1 }}.{{ question.questionTitleName }}
                         </span>
-                        <img v-if="defaultQuestionnaireMode=='split' && IsSplitQuestionnaireFinish(question.status)" :src="finishIcon" alt="">
+                        <!-- <img v-if="defaultQuestionnaireMode=='split' && IsSplitQuestionnaireFinish(question.status)" :src="finishIcon" alt=""> -->
+                        <img v-if="IsSplitQuestionnaireFinish(question.studentAnswerStatus)" :src="finishIcon" alt="">
+                        <!-- question.studentAnswerStatus  学生答题是否完成   0 否  1 是-->
                     </li>
                 </ul>
             </div>
@@ -191,17 +193,30 @@ import StarRationQuestionBatchFill from '@/components/starRationQuestionBatchFil
 import QuestionAndAnswerBatchFill from '@/components/questionAndAnswerBatchFill/QuestionAndAnswerBatchFill.vue';
 import BatchSelectQuestionBatchFill from '@/components/batchSelectQuestionBatchFill/BatchSelectQuestionBatchFill.vue';
 
-
 import { subjectToColor,fillOutStatusToColor,
         IsSubjectQuestionnaireUnFinish,IsSplitQuestionnaireFinish,IsSplitQuestionnaireUnFinish
     } from '@/components/commonDictConvert';
+import { useTimeCountDown } from '@/utils/dateTransform';
 
 
-import { useTimeCountDown } from '@/utils/dateTransform';
+import { getEvaluationQuestionDataApi } from '@/api/questionnaireCommit'
 
 import redTimeIcon from '@/assets/icon/red_time_icon.svg'
 import finishIcon from '@/assets/studentQuestionnaire/select_icon.png'
 
+
+
+interface TeacherItm {
+    id: string|number
+    evaluationClassName: string     //班级
+    evaluationStatus: number   //评价状态  0-待评价  1-进行中  2-已评价
+    subjectType: number      // 科目类型 0-班主任  1 科目(单科)
+    teacherName: string      //教师名称
+    evaluationSubjectName:string  //科目名称
+}
+
+
+
 const router = useRouter()
 
 
@@ -217,7 +232,7 @@ const {
  * 1. 左侧教师相关变量
  */
 // 待评价教师列表
-const teacherList = ref([])
+const teacherList = ref<TeacherItm[]>([])
 
 
 /**
@@ -228,7 +243,15 @@ const teacherList = ref([])
 const isCurrentQuestionnaireTaskFinish = ref(false) //true  false
 
 // 问卷填写截止时间
-const deadlineTime = ref('2026-07-28 12:30:00')
+// const deadlineTime = ref('2026-07-28 12:30:00')
+const deadlineTime = computed(()=>{
+    return questionaireMsg.value.deadlineTime
+})
+// 每个问卷的进度
+const questionnaireProgress= computed(()=>{
+    return questionaireMsg.value.progress
+})
+
 
 //  模拟所有教师的问卷数据(目前只有两个)
 const mockTeacherQuestionnaireData = ref([
@@ -597,7 +620,7 @@ const mockTeacherQuestionnaireData = ref([
 ])
 
 // 模拟问卷响应数据
-const mockResData = computed(()=>mockTeacherQuestionnaireData.value[currentActiveTeacherIndex.value % 2])
+const mockResData = computed(()=>mockTeacherQuestionnaireData.value[currentActiveTeacherIndex.value])
 
 // 最终渲染的整体问卷数据
 const questionaireMsg = computed(()=>{
@@ -606,8 +629,7 @@ const questionaireMsg = computed(()=>{
             return{
                 content: opt.answerName,
                 score: opt.answerScore,
-                // id: opt.questionId
-                id: opt.id
+                id: opt.answerId
             }
         })
         let extraConfig = []
@@ -619,18 +641,19 @@ const questionaireMsg = computed(()=>{
         }
         return {
             ...item,
-            // id:item.assessmentId,
-            id:item.id,
+            id:item.questionId,
             extraConfig,    // 是否必答 required, 是否横排 isHorizontal
             options,
             answer:undefined
         }
     })
     return{
-        assessmentTitle:mockResData.value.assessmentTitle,  //问卷标题
+        assessmentTitle:mockResData.value.assessmentName,  //问卷标题
         assessmentIllustrate:mockResData.value.assessmentIllustrate,  //问卷简介
         // 问卷试题列表
-        questionData:addedQuestionList
+        questionData:addedQuestionList,
+        progress:mockResData.value.progress,
+        deadlineTime:mockResData.value.endDateTime,
     }
 })
 
@@ -738,11 +761,19 @@ const HandleTimeDeadline = ()=>{
     StartCounDown(deadlineTime.value,1000)
 }
 
-onMounted(()=>{
-    // 从父级获取 待评价教师的模拟数据列表
+onMounted( async ()=>{
+    // 从父级获取 待评价教师的数据列表
     let localTeacherList = sessionStorage.getItem('teacherList')
     if(localTeacherList){
         teacherList.value = JSON.parse(localTeacherList || '[]')
+        let teacherIds = teacherList.value.map(item=>{
+            return item.id
+        })
+        let res = await getEvaluationQuestionDataApi(teacherIds)
+        if(res?.code == 200){
+            mockTeacherQuestionnaireData.value = res?.data
+        }
+
     }
     HandleTimeDeadline()
 })

+ 0 - 1
src/views/selfQuestionnaireProcess/SelfQuestionnaireProcess.vue

@@ -111,7 +111,6 @@ const HandleElectiveSubjectConfirm = async ()=>{
 
 // 跳转到填写问卷页
 const GoToFillOutQuestionnaire = ()=>{
-    // 模拟数据
     sessionStorage.setItem('teacherList',JSON.stringify(teacherList.value)) 
     router.push('/main/questionnaireCommit')
 }