Quellcode durchsuchen

评价数据 的 详情信息|新增/查询年级|新增/查询/删除科目|查询选科接口调用

lm vor 1 Monat
Ursprung
Commit
c94a910423

+ 0 - 8
src/api/reviewManagement.ts

@@ -36,14 +36,6 @@ export const addQuestionnaireTaskListApi = (data:any) => {
     })
 }
 
-// 获取评价任务详情 _暂时没用
-export const getQuestionnaireTaskDetailApi = (id:any) => {
-    return request({
-        url: `${teacherPrefix}/api/v1/evaluation/queryEvaluationInfo/${id}`,
-        method: 'get',
-    })
-}
-
 // 修改评价任务
 export const editQuestionnaireTaskListApi = (data:any) => {
     return request({

+ 130 - 0
src/api/step1Component.ts

@@ -0,0 +1,130 @@
+import request from '../utils/request.js'
+let teacherPrefix = import.meta.env.VITE_API_TEACHER_PRE 
+
+// 获取评价数据详情
+export const getEvaluationDataDetailApi = (evaluationId:any) => {
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluationData/queryEvaluationData/${evaluationId}`,
+        method: 'get',
+    })
+}
+
+// 查询评价管理 任务详情
+export const getEvaluationTaskDetailApi = (id:any) => {
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluation/queryEvaluationInfo/${id}`,
+        method: 'get',
+    })
+}
+
+
+// 查询年级科目数据
+export const getSubjectDataApi = (evaluationGradeId:any)=>{
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluationData/querySubjectData/${evaluationGradeId}`,
+        method: 'get',
+    })
+}
+// 新增年级科目
+export const addGradeSubjectApi = (data:any)=>{
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluationData/checkEvaluationSubject`,
+        method: 'post',
+        data
+    })
+}
+// 修改年级科目  ??
+
+
+// 删除年级科目
+export const deleteGradeSubjectApi = (id:any)=>{
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluationData/deleteSelectSubject/${id}`,
+        method: 'post',
+    })
+}
+
+
+
+// 查询年级选科数据
+export const getSubjectSelectedDataApi = (evaluationGradeId:any)=>{
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluationData/querySelectSubjectData/${evaluationGradeId}`,
+        method: 'get',
+    })
+}
+// 新增年级选科
+export const addGradeSelectedSubjectApi = (data:any)=>{
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluationData/checkEvaluationSelectSubject`,
+        method: 'post',
+        data
+    })
+}
+// 修改 年级选科 ???
+
+
+// 删除年级选科
+export const deleteGradeSelectedSubjectApi = (id:any)=>{
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluationData/deleteChoiceSubject/${id}`,
+        method: 'post',
+    })
+}
+
+
+
+
+// 添加自定义科目数据
+export const addCustomSubjectApi = (data:any)=>{
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluationData/addCustomSubjectData`,
+        method: 'post',
+        data
+    })
+}
+
+// 修改自定义科目
+export const editCustomSubjectApi = (data:any)=>{
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluationData/modifyCustomSubjectData`,
+        method: 'post',
+        data
+    })
+}
+
+// 删除自定义科目数据   ???
+
+
+// 查询年级数据
+export const getGradeListApi = (evaluationId:any)=>{
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluationData/queryGradeData/${evaluationId}`,
+        method: 'get',
+    })
+}
+
+// 修改年级数据  // 新增
+export const editGradeApi = (data:any)=>{
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluationData/modifyGradeInfo`,
+        method: 'post',
+        data
+    })
+}
+
+
+// 删除年级  ??? 
+
+
+
+
+
+// 保存评价数据
+export const saveEvaluationDataDetailApi = (data:any)=>{
+    return request({
+        url: `${teacherPrefix}/api/v1/evaluationData/saveEvaluationData`,
+        method: 'post',
+        data
+    })
+}

+ 325 - 178
src/views/reviewManagement/stepComponent/Step1Component.vue → src/views/reviewManagement/stepComponent/step1Component/Step1Component.vue

@@ -4,7 +4,7 @@
       <div class="page_search">
         <div class="search_content">
           <div class="content_left">
