Sfoglia il codice sorgente

添加评价进度——进度统计图、评价状态开关、评价完成 接口调用

lm 1 settimana fa
parent
commit
2fc914f77c

+ 36 - 0
src/api/evaluationProgressComponent.ts

@@ -0,0 +1,36 @@
+import request from '../utils/request.js'
+let teacherPrefix = import.meta.env.VITE_API_TEACHER_PRE 
+
+
+// 获取 评价进度统计表统计图数据接口
+export const getEvaluationProgressStatisticsApi = (evaluationId:any) => {
+    return request({
+        url: `${teacherPrefix}/api/v1/progress/queryCodeProgressData/${evaluationId}`,
+        method: 'get',
+    })
+}
+
+// 评价进度统计表统计图数据接口
+export const getEvaluationAccountUseStatisticsApi = (evaluationId:any) => {
+    return request({
+        url: `${teacherPrefix}/api/v1/progress/queryCodeProgressData/${evaluationId}`,
+        method: 'get',
+    })
+}
+
+
+// 开启关闭 评价任务 —— 评价进度里边的 —— 关闭后不能答题
+export const openOrCloseQuestionnaireReviewTaskApi = (evaluationId:any) => {
+    return request({
+        url: `${teacherPrefix}/api/v1/progress/updateProgressStatus/${evaluationId}`,
+        method: 'get',
+    })
+}
+
+// 调用评价完成接口
+export const finishReviewProgressApi = (evaluationId:any) => {
+    return request({
+        url: `${teacherPrefix}/api/v1/progress/finishEvaluationProgress/${evaluationId}`,
+        method: 'get',
+    })
+}

+ 3 - 6
src/store/index.ts

