zxz 2 年 前
コミット
37640eab92
3 ファイル変更136 行追加10 行削除
  1. 6 1
      pages/clock/supp_clock.vue
  2. 3 0
      pages/clock/the_clock.vue
  3. 127 9
      pages/leave/the_leave.vue

+ 6 - 1
pages/clock/supp_clock.vue

@@ -54,12 +54,16 @@
 				border: true,
 				height: 150,
 				autoHeight: true,
-				id: ""
+				id: "",
+				suppDay:'',
 			}
 		},
 
 		onLoad(options) {
 			this.id = options.id
+			let _day = new Date();
+			_day.setTime(_day.getTime());
+			this.suppDay = _day.getFullYear() + "-" + (_day.getMonth() + 1) + "-" + _day.getDate();
 		},
 		// #ifndef MP
 		onNavigationBarButtonTap(e) {
@@ -157,6 +161,7 @@
 							that.detailData.compId = uni.getStorageSync('pcUserInfo').compId
 							that.detailData.commonId = uni.getStorageSync('pcUserInfo').userId
 							that.detailData.supplementClockType = that.typevalue
+							that.detailData.suppDay = that.suppDay
 							that.$api.doRequest('post', '/clockInfo/api/suppClock', that.detailData)
 								.then(res => {
 									if (res.data.code == 200) {

+ 3 - 0
pages/clock/the_clock.vue

@@ -126,6 +126,7 @@
 				clockDistance: "",
 				warehouseType: '1',
 				warehouseBaseInfoList: [],
+				clockDay:'',
 
 			}
 		},
@@ -151,6 +152,7 @@
 			let _day = new Date();
 			_day.setTime(_day.getTime());
 			this.createDate = _day.getFullYear() + "-" + (_day.getMonth() + 1);
+			this.clockDay = _day.getFullYear() + "-" + (_day.getMonth() + 1) + "-" + _day.getDate();
 		},
 		methods: {
 			supp(item) {
@@ -251,6 +253,7 @@
 							that.detailData.phone = uni.getStorageSync('pcUserInfo').userMobilePhone
 							that.detailData.empName = uni.getStorageSync('userInfo').userName
 							that.detailData.clockType = that.typevalue
+							that.detailData.clockDay = that.clockDay
 							if (that.clockDistance.indexOf("km") > -1) {
 								that.detailData.clockDistance = that.clockDistance.replace("km", "") * 1000
 							} else {

+ 127 - 9
pages/leave/the_leave.vue

@@ -38,8 +38,8 @@
 				</view>
 				<view style='position:relative;' class="wrap no-boder">
 					<u-input class='textarea' v-model="detailData.reasonForLeave" :type="type" :border="border"
-						:height="height" :auto-height="autoHeight" maxlength="100"/>
-					<view style='position:absolute;right:10px;bottom:20px;color:#AFB3BF;' >
+						:height="height" :auto-height="autoHeight" maxlength="100" />
+					<view style='position:absolute;right:10px;bottom:20px;color:#AFB3BF;'>
 						{{detailData.reasonForLeave.length}}/100个字
 					</view>
 				</view>
@@ -143,6 +143,7 @@
 				show: false,
 				show1: false,
 				show2: false,
+				isFreeTime: true,
 				detailData: {
 					leaveType: '选择请假类型',
 					reasonForLeave: "",
@@ -172,7 +173,18 @@
 						leaveType: "病假"
 					},
 				],
-
+				startDate:"",
+				endDate:"",
+				beginTime:"",
+				endTime:"",
+				days:"",
+				hours:"",
+				date:"",
+				stWorkTime:"",
+				enWrokTime:"",
+				freeTimeMon:"",
+				freeTimeAft:"",
+				freeTime:"",
 			}
 		},
 		onReachBottom() { //上拉触底函数
@@ -247,18 +259,124 @@
 					this.detailData.leaveTypeKey = "3"
 				}
 			},
