Lijy 2 年之前
父节点
当前提交
02d2f9ecab

+ 2 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue

@@ -1111,6 +1111,8 @@
                         param.customDataMaxStatus = param.customDataMaxStatus && param.customDataActive ? 1 : 0
 
                         param.workContentState = param.workContentState ? 1 : 0
+
+                        delete param.excludeTimeList
                         // console.log(param, '将要提交的值')
                         // return
                         this.http.post('/time-type/save',param,

+ 83 - 10
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -1925,7 +1925,10 @@
                 weeklyFilledTimeDate: null,
                 leaveAllNum: 0,
 
-                dataLoading: false
+                dataLoading: false,
+
+                zhoBaoSelectableRange: ['09:30 - 12:00'], // 选择时间的可选时间段
+                vacationTime: {}
             };
         },
         watch: {
@@ -1964,6 +1967,7 @@
         computed: {
             totalReportHours(){
                 let domains = this.workForm.domains
+                console.log(domains, '看看你能')
                 let hours = 0
                 for(let i in domains){
                     if(domains[i].projectId){
@@ -4061,6 +4065,16 @@
                             if (t.pm != null) {
                                 this.timeType.push({value:2, label:this.$t('other.afternoon') +' - '+t.pm+this.$t('time.hour'), hours: t.pm});
                             }
+
+                            let arr = []
+                            for(var i in res.data.excludeTimeList) {
+                                let obj = {
+                                    s: res.data.excludeTimeList[i].startTime,
+                                    e: res.data.excludeTimeList[i].endTime,
+                                }
+                                arr.push(obj)
+                            }
+                            this.vacationTime = arr
                         } else {
                             this.$message({
                                 message: res.msg,
@@ -5061,19 +5075,78 @@
                     var he = 0
                     for(var i in zhi) {
                         if(zhi[i].time && zhi[i].time.length > 0  && i != 'zhoDataTime' && i != 'he') {
-                            var date2 = '2021/12/12 ' + zhi[i].time[1] +':00'
-                            var date1 = '2021/12/12 ' + zhi[i].time[0] +':00'
-                            var date3 = new Date(date2).getTime() - new Date(date1).getTime();
-                            var leave1=date3%(24*3600*1000)
-                            var hours=Math.floor(leave1/(3600*1000))
-                            var leave2=leave1%(3600*1000)
-                            var minutes=Math.floor(leave2/(60*1000))
-                            var shi = hours+'.'+ minutes
-                            he += +shi
+                            // var date2 = '2021/12/12 ' + zhi[i].time[1] +':00'
+                            // var date1 = '2021/12/12 ' + zhi[i].time[0] +':00'
+                            // var date3 = new Date(date2).getTime() - new Date(date1).getTime();
+                            // var leave1=date3%(24*3600*1000)
+                            // var hours=Math.floor(leave1/(3600*1000))
+                            // var leave2=leave1%(3600*1000)
+                            // var minutes=Math.floor(leave2/(60*1000))
+                            // var shi = hours+'.'+ minutes
+                            // he += +shi
+                            let selectionTime = this.getHourMinutes(zhi[i].time[0], zhi[i].time[1])
+                            let subtractedData = 0
+                            // he += +this.getHour(zhi[i].time[0], zhi[i].time[1])
+                            // 计算需要减去的时间
+                            let arr = JSON.parse(JSON.stringify(this.vacationTime))
+                            arr.unshift({s: zhi[i].time[0], e: zhi[i].time[1]})
+                            console.log(arr, '要看的数据')
+
+                            for(var j in arr) {
+                                subtractedData += +this.timeOverlap(j, arr)
+                            }
+                            
+                            he = +selectionTime - +subtractedData
+                            console.log(selectionTime ,subtractedData)
+
                         }
                     }
                     zhi.he = he + 'h'
                 }
+                console.log(zhi.he, '看看结果')
+            },
+            // 判断两个时间段是否重叠
+            timeOverlap(idx, dateAr) {
+                let zhi = 0
+                for (let k in dateAr) {
+                    if (idx !== k) {
+                        if (((dateAr[k].s <= dateAr[idx].s && dateAr[k].e >= dateAr[idx].s) || (dateAr[k].s <= dateAr[idx].s && dateAr[k].e <= dateAr[idx].e))) {
+                            // 选择的时间包含设置的休息时间段 (选择的开始时间和结束时间大于设置的休息时间段)
+                            if(dateAr[idx].s > dateAr[k].s && dateAr[idx].e < dateAr[k].e) {
+                                zhi += 2
+                            }
+                            // 选择的时间包含在设置的休息时间 (选择的开始时间和结束时间都处于在设置的休息时间段内)
+                            if(dateAr[idx].s > dateAr[k].s && dateAr[idx].e > dateAr[k].e) {
+                                zhi += +this.getHour(dateAr[idx].s, dateAr[k].e)
+                            } else if(dateAr[idx].s < dateAr[k].s && dateAr[idx].e > dateAr[k].e) {
+                                zhi += +this.getHour(dateAr[k].e, dateAr[idx].s)
+                            } else {
+                                // 选择的结束时间处于设置的休息时间段内 (选择的结束时间处于的休息时间段)
+                                if(dateAr[k].e < dateAr[idx].e && dateAr[k].e > dateAr[idx].s) {
+                                    zhi += +this.getHour(dateAr[k].e, dateAr[idx].e)
+                                }
+                                // 选择的开始时间处于设置的休息时间段内 (选择的开始时间处于的休息时间段)
+                                if(dateAr[idx].s > dateAr[k].s && dateAr[idx].s < dateAr[k].e) {
+                                    zhi += +this.getHour(dateAr[k].e, dateAr[idx].s)
+                                }
+                            }
+                        }
+                    }
+                }
+                return zhi
+            },
+            // 计算时间
+            getHourMinutes(str, end) {
+                var he = 0
+                var date2 = '2021/12/12 ' + end +':00'
+                var date1 = '2021/12/12 ' + str +':00'
+                var date3 = new Date(date2).getTime() - new Date(date1).getTime();
+                var leave1=date3%(24*3600*1000)
+                var hours=Math.floor(leave1/(3600*1000))
+                var leave2=leave1%(3600*1000)
+                var minutes=Math.floor(leave2/(60*1000))
+                var shi = hours+'.'+ minutes
+                return he += +shi
             },
             // 自动选择事件长度的事件
             zhoXuan(item, i) {

+ 4 - 0
fhKeeper/formulahousekeeper/timesheet_h5/src/views/project/index.vue

@@ -166,6 +166,10 @@
                     sessionStorage.setItem('projectId',JSON.stringify(item.id))
                     this.$router.push("/projectInside");
                 }
+                if(this.user.company.packageWorktime == 1) {
+                    sessionStorage.setItem('projectId',JSON.stringify(item.id))
+                    this.$router.push("/projectInside");
+                }
                 
             },
             popoverSelect(action){

+ 61 - 49
fhKeeper/formulahousekeeper/timesheet_h5/src/views/project/projectInside.vue

@@ -1,55 +1,10 @@
 <template>
     <div>
-        <van-nav-bar :title="projectDetail.projectName ? projectDetail.projectName : '-'" left-text="返回" @click-left="back" fixed left-arrow :right-text="(active == 1 && (projectManagement || user.id==projectDetail.inchargerId || user.id==projectDetail.creatorId)) ? '编辑项目' : ''" @click-right="openProject()" />
+        <van-nav-bar :title="projectDetail.projectName ? projectDetail.projectName : '-'" left-text="返回" @click-left="back" fixed left-arrow :right-text="(active == 0 && (projectManagement || user.id==projectDetail.inchargerId || user.id==projectDetail.creatorId)) ? '编辑项目' : ''" @click-right="openProject()" />
+        <!-- <van-nav-bar :title="projectDetail.projectName ? projectDetail.projectName : '-'" left-text="返回" @click-left="back" fixed left-arrow :right-text="activeTextFlg ? '编辑项目' : ''" @click-right="openProject()" /> -->
         <div class="content">
             <!-- <van-cell><div style="width:100%;text-align:center;font-size:120%">{{projectDetail.projectName ? projectDetail.projectName : '-'}}</div></van-cell> -->
-            <van-tabs v-model="active" @change="activeChange">
-                <!-- 任务看板 -->
-                <van-tab title="任务看板">
-                    <van-cell title="任务分组" :value="inside.taskGroup.active?inside.taskGroup.active.name:''" @click="inside.taskGroup.show = true"></van-cell>
-                    <van-popup v-model="inside.taskGroup.show" position="bottom">
-                        <van-picker
-                        show-toolbar
-                        :columns="inside.taskGroup.list"
-                        @confirm="taskGroupChange"
-                        @cancel="inside.taskGroup.show = false;$forceUpdate();">
-                            <template #option="item">
-                                <span>{{item.name}}</span>
-                            </template>
-                        </van-picker>
-                    </van-popup>
-                    <van-cell title="任务列表" :value="inside.stages.active?inside.stages.active.stagesName:''" @click="inside.stages.show = true"></van-cell>
-                    <van-popup v-model="inside.stages.show" position="bottom">
-                        <van-picker
-                        show-toolbar
-                        :columns="inside.stages.list"
-                        @confirm="stagesChange"
-                        @cancel="inside.stages.show = false;$forceUpdate();">
-                            <template #option="item">
-                                <span>{{item.stagesName}}</span>
-                            </template>
-                        </van-picker>
-                    </van-popup>
-                    <!-- <van-cell value-class="addtaskvalue">
-                        <van-button plain type="info" class="addtaskbutton" @click="toEditask(null)">新建任务</van-button>
-                    </van-cell> -->
-                    <van-icon name="add-o" class="addtaskicon" @click="toEditask(null)" />
-                    <div class="taskList">
-                        <van-cell v-for="item in inside.taskList" :key="item.id">
-                            <div style="line-height:0.8rem">任务名称:{{item.name}}</div>
-                            <div style="line-height:0.8rem">起止时间:
-                                <span v-if="item.startDate && item.endDate">{{(item.startDate ? item.startDate : ' - ') + '\u3000至\u3000' + (item.endDate ? item.endDate : ' - ')}}</span>
-                                <span v-else></span>
-                            </div>
-                            <div class="task_button">
-                                <van-button size="small" type="danger" v-if="user.id == item.creatorId || user.id == projectDetail.creatorId ||user.id == projectDetail.inchargerId || projectManagement" @click="taskDelete(item)">删除</van-button>
-                                <van-button size="small" type="info" @click="toEditask(item.id)">编辑</van-button>
-                                <van-button size="small" type="primary" @click="taskStatus(item.id,0,item)" v-if="item.taskStatus == 0">完成</van-button>
-                                <van-button size="small" color="#e6a23c" @click="taskStatus(item.id,1,item)" v-if="item.taskStatus == 1">重启</van-button>
-                            </div>
-                        </van-cell>
-                    </div>
-                </van-tab>
+            <van-tabs v-model="active" @click="activeChange">
                 <!-- 项目概览 -->
                 <van-tab title="项目概览">
                     <!-- 基本信息 -->
@@ -227,6 +182,52 @@
                         </van-row>
                     </van-cell>
                 </van-tab>
+                <!-- 任务看板 -->
+                <van-tab title="任务看板" v-if="activeFlg">
+                    <van-cell title="任务分组" :value="inside.taskGroup.active?inside.taskGroup.active.name:''" @click="inside.taskGroup.show = true"></van-cell>
+                    <van-popup v-model="inside.taskGroup.show" position="bottom">
+                        <van-picker
+                        show-toolbar
+                        :columns="inside.taskGroup.list"
+                        @confirm="taskGroupChange"
+                        @cancel="inside.taskGroup.show = false;$forceUpdate();">
+                            <template #option="item">
+                                <span>{{item.name}}</span>
+                            </template>
+                        </van-picker>
+                    </van-popup>
+                    <van-cell title="任务列表" :value="inside.stages.active?inside.stages.active.stagesName:''" @click="inside.stages.show = true"></van-cell>
+                    <van-popup v-model="inside.stages.show" position="bottom">
+                        <van-picker
+                        show-toolbar
+                        :columns="inside.stages.list"
+                        @confirm="stagesChange"
+                        @cancel="inside.stages.show = false;$forceUpdate();">
+                            <template #option="item">
+                                <span>{{item.stagesName}}</span>
+                            </template>
+                        </van-picker>
+                    </van-popup>
+                    <!-- <van-cell value-class="addtaskvalue">
+                        <van-button plain type="info" class="addtaskbutton" @click="toEditask(null)">新建任务</van-button>
+                    </van-cell> -->
+                    <van-icon name="add-o" class="addtaskicon" @click="toEditask(null)" />
+                    <div class="taskList">
+                        <van-cell v-for="item in inside.taskList" :key="item.id">
+                            <div style="line-height:0.8rem">任务名称:{{item.name}}</div>
+                            <div style="line-height:0.8rem">起止时间:
+                                <span v-if="item.startDate && item.endDate">{{(item.startDate ? item.startDate : ' - ') + '\u3000至\u3000' + (item.endDate ? item.endDate : ' - ')}}</span>
+                                <span v-else></span>
+                            </div>
+                            <div class="task_button">
+                                <van-button size="small" type="danger" v-if="user.id == item.creatorId || user.id == projectDetail.creatorId ||user.id == projectDetail.inchargerId || projectManagement" @click="taskDelete(item)">删除</van-button>
+                                <van-button size="small" type="info" @click="toEditask(item.id)">编辑</van-button>
+                                <van-button size="small" type="primary" @click="taskStatus(item.id,0,item)" v-if="item.taskStatus == 0">完成</van-button>
+                                <van-button size="small" color="#e6a23c" @click="taskStatus(item.id,1,item)" v-if="item.taskStatus == 1">重启</van-button>
+                            </div>
+                        </van-cell>
+                    </div>
+                </van-tab>
             </van-tabs>
         </div>
     </div>
@@ -242,6 +243,9 @@ export default {
             projectDetail: {},
             
             active: 0,
+            activeFlg: true,
+            activeTextFlg: false,
+
             inside:{    // 任务看板
                 taskGroup:{     // 任务分组
                     show: false,
@@ -261,6 +265,9 @@ export default {
                 levelText: ['全部','正常','紧急','重要','重要且紧急'],
             }
         }
+    },
+    created() {
+        
     },
     mounted() {
         // console.log('project',this.project);
@@ -269,9 +276,14 @@ export default {
                 this.projectManagement = true
             }
         }
+        if(this.user.company.packageWorktime == 1) {
+            this.activeFlg = false
+        }
+
         this.getProjectDetail()
         this.getLevelList()
         this.getTaskGroupList()
+
     },
     methods: {
         back() {
@@ -350,7 +362,7 @@ export default {
         },
         
         openProject(){
-            if(this.active == 1 && (this.projectManagement || this.user.id==this.projectDetail.inchargerId || this.user.id==this.projectDetail.creatorId)){
+            if(this.active == 0 && (this.projectManagement || this.user.id==this.projectDetail.inchargerId || this.user.id==this.projectDetail.creatorId)){
                 this.$router.push("/editProject");
             }
         },