Browse Source

请假时间计算 不在工作日的工时去除 我的申请页面调整

chenc 3 years ago
parent
commit
87575a0c3a
2 changed files with 99 additions and 10 deletions
  1. 1 1
      src/views/activiti/applyList.vue
  2. 98 9
      src/views/activiti/form/demoForm2.vue

+ 1 - 1
src/views/activiti/applyList.vue

@@ -59,7 +59,7 @@
     </div>
 
     <!-- table区域-begin -->
-    <a-table :scroll="scroll+200" bordered
+    <a-table :scroll="scroll" bordered
       ref="table"
       size="small"
       rowKey="id"

+ 98 - 9
src/views/activiti/form/demoForm2.vue

@@ -508,15 +508,81 @@ function getFiledNames(formData) {
 
 //根据开始时间 结束时间计算天数
 function startEndFun(start, end) {
-  if (start && end) {
-    let startTime = new Date(start) // 开始时间
-    let endTime = new Date(end) // 结束时间
-    let usedTime = endTime - startTime // 相差的毫秒数
-    let days = (usedTime / 1000 / 60 / 60).toFixed(2) // 计算出天数
-    return days
-  } else {
-    return null
-  }
+  let startTime=new Date(start)
+  let endTime=new Date(end)
+  if (startTime >= endTime) return 0;
+        //1,分钟取整
+        startTime = carryTime(startTime);
+        endTime = carryTime(endTime);
+        //2,计算总天数
+        var totalTime = 0;//工时,天数
+        if (startTime.getDay() == 6 || startTime.getDay() == 0) {
+            totalTime = endTime.getDate() - startTime.getDate();
+        } else {
+            totalTime = Math.floor(((endTime - startTime) / (3600 * 1000)) / 24);
+        }
+        //3,拿初始值赋值给一个临时变量
+        var tempStartTime = new Date();
+        tempStartTime.setTime(startTime.getTime());
+        //4,计算出总天数
+        while (tempStartTime.getDate() < endTime.getDate()) {
+            if (tempStartTime.getDay() == 6 || tempStartTime.getDay() == 0) {//周六或者周日减去
+                totalTime--;
+            }
+            tempStartTime.setDate(tempStartTime.getDate() + 1);
+        }
+ 
+        //5,计算出总小时数
+        var temp = 0;//工时,小时
+        do {
+            if (startTime.getDay() == 6 || startTime.getDay() == 0) {//周六周日
+                startTime.setDate(startTime.getDate() + 1);
+                //*********周六周日直接跳过,初始化为早晨9点
+                startTime.setHours(9);
+                startTime.setMinutes(0);
+                continue;
+            }
+
+            if (endTime.getDay() == 6 || endTime.getDay() == 0) {//周六周日
+                endTime.setDate(endTime.getDate() + 1);
+                //*********周六周日直接跳过,初始化为早晨9点
+                endTime.setHours(9);
+                endTime.setMinutes(0);
+                continue;
+            }
+ 
+            let tempMinutes = startTime.getHours() * 60 + startTime.getMinutes();
+            //上午9点到12点半,算工时
+            if (tempMinutes >= 9 * 60 && tempMinutes < (12 * 60 )) {
+                temp += 0.05;
+            }
+            //上午14点到18点半,算工时
+            if (tempMinutes >= 13 * 60 && tempMinutes < (18 * 60 )) {
+                temp += 0.05;
+            }
+            startTime.setTime(startTime.getTime() + 0.5 * 3600 * 1000);//每次增加半个小时
+        } while (startTime.getHours() * 60 + startTime.getMinutes() != endTime.getHours() * 60 + endTime.getMinutes())
+        {
+ 
+            totalTime += Math.floor(temp / 0.8);
+            totalTime += temp % 0.8;
+            totalTime = Math.round(totalTime * 100) / 100
+        }
+        var days = Math.floor(totalTime);
+        var hours = Math.round((totalTime - days) * 100) / 10;
+        console.log(days + '天', hours + '小时');
+ 
+        return days * 8 + hours;
+
+  // if (start && end) {
+  //   let startTime = new Date(start) // 开始时间
+  //   let endTime = new Date(end) // 结束时间
+  //   let usedTime = endTime - startTime // 相差的毫秒数
+  //   let days = (usedTime / 1000 / 60 / 60).toFixed(2) // 计算出天数
+  //   return days
+  // } else {
+  //   return null
+  // }
 }
 
 //格式化时间
@@ -540,9 +606,32 @@ function formatDate(date, fmt) {
   return fmt
 }
 
+
 function padLeftZero(str) {
   return ('00' + str).substr(str.length)
 }
+
+/*
+    * 0-15分不算工时
+    * 15-45算半个小时
+    * 45-60算一个小时
+    * */
+    function carryTime(date) {
+        if (date.getMinutes() > 0 && date.getMinutes() < 15) {
+            date.setMinutes(0);
+        }
+        if (date.getMinutes() >= 15 && date.getMinutes() < 30) {
+            date.setMinutes(30);
+        }
+        if (date.getMinutes() > 30 && date.getMinutes() < 45) {
+            date.setMinutes(30);
+        }
+        if (date.getMinutes() >= 45) {
+            date.setHours(date.getHours() + 1);
+            date.setMinutes(0);
+        }
+        return date;
+    }
 </script>
 <style lang="less" scoped>
 .form-main {