Prechádzať zdrojové kódy

问卷模板 添加除完成外的其他接口调用

lm 1 mesiac pred
rodič
commit
aa00a2973b

+ 19 - 0
src/api/step3Component.ts

@@ -0,0 +1,19 @@
+import request from '../utils/request.js'
+let teacherPrefix = import.meta.env.VITE_API_TEACHER_PRE 
+
+// 查询问卷模板数据
+export const getQuestionnaireTemplateListApi = (evaluationId:any) => {
+    return request({
+        url: `${teacherPrefix}/api/v1/teacherTemplate/queryTeacherEvaluationTemplate/${evaluationId}`,
+        method: 'get',
+    })
+}
+
+// 保存问卷模板数据
+export const saveQuestionnaireTemplateListApi = (data:any) => {
+    return request({
+        url: `${teacherPrefix}/api/v1/teacherTemplate/modifyTemplateInfo`,
+        method: 'post',
+        data
+    })
+}

+ 10 - 1
src/api/surveyManagement.ts

@@ -1,7 +1,7 @@
 import request from '../utils/request.js'
 let teacherPrefix = import.meta.env.VITE_API_TEACHER_PRE 
 
-// 查询 问卷列表
+// 查询 问卷列表 带分页
 export const getQuestionnaireListApi = (data:any) => {
     return request({
         url: `${teacherPrefix}/api/v1/assessment/teacherAssessmentList`,
@@ -11,6 +11,15 @@ export const getQuestionnaireListApi = (data:any) => {
 }
 
 
+//  查询所有的问卷列表
+export const getAllQuestionnaireListApi = ()=>{
+    return request({
+        url: `${teacherPrefix}/api/v1/assessment/assessmentAllList`,
+        method: 'get',
+    })
+}
+
+
 // 新增问卷
 export const addQuestionnaireApi = (data:any) => {
     return request({

+ 110 - 103
src/views/reviewManagement/stepComponent/step3Component/Step3Component.vue

@@ -6,7 +6,7 @@
                 <el-checkbox v-model="isUnifiedTemplate" >所有单科统一模版</el-checkbox>
             </div>
             <div class="content_right">
-                <el-button  class="button_background" @click="SaveEvaluationData">完成</el-button>
+                <el-button  class="button_background" @click="FinishQuestionnaireTemplateConfig">完成</el-button>
             </div>
             </div>
         </div>
@@ -18,8 +18,8 @@
             :totalNum="0"
             :hidePagination="true"
         >
-            <template #matchGender="{row}">
-                <el-select v-model="row.matchGender">
+            <template #gender="{row}">
+                <el-select v-model="row.gender">
                     <el-option
                         v-for="opt in gradeOptionList"
                         :key="opt.value"
@@ -28,12 +28,12 @@
                     />
                 </el-select>
             </template>
-            <template #questionnaireName="{row}">
+            <template #assessmentId="{row}">
                 <div class="questionnaire_cell table_row_option">
                     <el-select 
-                        v-model="row.questionnaireName"
+                        v-model="row.assessmentId"
                         filterable
-                        @change="(val)=>isUnifiedTemplate ? SyncQuestionnaireTemplate(val) : ''">
+                        @change="(val)=>HandleQuestionnaireTemplateChange(row,val)">
                         <el-option
                             v-for="opt in quesitonnaireOptionList"
                             :key="opt.value"
@@ -41,7 +41,7 @@
                             :value="opt.value"
                         />
                     </el-select>
-                    <span v-if="row.questionnaireName" class="el_button_editor">预览</span>
+                    <span v-if="row.assessmentId" class="el_button_editor" @click="GoToPreviewQuestionnaire(row.assessmentId)">预览</span>
                     <span v-else class="el_button_editor"></span>
                 </div>
             </template>
@@ -53,19 +53,26 @@
 
 
 <script setup lang="ts">
-import { ref } from 'vue';
+import { onMounted, ref } from 'vue';
+import { useRoute,useRouter } from 'vue-router';
 import Table from '@/baseComponents/Table.vue';
 import {tableColumns} from './table'
 
-const isUnifiedTemplate = ref(false)  //所有单科统一模版
+import { getQuestionnaireTemplateListApi,saveQuestionnaireTemplateListApi} from '@/api/step3Component'
+import {getAllQuestionnaireListApi} from   '@/api/surveyManagement'
+import { ElMessage } from 'element-plus';
 
-// const 
+const route = useRoute()
+const router = useRouter()
 
+const isUnifiedTemplate = ref(true)  //所有单科统一模版
+
+//  1. 下拉选项 
 // 年级下拉
 const gradeOptionList = ref([
     {
         label:'全部',
-        value:'all'
+        value:'2'
     },
     {
         label:'男',
@@ -78,105 +85,105 @@ const gradeOptionList = ref([
 ])
 
 // 问卷下拉
-const quesitonnaireOptionList = ref([
-    {
-        label:'满意度问卷1',
-        value:'1'
-    },
-    {
-        label:'满意度问卷2',
-        value:'2'
-    },
-    {
-        label:'满意度问卷3',
-        value:'3'
-    },
+const quesitonnaireOptionList = ref([])
+// 获取问卷列表
+const GetQuestionnaireList = async ()=>{
+   let res = await getAllQuestionnaireListApi()
+   if(res?.code == 200){
+    quesitonnaireOptionList.value = res?.data?.map(item=>{
+        return {
+            label:item.assessmentTitle,
+            fullScore:item.fullScore,  //问卷满分
+            questionCount:item.questionCount,  // 题目数量
+            value:item.id,
+        }
+    })
+   }
+}
 
-])
 
-// 同步统一问卷模板
-const SyncQuestionnaireTemplate = (val)=>{
-    tableData.value = tableData.value.map((item,index)=>{
-        if(index !== 0){
-            item.questionnaireName = val
+// 2. 问卷模板列表 获取 及 相关操作
+const tableData = ref([]);
+// 获取问卷模板列表
+const GetQuestionnaireTemplateList = async ()=>{
+    let res =  await getQuestionnaireTemplateListApi(route.query.id)
+    if(res?.code == 200){
+        tableData.value = res.data || []
+    }
+}
+
+// 变更  选中的问卷
+const HandleQuestionnaireTemplateChange = (row,val)=>{
+    let aimQuesitonnaire = quesitonnaireOptionList.value.find(item=>{
+        return item.value == val
+    })
+    if(isUnifiedTemplate.value){
+        // 同步统一问卷模板
+        tableData.value = tableData.value.map((item,index)=>{
+            if(index !== 0){
+                item.assessmentId = val
+
+                item.fullScore = aimQuesitonnaire.fullScore,
+                item.questionCount = aimQuesitonnaire.questionCount
+            }
+            return item
+        })
+    }else{
+        tableData.value = tableData.value.map(item=>{
+        if(item.name === row.name){
+            return {
+                    ...item,
+                    fullScore:aimQuesitonnaire.fullScore,
+                    questionCount:aimQuesitonnaire.questionCount
+                }
+            }else{
+                return item
+            }
+        })
+    }
+}
+
+// 预览问卷
+const GoToPreviewQuestionnaire = (id)=>{
+    sessionStorage.setItem('questionnaireAndTemplateList',JSON.stringify({
+        tableData:tableData.value,
+        quesitonnaireOptionList:quesitonnaireOptionList.value
+    }))
+    router.push(`/main/previewQuestionnaire?id=${id}`)
+}
+
+
+// 完成问卷模板配置
+const FinishQuestionnaireTemplateConfig = async ()=>{
+    let params = tableData.value.map(item=>{
+        return {
+            "ids": [],  //
+            evaluationId:route.query.id,  // 评价任务id
+            assessmentId: item?.assessmentId,  //问卷名称
+            gender: item.gender,   //性别
         }
-        return item
     })
+    let res =  await saveQuestionnaireTemplateListApi(params)
+    if(res?.code == 200){
+        ElMessage.success(res?.msg)
+        // 重查列表
+        await GetQuestionnaireTemplateList()
+    }
 }
 
-// 生成模拟数据
-const tableData = ref([
-    {
-        subject: '班主任',
-        matchGender: '全部',
-        questionnaireName: '1', // 已选状态
-        questionCount: '10',
-        fullScore: '10',
-    },
-    {
-        subject: '语文',
-        matchGender: '全部',
-        questionnaireName: '', // 对应图中“请选择问卷模版”
-        questionCount: '',     // 对应图中“-”
-        fullScore: '',         // 对应图中“-”
-    },
-    {
-        subject: '数学',
-        matchGender: '全部',
-        questionnaireName: '',
-        questionCount: '',
-        fullScore: '',
-    },
-    {
-        subject: '英语',
-        matchGender: '全部',
-        questionnaireName: '',
-        questionCount: '',
-        fullScore: '',
-    },
-    {
-        subject: '物理',
-        matchGender: '全部',
-        questionnaireName: '',
-        questionCount: '',
-        fullScore: '',
-    },
-    {
-        subject: '化学',
-        matchGender: '全部',
-        questionnaireName: '',
-        questionCount: '',
-        fullScore: '',
-    },
-    {
-        subject: '生物',
-        matchGender: '全部',
-        questionnaireName: '',
-        questionCount: '',
-        fullScore: '',
-    },
-    {
-        subject: '政治',
-        matchGender: '女', // 注意:此处图片显示为“女”
-        questionnaireName: '',
-        questionCount: '',
-        fullScore: '',
-    },
-    {
-        subject: '历史',
-        matchGender: '全部',
-        questionnaireName: '',
-        questionCount: '',
-        fullScore: '',
-    },
-    {
-        subject: '地理',
-        matchGender: '男', // 注意:此处图片显示为“男”
-        questionnaireName: '',
-        questionCount: '',
-        fullScore: '',
+
+onMounted(async ()=>{
+    let sessionQuestionnaireTemplateList = sessionStorage.getItem('questionnaireAndTemplateList')
+    // 先判断是否有缓存 —— 从预览页跳转过来
+    if(sessionQuestionnaireTemplateList){
+        tableData.value = JSON.parse(sessionQuestionnaireTemplateList).tableData
+        quesitonnaireOptionList.value = JSON.parse(sessionQuestionnaireTemplateList).quesitonnaireOptionList
+        sessionStorage.removeItem('questionnaireAndTemplateList')  //获取完后清空
+    }else{
+        await GetQuestionnaireList()
+        await GetQuestionnaireTemplateList()
     }
-]);
+})
 </script>
 
 

+ 3 - 3
src/views/reviewManagement/stepComponent/step3Component/table.ts

@@ -2,7 +2,7 @@ import {ref} from 'vue'
 
 export const tableColumns = ref([
     {
-        name: 'subject',
+        name: 'name',
         label: '科目',
         width: '120',
         align: 'center',
@@ -10,7 +10,7 @@ export const tableColumns = ref([
         hidden: false,
     },
     {
-        name: 'matchGender',
+        name: 'gender',
         label: '匹配性别',
         width: '140',
         align: 'center',
@@ -18,7 +18,7 @@ export const tableColumns = ref([
         hidden: false,
     },
     {
-        name: 'questionnaireName',
+        name: 'assessmentId',
         label: '问卷名称',
         width: '250', // 名称通常较长,使用最小宽度
         align: 'left',