Przeglądaj źródła

添加创建评价接口调用 和 学年接口调用

lm 1 miesiąc temu
rodzic
commit
4056779008

+ 37 - 0
src/api/reviewManagement.ts

@@ -0,0 +1,37 @@
+import request from '../utils/request.js'
+let teacherPrefix = import.meta.env.VITE_API_TEACHER_PRE 
+
+// 查询学年列表
+export const getSchoolYearListApi = () => {
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluation/querySchoolYearData`,
+        method: 'get',
+    })
+}
+
+// 查询年级列表
+export const getGradeListApi = () => {
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluation/querySchoolGrade?schoolYearId=`,
+        method: 'get',
+    })
+}
+
+
+// 查询 问卷评价任务列表
+export const getQuestionnaireTaskListApi = (data:any) => {
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluation/queryEvaluationList`,
+        method: 'post',
+        data
+    })
+}
+
+// 新增问卷评价任务
+export const addQuestionnaireTaskListApi = (data:any) => {
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluation/addEvaluation`,
+        method: 'post',
+        data
+    })
+}

+ 1 - 0
src/components/questionnaireCard/QuestionnaireCard.vue

@@ -59,6 +59,7 @@ interface QuestionnaireItm {
     cardStatus:Number,   //1 已使用   0 未使用
     cardOnOff?:Boolean,
     reviewType?:Number|String,  //卡片类型
+    isDelete?:Boolean,
 
 }
 

+ 12 - 3
src/components/statusDict.ts