-            <el-checkbox v-model="is_head_teacher_involved" >班主任参与评价</el-checkbox>
+            <el-checkbox v-model="isHeadTeacherInvolved" >班主任参与评价</el-checkbox>
           </div>
           <div class="content_right">
             <el-button  class="button_border"  @click="OpenAddGradeForm">新增年级</el-button>
@@ -27,11 +27,11 @@
                   <div class="grade_title">
                     {{ gradeOpt.gradeName }} (共{{ gradeOpt.subjectCount }}科)
                   </div>
-                  <el-checkbox v-model="gradeOpt.isSelectSubject" >选科</el-checkbox>
+                  <el-checkbox v-model="gradeOpt.selectionStatus" >选科</el-checkbox>
                 
-                  <div class="selection_params" v-if="gradeOpt.isSelectSubject">
+                  <div class="selection_params" v-if="gradeOpt.selectionStatus">
                     <span class="param_text">一共 </span>
-                    <el-input type="number"  v-model="gradeOpt.selectionCount"></el-input>
+                    <el-input type="number"  v-model="gradeOpt.selectionStatus"></el-input>
                     <span class="param_text"> 科,需要选择 </span>
                     <el-input type="number"  v-model="gradeOpt.needCount"></el-input>
                     <span class="param_text"> 科</span>
@@ -39,7 +39,7 @@
                   
                 </div>
                 <div class="content_right table_row_option">
-                  <span class="button_delete" @click="HandleDeleteOpen(gradeOpt)"> 删除</span>
+                  <span class="button_delete" @click="HandleDeleteOpen(gradeOpt,'grade')"> 删除</span>
                 </div>
               </div>
             </div>
@@ -64,13 +64,13 @@
                     :key="tag"
                     closable
                     :disable-transitions="false"
-                    @close="HandleDeleteOpen(tag)"
+                    @close="HandleDeleteOpen(tag,'subject')"
                   >
                     {{ tag.name }}
                   </el-tag>
 
                   <el-button class="button_border"
-                    @click="OpenAddSubjectForm">
+                    @click="OpenAddSubjectForm(gradeOpt,'subject')">
                     + 新增
                   </el-button>
                 </div>
@@ -88,13 +88,13 @@
                     :key="tag"
                     closable
                     :disable-transitions="false"
-                    @close="HandleDeleteOpen(tag)"
+                    @close="HandleDeleteOpen(tag,'selectedSubject')"
                   >
                     {{ tag.name   }}
                   </el-tag>
                   
                   <el-button class="button_border"
-                    @click="OpenAddSubjectForm">
+                    @click="OpenAddSubjectForm(gradeOpt,'selectedSubject')">
                     + 新增
                   </el-button>
                 </div>
@@ -137,11 +137,11 @@
       <FormDialog 
         :submitLoading="addGradeDialogLoading"
         title="选择年级"
-        :defaultFormData="{}" 
+        :defaultFormData="defaultGradeFormData" 
         :formItemList="addGradeFormItemList"
         :visible="addGradeDialogVisible"
         @close="CloseAddGradeForm"
-        @confirm="CloseAddGradeForm"
+        @confirm="EditSelectedGrade"
       >
       </FormDialog>
 
@@ -168,8 +168,12 @@
 
                 <div class="tree">
                   <TreeList 
-                    :defaultTreeData="[]" 
-                    :showCheckBox="true">
+                    v-model:treeRef="optionalSubjetTree"
+                    :defaultTreeData="allTreeData" 
+                    :showCheckBox="true"
+                    operation="none"
+                    @updateSelectedTreeNode="UpdataCheckedSubject"  
+                  >
                   </TreeList>
                 </div>
               </div>
@@ -180,8 +184,11 @@
                 </div>
                 <div class="tree">
                   <TreeList 
-                    :defaultTreeData="[]" 
-                    :showCheckBox="true">
+                    :defaultTreeData="selectedTreeData" 
+                    :showCheckBox="false"
+                    operation="close"
+                    @deleteTreeNode="DeleteCheckedSubject"
+                  >
                   </TreeList>
                 </div>
               </div>
