Kaynağa Gözat

fix: 加班功能

chenzhen2 2 yıl önce
ebeveyn
işleme
4663bcbe85

+ 3 - 1
src/utils/index.ts

@@ -468,10 +468,12 @@ export const getTimers = function () {
       str = i
     }
     timers.push(str + ':00')
-    if (i !== 24) {
+    if (i <24) {
       timers.push(str + ':30')
     }
   }
+  console.log("timers====")
+  console.log(timers)
   return timers
 }
 

+ 147 - 45
src/views/envmonitor/components/workOvertime/index.vue

@@ -18,24 +18,22 @@
         </div>
       </div>
       <div class="sliders-list" id="sliderListId">
-        <div
-          class="sliders-wrapper"
-          id="slidersWrapperId"
-          :key="'slider' + index"
-          v-for="(item, index) in nowTimerArr"
-        >
-          <div class="sliders">
-            <div class="label" v-show="index === 0 || index % 2 === 0">
-              {{ item.timer }}
+        <template v-for="(item, index) in nowTimerArr" :key="'slider' + index">
+          <div class="sliders-wrapper" id="slidersWrapperId">
+            <div class="sliders">
+              <div class="label" v-show="index === 0 || index % 2 === 0">
+                {{ item.timer }}
+              </div>
+              <div
+                class="slider-box"
+                @click="checkSlider(item, index)"
+                :data-index="index"
+              ></div>
             </div>
-            <div
-              class="slider-box"
-              @click="checkSlider(item, index)"
-              :data-index="index"
-            ></div>
           </div>
-        </div>
-        <div class="slider-btn" id="sliderBtnId">
+        </template>
+
+        <div class="slider-btn" id="sliderBtnId" @click="triggerDelTime">
           <div class="start" id="startId"></div>
           <div class="end-box" id="endBoxId">
             <div class="end" id="endId"></div>
@@ -46,9 +44,13 @@
     </div>
     <div class="add-time-btn">
       <div class="cancel-btn">取消</div>
-      <div class="comfirm-btn" 
-      :class="formBtn?'comfirm-btn-diabled':''"
-      @click="addWorkTimer">提交申请</div>
+      <div
+        class="comfirm-btn"
+        :class="formBtn ? 'comfirm-btn-diabled' : ''"
+        @click="addWorkTimer"
+      >
+        提交申请
+      </div>
     </div>
   </div>
 </template>
@@ -74,6 +76,7 @@ import {
   getNowTime,
   getRelNowTime,
   getTimers,
+  getUserInfo,
   getWeekDate,
   parseImgUrl,
 } from "@/utils";