@@ -16,15 +16,24 @@ export const useStatusConvert = [
 export const cardTypeMsg = [
     {
         type:0,
-        title:'线上匿名'
+        title:'线上匿名',
+
+        label:'线上匿名',
+        value:0,
     },
     {
         type:1,
-        title:'线下答卷'
+        title:'线下答卷',
+
+        label:'线下答卷',
+        value:1,
     },
     {
         type:2,
-        title:'线上导入'
+        title:'线上导入',
+
+        label:'线上导入',
+        value:2,
     },
 ]
 

+ 178 - 106
src/views/reviewManagement/ReviewManagement.vue

@@ -42,13 +42,12 @@
 
                     <el-button class="button_background">查看详情</el-button>
                     <el-button 
-                        :class="[Number(row.useStatus) === 1 ? 'is-disabled' : 'button_border']"
-                        @click="Number(row.useStatus) === 1 ?  '' : OpenQuestionnaireDialog(row)"    
+                        :class="['button_border']"
+                        @click="OpenQuestionnaireDialog(row)"    
                     >编辑</el-button>
-
                     <el-button 
-                        :class="[Number(row.useStatus) === 1 ? 'is-disabled' : 'delete_button_border']"
-                        @click="Number(row.useStatus) === 1 ?  '' : OpenDeleteDialog(row)"
+                        :class="[row.isDelete  ? 'delete_button_border' : 'is-disabled' ]"
+                        @click="row.isDelete  ? OpenDeleteDialog(row)  : '' "
                     >删除</el-button>
                 </template>
             </QuestionnaireCard>
@@ -64,8 +63,8 @@
                 <template #num="{currentIndex}">
                     {{ currentIndex + pageSize * (currentPage - 1)}}
                 </template>
-                <template #reviewType="{row}">
-                    {{ cardTypeMsg.find(item=>{return item.type === row.reviewType})?.title }}
+                <template #evaluationType="{row}">
+                    {{ cardTypeMsg.find(item=>{return item.type === row.evaluationType})?.title }}
                 </template>
 
                 <template #useStatus="{row}">
@@ -86,12 +85,12 @@
                 <template #operation="{row}">
                     <div class="table_row_option">
                         <span  
-                            :class="[Number(row.useStatus) === 1 ? 'editor_disable' : 'el_button_editor']"
-                            @click="Number(row.useStatus) === 1 ?  '' : OpenQuestionnaireDialog(row)"    
+                            :class="['el_button_editor']"
+                            @click="OpenQuestionnaireDialog(row)"    
                         >编辑</span>
                         <span 
-                            :class="[Number(row.useStatus) === 1 ? 'editor_disable' : 'el_button_delete']"
-                            @click="Number(row.useStatus) === 1 ?  '' : OpenDeleteDialog(row)"
+                            :class="[row.isDelete ?  'el_button_delete' : 'editor_disable' ]"
+                            @click="row.isDelete ?  OpenDeleteDialog(row) :  '' "
                         >删除</span>
                     </div>
                 </template>
@@ -120,7 +119,7 @@
             @close="HandleDialogClose"
             @confirm="HandleDialogConfirm"
         >
-            <span class="dialog_alert">确定删除 [ <span class="title">{{  currentOperationRow?.assessmentTitle}}</span> ] 吗</span>
+            <span class="dialog_alert">确定删除 [ <span class="title">{{  currentOperationRow?.evaluationName}}</span> ] 吗</span>
         </Dialog>
 
 
@@ -145,6 +144,13 @@ import QuestionnaireCard from '@/components/questionnaireCard/QuestionnaireCard.
 
 import {useStatusConvert, cardTypeMsg, questionnaireTaskStatusMsg} from '@/components/statusDict'
 
+import {
+    getGradeListApi,getQuestionnaireTaskListApi,addQuestionnaireTaskListApi,
+    getSchoolYearListApi,
+
+} from '@/api/reviewManagement'
+
+import { unioformDateTransform } from '@/utils/dateTransform';
 
 import {searchList, viewModeTabList, statusSearchList} from './searchListConfig'
 import { questionnaireTableColumns } from './table';
@@ -153,19 +159,22 @@ import { formDialogItmList } from './formDialog'
 
 interface QuestionnaireItm {
     id:Number | String,
-    assessmentTitle:String,  //标题
+    evaluationName:String,  //标题
 
     teacherName:String,  //创建人
     // createdAt:String,   //创建时间
-    startTime:String,   //创建时间
-    endTime:String,   //创建时间
+    evaluationStartDatetime:String,   //创建时间
+    evaluationEndDatetime:String,   //创建时间
     useStatus:Number,   //1 已使用   0 未使用
     cardStatus:Number,
     cardOnOff:Boolean,
-    reviewType:Number|String,
+    evaluationType:Number|String,
     
     time:String,
     isOpen:Boolean,
+    evaluationGrade:Array<String>,
+    isDelete:Boolean,
+
 
 }
 const router = useRouter()
@@ -195,30 +204,35 @@ const pageSize = ref(20)
 const questionnaireList = ref<QuestionnaireItm[]>([
     {
         "id": '655355453521268736',
-        startTime:'2026-06-29 16:00',
-        endTime:'2026-06-29 16:00',
+        evaluationStartDatetime:'2026-06-29 16:00',
+        evaluationEndDatetime:'2026-06-29 16:00',
          time:'2026-06-29 16:00 至 2026-06-29 16:00',
         "teacherName": "李敏",
-        "assessmentTitle": "f制",
+        "evaluationName": "f制",
      
         "useStatus": 0,
         isOpen:true,
         'cardOnOff':true,
         cardStatus:0,
-        reviewType:0
+        evaluationType:0,
+        evaluationGrade:['grade_7','grade_8','grade_12'],
+        isDelete:true,
     },
     {
         "id": '6553554535212687236',
-        startTime:'2026-06-29 16:00',
-        endTime:'2026-06-29 16:00',
+        evaluationStartDatetime:'2026-06-29 16:00',
+        evaluationEndDatetime:'2026-06-29 16:00',
         time:'2026-06-29 16:00 至 2026-06-29 16:00',
         "teacherName": "李敏",
-        "assessmentTitle": "fd-复制",
+        "evaluationName": "fd-复制",
         "useStatus": 1,
         isOpen:true,
         'cardOnOff':false,
         cardStatus:0,
-        reviewType:1
+        evaluationType:1,
+        evaluationGrade:['grade_7','grade_8','grade_12'],
+        isDelete:false,
+
     },
 ]);
 
@@ -244,20 +258,24 @@ const HandleCardSwitchOnOff = (params)=>{
     })
 }
 