@@ -28,13 +28,9 @@ interface HorizontalMenuItem {
   isFinishParameterSetting:boolean,   //参数设置是否完成
   isFinishEvaluationProgress:boolean, //评价进度是否完成
   isFinsihGenerateAnalysis:boolean,  //生成分析是否完成
-
   isAllowDeleteOrEdit:boolean,  //任务是否允许修改或删除
-
   isUnifyTemplate:boolean,   //是否统一问卷模板
-
-
-
+  isAllowFillQuestionnaire:boolean   //是否允许填写问卷   —— 评价进度里边 的评价状态开关
 }
 // 定义 RootState 接口(可扩展)
 interface RootState {
@@ -136,7 +132,8 @@ const store = createStore<RootState>({
           isFinishEvaluationProgress:Boolean(res.data.evaluationProgressStatus),
           isFinsihGenerateAnalysis:Boolean(res.data.analysisStatus),
           isAllowDeleteOrEdit:!Boolean(res.data.status),   // status  0 可以  1 不可以
-          isUnifyTemplate:Boolean(res.data.unifyTemplateStatus)  //unifyTemplateStatus 0 不统一   1 统一
+          isUnifyTemplate:Boolean(res.data.unifyTemplateStatus),  //unifyTemplateStatus 0 不统一   1 统一
+          isAllowFillQuestionnaire:Boolean(res.data.progressAnswerStatus),  // 0 关闭-不允许答题  1 开启—允许答题
         }
         commit('updateEvaluationManageStepData',newData)
       }

+ 89 - 9
src/views/reviewManagement/stepComponent/evaluationProgressComponent/EvaluationProgressComponent.vue

@@ -10,17 +10,23 @@
                 <div class="content_right">
                     <div class="open_switch"> 
                         <span style="font-size: 14px;"> 评价状态:</span>
-                        <el-switch  v-model="isOpenReviewTask"  style="--el-switch-on-color: #2E64FA"/>
+                        <el-switch :model-value="isOpenReviewTask"  
+                            style="--el-switch-on-color: #2E64FA"
+                            @change="HandleReviewTaskOpenOrClose"/>
                     </div>
-                    <el-button  class="button_background" @click="FinishQuestionnaireTemplateConfig">评价完成</el-button>
+                    <el-button  class="button_background" @click="FinishReviewProgress">评价完成</el-button>
                 </div>
             </div>
         </div>
         <div class="page_jg_20"></div>
         <div class="diagram_container">
-            <ReviewProcessBarData v-if="defautTabKey == 'reviewProcessBarData'"></ReviewProcessBarData>
-            <ReviewProcessTableData v-if="defautTabKey == 'reviewProcessTableData'"></ReviewProcessTableData>
-            <reviewAccountTableData v-if="defautTabKey == 'reviewAccountTableData'"></reviewAccountTableData>
+            <ReviewProcessBarData v-if="defautTabKey == 'reviewProcessBarData'"
+                :gradeBarData="gradeReviewBarData" :classReviewBarData="classReviewBarData">
+            </ReviewProcessBarData>
+            <ReviewProcessTableData v-if="defautTabKey == 'reviewProcessTableData'" 
+                :gradeTableData="gradeReviewBarData?.totalGradeData" :allClassTableData="classReviewBarData">
+            </ReviewProcessTableData>
+            <ReviewAccountTableData v-if="defautTabKey == 'reviewAccountTableData'"></ReviewAccountTableData>
         </div>
     </div>
 </template>
@@ -28,24 +34,98 @@
 
 
 <script setup lang="ts">
-import { onMounted, reactive, ref } from 'vue';
+import { computed, onMounted, reactive, ref } from 'vue';
+import { useRoute,useRouter } from 'vue-router';
+import { useStore } from 'vuex';
+
+
 import TabSearch from '@/baseComponents/TabSearch.vue';
 
 import ReviewProcessBarData from './ReviewProcessBarData.vue';
 import ReviewProcessTableData from './ReviewProcessTableData.vue';
-import reviewAccountTableData from './reviewAccountTableData.vue';
+import ReviewAccountTableData from './ReviewAccountTableData.vue';
 import  {tabList} from './tabSearch'
 
+import { getEvaluationProgressStatisticsApi,
+        openOrCloseQuestionnaireReviewTaskApi,finishReviewProgressApi, 
+    } from '@/api/evaluationProgressComponent.js';
+import { ElMessage } from 'element-plus';
+
+const route = useRoute()
+const router = useRouter()
+const store= useStore()
+
+const isOpenReviewTask = computed(()=>{
+    return store.state.evaluationManageStepData.isAllowFillQuestionnaire
+})  //评价状态 开启或关闭
 
-const isOpenReviewTask = ref(true)  //评价状态
 
 const defautTabKey = ref('reviewAccountTableData')
 const HandleTabChange = (val)=>{
     defautTabKey.value = val
 }
 
+// 年级评价数据
+const gradeReviewBarData = reactive({
+    datax: [],
+    datay: [],
+    totalGradeData:[]
+})
+
+// 班级评价数据
+const classReviewBarData = reactive({})
+
+
+// 处理评价任务的开启或关闭
+const HandleReviewTaskOpenOrClose = async (val)=>{
+    let res = await openOrCloseQuestionnaireReviewTaskApi(route.query.id)
+    if(res?.code == 200){
+        ElMessage.success(res?.msg)
+        // 更新 state全局 的 evaluationManageStepData.isAllowFillQuestionnaire
+        store.commit('updateEvaluationManageStepData',{
+            isAllowFillQuestionnaire:(Number(res.data) === 0 ? false : true)
+        })
+    }
+}
+
+const FinishReviewProgress = async()=>{
+    let res = await finishReviewProgressApi(route.query.id)
+    if(res?.code == 200){
+        // 重新查询 主任务数据
+        // 同时跳转到下一步
+        // 完成后,重新查询 任务管理基础信息,并跳到下一步
+        await store.dispatch('updateEvaluationManageStepData',route.query.id)
+        store.commit('updateEvaluationManageStepData',
+                    {currentActiveStepName:'generateAnalysis'})
+        router.push(`generateAnalysis?id=${route.query.id}`)
+    }
+}
 onMounted(async ()=>{
-   
+    let res = await getEvaluationProgressStatisticsApi(route.query.id)
+    if(res?.code == 200){
+        gradeReviewBarData.datax = res.data.map(item=>{
+            return item.name+'-'+item.id
+        })
+        gradeReviewBarData.datay = res.data.map(item=>{
+            return item.progress?.slice(0,-1)
+        })
+        gradeReviewBarData.totalGradeData = res.data
+
+
+        res.data.map(item=>{
+            let classDataX = item.classData.map(item=>{
+                return item.name
+            })
+            let classDataY =  item.classData.map(item=>{
+                return item.progress?.slice(0,-1)
+            })
+            classReviewBarData[item.id] = {
+                datax:classDataX,
+                datay:classDataY,
+                totalClassData:item.classData
+            }
+        })
+    }
 })
 </script>
 

+ 19 - 1
src/views/reviewManagement/stepComponent/evaluationProgressComponent/ReviewAccountTableData.vue

@@ -33,7 +33,8 @@
 
 <script setup lang="ts">
 import Table from '@/baseComponents/Table.vue';
-import {  ref } from 'vue';
+import {  ref, onMounted } from 'vue';
+import { useRoute } from 'vue-router';
 
 import {reviewAccountUseTableColumns} from  './table'
 import FormSearchGroup from '@/baseComponents/FormSearchGroup.vue';
@@ -41,6 +42,11 @@ import FormSearchGroup from '@/baseComponents/FormSearchGroup.vue';
 import {searchList} from './formSearchGroup'
 import TableRowStatus from '@/baseComponents/TableRowStatus.vue';
 
+
+import { getEvaluationAccountUseStatisticsApi } from '@/api/evaluationProgressComponent.js';
+
+const route = useRoute()
+
 const currentPage = ref(1)
 const pageSize = ref(20)
 const totalNum = ref(0)
@@ -134,6 +140,18 @@ const statusMsg = ref([
 
 const searchParams = ref({})
 const HandleSearchChange = (params,key)=>{}
+
+
+onMounted(async()=>{
+    let res = await getEvaluationAccountUseStatisticsApi(route.query.id)
+    if(res?.code == 200){
+
+        // 待完善————————
+
+    }
+
+
+})
 </script>
 
 

+ 32 - 18
src/views/reviewManagement/stepComponent/evaluationProgressComponent/ReviewProcessBarData.vue

@@ -4,8 +4,8 @@
         <div class="bar_container">
             <div class="bar_title">年级评价进度</div>
 
-            <MultipleBarCharts :datax="gradeReviewAccountData.datax" :height="375"
-                :datay="gradeReviewAccountData.datay" :tooltipFormater="tooltipFormater"
+            <MultipleBarCharts :datax="gradeBarData?.datax" :height="375"
+                :datay="gradeBarData?.datay" :tooltipFormater="tooltipFormater"
                 @HandleChartClick="HandleChartClick" :isClick="true"
             >
             </MultipleBarCharts>
@@ -18,38 +18,48 @@
                 <span class="parent_title">年级评价进度 / </span>
                 <span>{{currentClickGrade}}</span>
             </div>
-            <MultipleBarCharts :datax="classReviewAccountData.datax" :height="375"
-                :datay="classReviewAccountData.datay" :tooltipFormater="tooltipFormater">
+            <MultipleBarCharts :datax="classReviewAccountData?.datax" :height="375"
+                :datay="classReviewAccountData?.datay" :tooltipFormater="tooltipFormater">
             </MultipleBarCharts>
         </div>
     </div>
 </template>
 
 <script setup lang="ts">
-import { onMounted, reactive, ref } from 'vue';
+import { computed, onMounted, reactive, ref, watch } from 'vue';
 
 import MultipleBarCharts from '@/baseComponents/MultipleBarCharts.vue';
 
+interface BarData {
+    datax:Array<any>
+    datay:Array<any>
+}
+
+
+const props = defineProps({
+    // 年级评价进度柱状图
+    gradeBarData:{
+        type:Object as ()=>BarData,
+    },
+    classReviewBarData:{
+        type:Object,
+    }
+})
 // 年级评价进度数据
 const currentClickGrade = ref('')
 
 
-// 年级评价进度柱状图
-const gradeReviewAccountData = reactive({
-    datax: ['一年级', '二年级', '三年级', '四年级', '五年级', '六年级', '七年级', '八年级', '九年级', '高一'],
-    datay: [58,11,17,53,41,100,62,96,48,34]
-})
 
+
+// 班级评价数据
 // 班级评价进度柱状图
-const classReviewAccountData = reactive({
-    // X轴数据:根据图片提取的班级名称
-    datax: [
-        '1班', '2班', '3班', '4班', '5班', '6班', 
-        '7班', '8班', '9班', '10班', '11班', '12班'
-    ],
-    datay: [45, 28,  46, 47, 48,  41, 43, 44, 45, 42,43,43 
-    ]
+const classReviewAccountData = computed(()=>{
+    let gradeId = currentClickGrade.value.split('-')[1]
+
+    console.log('班级评价数据列表----',props.classReviewBarData?.[gradeId])
+    return props.classReviewBarData?.[gradeId]
 })
+
 const tooltipFormater = (params)=>{
     const {name,seriesName,value,marker} = params
     return name + '<br/>' + marker + '评价进度' + `<span style=\"margin-left:10px;\">${value}</span>` ;
@@ -60,7 +70,11 @@ const HandleChartClick = (index,xName)=>{
     currentClickGrade.value = xName
 }
 
+watch([()=>props.gradeBarData,()=>props.classReviewBarData],([newGradeVal,newClassVal])=>{
+
+    console.log('当前传递的年级数据列表',newGradeVal,'当前传递的班级数据列表',newClassVal)
 
+},{immediate:true,deep:true})
 </script>
 
 

+ 33 - 22
src/views/reviewManagement/stepComponent/evaluationProgressComponent/ReviewProcessTableData.vue

@@ -13,7 +13,8 @@
                 </div>
             </div>
             <Table  :currentPage="1" 
-                :pageSize="20" :tableColumns="reviewProcessTableColumns" :tableData="[]"
+                :pageSize="20" :tableColumns="reviewProcessTableColumns" 
+                :tableData="gradeTableData"
                 :totalNum="0">
             </Table>
         </div>
@@ -41,7 +42,8 @@
                 </div>
             </div>
             <Table  :currentPage="1" 
-                :pageSize="20" :tableColumns="reviewProcessTableColumns" :tableData="[]"
+                :pageSize="20" :tableColumns="reviewProcessTableColumns" 
+                :tableData="classTableData"
                 :totalNum="0">
             </Table>
         </div>
@@ -50,34 +52,43 @@
 
 <script setup lang="ts">
 import Table from '@/baseComponents/Table.vue';
-import {  ref } from 'vue';
+import {  ref, watch } from 'vue';
 
 import {reviewProcessTableColumns} from  './table'
 
-// 年级评价进度数据
 
-const gradeSearchId = ref('1')
-const gradeOptionList = ref([
-    {
-        label:'一年级',
-        value:'1'
-    },
-    {
-        label:'二年级',
-        value:'2'
-    },
-    {
-        label:'三年级',
-        value:'3'
+const props = defineProps({
+    gradeTableData:{
+        type:Array,
+        default:[]
     },
-    {
-        label:'四年级',
-        value:'4'
-    },
-])
+    allClassTableData:{
+        type:Object,
+    }
+
+})
+// 年级评价进度数据
+const gradeSearchId = ref('')  //默认的年级筛选项
+const gradeOptionList = ref([])  //年级下拉项
+
+const classTableData = ref([])
 const handleSelectChange = (val) =>{
 
+
 }
+
+watch(()=>props?.gradeTableData,(newVal)=>{
+
+    console.log('全部的班级数据---props.allClassTableData',props.allClassTableData)
+    gradeOptionList.value = newVal.map(item=>{
+        return {
+            label:item.name,
+            value:item.id
+        }
+    })
+    gradeSearchId.value = gradeOptionList.value[0]?.value
+    classTableData.value = props.allClassTableData?.[gradeSearchId.value]?.totalClassData
+},{immediate:true,deep:true})
 </script>
 
 

+ 9 - 9
src/views/reviewManagement/stepComponent/evaluationProgressComponent/table.ts

@@ -12,17 +12,17 @@ export const reviewProcessTableColumns = ref([
         hidden: false,
     },
     {
-        name: 'grade',          // 对应字段名建议
-        label: '年级',
-        width: '',              // 可根据需要设置固定宽度
+        name: 'name',  
+        label: '年级',        
+        width: '',             
         fixed: '',
-        align: 'center',        // 或 'left',视具体排版需求而定
+        align: 'center',       
         minWidth: '',
         custom: false,
         hidden: false,
     },
     {
-        name: 'generatedAccount', // 对应字段名建议
+        name: 'codeCount', 
         label: '生成账号',
         width: '',
         fixed: '',
@@ -32,7 +32,7 @@ export const reviewProcessTableColumns = ref([
         hidden: false,
     },
     {
-        name: 'submitted',      // 对应字段名建议
+        name: 'overCodeCount',      
         label: '已提交',
         width: '',
         fixed: '',
@@ -42,7 +42,7 @@ export const reviewProcessTableColumns = ref([
         hidden: false,
     },
     {
-        name: 'unused',         // 对应字段名建议
+        name: 'unOverCodeCount',        
         label: '未使用',
         width: '',
         fixed: '',
@@ -52,7 +52,7 @@ export const reviewProcessTableColumns = ref([
         hidden: false,
     },
     {
-        name: 'progress',       // 对应字段名建议
+        name: 'progress',      
         label: '进度',
         width: '',
         fixed: '',
@@ -62,7 +62,7 @@ export const reviewProcessTableColumns = ref([
         hidden: false,
     },
     {
-        name: 'avgTime',        // 对应字段名建议
+        name: 'avgTime',        
         label: '平均花费时间',
         width: '',
         fixed: '',