“班主任考核扣分计算修复”

This commit is contained in:
weizhong committed 2025-09-08 15:12:32 +08:00
1 parent 79c798ef30
commit 44ecd14189
1 file changed
+139 -3
@@ -157,7 +157,14 @@
</el-col>
<el-col :span="8">
<el-form-item>
<el-button type="info" plain @click="handleViewStudentViolations">学生违规处分信息查看</el-button>
<el-button
:type="studentRecordsData ? 'success' : 'info'"
:plain="!studentRecordsData"
@click="handleViewStudentViolations"
>
<i :class="studentRecordsData ? 'el-icon-check' : 'el-icon-view'" style="margin-right: 4px;"></i>
{{ studentRecordsData ? '查看已加载的违规处分信息' : '学生违规处分信息查看' }}
</el-button>
</el-form-item>
</el-col>
</el-row>
@@ -340,6 +347,28 @@
<el-tabs v-model="studentRecordsActiveTab" type="border-card" style="margin-top: 16px">
<!-- 违纪记录Tab -->
<el-tab-pane label="违纪记录" name="discipline">
<!-- 扣分汇总信息 -->
<el-row :gutter="20" style="margin-bottom: 16px;">
<el-col :span="16">
<el-alert
:title="`违纪记录扣分汇总: ${calculateTotalDeduction()} 分 (生效记录: ${getEffectiveDisciplineRecords().length} 条)`"
type="warning"
:closable="false"
show-icon
/>
</el-col>
<el-col :span="8" style="text-align: right;">
<el-button
type="primary"
icon="Refresh"
@click="applyDeductionToClassScore"
:disabled="calculateTotalDeduction() === 0"
>
重新同步到班级扣分
</el-button>
</el-col>
</el-row>
<el-table :data="studentRecordsData?.disciplineRecords || []" border style="width: 100%" max-height="400" empty-text="暂无违纪记录">
<el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column prop="studentNo" label="学号" min-width="120" align="center" />
@@ -354,7 +383,12 @@
<el-table-column prop="disciplineContent" label="处分内容" min-width="200" :show-overflow-tooltip="true" />
<el-table-column prop="scoreDeduction" label="扣分" min-width="80" align="center">
<template #default="scope">
<el-tag type="danger" size="small">{{ scope.row.scoreDeduction || 0 }}</el-tag>
<el-tag
:type="scope.row.status === '1' ? 'danger' : 'info'"
size="small"
>
{{ scope.row.scoreDeduction || 0 }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="status" label="状态" min-width="80" align="center">
@@ -406,6 +440,7 @@
</template>
<script setup name="SubmitDialog" lang="ts">
import { watch, nextTick } from 'vue';
import { getAssessmentSubmitDetail, submitAssessmentScore, submitAssessment, getClassStudentRecords } from '@/api/bzrkh/teacherAssessment';
import {
AssessmentDetailVO,
@@ -652,6 +687,9 @@ const loadAssessmentDetail = async () => {
overallComment: monthlyScoreForm.overallComment
});
console.log('==================');
// 自动加载学生违规处分信息数据
await autoLoadStudentRecords();
} catch (error) {
console.error('加载考核详情失败:', error);
proxy?.$modal.msgError('加载考核详情失败,请检查网络连接或刷新页面重试');
@@ -663,7 +701,28 @@ const loadAssessmentDetail = async () => {
}
};
/** 查看学生违规处分信息 */
/** 自动加载学生违规处分信息数据(后台加载,不显示弹窗) */
const autoLoadStudentRecords = async () => {
if (!props.classId || !props.planId) {
console.warn('缺少必要参数(班级ID或计划ID),跳过自动加载学生违规处分数据');
return;
}
console.log('🔄 开始自动加载学生违规处分数据...');
try {
const res = await getClassStudentRecords(props.classId, props.planId);
studentRecordsData.value = res.data;
// 自动同步违纪记录扣分到班级扣分字段(不显示提示消息)
autoSyncDeductionToClassScore(false);
console.log('✅ 学生违规处分数据自动加载完成');
} catch (error) {
console.error('❌ 自动加载学生违规处分数据失败:', error);
// 静默失败,不显示错误提示(避免影响主要功能)
}
};
/** 查看学生违规处分信息(点击按钮时调用) */
const handleViewStudentViolations = async () => {
if (!props.classId || !props.planId) {
proxy?.$modal.msgError('缺少必要参数(班级ID或计划ID)');
@@ -675,9 +734,19 @@ const handleViewStudentViolations = async () => {
studentRecordsLoading.value = true;
try {
// 如果数据已经加载过,直接显示弹窗
if (studentRecordsData.value?.disciplineRecords || studentRecordsData.value?.rewardRecords) {
studentRecordsVisible.value = true;
console.log('📋 使用已加载的学生违规处分数据显示弹窗');
} else {
// 否则重新加载数据
const res = await getClassStudentRecords(props.classId, props.planId);
studentRecordsData.value = res.data;
studentRecordsVisible.value = true;
}
// 手动查看时也重新同步一次扣分(显示提示消息)
autoSyncDeductionToClassScore(true);
} catch (error) {
console.error('查询学生违纪记录和奖励记录失败:', error);
proxy?.$modal.msgError('查询学生违纪记录和奖励记录失败');
@@ -686,6 +755,73 @@ const handleViewStudentViolations = async () => {
}
};
/** 获取生效的违纪记录 */
const getEffectiveDisciplineRecords = () => {
if (!studentRecordsData.value?.disciplineRecords) {
return [];
}
// 只统计状态为'1'(生效)的违纪记录
return studentRecordsData.value.disciplineRecords.filter(record => record.status === '1');
};
/** 计算违纪记录总扣分 */
const calculateTotalDeduction = () => {
const effectiveRecords = getEffectiveDisciplineRecords();
return effectiveRecords.reduce((total, record) => {
const deduction = Number(record.scoreDeduction) || 0;
return total + deduction;
}, 0);
};
/** 自动同步违纪记录扣分到班级扣分字段 */
const autoSyncDeductionToClassScore = (showMessage = true) => {
const totalDeduction = calculateTotalDeduction();
// 自动将汇总的扣分设置到班级扣分字段
managementEffectivenessForm.classDeduction = totalDeduction;
// 自动计算50%计
calculateDeductionHalf();
if (totalDeduction > 0 && showMessage) {
proxy?.$modal.msgSuccess(`已自动同步违纪记录扣分汇总 ${totalDeduction} 分到班级扣分字段`);
}
};
// 监听学生违纪记录数据变化,自动同步扣分
watch(() => studentRecordsData.value?.disciplineRecords, (newRecords) => {
if (newRecords && studentRecordsVisible.value) {
// 延迟执行,确保数据完全加载,但不显示提示消息
nextTick(() => {
autoSyncDeductionToClassScore(false);
});
}
}, { deep: true });
/** 将违纪记录扣分汇总应用到班级扣分字段 */
const applyDeductionToClassScore = () => {
const totalDeduction = calculateTotalDeduction();
if (totalDeduction === 0) {
proxy?.$modal.msgWarning('当前没有生效的违纪记录扣分可以应用');
return;
}
// 确认应用操作
proxy?.$modal.confirm(`确定要将违纪记录扣分汇总 ${totalDeduction} 分重新应用到班级扣分字段吗?`).then(() => {
// 将汇总的扣分设置到班级扣分字段
managementEffectivenessForm.classDeduction = totalDeduction;
// 自动计算50%计
calculateDeductionHalf();
proxy?.$modal.msgSuccess(`已重新应用违纪记录扣分汇总 ${totalDeduction} 分到班级扣分字段`);
// 关闭学生记录弹窗
studentRecordsVisible.value = false;
}).catch(() => {
// 用户取消操作
});
};
/** 保存考核数据 */
const handleSubmit = async () => {
try {