ソースを参照

添加问卷模板页面

lm 1 ヶ月 前
コミット
5590e5ed17

+ 2 - 2
src/views/reviewManagement/ReviewManagementDetail.vue

@@ -9,8 +9,8 @@
 import { useRoute,useRouter } from 'vue-router';
 import { computed, onBeforeUnmount, onMounted, ref } from 'vue';
 import Step1Component from './stepComponent/step1Component/Step1Component.vue';
-
 import Step2Component from './stepComponent/step2Component/Step2Component.vue';
+import Step3Component from './stepComponent/step3Component/Step3Component.vue';
 
 
 const route = useRoute()
@@ -23,7 +23,7 @@ const curentComponent = computed(()=>{
     case 'teachingRelationship':
       return Step2Component
     case 'questionnaireTemplate':
-      break
+      return Step3Component
     case 'reviewAccount':
       break
     case 'parameterSetting':

+ 43 - 21
src/views/reviewManagement/stepComponent/step2Component/Step2Component.vue

@@ -1,14 +1,15 @@
 <template>
 
-    <div class="page_item content_container page_search">
+    <div class="page_item step_2_content page_search">
 
         <div class="container_left">
           <FormSearchGroup :searchList="searchList" @searchChange="HandleSearchChange"></FormSearchGroup>
           
           <Table 
+            :hidePagination="true"
             class="teacher_table"
             :currentPage="1" :totalNum="0" 
-            :pageSize="20" :tableColumns="teacherTableColumns" 
+            :pageSize="200" :tableColumns="teacherTableColumns" 
             :tableData="teacherList"
             :tableRowClassName="tableRowClassName"
             @rowClick="HandleSelectTeacher"
@@ -16,14 +17,15 @@
         </div>
         <div class="container_right">
           <div class="search_content">
+            <!-- 年级切换 -->
             <div class="content_left">
-              <el-radio-group 
-                @change="reloadData"
-                v-model="searchParmams.gradeId" size="default">
-                <el-radio-button 
-                  v-for="grade in gradeList" :key="grade.value" 
-                  :label="grade.label" :value="grade.value" >{{grade.label}}</el-radio-button>
-              </el-radio-group>
+              <TabSearch 
+                class="grade_tab"
+                tabType="box" 
+                :tabList="gradeList" 
+                :defaultTabKey="searchParmams.gradeId"
+                @tabChange="(val)=>HandleTabChange(val,'grade')">
+              </TabSearch>
             </div>
             <div class="content_right">
               <el-button class="delete_button_border">清空授课</el-button>
@@ -41,7 +43,7 @@
                 tabType="line" 
                 :tabList="tabList" 
                 :defaultTabKey="searchParmams.classType"
-                @tabChange="HandleTabChange"> </TabSearch>
+                @tabChange="(val)=>HandleTabChange(val,'classType')"> </TabSearch>
             </div>
              <div class="content_right">
                 <span v-if="isConfigMode" class="config_switch_desc">
@@ -59,9 +61,10 @@
           <div class="end_item">
 
             <!-- 行政班渲染表数据 -->
-            <Table v-if="searchParmams.classType === 'xingzeng'"  :currentPage="1" :pageSize="20"
+            <Table v-if="searchParmams.classType === 'xingzeng'"  :currentPage="1" :pageSize="200"
                 :tableColumns="administrativeClassTableColumns" 
                 :tableData="administrativeClassData" 
+                :hidePagination="true"
                 :totalNum="0">
                 <template v-for="column in administrativeClassTableColumns" :key="column.name"   v-slot:[column.name]="{row}"> 
                   
@@ -94,9 +97,10 @@
 
             <!-- 教学班渲染表数据 -->
             <Table v-else-if="searchParmams.classType === 'teach'"  
-                  :currentPage="1" :pageSize="20"
+                  :currentPage="1" :pageSize="200"
                 :tableColumns="teachingClassTableColumns" 
                 :tableData="teachingClassData" 
+                :hidePagination="true"
                 :totalNum="0">
 
                 <template v-for="column in teachingClassTableColumns" :key="column.name"   v-slot:[column.name]="{row}"> 
@@ -336,13 +340,20 @@ const HandleSearchChange = (params) => {
 };
 
 // 标签切换处理
-const HandleTabChange = (key) => {
-  searchParmams.value.classType = key
-
-  console.log('当前选中的tab',key)
-
-
+const HandleTabChange = async (key,type) => {
+  console.log('当前选中的tab',key,type)
 
+  switch(type){
+    case 'grade':{
+      searchParmams.value.gradeId = key
+      await reloadData()
+      break
+    }
+    case 'classType':{
+      searchParmams.value.classType = key
+        break
+    }
+  }
 };
 
 // 选择教师
@@ -407,10 +418,10 @@ const GetGradeList = async()=>{
     gradeList.value = res?.data.map(item=>{
       return {
         label:item.gradeName,
-        value:item.id
+        key:item.id
       }
     }) || []
-    searchParmams.value.gradeId = gradeList.value[0].value
+    searchParmams.value.gradeId = gradeList.value[0].key
   }
 }
 // 获取教师列表数据
@@ -457,7 +468,7 @@ onMounted( async ()=>{
 
 <style lang="scss" scoped>
 
-.content_container {
+.step_2_content {
   width: calc(100vw - 200px);
   height: calc(100%);
   display: flex;
@@ -494,6 +505,17 @@ onMounted( async ()=>{
       font-size: 14px;
 
     }
+    .end_item{
+      overflow-y: auto;
+    }
+
+    .grade_tab{
+      gap:10px;
+      :deep(> span){
+        border: 1px solid  #dcdfe6 !important; 
+        border-radius: 6px;
+      }
+    }
   }
 }
 

+ 191 - 0
src/views/reviewManagement/stepComponent/step3Component/Step3Component.vue

@@ -0,0 +1,191 @@
+<template>
+    <div class="page_item step_3_content page_search end_item">
+        <div class="page_search">
+            <div class="search_content">
+            <div class="content_left">
+                <el-checkbox v-model="isUnifiedTemplate" >所有单科统一模版</el-checkbox>
+            </div>
+            <div class="content_right">
+                <el-button  class="button_background" @click="SaveEvaluationData">完成</el-button>
+            </div>
+            </div>
+        </div>
+        <div class="page_jg_20"></div>
+        <Table 
+            :currentPage="1" :pageSize="200"
+            :tableColumns="tableColumns" 
+            :tableData="tableData"
+            :totalNum="0"
+            :hidePagination="true"
+        >
+            <template #matchGender="{row}">
+                <el-select v-model="row.matchGender">
+                    <el-option
+                        v-for="opt in gradeOptionList"
+                        :key="opt.value"
+                        :label="opt.label"
+                        :value="opt.value"
+                    />
+                </el-select>
+            </template>
+            <template #questionnaireName="{row}">
+                <div class="questionnaire_cell table_row_option">
+                    <el-select 
+                        v-model="row.questionnaireName"
+                        @change="(val)=>isUnifiedTemplate ? SyncQuestionnaireTemplate(val) : ''">
+                        <el-option
+                            v-for="opt in quesitonnaireOptionList"
+                            :key="opt.value"
+                            :label="opt.label"
+                            :value="opt.value"
+                        />
+                    </el-select>
+                    <span v-if="row.questionnaireName" class="el_button_editor">预览</span>
+                    <span v-else class="el_button_editor"></span>
+                </div>
+            </template>
+        </Table>
+    
+    </div>
+</template>
+
+
+
+<script setup lang="ts">
+import { ref } from 'vue';
+import Table from '@/baseComponents/Table.vue';
+import {tableColumns} from './table'
+
+const isUnifiedTemplate = ref(false)  //所有单科统一模版
+
+// const 
+
+// 年级下拉
+const gradeOptionList = ref([
+    {
+        label:'全部',
+        value:'all'
+    },
+    {
+        label:'男',
+        value:'0'
+    },
+    {
+        label:'女',
+        value:'1'
+    },
+])
+
+// 问卷下拉
+const quesitonnaireOptionList = ref([
+    {
+        label:'满意度问卷1',
+        value:'1'
+    },
+    {
+        label:'满意度问卷2',
+        value:'2'
+    },
+    {
+        label:'满意度问卷3',
+        value:'3'
+    },
+
+])
+
+// 同步统一问卷模板
+const SyncQuestionnaireTemplate = (val)=>{
+    tableData.value = tableData.value.map((item,index)=>{
+        if(index !== 0){
+            item.questionnaireName = val
+        }
+        return item
+    })
+}
+
+// 生成模拟数据
+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: '',
+    }
+]);
+</script>
+
+
+
+<style lang="scss" scoped>
+
+.questionnaire_cell{
+    gap:16px;
+    word-break: keep-all;
+
+}
+
+</style>

+ 44 - 0
src/views/reviewManagement/stepComponent/step3Component/table.ts

@@ -0,0 +1,44 @@
+import {ref} from 'vue'
+
+export const tableColumns = ref([
+    {
+        name: 'subject',
+        label: '科目',
+        width: '120',
+        align: 'center',
+        custom: false, // 纯文本显示
+        hidden: false,
+    },
+    {
+        name: 'matchGender',
+        label: '匹配性别',
+        width: '140',
+        align: 'center',
+        custom: true, // 需要渲染下拉选择框 (Select)
+        hidden: false,
+    },
+    {
+        name: 'questionnaireName',
+        label: '问卷名称',
+        width: '250', // 名称通常较长,使用最小宽度
+        align: 'left',
+        custom: true, // 需要渲染输入框/选择器 + 预览按钮
+        hidden: false,
+    },
+    {
+        name: 'questionCount',
+        label: '题目数量',
+        width: '120',
+        align: 'center',
+        custom: false, // 纯数字显示
+        hidden: false,
+    },
+    {
+        name: 'fullScore',
+        label: '问卷满分',
+        width: '120',
+        align: 'center',
+        custom: false, // 纯数字显示
+        hidden: false,
+    },
+])