|
@@ -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 == '选择请假类型') {
|