@@ -107,7 +110,9 @@ export default defineComponent({
     let nowData: any = [];
     let redUrl: any = `${parseImgUrl("ipdImages", "time-check.svg")}`;
     let bgRed: any = `linear-gradient(0deg, rgba(255, 0, 0, 0.2), rgba(255, 0, 0, 0.2)), url(${redUrl})`;
+    const userInfo: any = getUserInfo();
     const proxyData = reactive({
+      userInfo: userInfo,
       screenInfo: screenInfo,
       projectId: props.projectId,
       workkArr: props.workkArr,
@@ -159,9 +164,7 @@ export default defineComponent({
         let sliderList: any = document.querySelector("#sliderListId");
         let slidersWrapper: any = document.querySelector("#slidersWrapperId");
         sliderList.style.width =
-          slidersWrapper.offsetWidth * timerArr.length +
-          slidersWrapper.offsetWidth +
-          "px";
+          slidersWrapper.offsetWidth * timerArr.length - 15 + "px";
         let index: any = proxyData.getNowPerstion(timerArr).nowIndex;
         let len: any = proxyData.getNowPerstion(timerArr).len;
         let sliderLeft: any = slidersWrapper.offsetWidth * index;
@@ -226,7 +229,7 @@ export default defineComponent({
       // 判断滑动的位置是否包含服务定制的位置(如果当前滑动的位置在服务定制处不让滑动)
       checkPersionService() {
         let flag: any = false;
-        for (let i = proxyData.startIndex; i <= proxyData.endIndex; i++) {
+        for (let i = proxyData.startIndex; i < proxyData.endIndex; i++) {
           if (proxyData.nowTimerArr[i].isServiceTime) {
             flag = true;
             break;
@@ -423,7 +426,7 @@ export default defineComponent({
         let sliderBoxArr: any = document.querySelectorAll(".slider-box");
         for (let i = 0; i < sliderBoxArr.length; i++) {
           if (i < index) {
-            sliderBoxArr[i].style.background = `#EcEcEc`;
+            sliderBoxArr[i].style.background = `rgba(196, 196, 196, 0.2)`;
           }
         }
       },
@@ -506,6 +509,9 @@ export default defineComponent({
        * 选中当前模块
        */
       checkSlider(item: any, index: any) {
+        if (index === proxyData.nowTimerArr.length - 1) {
+          return;
+        }
         // 按钮的状态
         proxyData.formBtn = false;
         let nowIndex: any = getNowTime()[1];
@@ -522,10 +528,7 @@ export default defineComponent({
           let cusEndTime: any = proxyData.parseCusEndTime(
             proxyData.nowData.cusEndTime
           );
-          if (
-            formatTimer > proxyData.nowData.cusStartTime &&
-            formatTimer < proxyData.nowData.cusEndTime
-          ) {
+          if (formatTimer >= cusStartTime && formatTimer < cusEndTime) {
             return;
           }
         }
@@ -558,10 +561,6 @@ export default defineComponent({
         let nowDate: any = formatDate("YYYY-MM-DD");
         for (let i = 0; i < data.length; i++) {
           let date: any = formatDateStr(data[i].date);
-          // let cusStartTime: any = formatDateStr(data[i].cusStartTime);
-          // let cusEndTime: any = formatDateStr(data[i].cusEndTime);
-          // let cusStartTime: any = data[i].cusStartTime;
-          // let cusEndTime: any = data[i].cusEndTime;
           let cusStartTime: any = proxyData.parseCusStartTime(
             data[i].cusStartTime
           );
@@ -584,11 +583,35 @@ export default defineComponent({
           let customSceneList: any = data[i]?.customSceneList ?? [];
           customSceneList.map((custom: any) => {
             for (let j = 0; j < timerArr.length; j++) {
-              if (
-                timerArr[j].formatTimer >= custom.startTime &&
-                timerArr[j].formatTimer <= custom.endTime
-              ) {
-                timerArr[j].isCheck = true;
+              // debugger
+              if (timerArr[j].formatTimer < cusStartTime) {
+                let tempStartTime: any = proxyData.parseCusStartTime(
+                  custom.startTime
+                );
+                let tempEndTime: any = proxyData.parseCusStartTime(
+                  custom.endTime
+                );
+                // 加班时间在服务定制时间之前
+                if (
+                  timerArr[j].formatTimer >= tempStartTime &&
+                  timerArr[j].formatTimer < tempEndTime
+                ) {
+                  timerArr[j].isCheck = true;
+                }
+              } else {
+                // 加班时间在服务外定制时间之后
+                let tempStartTime: any = proxyData.parseCusEndTime(
+                  custom.startTime
+                );
+                let tempEndTime: any = proxyData.parseCusEndTime(
+                  custom.endTime
+                );
+                if (
+                  timerArr[j].formatTimer >= tempStartTime &&
+                  timerArr[j].formatTimer < tempEndTime
+                ) {
+                  timerArr[j].isCheck = true;
+                }
               }
             }
           });
@@ -649,8 +672,8 @@ export default defineComponent({
         proxyData.sliderSwiper();
         proxyData.endBoxSwiper();
       },
-      // 日期格式化
-      formateTimer() {
+      // 加班数据格式化=》后台需要的数据结构(添加加班逻辑)
+      formateAddTimer() {
         let customSceneList: any = proxyData.nowData.customSceneList;
         let timerArr: any = proxyData.nowData.timerArr;
         let startTime: any = timerArr[proxyData.startIndex].formatTimer;
@@ -727,7 +750,6 @@ export default defineComponent({
             startTime = proxyData.nowData.cusEndTime;
           }
         }
-        debugger
         let relNowTime: any = getRelNowTime();
         let type = "0";
         if (relNowTime >= startTime && relNowTime <= endTime) {
@@ -755,22 +777,102 @@ export default defineComponent({
           startTime: startTime, //类型:String  必有字段  备注://开始时间
           endTime: endTime, //类型:String  必有字段  备注://结束时间
           type: type, //类型:String  必有字段  备注://0 预约加班,1 取消,2 加班(我来了), 3 最后一个走
-          userId: item.userId, //类型:String  必有字段  备注://用户id
-          userPhone: item.userPhone, //类型:String  必有字段  备注://手机号
+          userId: proxyData.userInfo.userId, //类型:String  必有字段  备注://用户id
+          userPhone: proxyData.userInfo.userPhone, //类型:String  必有字段  备注://手机号
           customSceneEqType: "ALL", //类型:String  必有字段  备注://来源 AC 空调入口, SE 灯入口 ALL 加班入口
-          userName: item.userName, //类型:String  必有字段  备注://名字
+          userName: proxyData.userInfo.userName, //类型:String  必有字段  备注://名字
         };
         if (type === "1") {
           obj.id = item.id; //类型:String  必有字段  备注:取消加班时必传
         }
         return obj;
       },
+      //  加班数据格式化=》后台需要的数据结构(删除加班逻辑)
+      formateDelTimer() {
+        let timerArr: any = proxyData.nowData.timerArr;
+        let endIndex: any = proxyData.endIndex > 0 ? proxyData.endIndex - 1 : 0;
+        // 如果当前选择的日期只在已经选中的范围内
+        if (
+          timerArr[proxyData.startIndex].isCheck &&
+          timerArr[endIndex].isCheck
+        ) {
+          let customSceneList: any = proxyData.nowData.customSceneList;
+          let startTime: any = timerArr[proxyData.startIndex].formatTimer;
+          let endTime: any = timerArr[proxyData.endIndex].formatTimer;
+          let delTimerArr: any = [];
+          let addTimeArr: any = [];
+          // 删除时间的数据拼接
+          customSceneList.map((item: any, index: any) => {
+            if (item.startTime < startTime) {
+              if (item.endTime <= endTime) {
+                let delObj: any = proxyData.formaTimeObj(
+                  item,
+                  "1",
+                  item.startTime,
+                  item.endTime
+                );
+                delTimerArr.push(delObj);
+                let addObj: any = proxyData.formaTimeObj(
+                  customSceneList[0],
+                  "0",
+                  item.startTime,
+                  startTime
+                );
+                addTimeArr.push(addObj);
+              } else if (item.endTime > endTime) {
+                let delObj: any = proxyData.formaTimeObj(
+                  item,
+                  "1",
+                  item.startTime,
+                  item.endTime
+                );
+                delTimerArr.push(delObj);
+                let addObj1: any = proxyData.formaTimeObj(
+                  customSceneList[0],
+                  "0",
+                  item.startTime,
+                  startTime
+                );
+                addTimeArr.push(addObj1);
+                let addObj2: any = proxyData.formaTimeObj(
+                  customSceneList[0],
+                  "0",
+                  endTime,
+                  item.endTime
+                );
+                addTimeArr.push(addObj2);
+              }
+            } else if (item.startTime === item.startTime) {
+              if (item.endTime === endTime) {
+                // 整段删除
+                let delObj: any = proxyData.formaTimeObj(
+                  item,
+                  "1",
+                  item.startTime,
+                  item.endTime
+                );
+                delTimerArr.push(delObj);
+              }
+            }
+          });
+          // return formTimeArr;
+        } else {
+          return [];
+        }
+      },
       // 提交申请
       addWorkTimer() {
-        let formTimerArr: any = proxyData.formateTimer();
+        let formTimerArr: any = proxyData.formateAddTimer();
         console.log("提交申请-----");
         console.log(formTimerArr);
       },
+      // 删除
+      triggerDelTime() {
+        let formTimeArr: any = proxyData.formateDelTimer();
+        if (formTimeArr && formTimeArr.length) {
+          alert("确定删除当前时间吗?");
+        }
+      },
     });
     nextTick(() => {
       // proxyData.setScreennWidth()
@@ -1023,7 +1125,7 @@ export default defineComponent({
   }
   .comfirm-btn-diabled {
     background: rgba(196, 196, 196, 0.2);
-    color: #1F2529;
+    color: #1f2529;
   }
 }
 </style>