Przeglądaj źródła

Merge branch 'master' of http://47.100.37.243:10080/wutt/manHourHousekeeper

ggooalice 2 lat temu
rodzic
commit
d2a4750465

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -1079,12 +1079,12 @@ public class ReportController {
     }
 
     @RequestMapping("/getMembList")
-    public HttpRespMsg getMembList(@RequestParam(required=false) String date, Integer manageDeptId, HttpServletRequest request) {
+    public HttpRespMsg getMembList(@RequestParam(required=false) String date, HttpServletRequest request) {
         if (date == null) {
             //默认获取今天的
             date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
         }
-        return reportService.getMembList(date, manageDeptId, request);
+        return reportService.getMembList(date, request);
     }
 
     @RequestMapping("/approveAllImport")

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java

@@ -45,7 +45,7 @@ public interface ReportService extends IService<Report> {
 
     HttpRespMsg denyReport(String date, String reportIds, String reason, Integer isDepartment, HttpServletRequest request);
 
-    HttpRespMsg getMembList(String date, Integer manageDeptId, HttpServletRequest request);
+    HttpRespMsg getMembList(String date, HttpServletRequest request);
 
     HttpRespMsg batchApproveReport(String ids, Integer isDepartment, HttpServletRequest request);
     HttpRespMsg batchDenyReport(String ids, Integer isDepartment, String reason, HttpServletRequest request);

+ 121 - 127
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -214,86 +214,56 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     map.put("cost", total);
                     map.put("state", state);
                 }
-                boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看本部门工时").size() > 0;
-                //需要看本部门的所有人员的日报
-                if (hasDeptWorktimePriv || (user.getManageDeptId() != null &&  user.getManageDeptId() > 0)) {
-                    //找到该部门的所有子部门
-                    List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
-                    //查找当前部门经理负责的部门 或者作为其他负责人的部分
-                    List<Department> queryDeptList = null;
-                    if (deptId != null) {
-                        queryDeptList = allDepts.stream().filter(dp->dp.getDepartmentId().equals(deptId)).collect(Collectors.toList());
-                    } else {
-                        queryDeptList = allDepts.stream().filter(
-                                dp -> user.getId().equals(dp.getManagerId()) || (hasDeptWorktimePriv && dp.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
-                        List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", user.getId()));
-                        List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
-                        for (Integer integer : otherCollect) {
-                            Optional<Department> first = allDepts.stream().filter(ad -> ad.getDepartmentId().equals(integer)).findFirst();
-                            if(first.isPresent()){
-                                queryDeptList.add(first.get());
+                List<Integer> allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
+                //需要看可见部门(部门主要负责人和其他负责人以及查看本部门工时权限)所有人员的日报
+                if (allVisibleDeptIdList.size() > 0) {
+                    nameList = reportMapper.getReportNameByDateAndDept(date,
+                            allVisibleDeptIdList, targetUid, null);
+
+                    if (nameList.size() > 0) {
+                        List<String> userIds = new ArrayList<>();
+                        nameList.forEach(n->{
+                            String id = (String) n.get("id");
+                            userIds.add(id);
+                        });
+                        List<Map<String, Object>> reportList = reportMapper.getUserReportByDate(date, userIds);
+                        for (Map<String, Object> memb : nameList) {
+                            //再根据人分别获取当天的报告
+                            List<Map<String, Object>> rList = new ArrayList<Map<String, Object>>();
+                            BigDecimal total = new BigDecimal(0);
+                            for (Map<String, Object> report : reportList) {
+                                if (((String)report.get("creatorId")).equals((String)memb.get("id"))) {
+                                    rList.add(report);
+                                    total = total.add((BigDecimal) report.get("cost"));
+                                }
                             }
-                        }
-
-                    }
-
-                    if (queryDeptList.size() > 0) {
-                        //递归获取全部子部门
-                        List<Department> deptList = new ArrayList<>();
-                        for (Department dept : queryDeptList) {
-                            deptList.add(dept);
-                            deptList.addAll(getSubDepts(dept, allDepts));
-                        }
-
-                        List ids = deptList.stream().map(Department::getDepartmentId).collect(Collectors.toList());
-                        nameList = reportMapper.getReportNameByDateAndDept(date,
-                                ids, targetUid, null);
-
-                        if (nameList.size() > 0) {
-                            List<String> userIds = new ArrayList<>();
-                            nameList.forEach(n->{
-                                String id = (String) n.get("id");
-                                userIds.add(id);
-                            });
-                            List<Map<String, Object>> reportList = reportMapper.getUserReportByDate(date, userIds);
-                            for (Map<String, Object> memb : nameList) {
-                                //再根据人分别获取当天的报告
-                                List<Map<String, Object>> rList = new ArrayList<Map<String, Object>>();
-                                BigDecimal total = new BigDecimal(0);
-                                for (Map<String, Object> report : reportList) {
-                                    if (((String)report.get("creatorId")).equals((String)memb.get("id"))) {
-                                        rList.add(report);
-                                        total = total.add((BigDecimal) report.get("cost"));
+                            memb.put("data", rList);
+                            memb.put("cost", total);
+                            double reportTime = 0;
+                            if (rList.size() > 0) {
+                                int state = 1;
+                                for (Map<String, Object> m : rList) {
+                                    double t = (double) m.get("time");
+                                    reportTime += t;
+
+                                    //取最低的状态
+                                    if (state == 2) {
+                                        continue;
                                     }
-                                }
-                                memb.put("data", rList);
-                                memb.put("cost", total);
-                                double reportTime = 0;
-                                if (rList.size() > 0) {
-                                    int state = 1;
-                                    for (Map<String, Object> m : rList) {
-                                        double t = (double) m.get("time");
-                                        reportTime += t;
-
-                                        //取最低的状态
-                                        if (state == 2) {
-                                            continue;
-                                        }
-                                        if (state == 0) {
-                                            if ((int)m.get("state") == 2) {
-                                                state = 2;
-                                            } else {
-                                                continue;
-                                            }
+                                    if (state == 0) {
+                                        if ((int)m.get("state") == 2) {
+                                            state = 2;
                                         } else {
-                                            state = (int)m.get("state");
+                                            continue;
                                         }
+                                    } else {
+                                        state = (int)m.get("state");
                                     }
-                                    memb.put("state", state);
                                 }
-                                DecimalFormat df = new DecimalFormat("0.00");
-                                memb.put("reportTime", df.format(reportTime));
+                                memb.put("state", state);
                             }
+                            DecimalFormat df = new DecimalFormat("0.00");
+                            memb.put("reportTime", df.format(reportTime));
                         }
                     }
                 }
@@ -1671,8 +1641,43 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         return retList;
     }
 
+    //获取可见的所有的部门id List
+    public List<Integer> getAllVisibleDeptIdList(User curUser, List<Department> allDepartmentList) {
+        if (allDepartmentList == null) {
+            allDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", curUser.getCompanyId()));
+        }
+        boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "查看本部门工时").size() > 0;
+        //负责的部门:先查担任主要负责人的部门
+        List<Department> allMDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", curUser.getId()));
+        //其他负责的部门
+        List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", curUser.getId()));
+        List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
+        for (Integer integer : otherCollect) {
+            Optional<Department> first = allDepartmentList.stream().filter(ad -> ad.getDepartmentId().equals(integer)).findFirst();
+            if(first.isPresent()){
+                allMDeptList.add(first.get());
+            }
+        }
+
+        //如果有查看本部门工时的权限,加上自己所在的部门
+        if (hasDeptWorktimePriv && curUser.getDepartmentId() != null&& curUser.getDepartmentId()!=0) {
+            Department ownerDept = departmentMapper.selectById(curUser.getDepartmentId());
+            //要加上自己的部门,如果没有的话
+            if (!allMDeptList.stream().anyMatch(d->d.getDepartmentId().equals(ownerDept.getDepartmentId()))) {
+                allMDeptList.add(ownerDept);
+            }
+        }
+        List<Department> subDepts = new ArrayList<>();
+        for (Department dp : allMDeptList) {
+            subDepts.addAll(getSubDepts(dp, allDepartmentList));
+            subDepts.add(dp);
+        }
+        List<Integer> collect = subDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
+        return collect;
+    }
+
     @Override
-    public HttpRespMsg getMembList(String date, Integer manageDeptId, HttpServletRequest request) {
+    public HttpRespMsg getMembList(String date, HttpServletRequest request) {
         String token = request.getHeader("Token");
         User curUser = userMapper.selectById(token);
         Integer companyId = curUser.getCompanyId();
@@ -1683,7 +1688,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         List<Department> allDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", curUser.getCompanyId()));
         List<DepartmentVO> list = (List<DepartmentVO>) departmentList.data;
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "查看全公司工时");
-        boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "查看本部门工时").size() > 0;
+
         if (functionList.size() > 0) {
             //查看全部的
             //加上未分配的部门
@@ -1691,9 +1696,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             unAssignedDept.setId(0);
             unAssignedDept.setLabel("未分配");
             list.add(unAssignedDept);
-        } else if (hasDeptWorktimePriv || (manageDeptId != null && manageDeptId > 0)) {
-            //指定查看某个部门下的,一个人可能负责多个部门
+        } else {
+            //按权限查看
+            boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "查看本部门工时").size() > 0;
+            //负责的部门:先查担任主要负责人的部门
             List<Department> allMDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", token));
+            //其他负责的部门
             List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", curUser.getId()));
             List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
             for (Integer integer : otherCollect) {
@@ -1702,26 +1710,21 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     allMDeptList.add(first.get());
                 }
             }
+
+            //如果有查看本部门工时的权限,加上自己所在的部门
             if (hasDeptWorktimePriv && curUser.getDepartmentId() != null&& curUser.getDepartmentId()!=0) {
                 Department ownerDept = departmentMapper.selectById(curUser.getDepartmentId());
                 //要加上自己的部门,如果没有的话
                 if (!allMDeptList.stream().anyMatch(d->d.getDepartmentId().equals(ownerDept.getDepartmentId()))) {
                     allMDeptList.add(ownerDept);
                 }
-                if (manageDeptId == null || manageDeptId == 0) {
-                    manageDeptId = curUser.getDepartmentId();
-                }
             }
 
-            if (allMDeptList.size() == 1) {
-                list = getSpecifiedDept(list, manageDeptId);
-            } else {
-                ArrayList realMDeptList = new ArrayList<>();
-                for (Department d : allMDeptList) {
-                    realMDeptList.addAll(getSpecifiedDept(list, d.getDepartmentId()));
-                }
-                list = realMDeptList;
+            ArrayList realMDeptList = new ArrayList<>();
+            for (Department d : allMDeptList) {
+                realMDeptList.addAll(getSpecifiedDept(list, d.getDepartmentId()));
             }
+            list = realMDeptList;
         }
 
         //获取公司全部人员; 按照人员状态,如果是已经离职的,当前日期在离职日期以后的,不需要显示该人员
@@ -2471,20 +2474,22 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         //分角色权限:管理员看全部的,部门负责人看自己部门的,个人只能看自己的。
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
         if (functionList.size() == 0) {
-            boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看本部门工时").size() > 0;
-            //检查是不是部门负责人
-            if (hasDeptWorktimePriv || (user.getManageDeptId() != null && user.getManageDeptId() != 0)) {
-                List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-                List<Department> myDeptList = allDepts.stream().filter(d->user.getId().equals(d.getManagerId()) || (hasDeptWorktimePriv && d.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
-                List<Department> subDepts = new ArrayList<>();
-                for (Department dp : myDeptList) {
-                    subDepts.addAll(getSubDepts(dp, allDepts));
-                    subDepts.add(dp);
-                }
-                List<Integer> collect = subDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
-                list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, collect, null);
+            List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+
+            //检查是不是部门负责人(含主要负责人和其他负责人)
+            List<Integer> allDeptIds = getAllVisibleDeptIdList(user, allDeptList);
+            if (allDeptIds.size() > 0) {
+//                List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+//                List<Department> myDeptList = allDepts.stream().filter(d->user.getId().equals(d.getManagerId()) || (hasDeptWorktimePriv && d.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
+//                List<Department> subDepts = new ArrayList<>();
+//                for (Department dp : myDeptList) {
+//                    subDepts.addAll(getSubDepts(dp, allDepts));
+//                    subDepts.add(dp);
+//                }
+//                List<Integer> collect = subDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
+                list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, allDeptIds, null);
                 //部门负责人看自己部门相关的
-                allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("department_id", collect).orderByDesc("department_id"));
+                allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("department_id", allDeptIds).orderByDesc("department_id"));
             } else {
                 //看自己的所负责的项目相关人员的
                 list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, null, user.getId());
@@ -3102,23 +3107,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             int rowNum = 1;
             List<HashMap<String, Object>> allReportByDate = null;
             List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
-            boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看本部门工时").size() > 0;
-
             if (functionList.size() == 0) {
                 //检查是否是部门负责人
-                if (hasDeptWorktimePriv || (user.getManageDeptId() != null && user.getManageDeptId() > 0)) {
-                    List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
-                    List<Department> deptList = allDeptList.stream().filter(dept->user.getId().equals(dept.getManagerId())|| (hasDeptWorktimePriv && dept.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
-                    List<Department> allSubDepts = new ArrayList<>();
-                    allSubDepts.addAll(deptList);
-                    for (Department dept: deptList) {
-                        allSubDepts.addAll(getSubDepts(dept, allDeptList));
-                    }
-                    List<Integer> collect = allSubDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
-                    List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", user.getId()));
-                    List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
-                    collect.addAll(otherCollect);
-                    allReportByDate = reportMapper.getDeptMembReportByDate(startDate, null, collect, endDate, projectId,stateKey,departmentId);
+                List<Integer> allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
+                if (allVisibleDeptIdList.size() > 0) {
+                    allReportByDate = reportMapper.getDeptMembReportByDate(startDate, null, allVisibleDeptIdList, endDate, projectId,stateKey,departmentId);
                 }
 
                 List<HashMap<String, Object>> reportsFromProjects = null;
@@ -3491,19 +3484,20 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
         boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看本部门工时").size() > 0;
         if (functionList.size() == 0) {
+            List<Integer> allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
             //检查是不是部门负责人
-            if (hasDeptWorktimePriv || (user.getManageDeptId() != null && user.getManageDeptId() != 0)) {
-                List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-                List<Department> myDeptList = allDepts.stream().filter(d->user.getId().equals(d.getManagerId())|| (hasDeptWorktimePriv && d.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
-                List<Department> subDepts = new ArrayList<>();
-                for (Department dp : myDeptList) {
-                    subDepts.addAll(getSubDepts(dp, allDepts));
-                    subDepts.add(dp);
-                }
-                List<Integer> collect = subDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
-                list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, collect, null);
+            if (allVisibleDeptIdList.size() > 0) {
+//                List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+//                List<Department> myDeptList = allDepts.stream().filter(d->user.getId().equals(d.getManagerId())|| (hasDeptWorktimePriv && d.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
+//                List<Department> subDepts = new ArrayList<>();
+//                for (Department dp : myDeptList) {
+//                    subDepts.addAll(getSubDepts(dp, allDepts));
+//                    subDepts.add(dp);
+//                }
+//                List<Integer> collect = subDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
+                list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, allVisibleDeptIdList, null);
                 //部门负责人看自己部门相关的
-                allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("department_id", collect).eq("report_status",0));
+                allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("department_id", allVisibleDeptIdList).eq("report_status",0));
             } else {
                 //看自己的所负责的项目相关人员的
                 list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, null, user.getId());

+ 5 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -2492,7 +2492,11 @@ export default {
             reportAuditUserid: that.depData.reportAuditUserid,
           }
           if(that.depData.otherManagerIds) {
-            this.$set(that.depForm, 'otherManagerIds', that.depData.otherManagerIds)
+            if(Array.isArray(that.depData.otherManagerIds)) {
+              this.$set(that.depForm, 'otherManagerIds', that.depData.otherManagerIds)
+            } else {
+              this.$set(that.depForm, 'otherManagerIds', that.depData.otherManagerIds.split(','))
+            }
           } else {
             this.$set(that.depForm, 'otherManagerIds', [])
 

+ 292 - 217
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -4,237 +4,235 @@
         <div>
             <el-card class="box-card daily" shadow="never">
                 <div style="position: relative;margin-top: -20px;margin-bottom: 20px">
-                <!-- <div class="jjk" style="display:inline-block;position:fixed;top:70px;background:#fff;left:250px;"> -->
-                <div class="jjk" style="display:inline-block;position:absolute;top:15px;background:#fff;left:0px;z-index: 10;margin-top: -10px;padding-top: 10px;height: 42px;">
-                        <el-date-picker size="small" v-model="date" :editable="false" format="yyyy-MM" value-format="yyyy-MM"
-                         style="width:190px;"
-                         @change="changeMonthOut" :clearable="false" type="month" placeholder="选择月份" :picker-options="getPickerOptions"></el-date-picker>
-                         <el-button style="margin-left:10px;" icon="iconfont firerock-icongongshitongji" size="mini"  @click="showWorkTime"></el-button>
-                         <!-- <el-button style="margin-left:10px;" icon="iconfont firerock-icongongshitongji" size="mini"  @click="tiaoshi"></el-button> -->
-                    </div>
-                <div slot="header" class="clearfix" id="clearfix" style="padding-left: 255px;">
-                    <!-- <div class="jjk" style="display:inline-block;position:fixed;top:70px;background:#fff;left:250px;">
-                        <el-date-picker size="small" v-model="date" :editable="false" format="yyyy-MM" value-format="yyyy-MM"
-                         style="width:190px;"
-                         @change="changeMonthOut" :clearable="false" type="month" placeholder="选择月份"></el-date-picker>
-                         <el-button style="margin-left:10px;" icon="iconfont firerock-icongongshitongji" size="mini"  @click="showWorkTime"></el-button>
-                    </div> -->
-                        <span v-for="(item,index) in allDate" :id="'day'+index" class="date_item"
-                        @click="choseDate(index, item)" :key="index" :style="'padding:0 6px;display: inline-block;width: 46px;text-align: center;' + (canClick(index,item) == false && user.timeType.fillAhead == 0 ? 'color:#c0c0c0;cursor:not-allowed;' : '') ">
-                        <div :style="'display:inline-block;text-align: center;'+(item.state == null?'':'')" >
-                            <div style="text-align:center;"><span :class="statusStyle[item.state]">{{item.showDate}}</span>
-                            <br>
-                            <span style="font-size:10px;text-align:center;color:#999;">{{item.weekDay}}</span>
-                            <span class="chooseDate" v-if="index == choseDay"></span>
-                        <!-- <i v-if="item.state != null" class="iconfont firerock-icondot" :class="statusStyle[item.state]" style="position:absolute;top:-1px;right:-18px"></i> -->
-
-                            </div>
+                    <div class="jjk" style="display:inline-block;position:absolute;top:15px;background:#fff;left:0px;z-index: 10;margin-top: -10px;padding-top: 10px;height: 42px;">
+                            <el-date-picker size="small" v-model="date" :editable="false" format="yyyy-MM" value-format="yyyy-MM"
+                            style="width:190px;"
+                            @change="changeMonthOut" :clearable="false" type="month" placeholder="选择月份" :picker-options="getPickerOptions"></el-date-picker>
+                            <el-button style="margin-left:10px;" icon="iconfont firerock-icongongshitongji" size="mini"  @click="showWorkTime"></el-button>
                         </div>
-                        </span>
-                </div>
+                    <div slot="header" class="clearfix" id="clearfix" style="padding-left: 255px;">
+                            <span v-for="(item,index) in allDate" :id="'day'+index" class="date_item"
+                            @click="choseDate(index, item)" :key="index" :style="'padding:0 6px;display: inline-block;width: 46px;text-align: center;' + (canClick(index,item) == false && user.timeType.fillAhead == 0 ? 'color:#c0c0c0;cursor:not-allowed;' : '') ">
+                            <div :style="'display:inline-block;text-align: center;'+(item.state == null?'':'')" >
+                                <div style="text-align:center;"><span :class="statusStyle[item.state]">{{item.showDate}}</span>
+                                <br>
+                                <span style="font-size:10px;text-align:center;color:#999;">{{item.weekDay}}</span>
+                                <span class="chooseDate" v-if="index == choseDay"></span>
+                                </div>
+                            </div>
+                            </span>
+                    </div>
                 </div>
                 <div style="display:flex;">
-                <div v-if="permissions.reportsCompany || user.manageDeptId != 0 || permissions.reportsDept" :style="'overflow-x:hidden;overflow-y:auto;height:' + tableHeight + 'px;'">
-                    <div style="width:260px;">
-                        <el-select v-model="selectState" size="small" @change="stateChange" style="width:215px">
-                        <el-option value="-1" label="全部状态" >全部状态</el-option>
-                        <el-option value="-2" label="未填报">未填报</el-option>
-                        <el-option value="1" label="已通过">已通过</el-option>
-                        <el-option value="0" label="待审核">待审核</el-option>
-                        <el-option value="2" label="不通过">不通过</el-option>
-                        <el-option value="3" label="待提交">待提交</el-option>
-                        </el-select></div>
-                    <div>
-                        <el-tree :data="data"  @node-click="handleNodeClick" node-key="id" :default-expanded-keys="expandDate">
-                            <span class="custom-tree-node" slot-scope="{ node, data}" style="width:90px">
-                                <span>{{ node.label }}</span>
-                                <span v-if="data.membCount != null && data.isUser == null">({{data.membCount}})</span>
-                                <div style="width:0%;float:right;">
-                                <span v-if="data.isUser == 1 && data.state == null && !data.leaveDays && !data.leaveTimes" style="color:red;font-size:13px">
-                                未填报
-                                </span>
-                                <span v-if="data.isUser == 1 && data.state == null && (data.leaveDays || data.leaveTimes)" :style="(data.leaveDays < 1 || data.leaveTimes < user.timeType.allday) ? 'color:red;font-size:13px' : 'color:#32cd32;font-size:13px'">
-                                {{data.leaveDays ? (data.leaveDays >= 1 ? '当日请假' : '未填报(请假' + data.leaveDays + '天)') : (data.leaveTimes >= user.timeType.allday ? '当日请假' : '未填报(请假' + data.leaveTimes + 'h)')}}
-                                </span>
-                                <span v-if="data.isUser == 1 && data.state == 0" style="color:orange;font-size:13px">
-                                待审核({{data.workingTime.toFixed(1) + 'h'}})
-                                </span>
-                                <span v-if="data.isUser == 1 && data.state == 1" style="color:#32cd32;font-size:13px">
-                                已通过({{data.workingTime.toFixed(1) + 'h'}})
-                                </span>
-                                <span v-if="data.isUser == 1 && data.state == 2" style="color:red;font-size:13px">
-                                未通过({{data.workingTime.toFixed(1) + 'h'}})
-                                </span>
-                                <span v-if="data.isUser == 1 && data.state == 3" style="color:#409eff;font-size:13px">
-                                待提交({{data.workingTime.toFixed(1) + 'h'}})
+                <div class="grand flex">
+                    <div class="left-laowang" style="flex: 0 0 180px;overflow: hidden;">
+                        <div v-if="permissions.reportsCompany || user.manageDeptId != 0 || permissions.reportsDept" :style="'overflow-x:hidden;overflow-y:auto;height:' + tableHeight + 'px;'">
+                            <div style="width: 100%;box-sizing: border-box;padding-right: 10px;">
+                                <el-select v-model="selectState" size="small" @change="stateChange" style="100%">
+                                <el-option value="-1" label="全部状态" >全部状态</el-option>
+                                <el-option value="-2" label="未填报">未填报</el-option>
+                                <el-option value="1" label="已通过">已通过</el-option>
+                                <el-option value="0" label="待审核">待审核</el-option>
+                                <el-option value="2" label="不通过">不通过</el-option>
+                                <el-option value="3" label="待提交">待提交</el-option>
+                                </el-select></div>
+                            <div>
+                                <el-tree :data="data"  @node-click="handleNodeClick" node-key="id" :default-expanded-keys="expandDate">
+                                    <span class="custom-tree-node"  style="position: relative;box-sizing: border-box;width: 10%;" slot-scope="{ node, data}">
+                                        <!-- <span>{{ node.label }}</span> -->
+                                        <span style="padding-right: 50px;box-sizing: border-box;overflow:hidden;text-overflow:ellipsis;line-height: 36px; display: inline-block;">
+                                            {{ node.label }}<span v-if="data.membCount != null && data.isUser == null">({{data.membCount}})</span>
+                                        </span>
+                                        
+                                        <div style="position: absolute;right: 6px;">
+                                        <span v-if="data.isUser == 1 && data.state == null && !data.leaveDays && !data.leaveTimes" style="color:red;font-size:13px">
+                                        未填报
+                                        </span>
+                                        <span v-if="data.isUser == 1 && data.state == null && (data.leaveDays || data.leaveTimes)" :style="(data.leaveDays < 1 || data.leaveTimes < user.timeType.allday) ? 'color:red;font-size:13px' : 'color:#32cd32;font-size:13px'">
+                                        {{data.leaveDays ? (data.leaveDays >= 1 ? '当日请假' : '未填报(请假' + data.leaveDays + '天)') : (data.leaveTimes >= user.timeType.allday ? '当日请假' : '未填报(请假' + data.leaveTimes + 'h)')}}
+                                        </span>
+                                        <span v-if="data.isUser == 1 && data.state == 0" style="color:orange;font-size:13px">
+                                        待审核({{data.workingTime.toFixed(1) + 'h'}})
+                                        </span>
+                                        <span v-if="data.isUser == 1 && data.state == 1" style="color:#32cd32;font-size:13px">
+                                        已通过({{data.workingTime.toFixed(1) + 'h'}})
+                                        </span>
+                                        <span v-if="data.isUser == 1 && data.state == 2" style="color:red;font-size:13px">
+                                        未通过({{data.workingTime.toFixed(1) + 'h'}})
+                                        </span>
+                                        <span v-if="data.isUser == 1 && data.state == 3" style="color:#409eff;font-size:13px">
+                                        待提交({{data.workingTime.toFixed(1) + 'h'}})
+                                        </span>
+                                    </div>
                                 </span>
+                                </el-tree>
                             </div>
-                        </span>
-                        </el-tree>
+                        </div>
                     </div>
-                </div>
-                
-                <div :style="'height:'+tableHeight+'px;width:1px;background:#eee;margin-right:10px;margin-left:10px;'" ></div>
-                <div class="allDaily" style="float:left;flex-grow:1">
-                    <!--系统管理员和部门负责人 -->
-                    <div class="report_title" style="display:flex;justify-content: space-between;">
-                        <span>
-                            <span>工作日报 ({{curDate}})</span>
-                            <span v-if="permissions.reportsCompany||user.manageDeptId != 0 || permissions.reportsDept">| {{depData != null ?depData.label:""}}
-                            <span v-if="targetUid == null">
-                            - 已提交
-                            <el-link :underline="false" @click="showMembList(1)"><span style="margin-left:5px;margin-right:5px;color:green;">{{reportList.filter(item => item.state != 3).length}}</span></el-link>人,
-                            待提交
-                            <el-link :underline="false" @click="showMembList(2)"><span style="margin-left:5px;margin-right:5px;color:green;">{{reportList.filter(item => item.state == 3).length}}</span></el-link>人,
-                            未填写<el-link :underline="false" @click="showMembList(0)"><span style="margin-left:5px;margin-right:5px;color:red;">{{(depData == null?data[0].membCount:(depData.isUser == 1?1:depData.membCount))-reportList.length | numbers}}</span></el-link>人
-                            </span>
-                            </span>
-                        </span>
-                        <span style="float:right;">
-                            <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,0)">填写日报</el-link>
-                            <el-link v-if="reportTimeType.type != 0" type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportss()">按周填报</el-link>
-                            <el-link type="primary" v-if="permissions.reportsFillOut" style="margin-right:10px;" :underline="false" @click="isSubstitude=true; fillInReport(-1,2)">代填日报</el-link>
-                            <el-link type="primary" v-if="permissions.reportBatch" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,1)">批量填报</el-link>
-                            <el-link type="primary" v-if="permissions.importReport || user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="imports()">工时导入</el-link>
-                            <el-link type="primary" style="margin-right:10px;" :underline="false" @click="showExportDialog">导出日报</el-link>
-                            <!--部门负责人给个导出工时的功能 -->
-                            <el-link type="primary" v-if="user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="showExportTimeDialog">导出工时统计</el-link>
-                        </span>
+
+                    <div class="line line-second" style="display:flex;justify-content: center;align-items: center;position: relative;left: -9px;">
+                        <div style="line-height: 5px;text-align: center;color: rgb(151 151 151);">
+                        -
+                        -
+                        -
+                        </div>
                     </div>
-                    <!--普通员工,含项目经理 -->
-                    <!-- <div class="report_title" v-if="(user.role==0||user.role==3||user.role==5) && user.manageDeptId == 0"><span>日报列表</span>
-                    <span style="float:right;" v-if="(user.role==0||user.role==3||user.role==5) && user.manageDeptId == 0">
-                            <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,0)">填写日报</el-link>
-                            <el-link v-if="reportTimeType.type != 0" type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportss()">按周填报</el-link>
-                            <el-link type="primary" v-if="user.leader" style="margin-right:10px;" :underline="false" @click="isSubstitude=true; fillInReport(-1,0)">代填日报</el-link>
-                            <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,1)">批量填报</el-link>
-                    </span> -->
-                    <!-- </div> -->
-                    <div :style="'height:'+(tableHeight-50)+'px;overflow:scroll;padding-top:10px;'">
-                        <div class="one_daily" v-for="(item1,index1) in reportList" :key="index1">
-                            <i class="fa fa-circle"></i>{{item1.name}}
-                            <span style="margin-left:30px;">
-                                <span style="margin-right:20px;">
-                                    <!-- <i v-if="parseFloat(item1.reportTime)>parseFloat(item1.calculateTime)+0.5" style="color:red;margin-right:8px;" class="fa fa-exclamation-triangle"></i> -->
-                                    工作总时长:
-                                    <!-- <span :style="parseFloat(item1.reportTime)>parseFloat(item1.calculateTime)+0.5?'color:red':''">{{item1.reportTime}}h</span> -->
-                                    <span >{{item1.reportTime | amounts}}</span>h
+
+                    <div style="width: 200px; flex: 1;padding: 0 10px;" class="box-second-father">
+                        <!-- <div :style="'height:'+tableHeight+'px;width:1px;background:#eee;margin-right:10px;margin-left:10px;'" ></div> -->
+                        <div class="allDaily" style="float:left;flex-grow:1">
+                            <!--系统管理员和部门负责人 -->
+                            <div class="report_title" style="display:flex;justify-content: space-between;">
+                                <span>
+                                    <span>工作日报 ({{curDate}})</span>
+                                    <span v-if="permissions.reportsCompany||user.manageDeptId != 0 || permissions.reportsDept">| {{depData != null ?depData.label:""}}
+                                    <span v-if="targetUid == null">
+                                    - 已提交
+                                    <el-link :underline="false" @click="showMembList(1)"><span style="margin-left:5px;margin-right:5px;color:green;">{{reportList.filter(item => item.state != 3).length}}</span></el-link>人,
+                                    待提交
+                                    <el-link :underline="false" @click="showMembList(2)"><span style="margin-left:5px;margin-right:5px;color:green;">{{reportList.filter(item => item.state == 3).length}}</span></el-link>人,
+                                    未填写<el-link :underline="false" @click="showMembList(0)"><span style="margin-left:5px;margin-right:5px;color:red;">{{(depData == null?data[0].membCount:(depData.isUser == 1?1:depData.membCount))-reportList.length | numbers}}</span></el-link>人
+                                    </span>
+                                    </span>
                                 </span>
-                                <span class="approvalProcessBox" v-if="user.timeType.showFillauditTime == 1">
-                                    <i class="iconfont firerock-iconliucheng1"></i>
-                                    <span class="approvalProcessClick" @click="getApprovalProcess(item1)">审批流程</span>
+                                <span style="float:right;">
+                                    <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,0)">填写日报</el-link>
+                                    <el-link v-if="reportTimeType.type != 0" type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReportss()">按周填报</el-link>
+                                    <el-link type="primary" v-if="permissions.reportsFillOut" style="margin-right:10px;" :underline="false" @click="isSubstitude=true; fillInReport(-1,2)">代填日报</el-link>
+                                    <el-link type="primary" v-if="permissions.reportBatch" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,1)">批量填报</el-link>
+                                    <el-link type="primary" v-if="permissions.importReport || user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="imports()">工时导入</el-link>
+                                    <el-link type="primary" style="margin-right:10px;" :underline="false" @click="showExportDialog">导出日报</el-link>
+                                    <!--部门负责人给个导出工时的功能 -->
+                                    <el-link type="primary" v-if="user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="showExportTimeDialog">导出工时统计</el-link>
                                 </span>
-                            </span>
-                            <div class="checkbtn" style="padding-right:20px;">
-                                <el-button v-if="item1.state >= 2 && user.id == item1.id" type="primary" size="small" @click="isSubstitude=false; fillInReport(index1,0)">编辑日报</el-button>
-                                <el-button v-if="permissions.reportsDeleteAll && item1.state != 1" size="small" @click="guanli(item1)" style="float: right;">删除</el-button>
                             </div>
-                            <div class="one_daily_body">
-                                <el-timeline>
-                                    <el-timeline-item v-for="(item2,index2) in item1.data" :key="index2">
-                                        <el-card shadow="never">
-                                            <p>项目:<b>{{item2.project}}</b><span v-if="item2.subProjectName != null"> / {{item2.subProjectName}}</span>
-                                            
-                                            <span v-if="user.company.packageEngineering == 0">
-                                            <span style="margin-left:15px;color:#DAA520;"  v-if="item2.state == 0">[ 
-                                                <span v-if="item2.isDeptAudit==0">
-                                                    <span v-if="item2.projectAuditState==0">
-                                                        待项目审核人<span v-if="item2.projectAuditorName != null">({{item2.projectAuditorName}})</span>审核
+                            <div :style="'height:'+(tableHeight-50)+'px;overflow:scroll;padding-top:10px;'">
+                                <div class="one_daily" v-for="(item1,index1) in reportList" :key="index1">
+                                    <i class="fa fa-circle"></i>{{item1.name}}
+                                    <span style="margin-left:30px;">
+                                        <span style="margin-right:20px;">
+                                            <!-- <i v-if="parseFloat(item1.reportTime)>parseFloat(item1.calculateTime)+0.5" style="color:red;margin-right:8px;" class="fa fa-exclamation-triangle"></i> -->
+                                            工作总时长:
+                                            <!-- <span :style="parseFloat(item1.reportTime)>parseFloat(item1.calculateTime)+0.5?'color:red':''">{{item1.reportTime}}h</span> -->
+                                            <span >{{item1.reportTime | amounts}}</span>h
+                                        </span>
+                                        <span class="approvalProcessBox" v-if="user.timeType.showFillauditTime == 1">
+                                            <i class="iconfont firerock-iconliucheng1"></i>
+                                            <span class="approvalProcessClick" @click="getApprovalProcess(item1)">审批流程</span>
+                                        </span>
+                                    </span>
+                                    <div class="checkbtn" style="padding-right:20px;">
+                                        <el-button v-if="item1.state >= 2 && user.id == item1.id" type="primary" size="small" @click="isSubstitude=false; fillInReport(index1,0)">编辑日报</el-button>
+                                        <el-button v-if="permissions.reportsDeleteAll && item1.state != 1" size="small" @click="guanli(item1)" style="float: right;">删除</el-button>
+                                    </div>
+                                    <div class="one_daily_body">
+                                        <el-timeline>
+                                            <el-timeline-item v-for="(item2,index2) in item1.data" :key="index2">
+                                                <el-card shadow="never">
+                                                    <p>项目:<b>{{item2.project}}</b><span v-if="item2.subProjectName != null"> / {{item2.subProjectName}}</span>
+                                                    
+                                                    <span v-if="user.company.packageEngineering == 0">
+                                                    <span style="margin-left:15px;color:#DAA520;"  v-if="item2.state == 0">[ 
+                                                        <span v-if="item2.isDeptAudit==0">
+                                                            <span v-if="item2.projectAuditState==0">
+                                                                待项目审核人<span v-if="item2.projectAuditorName != null">({{item2.projectAuditorName}})</span>审核
+                                                            </span>
+                                                            <span style="color:#32CD32;" v-else-if="item2.projectAuditState==1">
+                                                                项目审核人<span v-if="item2.projectAuditorName != null">({{item2.projectAuditorName}})</span>审核通过
+                                                            </span>
+                                                        </span>
+                                                        <span v-else-if="item2.isDeptAudit==1">
+                                                            {{('待'+item2.auditDeptName+'审核')}}
+                                                        </span>
+                                                        ]</span>
+                                                    <span style="margin-left:15px;color:#DAA520;" v-else-if="item2.state == -1">[ 导入待审核 ]</span>
+                                                    <span style="margin-left:15px;color:#32CD32;" v-else-if="item2.state == 1">[ 已通过 ]</span>
+                                                    <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 2">[ 已驳回 ] 原因:{{item2.rejectReason}}</span>
+                                                    <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 3">[ 待提交 ]</span>
                                                     </span>
-                                                    <span style="color:#32CD32;" v-else-if="item2.projectAuditState==1">
-                                                        项目审核人<span v-if="item2.projectAuditorName != null">({{item2.projectAuditorName}})</span>审核通过
+                                                    <!-- <el-button v-if="(user.role == 1 || user.role == 2) && item2.state != 1 && user.manageDeptId != 0" size="mini" @click="guanli(item2, item1)" style="float: right;">删除</el-button> -->
+                                                    <span v-if="user.company.packageEngineering == 1">
+                                                        <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == -1">[ 导入待审核 ]</span>
+                                                        <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == -1">[ 待专业审核 ]</span>
+                                                        <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == 0">[ 待部门审核 ]</span>
+                                                        <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == 1">[ 待项目审核人<span v-if="item2.projectAuditorName != null">({{item2.projectAuditorName}})</span>审核 ]</span>
+                                                        <span style="margin-left:15px;color:#32CD32;" v-else-if="item2.state == 1">[ 已通过 ]</span>
+                                                        <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 2">[ 已驳回 ] 原因:{{item2.rejectReason}}</span>
+                                                        <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 3">[ 待提交 ]</span>
                                                     </span>
-                                                </span>
-                                                <span v-else-if="item2.isDeptAudit==1">
-                                                    {{('待'+item2.auditDeptName+'审核')}}
-                                                </span>
-                                                 ]</span>
-                                            <span style="margin-left:15px;color:#DAA520;" v-else-if="item2.state == -1">[ 导入待审核 ]</span>
-                                            <span style="margin-left:15px;color:#32CD32;" v-else-if="item2.state == 1">[ 已通过 ]</span>
-                                            <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 2">[ 已驳回 ] 原因:{{item2.rejectReason}}</span>
-                                            <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 3">[ 待提交 ]</span>
-                                            </span>
-                                            <!-- <el-button v-if="(user.role == 1 || user.role == 2) && item2.state != 1 && user.manageDeptId != 0" size="mini" @click="guanli(item2, item1)" style="float: right;">删除</el-button> -->
-                                            <span v-if="user.company.packageEngineering == 1">
-                                                <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == -1">[ 导入待审核 ]</span>
-                                                <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == -1">[ 待专业审核 ]</span>
-                                                <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == 0">[ 待部门审核 ]</span>
-                                                <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 && item2.departmentAuditState == 1">[ 待项目审核人<span v-if="item2.projectAuditorName != null">({{item2.projectAuditorName}})</span>审核 ]</span>
-                                                <span style="margin-left:15px;color:#32CD32;" v-else-if="item2.state == 1">[ 已通过 ]</span>
-                                                <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 2">[ 已驳回 ] 原因:{{item2.rejectReason}}</span>
-                                                <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 3">[ 待提交 ]</span>
-                                            </span>
-
-                                            <!--每个项目上单独审核 -->
-                                            <span style="float:right;">
-                                                <el-button v-if="(permissions.projectReportReview || user.id == item2.projectAuditorId) && item2.state == 0 && item2.isDeptAudit==0 && item2.projectAuditState==0" type="primary" :loading="logining" 
-                                                size="small" @click="approve(item1.id, item2)">通过</el-button>
-                                                <el-button v-if="(permissions.projectReportReview ||user.id == item2.projectAuditorId) && item2.state == 0 && item2.isDeptAudit==0 && item2.projectAuditState==0" type="danger" :loading="logining" 
-                                                size="small" @click="showDenyDialog(item1.id,0, item2)">驳回</el-button>
-                                                <el-button v-if="(permissions.projectReportReview ||user.id == item2.projectAuditorId) && item2.state == 1" type="normal" :loading="logining" size="small" 
-                                                @click="showDenyDialog(item1.id,1, item2)">撤销</el-button>
-                                                <!--自己可以撤回待审核状态的报告 -->
-                                                <el-button v-if="user.id == item1.id && (item2.state == 0 || item2.state == -1)" type="normal" :loading="logining" size="small" @click="cancel(item1)">撤回</el-button>
-                                            </span>
-                                            </p>
-                                            <!--任务分组和阶段 -->
-                                            <p v-if="item2.groupId != 0">任务分组:{{item2.groupName}} <span v-if="item2.stage != null && item2.stage != '-'" style="margin-left:10px;">投入阶段:{{item2.stage}}</span></p>
-                                            <p v-if="user.timeType.customDegreeActive==1 && item2.degree_id != null && item2.degree_id != -1">{{user.timeType.customDegreeName}}:{{item2.degreeName}}</p>
-                                            <p v-if="user.timeType.customDataActive==1">{{user.timeType.customDataName}}:{{item2.customData}}</p>
-                                            <!-- 自定义日报文本 -->
-                                            <p v-if="user.timeType.customTextActive==1">{{user.timeType.customTextName}}:{{item2.customText}}</p>
 
-                                            <p v-if="user.company.packageEngineering == 1">
-                                                专业进度:
-                                                <span style="margin-right:10px;" v-for="progressItem in item2.professionProgress" :key="progressItem.id">{{progressItem.professionName}}({{progressItem.progress}}%) 
-                                                    <el-tooltip v-if="progressItem.auditState == 0"  content="待审核" effect="light" placement="top">
-                                                    <i class="iconfont firerock-icondaibandengdaishenhe"></i>
-                                                    </el-tooltip>
-                                                    <el-tooltip v-if="progressItem.auditState == 1" content="已通过" effect="light" placement="top">
-                                                    <i  class="iconfont firerock-iconshenhetongguo"></i>
-                                                    </el-tooltip>
-                                                    <el-tooltip v-if="progressItem.auditState == 2" content="不通过" effect="light" placement="top">
-                                                    <i  class="iconfont firerock-iconshenhebohui"></i>
-                                                    </el-tooltip>
+                                                    <!--每个项目上单独审核 -->
+                                                    <span style="float:right;">
+                                                        <el-button v-if="(permissions.projectReportReview || user.id == item2.projectAuditorId) && item2.state == 0 && item2.isDeptAudit==0 && item2.projectAuditState==0" type="primary" :loading="logining" 
+                                                        size="small" @click="approve(item1.id, item2)">通过</el-button>
+                                                        <el-button v-if="(permissions.projectReportReview ||user.id == item2.projectAuditorId) && item2.state == 0 && item2.isDeptAudit==0 && item2.projectAuditState==0" type="danger" :loading="logining" 
+                                                        size="small" @click="showDenyDialog(item1.id,0, item2)">驳回</el-button>
+                                                        <el-button v-if="(permissions.projectReportReview ||user.id == item2.projectAuditorId) && item2.state == 1" type="normal" :loading="logining" size="small" 
+                                                        @click="showDenyDialog(item1.id,1, item2)">撤销</el-button>
+                                                        <!--自己可以撤回待审核状态的报告 -->
+                                                        <el-button v-if="user.id == item1.id && (item2.state == 0 || item2.state == -1)" type="normal" :loading="logining" size="small" @click="cancel(item1)">撤回</el-button>
                                                     </span>
-                                            </p>
-                                            <p v-if="item2.taskId != null">任务:{{item2.taskName}}
-                                            </p>
-                                            <div v-if="item2.multiWorktime==0">
-                                            <p style="display: inline-block;">时长:
-                                                <span v-if="item2.reportTimeType == 0" style="margin-right:10px;">{{typeList[item2.timeType]}}</span>
-                                                <span v-if="item2.reportTimeType == 2" style="margin-right:10px;">{{item2.startTime+'-'+item2.endTime}}</span>
-                                            {{item2.time.toFixed(1)}}h  
-                                            <el-tag type="danger" size="mini" style="margin-left: 65px" v-if="item2.isOvertime === 1">加班<span v-if="item2.overtimeHours">{{item2.overtimeHours.toFixed(1)}}h</span></el-tag>
-                                            </p>
-                                            <p>事项:<span v-html="item2.content"></span></p>
-                                            </div>
-                                            <div v-if="item2.multiWorktime==1" >
-                                                <p>项目时长:{{item2.time.toFixed(1)}}h  <el-tag type="danger" size="mini" style="margin-left: 65px" v-if="item2.isOvertime === 1">加班<span v-if="item2.overtimeHours">{{item2.overtimeHours.toFixed(1)}}h</span></el-tag></p>
-                                                <div v-for="(timeItem, tIndex) in item2.worktimeList" :key="tIndex"
-                                                    style="border: 0.5px #ddd solid;margin-bottom:5px;padding:5px;">
+                                                    </p>
+                                                    <!--任务分组和阶段 -->
+                                                    <p v-if="item2.groupId != 0">任务分组:{{item2.groupName}} <span v-if="item2.stage != null && item2.stage != '-'" style="margin-left:10px;">投入阶段:{{item2.stage}}</span></p>
+                                                    <p v-if="user.timeType.customDegreeActive==1 && item2.degree_id != null && item2.degree_id != -1">{{user.timeType.customDegreeName}}:{{item2.degreeName}}</p>
+                                                    <p v-if="user.timeType.customDataActive==1">{{user.timeType.customDataName}}:{{item2.customData}}</p>
+                                                    <!-- 自定义日报文本 -->
+                                                    <p v-if="user.timeType.customTextActive==1">{{user.timeType.customTextName}}:{{item2.customText}}</p>
+
+                                                    <p v-if="user.company.packageEngineering == 1">
+                                                        专业进度:
+                                                        <span style="margin-right:10px;" v-for="progressItem in item2.professionProgress" :key="progressItem.id">{{progressItem.professionName}}({{progressItem.progress}}%) 
+                                                            <el-tooltip v-if="progressItem.auditState == 0"  content="待审核" effect="light" placement="top">
+                                                            <i class="iconfont firerock-icondaibandengdaishenhe"></i>
+                                                            </el-tooltip>
+                                                            <el-tooltip v-if="progressItem.auditState == 1" content="已通过" effect="light" placement="top">
+                                                            <i  class="iconfont firerock-iconshenhetongguo"></i>
+                                                            </el-tooltip>
+                                                            <el-tooltip v-if="progressItem.auditState == 2" content="不通过" effect="light" placement="top">
+                                                            <i  class="iconfont firerock-iconshenhebohui"></i>
+                                                            </el-tooltip>
+                                                            </span>
+                                                    </p>
+                                                    <p v-if="item2.taskId != null">任务:{{item2.taskName}}
+                                                    </p>
+                                                    <div v-if="item2.multiWorktime==0">
                                                     <p style="display: inline-block;">时长:
-                                                        <span v-if="item2.reportTimeType == 2" style="margin-right:10px;">{{timeItem.startTime+'-'+timeItem.endTime}}</span>
-                                                    {{timeItem.time.toFixed(1)}}h  
+                                                        <span v-if="item2.reportTimeType == 0" style="margin-right:10px;">{{typeList[item2.timeType]}}</span>
+                                                        <span v-if="item2.reportTimeType == 2" style="margin-right:10px;">{{item2.startTime+'-'+item2.endTime}}</span>
+                                                    {{item2.time.toFixed(1)}}h  
+                                                    <el-tag type="danger" size="mini" style="margin-left: 65px" v-if="item2.isOvertime === 1">加班<span v-if="item2.overtimeHours">{{item2.overtimeHours.toFixed(1)}}h</span></el-tag>
                                                     </p>
-                                                    <p>事项:<span v-html="timeItem.content"></span></p>
-                                                </div>
-                                            </div>
-                                            <!--照片的显示 -->
-                                            <p v-if="item2.pics != null && item2.pics.length > 0"> 
-                                                <el-image v-for="(pic, index) in item2.pics" :key="index"
-                                                    style="width: 100px; height: 100px; margin-right:10px;"
-                                                    :src="pic" 
-                                                    :preview-src-list="item2.pics">
-                                                </el-image>
-                                            </p>
-                                        </el-card>
-                                    </el-timeline-item>
-                                </el-timeline>
+                                                    <p>事项:<span v-html="item2.content"></span></p>
+                                                    </div>
+                                                    <div v-if="item2.multiWorktime==1" >
+                                                        <p>项目时长:{{item2.time.toFixed(1)}}h  <el-tag type="danger" size="mini" style="margin-left: 65px" v-if="item2.isOvertime === 1">加班<span v-if="item2.overtimeHours">{{item2.overtimeHours.toFixed(1)}}h</span></el-tag></p>
+                                                        <div v-for="(timeItem, tIndex) in item2.worktimeList" :key="tIndex"
+                                                            style="border: 0.5px #ddd solid;margin-bottom:5px;padding:5px;">
+                                                            <p style="display: inline-block;">时长:
+                                                                <span v-if="item2.reportTimeType == 2" style="margin-right:10px;">{{timeItem.startTime+'-'+timeItem.endTime}}</span>
+                                                            {{timeItem.time.toFixed(1)}}h  
+                                                            </p>
+                                                            <p>事项:<span v-html="timeItem.content"></span></p>
+                                                        </div>
+                                                    </div>
+                                                    <!--照片的显示 -->
+                                                    <p v-if="item2.pics != null && item2.pics.length > 0"> 
+                                                        <el-image v-for="(pic, index) in item2.pics" :key="index"
+                                                            style="width: 100px; height: 100px; margin-right:10px;"
+                                                            :src="pic" 
+                                                            :preview-src-list="item2.pics">
+                                                        </el-image>
+                                                    </p>
+                                                </el-card>
+                                            </el-timeline-item>
+                                        </el-timeline>
+                                    </div>
+                                </div>
+                                <!-- 简陋的无报告提示 -->
+                                <div v-if="reportList.length==0" style="width:100%;font-size:17px;text-align:center;color:#aaa;">{{curDate}}暂无报告</div>
                             </div>
                         </div>
-                        <!-- 简陋的无报告提示 -->
-                        <div v-if="reportList.length==0" style="width:100%;font-size:17px;text-align:center;color:#aaa;">{{curDate}}暂无报告</div>
                     </div>
                 </div>
                 </div>
@@ -1324,9 +1322,12 @@
 </template>
 
 <script>
+    // 左右滑动
+    import dragMixin from "@/common/js/tensile.js";
     import util from "../../common/js/util";
 
     export default {
+        mixins: [dragMixin],
         data() {
             return {
                 exportLoad: false,
@@ -3187,9 +3188,6 @@
             getDepartment() {
                 let day = (this.choseDay+1) > 9 ? "-" + (this.choseDay + 1) : "-0" + (this.choseDay + 1);
                 var param = {date:this.date + day};
-                if (this.user.manageDeptId != 0 && !this.permissions.reportsCompany && !this.permissions.reportsDept) {
-                    param.manageDeptId = this.user.manageDeptId; 
-                }
                 this.http.post("/report/getMembList", param,
                 res => {
                     if (res.code == "ok") {
@@ -5393,6 +5391,42 @@
                 that.tableHeight = window.innerHeight - 178;
             };
             this.toViewForm.companyId = this.user.companyId
+
+            this.initDrag([{
+                type: "LR",
+                domClass: {
+                // 中间分割线的名字
+                resize: "line-line",
+                // 左侧盒子的名字
+                left: "box-left",
+                // 右侧盒子的名字
+                right: "box-right",
+                // 父级的名字
+                box: "box-father",
+                },
+                otherInfo: {
+                // 限制左边栏最低宽度
+                leftWidth: 120,
+                },
+            },
+            {
+                type: "LR",
+                domClass: {
+                // 中间分割线的名字
+                resize: "line-second",
+                // 左侧盒子的名字
+                left: "left-laowang",
+                // 右侧盒子的名字
+                right: "box-second-father",
+                // 父级的名字
+                box: "grand",
+                },
+                otherInfo: {
+                // 限制左边栏最低宽度
+                leftWidth: 120,
+                },
+            },
+            ]);
         },
         mounted() {
             var now = new Date();
@@ -5450,7 +5484,7 @@
     }
 }
     .allDaily {
-        width:82%;
+        width:100%;
     }
     .report_title {
         padding:10px 0;
@@ -5615,4 +5649,45 @@
         justify-content: space-between;
         align-items: center;
     }
+    // 左右滑动样式
+    .line {
+    width: 30px;
+    /* height: 500px; */
+    background: #f2f2f2;
+    cursor: w-resize;
+    }
+    .box-father {
+    border: 8px solid #000;
+    }
+    .line-second {
+    width: 10px;
+    /* background: red; */
+    }
+    .flex {
+    display: flex;
+    width: 100%;
+    }
+    .box-left {
+    flex: 0 0 400px;
+    /* height: 600px; */
+    /* background: blue; */
+    }
+    .box-right {
+    /* height: 600px; */
+    /* background: green; */
+    flex: 1;
+    }
+    .box-postion {
+    width: 200px;
+    /* height: 400px; */
+    background: #ccc;
+    }
+    .custom-tree-node {
+        flex: 1;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        font-size: 14px;
+        padding-right: 8px;
+    }
 </style>