提交审核

This commit is contained in:
zlwu committed 2025-09-09 16:07:28 +08:00
1 parent b3de960892
commit 9f4668df93
2 files changed
+129 -31

No files matched your search

@@ -1,15 +1,15 @@
<template>
<el-dialog :title="`${indicatorName} - 学生数据详情`" v-model="dialogVisible" width="1000px" append-to-body destroy-on-close>
<div v-loading="loading" element-loading-text="正在加载数据...">
<!-- 违纪处分记录区域 -->
<el-card class="mb-4" shadow="never">
<!-- 违纪处分记录区域 - 只有数据时才显示 -->
<el-card class="mb-4" shadow="never" v-if="disciplineRecords.length > 0">
<template #header>
<div class="card-header">
<span>违纪处分记录</span>
<el-tag type="danger" size="small">{{ disciplineRecords.length }} 条记录</el-tag>
</div>
</template>
<el-table :data="disciplineRecords" border style="width: 100%" v-if="disciplineRecords.length > 0">
<el-table :data="disciplineRecords" border style="width: 100%">
<el-table-column label="违纪日期" prop="disciplineDate" width="120">
<template #default="scope">
{{ formatDate(scope.row.disciplineDate) }}
@@ -24,18 +24,17 @@
</template>
</el-table-column>
</el-table>
<el-empty v-else description="暂无违纪处分记录" />
</el-card>
<!-- 奖励记录区域 -->
<el-card shadow="never">
<!-- 奖励记录区域 - 只有数据时才显示 -->
<el-card shadow="never" v-if="rewardRecords.length > 0">
<template #header>
<div class="card-header">
<span>奖励记录</span>
<el-tag type="success" size="small">{{ rewardRecords.length }} 条记录</el-tag>
</div>
</template>
<el-table :data="rewardRecords" border style="width: 100%" v-if="rewardRecords.length > 0">
<el-table :data="rewardRecords" border style="width: 100%">
<el-table-column label="奖励日期" prop="rewardDate" width="120">
<template #default="scope">
{{ formatDate(scope.row.rewardDate) }}
@@ -49,8 +48,10 @@
</template>
</el-table-column>
</el-table>
<el-empty v-else description="暂无奖励记录" />
</el-card>
<!-- 当没有任何数据时显示 -->
<el-empty v-if="disciplineRecords.length === 0 && rewardRecords.length === 0 && !loading" description="暂无相关数据记录" />
</div>
</el-dialog>
</template>
@@ -67,10 +67,10 @@
<el-card shadow="never">
<template #header>
<div class="card-header">
<span>指标模块</span>
<span>指标模块(基础分:100分)</span>
</div>
</template>
<el-table :data="form.selfScoreList" border style="width: 100%">
<el-table :data="sortedSelfScoreList" border style="width: 100%">
<el-table-column label="指标名称" prop="indicatorName" min-width="120">
<template #default="scope">
<div class="indicator-name-cell">
@@ -484,46 +484,130 @@ const isViewMode = computed(() => {
return dialog.title === '查看考核申请' || form.value.status === '6';
});
/** 计算总得分 */
const calculateTotalScore = () => {
// 计算自评得分
let selfScore = 0;
if (form.value.selfScoreList && form.value.selfScoreList.length > 0) {
selfScore += form.value.selfScoreList.reduce((sum, item) => {
const score = parseFloat(String(item.selfScore || 0)) || 0;
return sum + score;
}, 0);
// 计算排序后的指标列表
const sortedSelfScoreList = computed(() => {
if (!form.value.selfScoreList || form.value.selfScoreList.length === 0) {
return [];
}
// 创建副本进行排序,避免修改原数据
const list = [...form.value.selfScoreList];
return list.sort((a, b) => {
const scoreA = parseFloat(String(a.selfScore || 0)) || 0;
const scoreB = parseFloat(String(b.selfScore || 0)) || 0;
// 如果A不为0,B为0,A排前面
if (scoreA !== 0 && scoreB === 0) return -1;
// 如果A为0,B不为0,B排前面
if (scoreA === 0 && scoreB !== 0) return 1;
// 如果都不为0,按分值倒序排列(高分在前)
if (scoreA !== 0 && scoreB !== 0) return scoreB - scoreA;
// 如果都为0,保持原顺序
return 0;
});
});
/** 计算总得分(新算分规则) */
const calculateTotalScore = () => {
// 第1步:基础分100分 - 指标模块的扣分,最小为0
const baseScore = 100;
let totalIndicatorDeduction = 0;
let totalIndicatorAddition = 0;
// 计算指标模块的总扣分和总加分
if (form.value.selfScoreList && form.value.selfScoreList.length > 0) {
form.value.selfScoreList.forEach((item) => {
// 兼容性处理:如果存在 deductionScore 和 additionScore 字段,使用新算分规则
const itemWithNewFields = item as any; // 类型断言以访问可能的新字段
if (itemWithNewFields.deductionScore !== undefined || itemWithNewFields.additionScore !== undefined) {
const deduction = parseFloat(String(itemWithNewFields.deductionScore || 0)) || 0;
const addition = parseFloat(String(itemWithNewFields.additionScore || 0)) || 0;
totalIndicatorDeduction += deduction;
totalIndicatorAddition += addition;
} else {
// 兼容性处理:如果没有新字段,从 selfScore 推算(假设都是加分)
const score = parseFloat(String(item.selfScore || 0)) || 0;
if (score >= 0) {
totalIndicatorAddition += score;
} else {
totalIndicatorDeduction += Math.abs(score);
}
}
});
}
// 第1步:基础分 - 扣分,结果不能小于0
let step1Score = baseScore - totalIndicatorDeduction;
if (step1Score < 0) {
step1Score = 0;
}
// 第2步:加上指标模块的加分
const step2Score = step1Score + totalIndicatorAddition;
// 第3步:加上附加分模块的分值(可正可负)
let totalBonusScore = 0;
if (form.value.bonusApprovalList && form.value.bonusApprovalList.length > 0) {
selfScore += form.value.bonusApprovalList.reduce((sum, item) => {
totalBonusScore = form.value.bonusApprovalList.reduce((sum, item) => {
const score = parseFloat(String(item.bonusScore || 0)) || 0;
return sum + score;
}, 0);
}
form.value.selfScore = parseFloat(selfScore.toFixed(1));
// 最终自评得分
const finalSelfScore = step2Score + totalBonusScore;
form.value.selfScore = parseFloat(finalSelfScore.toFixed(1));
// 计算班主任评分
let teacherScore = 0;
console.log(
`自评得分计算详情: 基础分=${baseScore}, 指标扣分=${totalIndicatorDeduction}, 第1步结果=${step1Score}, 指标加分=${totalIndicatorAddition}, 第2步结果=${step2Score}, 附加分=${totalBonusScore}, 最终得分=${form.value.selfScore}`
);
// 班主任评分采用相同逻辑,但使用班主任的评分数据
let teacherTotalIndicatorDeduction = 0;
let teacherTotalIndicatorAddition = 0;
// 计算班主任对指标模块的评分
if (form.value.selfScoreList && form.value.selfScoreList.length > 0) {
teacherScore += form.value.selfScoreList.reduce((sum, item) => {
const score = parseFloat(String(item.teacherScore || 0)) || 0;
return sum + score;
}, 0);
form.value.selfScoreList.forEach((item) => {
const teacherScore = parseFloat(String(item.teacherScore || 0)) || 0;
// 班主任评分:负数视为扣分,正数视为加分
if (teacherScore < 0) {
teacherTotalIndicatorDeduction += Math.abs(teacherScore);
} else {
teacherTotalIndicatorAddition += teacherScore;
}
});
}
// 第1步:基础分 - 班主任评定的扣分
let teacherStep1Score = baseScore - teacherTotalIndicatorDeduction;
if (teacherStep1Score < 0) {
teacherStep1Score = 0;
}
// 第2步:加上班主任评定的加分
const teacherStep2Score = teacherStep1Score + teacherTotalIndicatorAddition;
// 第3步:加上附加分模块的审核得分
let totalApprovalScore = 0;
if (form.value.bonusApprovalList && form.value.bonusApprovalList.length > 0) {
teacherScore += form.value.bonusApprovalList.reduce((sum, item) => {
totalApprovalScore = form.value.bonusApprovalList.reduce((sum, item) => {
const score = parseFloat(String(item.approvalScore || 0)) || 0;
return sum + score;
}, 0);
}
form.value.teacherScore = parseFloat(teacherScore.toFixed(1));
// 最终班主任评分
const finalTeacherScore = teacherStep2Score + totalApprovalScore;
form.value.teacherScore = parseFloat(finalTeacherScore.toFixed(1));
// 总得分等于班主任评分
form.value.totalScore = parseFloat(teacherScore.toFixed(1));
form.value.totalScore = parseFloat(finalTeacherScore.toFixed(1));
console.log(
`班主任评分计算详情: 基础分=${baseScore}, 指标扣分=${teacherTotalIndicatorDeduction}, 第1步结果=${teacherStep1Score}, 指标加分=${teacherTotalIndicatorAddition}, 第2步结果=${teacherStep2Score}, 附加审核分=${totalApprovalScore}, 最终得分=${form.value.teacherScore}`
);
};
/** 获取状态标签类型 */
@@ -1465,11 +1549,24 @@ defineExpose({
.indicator-name-cell {
display: flex;
align-items: center;
gap: 8px;
gap: 6px;
}
.indicator-name-cell span {
flex: 1;
font-size: inherit;
}
.indicator-data-btn {
flex-shrink: 0;
margin-left: 4px;
transform: scale(0.7);
opacity: 0.7;
}
.indicator-data-btn:hover {
transform: scale(0.8);
opacity: 1;
transition: all 0.2s ease;
}
</style>