@@ -203,231 +210,371 @@
 
 <script setup lang="ts">
 import { ref,onMounted } from 'vue';
-
+import { useRoute } from 'vue-router';
 import FormDialog from '@/baseComponents/FormDialog.vue';
 import TreeList from '@/baseComponents/TreeList.vue';
 import {addGradeFormItemList, addSubjectFormItemList} from './formDialog'
 import Dialog from '@/baseComponents/Dialog.vue';
 
-import {getEvaluationDataDetailApi} from '@/api/step1Component.ts'
+import {
+    getEvaluationDataDetailApi, getEvaluationTaskDetailApi,
+    addGradeSubjectApi,addGradeSelectedSubjectApi,
+    deleteGradeSubjectApi,deleteGradeSelectedSubjectApi,
+    addCustomSubjectApi,editCustomSubjectApi,editGradeApi,
+    getGradeListApi,getSubjectDataApi,getSubjectSelectedDataApi,
+    saveEvaluationDataDetailApi
+} from '@/api/step1Component.ts'
+import { ElMessage } from 'element-plus';
+
+interface subjectOrClassDataItm {
+   id:string, 
+   name:string
+}
+
+interface gradeOptItm {
+  id:string,
+  gradeId: string, 
+  gradeName:string,
+  subjectCount:string,
+  selectionStatus:number |string,    // 0——未勾选  1——已勾选
+  selectionCount:number,
+  needCount: number,  //
+  subjectData:subjectOrClassDataItm[],
+  selectSubjectData: subjectOrClassDataItm[],
+  classData:  subjectOrClassDataItm[],
+  selectedClassData:  subjectOrClassDataItm[],
+}
+
+
+const route = useRoute();
+
+
+//1.查询评价任务详情 信息
+// 班主任是否参与评价
+const isHeadTeacherInvolved = ref(false);
+// 查询评价管理 任务详情
+const GetEvaluationTaskDetail = async ()=>{
+  let res = await getEvaluationTaskDetailApi(route.query.id)
+    if(res?.code === 200){
+      isHeadTeacherInvolved.value = Boolean(res.data.classMasterStatus); // 0 否 不勾选 || 1 是 勾选
+    }
+}
+
+
+
+//2. 获取评价数据详情
+const gradeOptions = ref<gradeOptItm[]>([]);  // 年级配置列表数据 
+const GetEvaluationDataDetail = async () => {
+  let evaluationId = route.query.id; 
+  let res = await getEvaluationDataDetailApi(evaluationId);
+  if(res?.code === 200){
+    gradeOptions.value = res.data; 
+    defaultGradeFormData.value.grade = res?.data?.map(item=>{
+      return item.id
+    }) || []
+  }
+};
 
 
-// 新增年级弹窗操作
+
+//3. 新增年级弹窗操作
 const addGradeDialogVisible = ref(false);
 const addGradeDialogLoading = ref(false);
+const defaultGradeFormData = ref({ grade:[]})
+// 获取可选年级信息
+const GetGradeList = async ()=>{
+  let res = await getGradeListApi(route.query.id)
+  if(res?.code == 200){
+    let gradeOpt = res?.data?.map(itm=>{
+      return {
+        label:itm.gradeName,
+        value:itm.id
+      }
+    })
+    addGradeFormItemList.value = addGradeFormItemList.value.map(item=>{
+      if(item.key == 'grade'){
+        item.selectList = gradeOpt
+      }
+      return item
+    })
+  }
+}
 // 打开新增年级弹窗
