班组bug
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
* @Author: zwq
|
||||
* @Date: 2025-10-13 15:07:24
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2025-11-04 16:07:45
|
||||
* @LastEditTime: 2025-11-11 15:32:04
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
@@ -135,6 +135,11 @@
|
||||
<div v-if="stepNum == 2">
|
||||
<small-title style="margin: 16px 0" size="sm" :no-padding="true">
|
||||
班次
|
||||
<el-tag type="warning" style="color: black" v-if="!isClassTimePass">
|
||||
<i class="el-icon-warning" style="color: #ffbd02"></i>
|
||||
两班倒和三班倒的班次设置时间
|
||||
<span style="color: red">不能重叠,且必须连续覆盖24小时。</span>
|
||||
</el-tag>
|
||||
</small-title>
|
||||
<base-table
|
||||
:table-props="tableProps1"
|
||||
@@ -438,6 +443,7 @@ export default {
|
||||
},
|
||||
],
|
||||
stepNum: 1, // 当前第几步
|
||||
isEdit: false, //是否是编辑状态,编辑的时候,让前端上一步和取消都不用接口
|
||||
shiftTypeEdit: undefined, //该值为编辑时获取的shiftType,到第二步,判断dataForm.shiftType是否改变,同时改变班次信息
|
||||
//第一步参数
|
||||
dataForm: {
|
||||
@@ -525,6 +531,7 @@ export default {
|
||||
btnName: '编辑',
|
||||
},
|
||||
].filter((v) => v),
|
||||
isClassTimePass: true, //修改班次时间后,需要判断时间是否有覆盖,且是否覆盖24小时
|
||||
tableData1: [],
|
||||
tableProps2,
|
||||
tableBtn2: [
|
||||
@@ -614,8 +621,9 @@ export default {
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
init(id) {
|
||||
init(id,isEdit) {
|
||||
this.dataForm.id = id || undefined;
|
||||
this.isEdit = isEdit || false
|
||||
this.$nextTick(() => {
|
||||
this.$refs['dataForm'].resetFields();
|
||||
if (this.dataForm.id) {
|
||||
@@ -643,18 +651,33 @@ export default {
|
||||
//上一步
|
||||
upSubmit() {
|
||||
if (this.stepNum == 2) {
|
||||
returnStepOne(this.dataForm.id).then((res) => {
|
||||
if (!this.isEdit) {
|
||||
//编辑的时候,让前端上一步和取消都不用接口,
|
||||
returnStepOne(this.dataForm.id).then((res) => {
|
||||
this.stepNum -= 1;
|
||||
this.$emit('setSN', this.stepNum);
|
||||
this.$nextTick(() => {
|
||||
this.setDataForm();
|
||||
});
|
||||
});
|
||||
} else {
|
||||
this.stepNum -= 1;
|
||||
this.$emit('setSN', this.stepNum);
|
||||
this.$nextTick(() => {
|
||||
this.setDataForm();
|
||||
});
|
||||
});
|
||||
}
|
||||
} else if (this.stepNum == 3) {
|
||||
returnStepTwo(this.dataForm.id).then((res) => {
|
||||
if (!this.dataForm.id) {
|
||||
//编辑的时候,让前端上一步和取消都不用接口,
|
||||
returnStepTwo(this.dataForm.id).then((res) => {
|
||||
this.stepNum -= 1;
|
||||
this.$emit('setSN', this.stepNum);
|
||||
});
|
||||
} else {
|
||||
this.stepNum -= 1;
|
||||
this.$emit('setSN', this.stepNum);
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
//下一步
|
||||
@@ -695,6 +718,7 @@ export default {
|
||||
return;
|
||||
}
|
||||
if (this.stepNum == 2) {
|
||||
//班组验证
|
||||
if (!this.tableData2 || this.tableData2.length == 0) {
|
||||
this.$message('班组不能为空');
|
||||
return;
|
||||
@@ -732,6 +756,11 @@ export default {
|
||||
return;
|
||||
}
|
||||
|
||||
//班次验证
|
||||
if (!this.isClassTimePass) {
|
||||
this.$message('班次内时间有误,请重新填写!');
|
||||
return;
|
||||
}
|
||||
let data = {};
|
||||
data.planId = this.dataForm.id;
|
||||
data.groupPlanClassesBaseVOList = []; //排班-班次信息list
|
||||
@@ -743,6 +772,7 @@ export default {
|
||||
startTime: item.startTime,
|
||||
endTime: item.endTime,
|
||||
daySpan: item.daySpan,
|
||||
code: item.code,
|
||||
};
|
||||
data.groupPlanClassesBaseVOList.push(obj);
|
||||
});
|
||||
@@ -868,6 +898,51 @@ export default {
|
||||
this.tableData1.push(obj1, obj2, obj3);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 将时间字符串转换为分钟数
|
||||
* @param {string} timeStr - 时间字符串,如 "08:00:00"
|
||||
* @returns {number} 分钟数
|
||||
*/
|
||||
timeToMinutes(timeStr) {
|
||||
const [hours, minutes, s] = timeStr.split(':').map(Number);
|
||||
return hours * 60 + minutes;
|
||||
},
|
||||
/**
|
||||
* 修改班次时间后,需要判断时间是否有覆盖,且是否覆盖24小时
|
||||
* @param {string} start1 - 开始时间1
|
||||
* @param {string} end1 - 结束时间1
|
||||
* @param {string} start2 - 开始时间2
|
||||
* @param {string} end2 - 结束时间2
|
||||
* @returns {boolean} 是否重叠 true则重叠,false则可以使用
|
||||
*/
|
||||
isTimeOverlap(start1, end1, start2, end2) {
|
||||
const start1Min = this.timeToMinutes(start1);
|
||||
const end1Min = this.timeToMinutes(end1);
|
||||
const start2Min = this.timeToMinutes(start2);
|
||||
const end2Min = this.timeToMinutes(end2);
|
||||
|
||||
// 处理跨天情况
|
||||
const totalMinutes = 24 * 60;
|
||||
|
||||
// 如果结束时间小于开始时间,说明跨天
|
||||
const isEnd1NextDay = end1Min < start1Min;
|
||||
const isEnd2NextDay = end2Min < start2Min;
|
||||
|
||||
if (isEnd1NextDay && isEnd2NextDay) {
|
||||
// 两个时间段都跨天,直接比较
|
||||
return true;
|
||||
} else if (isEnd1NextDay) {
|
||||
// 第一个时间段跨天
|
||||
return start2Min < end1Min || end2Min > start1Min;
|
||||
} else if (isEnd2NextDay) {
|
||||
// 第二个时间段跨天
|
||||
return start1Min < end2Min || end1Min > start2Min;
|
||||
} else {
|
||||
// 都不跨天,正常比较
|
||||
return start1Min < end2Min && end1Min > start2Min;
|
||||
}
|
||||
},
|
||||
//编辑班次
|
||||
handleClick1(val) {
|
||||
this.addOrUpdateVisible1 = true;
|
||||
@@ -948,6 +1023,44 @@ export default {
|
||||
this.tableData1.forEach((item, index) => {
|
||||
item.sort = index + 1;
|
||||
});
|
||||
//修改班次时间后,需要判断时间是否有覆盖,且是否覆盖24小时,isTimeOverlap方法返回false才是校验通过
|
||||
if (this.dataForm.shiftType == 2) {
|
||||
const twoClass = this.tableData1.map(({ startTime, endTime }) => ({
|
||||
startTime,
|
||||
endTime,
|
||||
}));
|
||||
|
||||
this.isClassTimePass = !this.isTimeOverlap(
|
||||
twoClass[0].startTime,
|
||||
twoClass[0].endTime,
|
||||
twoClass[1].startTime,
|
||||
twoClass[1].endTime
|
||||
);
|
||||
} else if (this.dataForm.shiftType == 3) {
|
||||
const threeClass = this.tableData1.map(({ startTime, endTime }) => ({
|
||||
startTime,
|
||||
endTime,
|
||||
}));
|
||||
const result1 = this.isTimeOverlap(
|
||||
threeClass[0].startTime,
|
||||
threeClass[0].endTime,
|
||||
threeClass[1].startTime,
|
||||
threeClass[1].endTime
|
||||
);
|
||||
const result2 = this.isTimeOverlap(
|
||||
threeClass[1].startTime,
|
||||
threeClass[1].endTime,
|
||||
threeClass[2].startTime,
|
||||
threeClass[2].endTime
|
||||
);
|
||||
const result3 = this.isTimeOverlap(
|
||||
threeClass[0].startTime,
|
||||
threeClass[0].endTime,
|
||||
threeClass[2].startTime,
|
||||
threeClass[2].endTime
|
||||
);
|
||||
this.isClassTimePass = !(result1 || result2 || result3);
|
||||
}
|
||||
this.cancel1();
|
||||
},
|
||||
refreshTableData2(val) {
|
||||
@@ -1050,7 +1163,8 @@ export default {
|
||||
});
|
||||
},
|
||||
cancelStep() {
|
||||
if (this.stepNum > 1) {
|
||||
if (this.stepNum > 1 && !this.isEdit) {
|
||||
//编辑的时候,让前端上一步和取消都不用接口,
|
||||
cancelStepThree(this.dataForm.id).then((res) => {
|
||||
this.$message('已取消计划');
|
||||
this.$emit('refreshDataList');
|
||||
|
||||
Reference in New Issue
Block a user