|
|
|
|
@ -23,7 +23,7 @@
|
|
|
|
|
keep-source
|
|
|
|
|
show-header-overflow
|
|
|
|
|
show-footer-overflow
|
|
|
|
|
show-overflow
|
|
|
|
|
|
|
|
|
|
:row-config="{ isHover: true }"
|
|
|
|
|
:header-cell-style="{ 'white-space': 'wrap' }"
|
|
|
|
|
:print-config="{}"
|
|
|
|
|
@ -87,7 +87,7 @@
|
|
|
|
|
</template>
|
|
|
|
|
</vxe-column>
|
|
|
|
|
</vxe-colgroup>
|
|
|
|
|
<vxe-column title="备注" min-width="200" header-align="center" align="left">
|
|
|
|
|
<vxe-column title="备注" min-width="240" header-align="center" align="left">
|
|
|
|
|
<template #default="{ row }">
|
|
|
|
|
<span>{{ getRemark(row) }}</span>
|
|
|
|
|
</template>
|
|
|
|
|
@ -100,8 +100,8 @@
|
|
|
|
|
<script>
|
|
|
|
|
import { throttle } from '@/utils'
|
|
|
|
|
import { statistics } from '@/api/attendance'
|
|
|
|
|
import {
|
|
|
|
|
departmentListNoAuth
|
|
|
|
|
import {
|
|
|
|
|
departmentListNoAuth
|
|
|
|
|
} from "@/api/common.js"
|
|
|
|
|
import store from "@/store/modules/user.js"
|
|
|
|
|
export default {
|
|
|
|
|
@ -154,40 +154,77 @@ export default {
|
|
|
|
|
},
|
|
|
|
|
getRemark(row) {
|
|
|
|
|
let result = ''
|
|
|
|
|
let overtimeDay = 0
|
|
|
|
|
let leave = new Map(this.tableData.leave_types.map(i => [i, 0]))
|
|
|
|
|
let signDay = Object.entries(row.attendance).reduce((pre, [key, value]) => {
|
|
|
|
|
if (value['qingxiujia'][0]) {
|
|
|
|
|
leave.set(value['qingxiujia'][0]['qingjialeibie'], Number(leave.get(value['qingxiujia'][0]['qingjialeibie']) ?? 0) + (value['qingxiujia'][0]['qingjialeibie'] === '调休' ? Number(value['qingxiujia'][0]['qingjiashijian'] ?? 0) : Number(value['qingxiujia'][0]['day'] ?? 0)))
|
|
|
|
|
// let overtimeDay = 0
|
|
|
|
|
// let leave = new Map(this.tableData.leave_types.map(i => [i, 0]))
|
|
|
|
|
// let signDay = Object.entries(row.attendance).reduce((pre, [key, value]) => {
|
|
|
|
|
// if (value['qingxiujia'][0]) {
|
|
|
|
|
// leave.set(value['qingxiujia'][0]['qingjialeibie'], Number(leave.get(value['qingxiujia'][0]['qingjialeibie']) ?? 0) + (value['qingxiujia'][0]['qingjialeibie'] === '调休' ? Number(value['qingxiujia'][0]['qingjiashijian'] ?? 0) : Number(value['qingxiujia'][0]['day'] ?? 0)))
|
|
|
|
|
// }
|
|
|
|
|
// if (value['qingxiujia'][1]) {
|
|
|
|
|
// leave.set(value['qingxiujia'][1]['qingjialeibie'], Number(leave.get(value['qingxiujia'][1]['qingjialeibie']) ?? 0) + (value['qingxiujia'][1]['qingjialeibie'] === '调休' ? Number(value['qingxiujia'][1]['qingjiashijian'] ?? 0) : Number(value['qingxiujia'][1]['day'] ?? 0)))
|
|
|
|
|
// }
|
|
|
|
|
// if (value['jiaban'] instanceof Array && value['jiaban'].filter(i => i).length > 0) {
|
|
|
|
|
// overtimeDay += value['jiaban'].filter(i => i).reduce((pre1, cur1) => pre1 + (isNaN(Number(cur1.jiabanshichang)) ? 0 : Number(cur1.jiabanshichang)), 0) ?? 0
|
|
|
|
|
// }
|
|
|
|
|
// return pre + (!value.hasOwnProperty('0') ? 0 : (
|
|
|
|
|
// this.workDates.indexOf(key) !== -1 ? (
|
|
|
|
|
// (() => {
|
|
|
|
|
// let temp = 0
|
|
|
|
|
// temp += value['0'].sign_in_at ? 0.5 : 0
|
|
|
|
|
// temp += value['0'].sign_out_at ? 0.5 : 0
|
|
|
|
|
// return temp
|
|
|
|
|
// })()
|
|
|
|
|
// ) : 0
|
|
|
|
|
// ))
|
|
|
|
|
// }, 0)
|
|
|
|
|
// result += signDay === this.workDates.length ? '全勤' : `缺勤${this.workDates.length-signDay}天`
|
|
|
|
|
// result += overtimeDay ? `,加班${overtimeDay}时` : ''
|
|
|
|
|
// Array.from(leave).forEach(([name, day]) => {
|
|
|
|
|
// if (day) {
|
|
|
|
|
// if (name === '调休') {
|
|
|
|
|
// result += `,${name}${day}小时`
|
|
|
|
|
// } else {
|
|
|
|
|
// result += `,${name}${day}天`
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// })
|
|
|
|
|
|
|
|
|
|
// 处理 row.remark 字段
|
|
|
|
|
if (row.remark && typeof row.remark === 'object') {
|
|
|
|
|
const leaveTypeMap = {
|
|
|
|
|
"personal_leave": "事假",
|
|
|
|
|
"sick_leave": "病假",
|
|
|
|
|
"annual_leave_days": "年休假",
|
|
|
|
|
"marriage_leave": "婚假",
|
|
|
|
|
"pregnant_leave": "产假",
|
|
|
|
|
"nursing_leave": "护理假",
|
|
|
|
|
"birth_leave": "育儿假",
|
|
|
|
|
"death_leave": "丧假",
|
|
|
|
|
"injured": "工伤假",
|
|
|
|
|
"nursing_leave_birth": "独生子女带薪护理假",
|
|
|
|
|
"rest_leave": "调休",
|
|
|
|
|
"other_leave": "其他"
|
|
|
|
|
}
|
|
|
|
|
if (value['qingxiujia'][1]) {
|
|
|
|
|
leave.set(value['qingxiujia'][1]['qingjialeibie'], Number(leave.get(value['qingxiujia'][1]['qingjialeibie']) ?? 0) + (value['qingxiujia'][1]['qingjialeibie'] === '调休' ? Number(value['qingxiujia'][1]['qingjiashijian'] ?? 0) : Number(value['qingxiujia'][1]['day'] ?? 0)))
|
|
|
|
|
console.log("row.remark",row.remark)
|
|
|
|
|
|
|
|
|
|
// 先过滤出有效的项目,然后统一处理
|
|
|
|
|
const allItems = Object.entries(row.remark)
|
|
|
|
|
.filter(([key, value]) =>
|
|
|
|
|
value !== null &&
|
|
|
|
|
value !== undefined &&
|
|
|
|
|
value !== '' &&
|
|
|
|
|
leaveTypeMap[key]
|
|
|
|
|
)
|
|
|
|
|
.map(([key, value]) => `${leaveTypeMap[key]}${value}小时`)
|
|
|
|
|
|
|
|
|
|
console.log("allItems", allItems)
|
|
|
|
|
|
|
|
|
|
// 显示所有项目(包括0小时的)
|
|
|
|
|
if (allItems.length > 0) {
|
|
|
|
|
result += allItems.join(',')
|
|
|
|
|
}
|
|
|
|
|
if (value['jiaban'] instanceof Array && value['jiaban'].filter(i => i).length > 0) {
|
|
|
|
|
overtimeDay += value['jiaban'].filter(i => i).reduce((pre1, cur1) => pre1 + (isNaN(Number(cur1.jiabanshichang)) ? 0 : Number(cur1.jiabanshichang)), 0) ?? 0
|
|
|
|
|
}
|
|
|
|
|
return pre + (!value.hasOwnProperty('0') ? 0 : (
|
|
|
|
|
this.workDates.indexOf(key) !== -1 ? (
|
|
|
|
|
(() => {
|
|
|
|
|
let temp = 0
|
|
|
|
|
temp += value['0'].sign_in_at ? 0.5 : 0
|
|
|
|
|
temp += value['0'].sign_out_at ? 0.5 : 0
|
|
|
|
|
return temp
|
|
|
|
|
})()
|
|
|
|
|
) : 0
|
|
|
|
|
))
|
|
|
|
|
}, 0)
|
|
|
|
|
result += signDay === this.workDates.length ? '全勤' : `缺勤${this.workDates.length-signDay}天`
|
|
|
|
|
result += overtimeDay ? `,加班${overtimeDay}时` : ''
|
|
|
|
|
Array.from(leave).forEach(([name, day]) => {
|
|
|
|
|
if (day) {
|
|
|
|
|
if (name === '调休') {
|
|
|
|
|
result += `,${name}${day}小时`
|
|
|
|
|
} else {
|
|
|
|
|
result += `,${name}${day}天`
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
console.log("result",result)
|
|
|
|
|
return result
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|