-const GetQuestionnaireList = async ()=>{
+// 、获取问卷任务列表
+const GetQuestionnaireTaskList = async ()=>{
     let params = {
         pageNum:currentPage.value,
-        pageSize: pageSize.value
+        pageSize: pageSize.value,
+        "evaluationStatus": '',
+        "evaluationName": "",
+        "schoolYearCode": "",
     }
-    let res = await getQuestionnaireListApi(params)
+    let res = await getQuestionnaireTaskListApi(params)
 
     if(res.code == 200){
-        questionnaireList.value = res.data.records.map(item=>{
-            return {
-                ...item,
-                cardStatus:item.useStatus
-            }
-        })
+        // questionnaireList.value = res.data.records.map(item=>{
+        //     return {
+        //         ...item,
+        //         cardStatus:item.useStatus
+        //     }
+        // })
     }
 }
 
@@ -266,93 +284,144 @@ const GetQuestionnaireList = async ()=>{
 const formDialogTitle = ref('创建评价')
 const formSubmitLoading = ref(false)
 const formDialogVisible = ref(false)
-const defaultFormData = ref({})
+const defaultFormData = ref({  //表单默认值
+    evaluationType:0
+})
+const currentEditRow = ref({})  //当前编辑的行
 
 
-// 切换问卷评价表单内容 _需要根据条件清空开始时间和结束时间
-const HandleFormItmChange = (params)=>{
-    const {key,val,formData} = params
-    if(key == 'evaluationMethod'){
-        console.log('当前参数内容',val)
-        switch(val){
-            case 'online_anonymous':
-            case 'online_import':{
-                formDialogItmList.value = formDialogItmList.value.map(item=>{
-                    if(item.key == 'startTime' ||  item.key == 'endTime' ){
-                        return {
-                            ...item,
-                            hidden:false
-                        }
-                    }else{
-                        return item
-                    }
-                })
+// 更新form表单的隐藏和展示项
+const UpdataFormDialogItmHideList = (hideKeys:string[])=>{
+    formDialogItmList.value = formDialogItmList.value.map(item=>{
+        if(hideKeys.includes(item.key)){
+            return {
+                ...item,
+                hidden:true
+            }
+        }else{
+            return {
+                ...item,
+                hidden:false
+            }
+        }
+    })
+}
+// 更新 新增/修改 状态下,评价方式切换 所展示的 不同表单信息
+const UpdataEditOrAddFormHideOfDifferReviewType = (id,type)=>{
+    switch(Number(type)){
+            case 0:
+            case 2:{
+                if(id){
+                    UpdataFormDialogItmHideList(['evaluationGrade'])
+                }else{
+                    UpdataFormDialogItmHideList([])
+                }
                 break
             }
-            case 'offline_paper':{
-                defaultFormData.value.startTime = ''
-                defaultFormData.value.endTime = ''
-                formDialogItmList.value = formDialogItmList.value.map(item=>{
-                    if(item.key == 'startTime' ||  item.key == 'endTime' ){
-                        return {
-                            ...item,
-                            hidden:true
-                        }
-                    }else{
-                        return item
-                    }
-                })
+            case 1:{
+                defaultFormData.value.evaluationStartDatetime = ''
+                defaultFormData.value.evaluationEndDatetime = ''
+                if(id){
+                    UpdataFormDialogItmHideList(['evaluationStartDatetime','evaluationEndDatetime','evaluationGrade'])
+                }else{
+                    UpdataFormDialogItmHideList(['evaluationStartDatetime','evaluationEndDatetime'])
+                }
                 break
             }
         }
+}
+// 切换问卷评价表单内容 _需要根据条件清空开始时间和结束时间
+// 同时要判断 当前是 新增 还是 修改
+const HandleFormItmChange = (params)=>{
+    const {key,val,formData} = params
+    if(key == 'evaluationType'){
+        console.log('当前参数内容',val)
+        UpdataEditOrAddFormHideOfDifferReviewType(defaultFormData.value?.id, val);
     }
 }
 // 打开创建问卷弹窗
-const OpenQuestionnaireDialog = (row?:any)=>{
+const OpenQuestionnaireDialog = async (row?:any)=>{
     formDialogVisible.value = true
-
-    // 获取评价年级列表
-    const gradeListOption = [
-        { label: '七年级', value: 'grade_7' },
-        { label: '八年级', value: 'grade_8' },
-        { label: '九年级', value: 'grade_9' },
-        { label: '高一', value: 'grade_10' },
-        { label: '高二', value: 'grade_11' },
-        { label: '高三', value: 'grade_12' }
-    ]
-
-    formDialogItmList.value = formDialogItmList.value.map(item=>{
-        if(item.key == 'evaluationGrade'){
+    let gradeListOption = []
+    let res = await getGradeListApi()
+    // 赋值年级下拉
+    if(res?.code == 200){
+        gradeListOption = res.data.map(item=>{
             return {
-                ...item,
-                selectList:gradeListOption
+                label:item.gradeName,
+                value:JSON.stringify({
+                    gradeCode:item.gradeCode,
+                    gradeName:item.gradeName,
+                    gradeId:item.gradeId,
+                })
             }
-        }else {
-            return item
-        }
-    })
-
+        })
+        formDialogItmList.value = formDialogItmList.value.map(item=>{
+            if(item.key == 'evaluationGrade'){
+                return {
+                    ...item,
+                    selectList:gradeListOption
+                }
+            }else {
+                return item
+            }
+        })
+    }
+    if(row.id){
+        // 修改弹窗
+        defaultFormData.value = row
+        // 要判断表单的显隐藏
+        UpdataEditOrAddFormHideOfDifferReviewType(row.id, row.evaluationType);
+    }else{
+        // 新增弹窗
+        UpdataFormDialogItmHideList([''])
+    }
 }
 
-// 创建问卷
-const AddQuestionnaireTask = (params?:any)=>{
+// 创建问卷 _保存
+const AddQuestionnaireTask = async (params?:any)=>{
     const {formData,formRef} = params
-
     console.log('表单信息',formData)
-    // formDialogVisible.value = false
+    formSubmitLoading.value = true
+    let gradeData = formData.evaluationGrade.map(item=>{
+        return JSON.parse(item)
+    })
+    let finalPrams = {
+        evaluationName: formData.evaluationName,
+        evaluationType: formData.evaluationType,
+        evaluationStartDatetime: unioformDateTransform(formData.evaluationStartDatetime),
+        evaluationEndDatetime: unioformDateTransform(formData.evaluationEndDatetime),
+        gradeData:gradeData
+    }
 
+    let res = undefined
+    try{
+        res = await addQuestionnaireTaskListApi(finalPrams)
+    }catch{}
+
+    if(res?.code == 200){
+        ElMessage.success(res.msg)
+        formRef.resetFields()
+        CloseFormDialog()
+        await GetQuestionnaireTaskList()   // 重查信息
+    }else{
+        formSubmitLoading.value = false
+    }
 }
 
 // 关闭问卷弹窗
 const CloseFormDialog = ()=>{
+    defaultFormData.value = {
+        evaluationType:0
+    }
+    currentEditRow.value = {}
     formDialogVisible.value = false
-
+    formSubmitLoading.value = false
 }
 
 
 
 
-
 // 删除问卷
 const dialogVisible= ref(false)
 const dialogSubmitLoading = ref(false)
@@ -386,35 +455,38 @@ const HandleDialogConfirm = async ()=>{
 }
 
 
-const GetSchoolYearList = ()=>{
-    let schoolYearOpt = [
-        {
-            label:'全部',
-            value:'all'
-        },
-        {
-            label:'2024-2025学年',
-            value:'2024-2025'
-        }
-    ]
+// 获取学年列表信息 
+const GetSchoolYearList =  async()=>{
+    let res = await getSchoolYearListApi()
+    let schoolYearOpt = []
+    if(res.code == 200){
+        schoolYearOpt = res?.data?.map(item=>{
+            return {
+                label:item.schoolYearName,
+                value:item.schoolYearId
+            }
+        }) || []
+    }
     searchList.value = searchList.value.map(item=>{
         if(item.key == 'schoolYear'){
             return {
                 ...item,
-                options:schoolYearOpt,
+                options:[{
+                            label:'全部',
+                            value:'all'
+                        },...schoolYearOpt],
                 defaultValue:'all'
             }
         }else{
             return item  
         }
     })
-
 }
 
 
 onMounted(async()=>{
     GetSchoolYearList()
-    // await GetQuestionnaireList()
+    await GetQuestionnaireTaskList()
 })
 
 

+ 5 - 9
src/views/reviewManagement/formDialog.ts

@@ -1,5 +1,5 @@
 import { ref } from "vue"
-
+import { cardTypeMsg } from "@/components/statusDict"
 export const formDialogItmList = ref([
     {
         key: 'evaluationName',
@@ -12,20 +12,16 @@ export const formDialogItmList = ref([
         style: { }
     },
     {
-        key: 'evaluationMethod',
+        key: 'evaluationType',
         label: '评价方式',
         type: 'radio',
-        selectList: [
-            { label: '线上匿名', value: 'online_anonymous' },
-            { label: '线下答卷', value: 'offline_paper' },
-            { label: '线上导入', value: 'online_import' }
-        ],
+        selectList:cardTypeMsg,
         rules: [
             { required: true, message: '请选择评价方式', trigger: 'change' }
         ]
     },
     {
-        key: 'startTime',
+        key: 'evaluationStartDatetime',
         label: '开始时间',
         type: 'dateTimePickerNoRange',
         placeholder: '请选择日期',
@@ -34,7 +30,7 @@ export const formDialogItmList = ref([
         ]
     },
     {
-        key: 'endTime',
+        key: 'evaluationEndDatetime',
         label: '结束时间',
         type: 'dateTimePickerNoRange',
         placeholder: '请选择日期',

+ 4 - 4
src/views/reviewManagement/table.ts

@@ -20,7 +20,7 @@ export const questionnaireTableColumns = ref([
         hidden: false,
     },
     {
-        name: 'assessmentTitle',
+        name: 'evaluationName',
         label: '问卷名称',
         width: '250',
         fixed: '',
@@ -29,7 +29,7 @@ export const questionnaireTableColumns = ref([
         hidden: false,
     },
     {
-        name: 'reviewType',
+        name: 'evaluationType',
         label: '评价方式',
         width: '100',
         fixed: '',
@@ -67,7 +67,7 @@ export const questionnaireTableColumns = ref([
     },
 
     {
-        name: 'startTime',
+        name: 'evaluationStartDatetime',
         label: '开始时间',
         width: '180',
         fixed: '',
@@ -76,7 +76,7 @@ export const questionnaireTableColumns = ref([
         hidden: false,
     },
     {
-        name: 'endTime',
+        name: 'evaluationEndDatetime',
         label: '结束时间',
         width: '180',
         fixed: '',