소스 검색

工时管家移动端调整时间段填报时的重叠校验增加前置条件

Lijy 1 년 전
부모
커밋
ce1130b180
1개의 변경된 파일32개의 추가작업 그리고 25개의 파일을 삭제
  1. 32 25
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

+ 32 - 25
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -1263,33 +1263,36 @@ export default {
             // this.totalReportHours = hours.toFixed(2)
             console.log('timeArr', timeArr)
             if (this.reportTimeType.multiWorktime == 1 || this.user.timeType.type == 2) {
-                this.getTimeHours(timeArr)
+                const { timeCanOverlap } = this.reportTimeType // timeCanOverlap 为零时校验不允许重叠
+                if(timeCanOverlap == 0) {
+                    this.getTimeHours(timeArr)
+                } else {
+                    const newTimeArr = this.mergeTimeIntervals(timeArr)
+                    this.getTimeHours(newTimeArr)
+                }
             } else {
                 this.totalReportHours = hours.toFixed(2)
             }
-
-            // if(this.user.timeType.type == 2 && this.reportTimeType.multiWorktime != 1) {
-            //     let flg = false
-            //     let zuiNum = 0
-            //     for(let j in arrNum) {
-            //         zuiNum += arrNum[j]
-            //         console.log(zuiNum, arrNum[j], flg)
-            //         if(flg) {
-            //             this.$set(this.form.domains[j],'isOvertime', true)
-            //             this.$set(this.form.domains[j],'overtimeHours', arrNum[j])
-            //         }
-            //         if(zuiNum > this.user.timeType.allday && !flg) {
-            //             flg = true
-            //             this.$set(this.form.domains[j],'isOvertime', true)
-            //             this.$set(this.form.domains[j],'overtimeHours', zuiNum - this.user.timeType.allday)
-            //         }
-
-            //         if(zuiNum < this.user.timeType.allday && !flg) {
-            //             this.$set(this.form.domains[j],'isOvertime', false)
-            //             this.$set(this.form.domains[j],'overtimeHours', '')
-            //         }
-            //     }
-            // }
+        },
+        // 处理重叠时间段
+        mergeTimeIntervals(timeIntervals) {
+            // 按照开始时间排序
+            timeIntervals.sort((a, b) => a.startTime.localeCompare(b.startTime));
+        
+            const mergedIntervals = [];
+            for (const interval of timeIntervals) {
+                if (
+                    mergedIntervals.length === 0 ||
+                    interval.startTime > mergedIntervals[mergedIntervals.length - 1].endTime
+                ) {
+                    // 当前时间段与存储数组中的时间段没有重叠,直接加入存储数组
+                    mergedIntervals.push(interval);
+                } else if (interval.endTime > mergedIntervals[mergedIntervals.length - 1].endTime) {
+                    // 当前时间段与存储数组中的时间段有重叠,但是未完全包含,需要合并时间段
+                    mergedIntervals[mergedIntervals.length - 1].endTime = interval.endTime;
+                }
+            }
+            return mergedIntervals;
         },
         getTimeHours(arr) {
             this.$axios.post("/report/getHoursByTimeRange", { timeJsonStr: JSON.stringify(arr) })
@@ -2075,13 +2078,17 @@ export default {
                 }
             }
             this.dateAr = alp
-            if (this.dateAr.length > 0) {
+            console.log(this.reportTimeType, this.dateAr, '<=== this.reportTimeType')
+
+            const { timeCanOverlap } = this.reportTimeType // timeCanOverlap 为零时校验不允许重叠
+            if (this.dateAr.length > 0 && timeCanOverlap == 0) {
                 let trus = this.fns()
                 if (!trus) {
                     this.$toast('填写的时间段重叠')
                     return
                 }
             }
+
             //检查子项目
             if (this.user.timeType.subProMustFill == 1) {
                 for (var p in this.form.domains) {