-const OpenAddGradeForm = () => {
+const OpenAddGradeForm = async () => {
   console.log('点击了新增年级');
   addGradeDialogVisible.value = true
+  await GetGradeList()
 };
 // 关闭新增年级弹窗
 const CloseAddGradeForm = () => {
+  addGradeDialogLoading.value = false
   addGradeDialogVisible.value = false
 };
+// 保存修改后的年级
+const EditSelectedGrade =  async()=>{
+  addGradeDialogLoading.value = true
+  let params = {
+     evaluationId: route.query.id,
+      gradeData: defaultGradeFormData.value.grade?.map(item=>{
+        return {id:item}
+      }) || []
+  }
+  let res = undefined
+  try{
+    res =  await editGradeApi(params)
+  }catch{}
+
+  if(res?.code == 200){
+    ElMessage.success(res?.msg)
+    CloseAddGradeForm()
+    // 重新查询评价数据
+    await GetEvaluationDataDetail()
+  }else{
+    addGradeDialogLoading.value = false
+  }
+}
 
 
-// 配置科目/选科 弹窗操作
+// 4. 配置科目/选科 弹窗操作
+const optionalSubjetTree = ref()
 const addSubjectDialogVisible = ref(false);
 const addSubjectDialogLoading = ref(false);
 const subjectTitle = ref('配置科目/选科');
+const currentOpenType = ref('')  //当前打开的弹窗类型  subject 、selectedSubject ,grade ,
+const currentOperationRow = ref()
+// 已选的数据
+const selectedTreeData = ref([])
+// 所有可选的数据
+const allTreeData = ref([])
+
+// 可选科目列表赋值
+const RenderOptionalSubjectTree = async (type,row)=>{
+  let res = undefined
+  switch(type){
+    case 'subject':{
+      res = await getSubjectDataApi(row.id)
+      break
+    }
+    case 'selectedSubject':{
+      res = await getSubjectSelectedDataApi(row.id)
+      break
+    }
+  }
+  if(res?.code == 200){
+    allTreeData.value = res.data.map(item=>{
+      return {
+        label:item.name,
+        id:item.id
+      }
+    })
+  }
+}
+
+// 已选科目列表赋值 __查询来源有问题  待完善
+const RenderSelectedSubjectTree = async (type,row)=>{
+  let selectedRes = undefined
+  switch(type){
+    case 'subject':{
+      selectedRes = await getSubjectSelectedDataApi(row.id)
+      break
+    }
+    case 'selectedSubject':{
+      // 
+      break
+    }
+  }
+  if(selectedRes?.code ==  200){
+    selectedTreeData.value = selectedRes.data.map(item=>{
+      return {
+        label:item.name,
+        id:item.id
+      }
+    })
+  }
+}
+
 // 打开配置科目/选科 弹窗
-const OpenAddSubjectForm = () => {
-  console.log('点击了配置科目/选科');
+const OpenAddSubjectForm = async (row,type) => {
+  console.log('点击了配置科目/选科',row);
   addSubjectDialogVisible.value = true
+  currentOpenType.value = type
+  currentOperationRow.value = row
+
+  switch(type){
+    case 'subject':{
+      subjectTitle.value = row.gradeName + ' 配置科目'
+      break
+    }
+    case 'selectedSubject':{
+      subjectTitle.value = row.gradeName + ' 配置选科'
+      break
+    }
+  }
+  await RenderOptionalSubjectTree(type,row)
+  await RenderSelectedSubjectTree(type,row)
+
+  // 可选科目的默认勾选赋值 
+  let checkedKeys = selectedTreeData.value.map(item=>item?.id)
+  optionalSubjetTree.value.setCheckedKeys(checkedKeys)
+
 };
 // 关闭配置科目/选科 弹窗
 const CloseAddSubjectForm = () => {
   addSubjectDialogVisible.value = false
-};
-
-
-
-
-// 全局控制
-const is_head_teacher_involved = ref(false);
+  allTreeData.value = []
+  selectedTreeData.value = []
 
+  currentOpenType.value = ''
+  currentOperationRow.value  = null
+};
 
+// 更新勾选的 可选科目
+const UpdataCheckedSubject = async (params)=>{
+  console.log('当前勾选参数',params)
+  let selectedSubjectIds = params?.map(item=>{
+    return item.id
+  }) || []
+
+  let res = undefined
+  let addOrUpdateParams = {
+      evaluationId:route.query.id,
+      evaluationGradeId: currentOperationRow.value.id,
+      selectionStatus: currentOperationRow.value.selectionStatus,
+      selectionCount:currentOperationRow.value.selectionCount,
+      needCount:currentOperationRow.value.needCount,
+      subjectIds: selectedSubjectIds
+    }
+  switch(currentOpenType.value){
+    case 'subject':{
+      res = await addGradeSubjectApi(addOrUpdateParams)
+      break
+    }
+    case 'selectedSubject':{
+      res = await addGradeSelectedSubjectApi(addOrUpdateParams)
+      break
+    }
+  }
+  if(res?.code == 200){
+    ElMessage.success(res?.msg)
+    await GetEvaluationDataDetail()
+    await RenderSelectedSubjectTree(currentOpenType.value,currentOperationRow.value)
+  }
+}
 
-// 模拟年级配置列表数据 
-const gradeOptions = ref([
-  { 
-    id:'1',
-    gradeId: 'grade_7', 
-    gradeName: '七年级',
-    subjectCount: '未定',
-    isSelectSubject: false,
+// 删除勾选的可选科目
+const DeleteCheckedSubject = async (param)=>{
+  const {node,id} = param
+  console.log('准备删除的id',id)
 
-    // 选课总数
-    selectionCount: 0,
-    // 需要选择科目数
-    needCount: 0,
+  let res = undefined
+  switch(currentOpenType.value){
+    case 'subject':{
+      res = await deleteGradeSubjectApi(id)
+      break
+    }
+    case 'selectedSubject':{
+      res = await deleteGradeSelectedSubjectApi(id)
+      break
+    }
+  }
+  if(res?.code == 200){
+    ElMessage.success(res?.msg)
+    // 重查已选科目
+    // 更新可选科目赋值
+    await RenderSelectedSubjectTree(currentOpenType.value,currentOperationRow.value )
+    // 可选科目的默认勾选赋值 
+    let checkedKeys = selectedTreeData.value.map(item=>item?.id)
+    optionalSubjetTree.value.setCheckedKeys(checkedKeys)
+  }
+}
 
-    subjectData: [
-      { id: 'subject_1', name: '语文' },
-      { id: 'subject_2', name: '数学' },
-    ],
-    selectSubjectData: [
-      { id: 'subject_1', name: '语文' },
-    ],
-    classData: [
-       {
-          id: 'class_1',
-          name: '一班',
-        },
-        {
-          id: 'class_2',
-          name: '二班',
-        }
-    ],
-    selectedClassData: [],
-   },
-  { 
-    id:'2',
-    gradeId: 'grade_8', 
-    gradeName: '八年级', 
-    subjectCount: 6, 
-    isSelectSubject: true,
-
-    // 选课总数
-    selectionCount: 6,
-    // 需要选择科目数
-    needCount: 2,
-
-    subjectData: [
-      { id: 'subject_1', name: '语文' },
-      { id: 'subject_2', name: '数学' },
-      { id: 'subject_3', name: '英语' },
-    ],
-    selectSubjectData: [
-      { id: 'subject_1', name: '语文' },
-      { id: 'subject_2', name: '数学' },
-    ],
-    classData: [
-      {
-        id: 'class_1',
-        name: '一班',
-      },
-      {
-        id: 'class_2',
-        name: '二班',
-      }
-    ],
-    selectedClassData: [],
-  },
-  { 
-    id:'3',
-    gradeId: 'grade_9', 
-    gradeName: '九年级', 
-    subjectCount: 7, 
-    isSelectSubject: true,
-    
-    selectionCount: 0,
-    needCount: 0,
-
-      subjectData: [],
-      selectSubjectData: [],
-      classData: [],
-      selectedClassData: [],
-  },
-
-
-  {
-			"id": 0,
-			
-			"evaluationId": 0,  //主id 
-			"gradeCode": 0,
-			"gradeId": 0,
-			"gradeName": "",
-      subjectCount:"",
 
-      
-			"selectionStatus": 0,
-			"selectionCount": 0,
-			"needCount": 0,
-			"sort": 0,
-			"classData": [
-				{
-					"id": 0,
-					"dataType": 0,
-					"detailType": 0,
-					"code": 0,
-					"idCode": "",
-					"name": "",
-					"sort": 0,
-					"evaluationSubjectId": 0,
-					"selectStatus": 0,
-				}
-			],
-			"subjectData": [
-				{
-					"id": 0,
-					"dataType": 0,
-					"detailType": 0,
-					"code": 0,
-					"name": "",
-					"sort": 0,
-					"selectStatus": 0,
-					"choiceStatus": 0,
-					"teacherSubjectStatus": 0
-				}
-			],
-			"selectSubjectData": [
-				{
-					"id": 0,
-					"dataType": 0,
-					"detailType": 0,
-					"code": 0,
-					"name": "",
-					"sort": 0,
-					"selectStatus": 0,
-					"choiceStatus": 0,
-					"teacherSubjectStatus": 0
-				}
-			]
-		}
-]);
-
-
-// 处理班级的全选和全不选
+// 5. 处理班级的全选和全不选
 const handleSelectAllClassOrNot = (selectedValue: any[], gradeOption: any) => {
   console.log('选中的值:', selectedValue);
+  console.log('已选的值',gradeOption.selectedClassData)
+  
+  let selectedClassData = []
+
   if(selectedValue){
     // 全选
-    gradeOption.selectedClassData = gradeOption.classData.map(item => item.id);
+    // 这个没起作用
+    selectedClassData = gradeOption.classData.map(item => item.id);
   }else{
     // 取消全选
-    gradeOption.selectedClassData = []
+    selectedClassData = []
   }
+
+  console.log('全选/取消后的选项值',selectedClassData)
+  gradeOptions.value = gradeOptions.value.map(item => {
+    if(item.id === gradeOption.id){
+      return {
+        ...item,
+        selectedClassData
+      }
+    }
+    return item;
+  })
+
+
+
 };
 
 
-// 删除弹窗处理逻辑
+// 6. 删除弹窗处理逻辑
 const deleteDialogVisible = ref(false);
 const deleteDialogLoading = ref(false);
-const currentEditRow = ref(null); // 当前编辑的行数据
+const currentDeleteRow = ref(); // 当前编辑的行数据
 // 删除弹窗 确认逻辑
-const HandleDeleteConfirm = () => {
-  console.log('确认删除');
-  // 在这里处理删除确认的逻辑
-  HandleDeleteClose()
+const HandleDeleteConfirm = async () => {
+  deleteDialogLoading.value = true
+
+  let res = undefined
+  switch(currentOpenType.value){
+    case 'grade':  // 年级删除
+      //暂无接口
+      break
+    case 'subject':  // 科目删除
+      res = await deleteGradeSubjectApi(currentDeleteRow.value?.id)
+      break
+    case 'selectedSubject':  // 选科删除
+      res = await deleteGradeSelectedSubjectApi(currentDeleteRow.value?.id)
+      break
+  }
+  if(res?.code == 200){
+    ElMessage.success(res?.msg)
+    HandleDeleteClose()
+    // 重查评价数据
+    await GetEvaluationDataDetail()
+  }else{
+    deleteDialogLoading.value = false
+  }
 };
 // 关闭 删除弹窗
 const HandleDeleteClose = () => {
   console.log('关闭删除弹窗');
   // 在这里处理关闭删除弹窗的逻辑
   deleteDialogVisible.value = false;
+  currentDeleteRow.value = null
+  currentOpenType.value = ''
+  deleteDialogLoading.value = false
 };
 // 打开 删除弹窗
-const HandleDeleteOpen = (row: any) => {
+const HandleDeleteOpen = (row: any,type) => {
   console.log('打开删除弹窗');
+  currentOpenType.value = type
   // 在这里处理打开删除弹窗的逻辑
   deleteDialogVisible.value = true;
-  currentEditRow.value = row;
+  currentDeleteRow.value = row;
+
 };
 
 
-onMounted(() => {
+
+onMounted(async() => {
   console.log('组件挂载完成');
+  await GetEvaluationTaskDetail()
+  await GetEvaluationDataDetail()
 });
 
 </script>

+ 0 - 0
src/views/reviewManagement/stepComponent/formDialog.ts → src/views/reviewManagement/stepComponent/step1Component/formDialog.ts