From eed815548f631ca94c57077f8de01b95d81a57ff Mon Sep 17 00:00:00 2001
From: lion <120344285@qq.com>
Date: Tue, 8 Apr 2025 16:43:26 +0800
Subject: [PATCH] =?UTF-8?q?=E9=9D=9E=E5=9C=A8=E7=BC=96=E5=8A=A0=E7=8F=AD?=
=?UTF-8?q?=E7=BB=9F=E8=AE=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/attendance/otherovertimechart.vue | 224 ++++++++++++--------
1 file changed, 132 insertions(+), 92 deletions(-)
diff --git a/src/views/attendance/otherovertimechart.vue b/src/views/attendance/otherovertimechart.vue
index 8fd09fe..3886d3a 100644
--- a/src/views/attendance/otherovertimechart.vue
+++ b/src/views/attendance/otherovertimechart.vue
@@ -5,52 +5,50 @@
-
-
-
+
+
搜索
-
-
+
{{row.kaishiriqi?row.kaishiriqi.substring(0,11):''}}
-
-
-
-
+
+
+
+
{{row.kaishiriqi?row.kaishiriqi.substring(11,row.kaishiriqi.length):''}}-{{row.kaishiriqi?row.jieshushijian.substring(11,row.jieshushijian.length):''}}
-
-
-
+
+
+
-
-
+
+
@@ -62,8 +60,8 @@
} from "@/api/chart"
import {
departmentListNoAuth
- } from "@/api/common.js"
- import store from "@/store/modules/user.js"
+ } from "@/api/common.js"
+ import store from "@/store/modules/user.js"
export default {
data() {
return {
@@ -73,11 +71,11 @@
page: 1,
page_size: 10,
month: this.$moment().format('YYYY-MM'),
- department_id: '',
- is_week:1
- },
- my_department_id:"",
- is_bgs:false, // 是否是办公室
+ department_id: '',
+ is_week: 1
+ },
+ my_department_id: "",
+ is_bgs: false, // 是否是办公室
departments: [],
mergeCells: [],
exportName: '加班统计表',
@@ -118,7 +116,6 @@
let _arr = []
const result = [];
_arr = arr.filter(item => item.overtime && item.overtime.length > 0)
-
_arr.forEach(item => {
const {
id,
@@ -126,40 +123,40 @@
department,
overtime
} = item;
- const allDay = overtime.reduce((sum, overtimeItem) => sum + parseFloat(overtimeItem.jiabanshichang), 0);
- overtime.forEach(overtimeItem => {
- let convertTime = 0 //折算加班
- if(overtimeItem.day_type=='normal'){
- overtimeItem.day_type_name = '工作日'
- convertTime = parseFloat(overtimeItem.jiabanshichang) * 1.5
- }else if(overtimeItem.day_type=='week'){
- overtimeItem.day_type_name = '双休日'
- convertTime = parseFloat(overtimeItem.jiabanshichang) * 2
- }else if(overtimeItem.day_type=='holiday'){
- overtimeItem.day_type_name = '节假日'
- convertTime = parseFloat(overtimeItem.jiabanshichang) * 3
+ let obj = {}
+ const allDay = overtime.reduce((sum, overtimeItem) => sum + parseFloat(overtimeItem.jiabanshichang), 0);
+ overtime.forEach(overtimeItem => {
+ let convertTime = 0 //折算加班
+ if (overtimeItem.day_type == 'normal') {
+ overtimeItem.day_type_name = '工作日'
+ convertTime = parseFloat(overtimeItem.jiabanshichang) * 1.5
+ } else if (overtimeItem.day_type == 'week') {
+ overtimeItem.day_type_name = '双休日'
+ convertTime = parseFloat(overtimeItem.jiabanshichang) * 2
+ } else if (overtimeItem.day_type == 'holiday') {
+ overtimeItem.day_type_name = '节假日'
+ convertTime = parseFloat(overtimeItem.jiabanshichang) * 3
}
+ overtimeItem.convertTime = parseFloat(convertTime).toFixed(2);
+ });
+ const allConvertTime = overtime.reduce((sum, overtimeItem) => sum + parseFloat(overtimeItem.convertTime),
+ 0);
+ overtime.forEach(overtimeItem => {
overtimeItem.pid = id;
overtimeItem.name = name;
overtimeItem.department_name = department.name
overtimeItem.sortnumber = department.sortnumber
- overtimeItem.department_id = department.id
- overtimeItem.convertTime = parseFloat(convertTime).toFixed(2);
+ overtimeItem.department_id = department.id
overtimeItem.allDay = parseFloat(allDay).toFixed(2);
+ overtimeItem.allConvertTime = parseFloat(allConvertTime).toFixed(2);
result.push(overtimeItem);
- });
-
- // 累计折算时长
- const allConvertTime = result.reduce((sum, overtimeItem) => sum + parseFloat(overtimeItem.convertTime), 0);
- result.forEach(overtimeItem => {
- overtimeItem.allConvertTime = parseFloat(allConvertTime).toFixed(2);
- });
-
+ // 累计折算时长
- result.sort((a, b) => {
- return a.sortnumber - b.sortnumber
- })
+ });
});
+ result.sort((a, b) => {
+ return a.sortnumber - b.sortnumber
+ })
this.mergeCells = this.generateMergeCells(result)
return result;
},
@@ -181,47 +178,90 @@
},
// 合并单元格
generateMergeCells(data) {
- const columns = this.$refs.table.getColumns()
+ const columns = this.$refs.table.getColumns();
let mergeCells = [];
- const columnsToMerge = ['department_name', 'name', 'allDay','allConvertTime'];
+ const columnsToMerge = ['department_name', 'name', 'allDay', 'allConvertTime'];
+
columnsToMerge.forEach(key => {
const col = columns.findIndex(item => item['field'] === key);
if (col === -1) {
return;
}
- for (let i = 0; i < data.length; i++) {
- let rowspan = 1;
- const currentValue = data[i][key];
- for (let j = i + 1; j < data.length; j++) {
- if (data[j][key] === currentValue) {
- rowspan++;
- } else {
- break;
+
+ if (key === 'allDay' || key === 'allConvertTime') {
+ // 对于 allDay 和 allConvertTime 列,先按 name 分组处理
+ const groupedByName = {};
+ data.forEach((row, index) => {
+ const name = row.name;
+ if (!groupedByName[name]) {
+ groupedByName[name] = [];
}
- }
- if (rowspan > 1) {
- mergeCells.push({
- row: i,
- col,
- rowspan,
- colspan: 1
+ groupedByName[name].push({
+ row,
+ index
});
- i += rowspan - 1;
+ });
+
+ for (const nameGroup of Object.values(groupedByName)) {
+ for (let i = 0; i < nameGroup.length; i++) {
+ let rowspan = 1;
+ const currentValue = nameGroup[i].row[key];
+ for (let j = i + 1; j < nameGroup.length; j++) {
+ if (nameGroup[j].row[key] === currentValue) {
+ rowspan++;
+ } else {
+ break;
+ }
+ }
+ if (rowspan > 1) {
+ const realRowIndex = nameGroup[i].index;
+ mergeCells.push({
+ row: realRowIndex,
+ col,
+ rowspan,
+ colspan: 1
+ });
+ i += rowspan - 1;
+ }
+ }
+ }
+ } else {
+ // 对于其他列,正常合并相邻且值相同的单元格
+ for (let i = 0; i < data.length; i++) {
+ let rowspan = 1;
+ const currentValue = data[i][key];
+ for (let j = i + 1; j < data.length; j++) {
+ if (data[j][key] === currentValue) {
+ rowspan++;
+ } else {
+ break;
+ }
+ }
+ if (rowspan > 1) {
+ mergeCells.push({
+ row: i,
+ col,
+ rowspan,
+ colspan: 1
+ });
+ i += rowspan - 1;
+ }
}
}
});
+
return mergeCells;
- },
+ }
},
computed: {},
- created() {
- this.my_department_id = store.state.department?store.state.department.id:''
- this.dName = store.state.department?store.state.department.name:'全部科室'
- if(this.my_department_id){
- this.is_bgs = this.my_department_id==2?true:false
- this.select.department_id = this.my_department_id
-
+ created() {
+ this.my_department_id = store.state.department ? store.state.department.id : ''
+ this.dName = store.state.department ? store.state.department.name : '全部科室'
+ if (this.my_department_id) {
+ this.is_bgs = this.my_department_id == 2 ? true : false
+ this.select.department_id = this.my_department_id
+
}
this.getDepartmentList()
this.getList()
@@ -236,14 +276,14 @@
}
-