fix(attendance): 优化考勤状态识别逻辑并补充漏打卡处理

1. 在考勤状态筛选、汇总卡片和图例中将“迟到/早退”标签更新为“迟到/早退/缺卡”,以包含漏打卡情况
2. 后端服务中,在考勤状态常量列表新增“missed_start”、“missed_end”、“missed”三种漏打卡状态
3. 重构上下班打卡时间判断逻辑:当打卡时间晚于理论上班时间或早于理论下班时间超过30分钟时,标记为漏打卡(上班漏打卡或下班漏打卡)
4. 调整状态覆盖逻辑:上班漏打卡或下班漏打卡状态会覆盖原有的迟到/早退状态;若上下班均漏打卡则标记为全天漏打卡(missed)
5. 更新考勤记录处理:当标记为漏打卡时,对应的首次或末次打卡时间字段设为null
6. 优化旷工判定逻辑:单独处理上午段(P1)或下午段(P2)漏打卡的情况,分别标记为半天旷工(absent_half)
7. 前端新增漏打卡状态对应的日历样式(状态色块为#e6a23c)和状态描述文本(“上班漏打卡”、“下班漏打卡”)
This commit is contained in:
2026-06-01 14:38:56 +08:00
parent 481188f654
commit 7e6bc1e8b4
2 changed files with 82 additions and 44 deletions

View File

@@ -171,7 +171,7 @@
<el-form-item label="总体状态">
<el-select v-if="isEdit" v-model="editForm.overallStatus" placeholder="请选择状态">
<el-option label="正常" value="normal" />
<el-option label="迟到/早退" value="abnormal" />
<el-option label="迟到/早退/缺卡" value="abnormal" />
<el-option label="半天旷工" value="absent_half" />
<el-option label="全天旷工" value="absent_full" />
</el-select>
@@ -396,7 +396,7 @@
<el-descriptions title="考勤汇总" :column="5" border style="margin-bottom: 20px;">
<el-descriptions-item label="姓名">{{ currentPersonData.employeeName }}</el-descriptions-item>
<el-descriptions-item label="正常">{{ personSummary.normal }}</el-descriptions-item>
<el-descriptions-item label="迟到/早退">{{ personSummary.abnormal }}</el-descriptions-item>
<el-descriptions-item label="迟到/早退/缺卡">{{ personSummary.abnormal }}</el-descriptions-item>
<el-descriptions-item label="半天旷工">{{ personSummary.absentHalf }}</el-descriptions-item>
<el-descriptions-item label="全天旷工">{{ personSummary.absentFull }}</el-descriptions-item>
<el-descriptions-item label="无记录">{{ personSummary.noRecord }}</el-descriptions-item>
@@ -456,7 +456,7 @@
</div>
<div class="calendar-legend">
<span class="legend-item"><span class="legend-dot normal"></span>正常</span>
<span class="legend-item"><span class="legend-dot late"></span>迟到/早退</span>
<span class="legend-item"><span class="legend-dot late"></span>迟到/早退/缺卡</span>
<span class="legend-item"><span class="legend-dot absent-half"></span>半天旷工</span>
<span class="legend-item"><span class="legend-dot absent-full"></span>全天旷工</span>
<span class="legend-item"><span class="legend-dot no-record"></span>无记录</span>
@@ -957,6 +957,8 @@ export default {
case 'absent_half': return 'status-absent-half'
case 'absent_full': return 'status-absent-full'
case 'abnormal': return 'status-abnormal'
case 'missed_start': return 'status-missed'
case 'missed_end': return 'status-missed'
default: return 'status-default'
}
},
@@ -972,8 +974,10 @@ export default {
case 'early_two': return '早退II'
case 'absent_half': return '半天旷工'
case 'absent_full': return '全天旷工'
case 'abnormal': return '迟到/早退'
case 'abnormal': return '迟到/早退/缺卡'
case 'missed': return '未打卡'
case 'missed_start': return '上班漏打卡'
case 'missed_end': return '下班漏打卡'
default: return '无'
}
},
@@ -1325,6 +1329,10 @@ export default {
background-color: #c0c4cc;
}
.status-missed {
background-color: #e6a23c;
}
.shift-name {
font-size: 12px;
color: #606266;