+			/**
+			 * 计算请假时长
+			 * beginTime    开始时间
+			 * endTime      结束时间
+			 * stWorkTime   上班时间
+			 * enWrokTime   下班时间
+			 * isFreeTime  是否要去除午休工作时长
+			 * freeTimeMon  午休开始时间
+			 * freeTimeAft  午休结束时间
+			 * 
+			 */
 			dateChange(e) {
 				this.detailData.startDate = e.year + "-" + e.month + "-" + e.day + " " + e.hour + ":" + e.minute
-				// this.startDate1 = e.year + "-" + e.month + "-" + e.day + "-" + e.hour + "-" + e.minute + "-" + e.second
-				// + ":" + "00"
+			},
+			diffDay(earlyDate,lastDate){
+			    return (Date.parse(lastDate) - Date.parse(earlyDate))/1000/60/60/24 +1;
 			},
 			dateChange1(e) {
 				this.detailData.endDate = e.year + "-" + e.month + "-" + e.day + " " + e.hour + ":" + e.minute
-				var endtime = new Date(this.detailData.endDate)
-				var starttime = new Date(this.detailData.startDate)
-				console.log(endtime - starttime)
-				this.detailData.leaveDuration = Math.floor((endtime - starttime) / (3600 * 1000))
+				var days;
+				var hours;
+				var date;
+				var freeTimeAft =13 ;
+				var freeTimeMon = 12;
+				var stWorkTime = 8;
+				var enWrokTime = 17;
+				var isFreeTime = true;
+				var freeTime = freeTimeAft - freeTimeMon;
+
+				var beginTime = (this.detailData.startDate).replace(/-/g, '/');
+				var beginArr = beginTime.split(" ");
+				var beginMonth = parseInt(beginArr[0].split("/")[1]);
+				var beginDay = parseInt(beginArr[0].split("/")[2]);
+				var beginHours = parseInt(beginArr[1].split(":")[0]);
+				var beginMin = parseInt(beginArr[1].split(":")[1]);
+				var beginHoursMin = beginHours + beginMin / 60;
+
+				var endTime = (this.detailData.endDate).replace(/-/g, '/');
+				var endArr = endTime.split(" ");
+				var endMonth = parseInt(endArr[0].split("/")[1]);
+				var endDay = parseInt(endArr[0].split("/")[2]);
+				var endHours = parseInt(endArr[1].split(":")[0]);
+				var endMin = parseInt(endArr[1].split(":")[1]);
+				var endHoursMin = endHours + endMin / 60;
+				//如果beginHoursMin时间小于上班时间都算上班时间
+				if (beginHoursMin <= stWorkTime) {
+					beginHoursMin = stWorkTime;
+				}
+				//如果endHoursMin时间大于上班时间都算下班时间
+				if (endHoursMin >= enWrokTime) {
+					endHoursMin = enWrokTime;
+				}
+				//如果开始时间在freeTimeMon和freeTimeAft之间都算freeTimeAft
+				if (isFreeTime == true) {
+					if (beginHoursMin >= freeTimeMon && beginHoursMin <= freeTimeAft) {
+						beginHoursMin = freeTimeAft;
+					}
+				}
+				//如果结束时间在freeTimeMon和freeTimeAft之间都算freeTimeMon
+				if (isFreeTime == true) {
+					if (endHoursMin >= freeTimeMon && endHoursMin <= freeTimeAft) {
+						endHoursMin = freeTimeMon;
+					}
+				}
+				//获取结束时间-开始时间的天数
+				var daysBetween = this.diffDay(beginTime.substring(0, 10), endTime.substring(0, 10));
+				if (daysBetween > 0) {
+					 var hour = enWrokTime - stWorkTime - freeTime;
+					if (daysBetween == 1) {
+						//同一天
+						if(beginHoursMin < freeTimeMon && endHoursMin > freeTimeAft){
+							hours = (endHoursMin) - (beginHoursMin) - freeTime;
+						}else{
+							hours = endHoursMin - beginHoursMin;
+						}
+					} else if (daysBetween == 2) {
+						//跨一天   
+						//第一天的时长
+						hours = enWrokTime - beginHoursMin;
+						//是否有午休         
+						if (beginHoursMin <= freeTimeMon)
+							hours = hours - freeTime;
+						//第二天的时长    
+						hours += endHoursMin - stWorkTime;
+						//是否有午休 
+						if (endHoursMin >= freeTimeAft)
+							hours = hours - freeTime;
+
+					} else {
+						//跨两天以上 
+						//第一天的时长
+						hours = enWrokTime - beginHoursMin;
+						//是否有午休             
+						if (beginHoursMin <= freeTimeMon)
+							hours = hours - freeTime;
+						//中间时长
+						hours += (daysBetween - 2) * (hour);
+						//最后一天时长
+						hours += endHoursMin - stWorkTime;
+						//是否有午休 
+						if (endHoursMin >= freeTimeAft)
+							hours = hours - freeTime;
+					}
+					days = Math.floor(hours / hour);
+					hours = hours % hour;
+					date = {
+						"days": days,
+						"hours": hours
+					};
+				}
+				this.detailData.leaveDuration = Math.round((date.days * 8 + date.hours) * 10) /10
+				return date;
+				// var endtime = new Date(this.detailData.endDate)
+				// var starttime = new Date(this.detailData.startDate)
+				// console.log(endtime - starttime)
+				// this.detailData.leaveDuration = Math.floor((endtime - starttime) / (3600 * 1000))
 				// this.endDate1 = e.year + "-" + e.month + "-" + e.day + "-" + e.hour + "-" + e.minute + "-" + e.second
+			
 			},
 			submit() {
 				if (!this.detailData.leaveType || this.detailData.leaveType == '选择请假类型') {