瀏覽代碼

部门直属领导审核导入的工时报告

seyason 3 年之前
父節點
當前提交
0f3fee00a8
共有 23 個文件被更改,包括 615 次插入46 次删除
  1. 4 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DepartmentController.java
  2. 15 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  3. 18 21
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCorpwxTimeController.java
  4. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java
  5. 3 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Department.java
  6. 7 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java
  7. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/DepartmentVO.java
  8. 4 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java
  9. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DepartmentService.java
  10. 3 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java
  11. 7 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java
  12. 110 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  13. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  14. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java
  15. 9 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/DateTimeUtil.java
  16. 13 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  17. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml
  18. 8 1
      fhKeeper/formulahousekeeper/timesheet/src/main.js
  19. 1 0
      fhKeeper/formulahousekeeper/timesheet/src/port.js
  20. 11 0
      fhKeeper/formulahousekeeper/timesheet/src/routes.js
  21. 3 3
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue
  22. 3 2
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
  23. 387 0
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list_import.vue

+ 4 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DepartmentController.java

@@ -59,8 +59,8 @@ public class DepartmentController {
      * parentId 父级部门id
      * parentId 父级部门id
      */
      */
     @RequestMapping("/add")
     @RequestMapping("/add")
-    public HttpRespMsg insertDepartment(@RequestParam String name, Integer parentId, String managerId, HttpServletRequest request) {
-        return departmentService.insertDepartment(name, parentId, managerId, request);
+    public HttpRespMsg insertDepartment(@RequestParam String name, Integer parentId, String managerId, String reportAuditUserid, HttpServletRequest request) {
+        return departmentService.insertDepartment(name, parentId, managerId, reportAuditUserid, request);
     }
     }
 
 
     /**
     /**
@@ -69,8 +69,8 @@ public class DepartmentController {
      * name 部门名称
      * name 部门名称
      */
      */
     @RequestMapping("/edit")
     @RequestMapping("/edit")
-    public HttpRespMsg updateDepartment(@RequestParam Integer id, @RequestParam String name, String managerId, HttpServletRequest request) {
-        return departmentService.updateDepartment(id, name, managerId, request);
+    public HttpRespMsg updateDepartment(@RequestParam Integer id, @RequestParam String name, String managerId, String reportAuditUserid, HttpServletRequest request) {
+        return departmentService.updateDepartment(id, name, managerId, reportAuditUserid, request);
     }
     }
 
 
     /**
     /**

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

@@ -58,6 +58,7 @@ public class ReportController {
     private TimeTypeMapper timeTypeMapper;
     private TimeTypeMapper timeTypeMapper;
 
 
 
 
+
     /**
     /**
      * 根据时间 按照人分类 获取报告信息
      * 根据时间 按照人分类 获取报告信息
      * date 日期 格式yyyy-mm-dd
      * date 日期 格式yyyy-mm-dd
@@ -676,5 +677,19 @@ public class ReportController {
         return reportService.importData(companyId,withCheckIn, file, request);
         return reportService.importData(companyId,withCheckIn, file, request);
     }
     }
 
 
+    @RequestMapping("/listImportByState")
+    public HttpRespMsg listDeptImportByState(
+                                      Integer departmentId,
+                                      Integer projectId,
+                                      String date,
+                                      HttpServletRequest request) {
+        int state = -1;//待部门上级审核
+        String token = request.getHeader("TOKEN");
+        User user = userService.getById(token);
+
+        return reportService.listDeptImportByState(state, user.getId(),
+                projectId,
+                date,request);
+    }
 }
 }
 
 

+ 18 - 21
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCorpwxTimeController.java

@@ -75,28 +75,25 @@ public class UserCorpwxTimeController {
         }
         }
         HashMap item = new HashMap();
         HashMap item = new HashMap();
         item.put("list", list);
         item.put("list", list);
-        List<String> userIdList = new ArrayList<>();
-        for (int i=0;i<list.size(); i++) {
-            Map map = list.get(i);
-            String userId = (String)map.get("userId");
-            userIdList.add(userId);
-        }
-        //员工参与的项目
-        List<Participation> participationList = participationMapper.selectList(new QueryWrapper<Participation>().in("user_id", userIdList));
-        if (participationList.size() > 0) {
-            List<Integer> collect = participationList.stream().map(Participation::getProjectId).collect(Collectors.toList());
-            List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().in("id", collect).orderByAsc("id"));
-            List<String> names = projectList.stream().map(Project::getProjectName).collect(Collectors.toList());
-//            for (int i=0;i<list.size(); i++) {
-//                Map map = list.get(i);
-//                for () {
-//
-//                }
-//                map.put()
-//            }
-            item.put("projects", names);
-        }
+        if (list.size() > 0) {
+            List<String> userIdList = new ArrayList<>();
+            for (int i=0;i<list.size(); i++) {
+                Map map = list.get(i);
+                String userId = (String)map.get("userId");
+                userIdList.add(userId);
+            }
+            //员工参与的项目
+            List<Participation> participationList = participationMapper.selectList(new QueryWrapper<Participation>().in("user_id", userIdList));
+            if (participationList.size() > 0) {
+                List<Integer> collect = participationList.stream().map(Participation::getProjectId).collect(Collectors.toList());
+                List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().in("id", collect).orderByAsc("id"));
+                List<String> names = projectList.stream().map(Project::getProjectName).collect(Collectors.toList());
+                item.put("projects", names);
+            }
 
 
+        } else {
+            item.put("projects", new ArrayList<String>());
+        }
 
 
         //返回数据
         //返回数据
         HttpRespMsg msg = new HttpRespMsg();
         HttpRespMsg msg = new HttpRespMsg();

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -756,7 +756,7 @@ public class WeiXinCorpController {
     //获取企业微信考勤打卡统计数据
     //获取企业微信考勤打卡统计数据
     @RequestMapping("/getUserCheckInDayData")
     @RequestMapping("/getUserCheckInDayData")
     public HttpRespMsg getUserCheckInDayData(int companyId, String date) {
     public HttpRespMsg getUserCheckInDayData(int companyId, String date) {
-        LocalDateTime localDate = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+        LocalDateTime localDate = LocalDateTime.parse(date+" 00:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
         return wxCorpInfoService.getUserCheckInDayData(companyId, localDate);
         return wxCorpInfoService.getUserCheckInDayData(companyId, localDate);
     }
     }
 
 

+ 3 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Department.java

@@ -1,5 +1,6 @@
 package com.management.platform.entity;
 package com.management.platform.entity;
 
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -51,13 +52,13 @@ public class Department extends Model<Department> {
     /**
     /**
      * 部门负责人id
      * 部门负责人id
      */
      */
-    @TableField("manager_id")
+    @TableField(value = "manager_id", updateStrategy = FieldStrategy.IGNORED)
     private String managerId;
     private String managerId;
 
 
     /**
     /**
      * 日报导入审核人
      * 日报导入审核人
      */
      */
-    @TableField("report_audit_userid")
+    @TableField(value = "report_audit_userid", updateStrategy = FieldStrategy.IGNORED)
     private String reportAuditUserid;
     private String reportAuditUserid;
 
 
 
 

+ 7 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
  * </p>
  * </p>
  *
  *
  * @author Seyason
  * @author Seyason
- * @since 2022-01-04
+ * @since 2022-01-05
  */
  */
 @Data
 @Data
 @EqualsAndHashCode(callSuper = false)
 @EqualsAndHashCode(callSuper = false)
@@ -120,6 +120,12 @@ public class TimeType extends Model<TimeType> {
     @TableField("sync_corpwx_time")
     @TableField("sync_corpwx_time")
     private Integer syncCorpwxTime;
     private Integer syncCorpwxTime;
 
 
+    /**
+     * 是否需要部门上级审核日报
+     */
+    @TableField("need_dept_audit")
+    private Integer needDeptAudit;
+
 
 
     @Override
     @Override
     protected Serializable pkVal() {
     protected Serializable pkVal() {

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/DepartmentVO.java

@@ -16,6 +16,7 @@ public class DepartmentVO {
     private String label;
     private String label;
     private Integer parentId;
     private Integer parentId;
     private String managerId;
     private String managerId;
+    private String reportAuditUserid;
     private List<DepartmentVO> children;
     private List<DepartmentVO> children;
     private List<HashMap> userList;
     private List<HashMap> userList;
 }
 }

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java

@@ -68,4 +68,8 @@ public interface ReportMapper extends BaseMapper<Report> {
     List<Map<String, Object>> getUserWorkingTimeByRange(Integer companyId, String startDate, String endDate);
     List<Map<String, Object>> getUserWorkingTimeByRange(Integer companyId, String startDate, String endDate);
 
 
     List<Report> selectSimpleTime(Integer companyId, String startDate, String endDate);
     List<Report> selectSimpleTime(Integer companyId, String startDate, String endDate);
+
+    List<Map<String, Object>> getDetailImportByState(@Param("state") Integer state,
+                                               @Param("companyId") Integer companyId,
+                                               @Param("leaderId") String leaderId);
 }
 }

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DepartmentService.java

@@ -15,9 +15,9 @@ import javax.servlet.http.HttpServletRequest;
  * @since 2020-02-11
  * @since 2020-02-11
  */
  */
 public interface DepartmentService extends IService<Department> {
 public interface DepartmentService extends IService<Department> {
-    HttpRespMsg insertDepartment(String departmentName, Integer superiorId, String managerId, HttpServletRequest request);
+    HttpRespMsg insertDepartment(String departmentName, Integer superiorId, String managerId, String reportAuditUserid, HttpServletRequest request);
 
 
-    HttpRespMsg updateDepartment(Integer departmentId, String departmentName, String managerId, HttpServletRequest request);
+    HttpRespMsg updateDepartment(Integer departmentId, String departmentName, String managerId, String reportAuditUserid, HttpServletRequest request);
 
 
     HttpRespMsg deleteDepartment(Integer departmentId, HttpServletRequest request);
     HttpRespMsg deleteDepartment(Integer departmentId, HttpServletRequest request);
 
 

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

@@ -64,4 +64,7 @@ public interface ReportService extends IService<Report> {
 
 
     HttpRespMsg saveProjectTime(Integer companyId, List<Report> reportList, JSONArray userReportArray);
     HttpRespMsg saveProjectTime(Integer companyId, List<Report> reportList, JSONArray userReportArray);
 
 
+    HttpRespMsg listDeptImportByState(Integer state, String leaderId,
+                               Integer projectId,
+                               String date,HttpServletRequest request);
 }
 }

+ 7 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java

@@ -52,7 +52,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
     private ParticipationMapper participationMapper;
     private ParticipationMapper participationMapper;
     //新增部门
     //新增部门
     @Override
     @Override
-    public HttpRespMsg insertDepartment(String departmentName, Integer superiorId, String managerId, HttpServletRequest request) {
+    public HttpRespMsg insertDepartment(String departmentName, Integer superiorId, String managerId, String reportAuditUserid,  HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
         try {
             Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
             Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
@@ -64,7 +64,8 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                         .setDepartmentName(departmentName)
                         .setDepartmentName(departmentName)
                         .setSuperiorId(superiorId)
                         .setSuperiorId(superiorId)
                         .setManagerId(managerId)
                         .setManagerId(managerId)
-                        .setCompanyId(companyId);
+                        .setCompanyId(companyId)
+                        .setReportAuditUserid(reportAuditUserid);
                 if (departmentMapper.insert(department) == 0) {
                 if (departmentMapper.insert(department) == 0) {
                     httpRespMsg.setError("添加失败");
                     httpRespMsg.setError("添加失败");
                 } else {
                 } else {
@@ -88,7 +89,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
 
 
     //更新部门
     //更新部门
     @Override
     @Override
-    public HttpRespMsg updateDepartment(Integer departmentId, String departmentName,String managerId, HttpServletRequest request) {
+    public HttpRespMsg updateDepartment(Integer departmentId, String departmentName,String managerId, String reportAuditUserid, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
         try {
             Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
             Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
@@ -98,6 +99,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             } else {
             } else {
                 department.setDepartmentName(departmentName);
                 department.setDepartmentName(departmentName);
                 department.setManagerId(managerId);
                 department.setManagerId(managerId);
+                department.setReportAuditUserid(reportAuditUserid);
                 if (departmentMapper.updateById(department) == 0) {
                 if (departmentMapper.updateById(department) == 0) {
                     httpRespMsg.setError("修改失败");
                     httpRespMsg.setError("修改失败");
                 } else {
                 } else {
@@ -298,7 +300,8 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                 .setId(department.getDepartmentId())
                 .setId(department.getDepartmentId())
                 .setManagerId(department.getManagerId())
                 .setManagerId(department.getManagerId())
                 .setLabel(department.getDepartmentName())
                 .setLabel(department.getDepartmentName())
-                .setParentId(department.getSuperiorId());
+                .setParentId(department.getSuperiorId())
+                .setReportAuditUserid(department.getReportAuditUserid());
     }
     }
 
 
     //获取某个项目下的统计
     //获取某个项目下的统计

+ 110 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -1572,6 +1572,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     public HttpRespMsg importData(Integer companyId,Integer withCheckIn,  MultipartFile multipartFile, HttpServletRequest request) {
     public HttpRespMsg importData(Integer companyId,Integer withCheckIn,  MultipartFile multipartFile, HttpServletRequest request) {
         HttpRespMsg msg = new HttpRespMsg();
         HttpRespMsg msg = new HttpRespMsg();
         String token = request.getHeader("TOKEN");
         String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+        TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
         //然后处理文件
         //然后处理文件
         String fileName = multipartFile.getOriginalFilename();
         String fileName = multipartFile.getOriginalFilename();
         File file = new File(fileName == null ? "file" : fileName);
         File file = new File(fileName == null ? "file" : fileName);
@@ -1637,7 +1639,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     for (int i=1;i<projectNameStartIndex+projectList.size(); i++) {
                     for (int i=1;i<projectNameStartIndex+projectList.size(); i++) {
                         row.getCell(i).setCellType(CellType.STRING);
                         row.getCell(i).setCellType(CellType.STRING);
                     }
                     }
-                    String reportDate = withCheckIn == null?sdf.format(row.getCell(0).getDateCellValue()):row.getCell(0).getStringCellValue();
+
+                    boolean isDateFormat = row.getCell(0).getCellTypeEnum() == CellType.NUMERIC;
+                    String reportDate = isDateFormat?sdf.format(row.getCell(0).getDateCellValue()):row.getCell(0).getStringCellValue();
                     String username = row.getCell(1).getStringCellValue().trim();
                     String username = row.getCell(1).getStringCellValue().trim();
                     //检查人员是否存在
                     //检查人员是否存在
                     Optional<User> any = allUserList.stream().filter(u -> u.getName().equals(username)).findAny();
                     Optional<User> any = allUserList.stream().filter(u -> u.getName().equals(username)).findAny();
@@ -1664,7 +1668,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                 report.setProjectId(project.getId());
                                 report.setProjectId(project.getId());
                                 report.setReportTimeType(1);
                                 report.setReportTimeType(1);
                                 report.setWorkingTime(time);
                                 report.setWorkingTime(time);
-                                report.setState(0);//导入的直接算审核通过
+                                if (timeType.getNeedDeptAudit() == 0) {
+                                    report.setState(1);//导入的直接算审核通过
+                                } else {
+                                    report.setState(-1);//待部门上级审核员审核
+                                    report.setDepartmentAuditState(1);//部门已审核,到上层领导审核
+                                }
                                 report.setCreateDate(LocalDate.parse(reportDate, dtf));
                                 report.setCreateDate(LocalDate.parse(reportDate, dtf));
                                 report.setCost(reportCreator.getCost().multiply(new BigDecimal(time)));
                                 report.setCost(reportCreator.getCost().multiply(new BigDecimal(time)));
                                 reportList.add(report);
                                 reportList.add(report);
@@ -1997,4 +2006,103 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         return httpRespMsg;
         return httpRespMsg;
     }
     }
 
 
+    @Override
+    public HttpRespMsg listDeptImportByState(Integer state, String leaderId, Integer projectId, String date, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        try {
+            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
+            User curUser = userMapper.selectById(request.getHeader("Token"));
+            Integer companyId = curUser.getCompanyId();
+
+            //根据权限,日报审核员只看自己负责的人员的日报
+            List<Map<String, Object>> nameList = reportMapper.getDetailImportByState(state, companyId, leaderId);
+            System.out.println("数据size=="+nameList.size());
+            //按日期过滤
+            if (!StringUtils.isEmpty(date)) {
+                nameList = nameList.stream().filter(map->{
+                    return (sdf.format((java.sql.Date)map.get("date"))).equals(date);
+                }).collect(Collectors.toList());
+            }
+            nameList.forEach(n->{
+                n.put("dateStr",sdf.format((java.sql.Date)n.get("date")));
+            });
+
+            List<Profession> professions = professionMapper.selectList(new QueryWrapper<Profession>().eq("company_id", curUser.getCompanyId()));
+            for (int index=0;index<nameList.size(); index++) {
+                Map<String, Object> map2 = nameList.get(index);
+                java.sql.Date createDate = (java.sql.Date)map2.get("date");
+                List<Map<String, Object>> list2 = null;
+//                if (leaderId == null) {
+//                    //按部门导入的,直接获取每个人的报告
+                    list2 = reportMapper.getReportByDate(createDate.toString(), (String)map2.get("id"));
+//                } else {
+                    //获取相关项目的报告
+//                    List<Map<String, Object>> inchargeReportList= reportMapper.getInchargeReportByDate(createDate.toString(), leaderId, state);
+//                    list2 =
+//                            inchargeReportList.stream().filter(i->i.get("creatorId").equals(map2.get("id"))).collect(Collectors.toList());
+//                }
+                //按项目过滤
+                if (projectId != null) {
+                    list2 = list2.stream().filter(report->(((Integer)report.get("projectId")).equals(projectId))).collect(Collectors.toList());
+                }
+                if (list2.size() == 0) {
+                    //被项目过滤掉了,没有数据。
+                    nameList.remove(index);
+                    index--;
+                } else {
+                    //项目专业进度
+                    for (Map<String, Object> map : list2) {
+                        //获取当前项目的工程专业进度
+                        List<ReportProfessionProgress> progressList = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().eq("report_id", (int)map.get("id")));
+                        progressList.stream().forEach(p->{
+                            p.setProfessionName(professions.stream().filter(m->m.getId().equals(p.getProfessionId())).findFirst().get().getName());
+                        });
+                        map.put("professionProgressList", progressList);
+                    }
+                    map2.put("data", list2);
+                    double reportTime = 0;
+                    BigDecimal total = new BigDecimal(0);
+                    for (Map<String, Object> m : list2) {
+                        double t = (double) m.get("time");
+                        reportTime += t;
+                        total = total.add((BigDecimal)m.get("cost"));
+                    }
+                    DecimalFormat df = new DecimalFormat("0.00");
+                    map2.put("reportTime", df.format(reportTime));
+                    map2.put("cost", total);
+                    map2.put("state", list2.get(0).get("state"));
+                }
+            }
+
+            //设置照片显示
+            for (Map map : nameList) {
+                List<Map<String, Object>> reportList = (List<Map<String, Object>>)map.get("data");
+                for (Map<String, Object> report : reportList) {
+                    String picStr = (String)report.get("picStr");
+                    if (picStr != null) {
+                        JSONArray array = JSONArray.parseArray(picStr.replaceAll("@", ","));
+                        List<String> picList = new ArrayList<>();
+                        for (int i=0;i<array.size(); i++) {
+                            String string = array.getString(i);
+                            string = "/upload/" + string + ".jpg";
+                            picList.add(string);
+                        }
+                        report.put("pics", picList);
+                    }
+                    if (((Integer)report.get("multiWorktime")) == 1) {
+                        //设置多个工时情况下的报告列表
+                        String timeStr = (String)report.get("content");
+                        report.put("worktimeList", JSONArray.parse(timeStr));
+                    }
+                }
+
+            }
+            httpRespMsg.data = nameList;
+        } catch (NullPointerException e) {
+            httpRespMsg.setError("验证失败");
+            return httpRespMsg;
+        }
+        return httpRespMsg;
+    }
+
 }
 }

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -143,6 +143,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             if (cnt > 0) {
             if (cnt > 0) {
                 userVO.setLeader(true);
                 userVO.setLeader(true);
             }
             }
+
             userVO.setTimeType(timeTypeMapper.selectById(company.getId()));
             userVO.setTimeType(timeTypeMapper.selectById(company.getId()));
             httpRespMsg.data = userVO;
             httpRespMsg.data = userVO;
         } else {
         } else {

+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -269,10 +269,11 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                         JSONObject base_info = jsonObject.getJSONObject("base_info");
                         JSONObject base_info = jsonObject.getJSONObject("base_info");
                         String curUserid = base_info.getString("acctid");
                         String curUserid = base_info.getString("acctid");
                         Long time = base_info.getLong("date");
                         Long time = base_info.getLong("date");
-                        LocalDate localDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(time), ZoneId.systemDefault()).toLocalDate();
+                        LocalDate localDate = LocalDateTime.ofInstant(Instant.ofEpochSecond(time), ZoneId.systemDefault()).toLocalDate();
                         UserCorpwxTime ct = new UserCorpwxTime();
                         UserCorpwxTime ct = new UserCorpwxTime();
                         ct.setCompanyId(companyId);
                         ct.setCompanyId(companyId);
                         ct.setCorpwxUserid(curUserid);
                         ct.setCorpwxUserid(curUserid);
+                        ct.setWxCorpid(corpInfo.getCorpid());
                         ct.setCreateDate(localDate);
                         ct.setCreateDate(localDate);
                         JSONObject summary_info = jsonObject.getJSONObject("summary_info");
                         JSONObject summary_info = jsonObject.getJSONObject("summary_info");
                         int sTime = summary_info.getIntValue("earliest_time");//秒
                         int sTime = summary_info.getIntValue("earliest_time");//秒

+ 9 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/DateTimeUtil.java

@@ -1,6 +1,9 @@
 package com.management.platform.util;
 package com.management.platform.util;
 
 
+import java.time.Instant;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatter;
 
 
 public class DateTimeUtil {
 public class DateTimeUtil {
@@ -22,7 +25,12 @@ public class DateTimeUtil {
         return hours;
         return hours;
     }
     }
 
 
+    public static LocalDate getLocalDateFromSeconds(long time) {
+        LocalDate localDate = LocalDateTime.ofInstant(Instant.ofEpochSecond(time), ZoneId.systemDefault()).toLocalDate();
+        return localDate;
+    }
+
     public static void main(String[] args) {
     public static void main(String[] args) {
-        getTimeFromSeconds(38827);
+        System.out.println(getLocalDateFromSeconds(1641225600));
     }
     }
 }
 }

+ 13 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -242,6 +242,19 @@
         AND a.creator_id in (select id from user where department_id = #{departmentId})
         AND a.creator_id in (select id from user where department_id = #{departmentId})
         ORDER BY a.create_date DESC
         ORDER BY a.create_date DESC
     </select>
     </select>
+
+    <!--导入工时待审核列表-->
+    <select id="getDetailImportByState" resultType="java.util.Map">
+        SELECT DISTINCT b.id, b.name, cast(b.department_id as SIGNED) as departmentId,a.create_date AS date
+        FROM report AS a
+        JOIN user AS b ON a.creator_id=b.id
+        WHERE a.state = #{state} AND b.company_id=#{companyId}
+        <if test="leaderId != null">
+            AND b.department_id in (select department_id from department where report_audit_userid = #{leaderId})
+        </if>
+        ORDER BY a.create_date DESC
+    </select>
+
     <select id="getRealProjectTime" resultType="java.util.Map">
     <select id="getRealProjectTime" resultType="java.util.Map">
         SELECT project.project_name as project,report.creator_id AS creatorId,sum(working_time) as workingTime, SUM(cost) as cost
         SELECT project.project_name as project,report.creator_id AS creatorId,sum(working_time) as workingTime, SUM(cost) as cost
         FROM report
         FROM report

+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml

@@ -20,11 +20,12 @@
         <result column="custom_degree_name" property="customDegreeName" />
         <result column="custom_degree_name" property="customDegreeName" />
         <result column="alert_msg" property="alertMsg" />
         <result column="alert_msg" property="alertMsg" />
         <result column="sync_corpwx_time" property="syncCorpwxTime" />
         <result column="sync_corpwx_time" property="syncCorpwxTime" />
+        <result column="need_dept_audit" property="needDeptAudit" />
     </resultMap>
     </resultMap>
 
 
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
-        company_id, allday, am, pm, month_days, hour_cost_input_type, type, pay_overtime, alert_time, multi_worktime, fix_monthcost, fill_months, custom_degree_active, custom_degree_name, alert_msg, sync_corpwx_time
+        company_id, allday, am, pm, month_days, hour_cost_input_type, type, pay_overtime, alert_time, multi_worktime, fix_monthcost, fill_months, custom_degree_active, custom_degree_name, alert_msg, sync_corpwx_time, need_dept_audit
     </sql>
     </sql>
 
 
 </mapper>
 </mapper>

+ 8 - 1
fhKeeper/formulahousekeeper/timesheet/src/main.js

@@ -87,7 +87,6 @@ router.beforeEach((to, from, next) => {
                 addRouFlag = true;
                 addRouFlag = true;
                 //如果是简易版,直接赋值
                 //如果是简易版,直接赋值
                 if (user.company.packageSimple == 1) {
                 if (user.company.packageSimple == 1) {
-                    console.log('走进了建议模式');
                     getRoutes = simpleRouters;
                     getRoutes = simpleRouters;
                     global.antRouter = getRoutes;
                     global.antRouter = getRoutes;
                     router.addRoutes(getRoutes);
                     router.addRoutes(getRoutes);
@@ -110,6 +109,10 @@ router.beforeEach((to, from, next) => {
                     if (user.company.packageProject == 0) {
                     if (user.company.packageProject == 0) {
                         filterRouter = filterRouter.filter(r=>{return r.name != '待办任务' && r.name != '请假管理'});
                         filterRouter = filterRouter.filter(r=>{return r.name != '待办任务' && r.name != '请假管理'});
                     }
                     }
+                    if (user.timeType.needDeptAudit == 0) {
+                        //没有开启导入日报审核,则不需要
+                        filterRouter = filterRouter.filter(r=>{return r.name != '导入日报审核'});
+                    }
 
 
                     if (user.role == 1 || user.role == 2) {
                     if (user.role == 1 || user.role == 2) {
                         getRoutes = filterRouter;
                         getRoutes = filterRouter;
@@ -118,6 +121,10 @@ router.beforeEach((to, from, next) => {
                         if (user.role == 0 && user.leader) {
                         if (user.role == 0 && user.leader) {
                             modules.push(2, "项目报告审核");
                             modules.push(2, "项目报告审核");
                         }
                         }
+                        if (user.role == 6 && user.timeType.needDeptAudit == 1) {
+                            //公司领导可以进行导入日报的审核
+                            modules.push(2, "导入日报审核");
+                        }
                         getRoutes = filterRouter.filter(r=>{
                         getRoutes = filterRouter.filter(r=>{
                             return modules.filter(m=>m == r.name).length > 0;
                             return modules.filter(m=>m == r.name).length > 0;
                         });
                         });

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet/src/port.js

@@ -54,6 +54,7 @@ export default {
         editPort: '/report/editReport',                         // 编辑报告
         editPort: '/report/editReport',                         // 编辑报告
         
         
         portList: '/report/listByState',                         // 审核列表
         portList: '/report/listByState',                         // 审核列表
+        importReportList: '/report/listImportByState',                         // 审核列表
         approve: '/report/approve',                             // 通过报告
         approve: '/report/approve',                             // 通过报告
         deny: '/report/deny',                                   // 未通过
         deny: '/report/deny',                                   // 未通过
         cancelReport: '/report/cancel', //用户自己撤回日报
         cancelReport: '/report/cancel', //用户自己撤回日报

+ 11 - 0
fhKeeper/formulahousekeeper/timesheet/src/routes.js

@@ -16,6 +16,7 @@ import unusual from './views/desktop/unusual.vue'
 import statistics from './views/workReport/statistics.vue'
 import statistics from './views/workReport/statistics.vue'
 import daily from './views/workReport/daily.vue'
 import daily from './views/workReport/daily.vue'
 import review from './views/workReport/list.vue'
 import review from './views/workReport/list.vue'
+import reviewImport from './views/workReport/list_import.vue'
 import timer from './views/workReport/timer.vue'
 import timer from './views/workReport/timer.vue'
 import reviewProfession from './views/workReport/list_profession.vue'
 import reviewProfession from './views/workReport/list_profession.vue'
 import reviewDepartment from './views/workReport/list_department.vue'
 import reviewDepartment from './views/workReport/list_department.vue'
@@ -170,6 +171,16 @@ export const allRouters = [//组织架构
             { path: '/review', component: review, name: '项目报告审核' },
             { path: '/review', component: review, name: '项目报告审核' },
         ]
         ]
     },
     },
+    {
+        path: '/',
+        component: Home,
+        name: '导入日报审核',
+        iconCls: 'iconfont firerock-iconshenhe',
+        leaf: true,
+        children: [
+            { path: '/reviewImport', component: reviewImport, name: '导入日报审核' },
+        ]
+    },
     //成本统计
     //成本统计
     {
     {
         path: '/',
         path: '/',

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

@@ -131,9 +131,9 @@
                         <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id"></el-option>
                         <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id"></el-option>
                     </el-select>
                     </el-select>
                 </el-form-item>
                 </el-form-item>
-                <!-- 部门审核人 -->
-                <el-form-item label="部门审核" prop="reportAuditUserid">
-                    <el-select v-model="depForm.reportAuditUserid" filterable  clearable  placeholder="请选择部门审核人" >
+                <!-- 直属领导 -->
+                <el-form-item label="直属领导" prop="reportAuditUserid">
+                    <el-select v-model="depForm.reportAuditUserid" filterable  clearable  placeholder="请选择直属领导" >
                         <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id"></el-option>
                         <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id"></el-option>
                     </el-select>
                     </el-select>
                 </el-form-item>
                 </el-form-item>

+ 3 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -117,12 +117,13 @@
                                             <p>项目:<b>{{item2.project}}</b><span v-if="item2.subProjectName != null"> / {{item2.subProjectName}}</span>
                                             <p>项目:<b>{{item2.project}}</b><span v-if="item2.subProjectName != null"> / {{item2.subProjectName}}</span>
                                             
                                             
                                             <span v-if="user.company.packageEngineering == 0">
                                             <span v-if="user.company.packageEngineering == 0">
-                                            <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0">[ 待审核 ]</span>
+                                            <span style="margin-left:15px;color:#DAA520;" v-if="item2.state == 0 || item2.state == -1">[ 待审核 ]</span>
                                             <span style="margin-left:15px;color:#32CD32;" 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 == 2">[ 已驳回 ] 原因:{{item2.rejectReason}}</span>
                                             <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 3">[ 已撤回 ]</span>
                                             <span style="margin-left:15px;color:#FF0000;" v-else-if="item2.state == 3">[ 已撤回 ]</span>
                                             </span>
                                             </span>
                                             <span v-if="user.company.packageEngineering == 1">
                                             <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 == -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 == 0">[ 待部门审核 ]</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 == 1">[ 待项目经理审核 ]</span>
@@ -599,7 +600,7 @@
         </el-dialog>
         </el-dialog>
 
 
         <!--基于企业微信考勤数据的工时导入 -->
         <!--基于企业微信考勤数据的工时导入 -->
-        <el-dialog title="工时批量代填" v-if="importWxDialog" :visible.sync="importWxDialog" customClass="customWidth" width="650px">
+        <el-dialog title="工时批量导入" v-if="importWxDialog" :visible.sync="importWxDialog" customClass="customWidth" width="650px">
             <el-steps :active="active" finish-status="success">
             <el-steps :active="active" finish-status="success">
             <el-step title="选择要导入工时的日期范围">
             <el-step title="选择要导入工时的日期范围">
                 
                 

+ 387 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list_import.vue

@@ -0,0 +1,387 @@
+<template>
+    <section>
+        <!--工具条-->
+        <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
+            <el-form :inline="true">
+                <el-form-item label="项目:">
+                    <el-select v-model="search.projectId" placeholder="请选择" clearable @change="getList()" filterable="true">
+                        <el-option v-for="item in projectList" :key="item.id" :label="item.projectName" :value="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="日期:" style="margin-left:20px;">
+                    <el-date-picker v-model="search.date" :editable="false" format="yyyy-MM-dd" value-format="yyyy-MM-dd" 
+                    @change="getList()" :clearable="true" type="date" placeholder="选择工作日期"></el-date-picker>
+                </el-form-item>
+                <el-form-item   style="margin-left:20px;">
+                    <el-button @click="batchApprove(true)" style="margin-left:10px;" :disabled="multipleSelection.length==0">批量通过</el-button>
+                <el-button @click="batchApprove(false)"  :disabled="multipleSelection.length==0">批量驳回</el-button>
+                </el-form-item>
+                
+            </el-form>
+        </el-col>
+        <!--列表-->
+        <el-table :data="list" ref="multipleTable" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;"
+            @selection-change="handleSelectionChange">
+            <el-table-column type="selection" width="55"></el-table-column>
+            <el-table-column type="expand">
+                <template slot-scope="props">
+                    <el-timeline>
+                        <el-timeline-item v-for="(item,index) in props.row.data" :key="index">
+                            <el-card shadow="never">
+                                <p>项目:<b>{{item.project}}<span v-if="item.subProjectName != null"> / {{item.subProjectName}}</span></b></p>
+                                <p v-if="user.timeType.customDegreeActive==1 && item.degree_id != null">{{user.timeType.customDegreeName}}:{{item.degreeName}}</p>
+                                <p v-if="user.company.packageEngineering == 1">
+                                    专业进度:
+                                    <span style="margin-right:10px;" v-for="progressItem in item.professionProgressList" :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="item.taskId != null">任务:{{item.taskName}}</p>
+                                <div v-if="item.multiWorktime==0">
+                                <p>时长:{{item.time}}h <span class="propsbtn" v-if="item.isOvertime === 1">
+                                    <el-tag type="danger" size="mini" style="margin-left: 65px">加班</el-tag></span>
+                                    <!-- 阶段 -->
+                                    <span v-if="item.stage != null" style="margin-left:10px;"> 投入阶段:{{item.stage}}</span>
+                                </p>
+                                <p v-if="user.role == 1 || user.role == 2 || user.role == 6">成本:{{item.cost}}元</p>
+                                <p>事项:<span v-html="item.content"></span></p>
+                                </div>
+                                <div v-if="item.multiWorktime==1" >
+                                    <div v-for="(timeItem, tIndex) in item.worktimeList" :key="tIndex"
+                                        style="border: 0.5px #ddd solid;margin:5px 0px;padding:5px; ">
+                                        <p style="line-height:20px;margin:5px 0px;">时长:
+                                            <span v-if="item.reportTimeType == 2" style="margin-right:10px;">{{timeItem.startTime+'-'+timeItem.endTime}}</span>
+                                        {{timeItem.time.toFixed(1)}}h  
+                                        </p>
+                                        <p style="line-height:20px;margin:5px 0px;">事项:<span v-html="timeItem.content"></span></p>
+                                    </div>
+                                </div>
+
+                                <!--照片的显示 -->
+                                <p v-if="item.pics != null && item.pics.length > 0"> 
+                                    <el-image v-for="(pic, index) in item.pics" :key="index"
+                                        style="width: 100px; height: 100px; margin-right:10px;"
+                                        :src="pic" 
+                                        :preview-src-list="item.pics">
+                                    </el-image>
+                                </p>
+                            </el-card>
+                        </el-timeline-item>
+                    </el-timeline>
+                </template>
+            </el-table-column>
+            
+            <el-table-column prop="name" label="姓名" sortable></el-table-column>
+            <el-table-column prop="dateStr" label="日期" sortable>
+            </el-table-column>
+            <el-table-column prop="reportTime" label="工作时长(h)" >
+            </el-table-column>
+            <el-table-column prop="state" label="状态" sortable>
+                <template slot-scope="scope">
+                    <span v-if="scope.row.state == -1" style="color:#DAA520;">待审核</span>
+                    <span v-else-if="scope.row.state == 1" style="color:#32CD32;">已通过</span>
+                    <span v-else-if="scope.row.state == 2" style="color:#FF0000;">已驳回</span>
+                </template>
+            </el-table-column>
+            <el-table-column label="操作" width="220">
+                <template slot-scope="scope">
+                    <el-button v-if="scope.row.state == -1" type="primary" :loading="logining" size="small" @click="approve(scope.row.id,scope.row.date, scope.row)">通过</el-button>
+                    <el-button v-if="scope.row.state == -1" type="danger" :loading="logining" size="small" @click="showDenyDialog(scope.row.id,0,scope.row.dateStr, scope.row)">驳回</el-button>
+                    <el-button v-if="scope.row.state == 1" type="danger" :loading="logining" size="small" @click="showDenyDialog(scope.row.id,1,scope.row.dateStr, scope.row)">撤销</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <!--驳回弹出框 -->
+        <el-dialog title="请输入原因"  v-if="denyReasonDialog" :visible.sync="denyReasonDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
+            <div>
+                <el-input type="textarea" v-model="denyForm.reason" rows="2" :placeholder="'请输入您决定'+(denyForm.i==0?'驳回':'撤销')+'的原因'" />
+            </div>
+            <div slot="footer" class="dialog-footer">
+                <el-button  @click="denyReasonDialog = false" >取消</el-button>
+                <el-button type="primary" @click="deny()" >确定</el-button>
+            </div>
+        </el-dialog>
+        <!--工具条-->
+        <!-- <el-col v-if="search.value != -1" :span="24" class="toolbar">
+            <el-pagination
+                @size-change="handleSizeChange"
+                @current-change="handleCurrentChange"
+                :page-sizes="[20 , 50 , 80 , 100]"
+                :page-size="20"
+                layout="total, sizes, prev, pager, next"
+                :total="total"
+                style="float:right;"
+            ></el-pagination>
+        </el-col> -->
+    </section>
+</template>
+
+<script>
+    import util from "../../common/js/util";
+
+    export default {
+        data() {
+            return {
+                denyForm:null,
+                denyReasonDialog:false,
+                isAllSelect:false,
+                user: JSON.parse(sessionStorage.getItem("user")),
+
+                search: {
+                    projectId:null,
+                    date: null,
+                },
+
+                users: [],
+                option:[],
+                tableHeight: 0,
+                listLoading: false,
+                total: 0,
+                page: 1,
+                size: 20,
+                list: [],
+                logining: false,
+                multipleSelection: [],
+            };
+        },
+        methods: {
+            
+            // 获取部门列表
+            getDepartment() {
+                this.http.post( this.port.manage.depList, {},
+                res => {
+                    if (res.code == "ok") {
+                        var list1 = JSON.parse(JSON.stringify(res.data));
+                        
+                        this.option = this.changeArr(list1);
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
+
+            handleSelectionChange(val) {
+                this.multipleSelection = val;
+            },
+            batchApprove(isPass) {
+                var ids = '';
+                for (var i=0;i<this.multipleSelection.length; i++) {
+                    var line = this.multipleSelection[i];
+                    var array = line.data;
+                    for (var m=0;m<array.length; m++) {
+                        ids += array[m].id+',';
+                    }
+                }
+                if (ids.length > 0) {
+                    ids = ids.substring(0, ids.length-1);
+                }
+                this.http.post(isPass?'/report/batchApproveReport':'/report/batchDenyReport', {ids: ids},
+                res => {
+                    this.listLoading = false;
+                    if (res.code == "ok") {
+                        this.getList();
+                    } else {
+                        this.$message({
+                        message: res.msg,
+                        type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.listLoading = false;
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
+            //分页
+            handleCurrentChange(val) {
+                this.page = val;
+                this.getList();
+            },
+
+            handleSizeChange(val) {
+                this.size = val;
+                this.getList();
+            },
+
+            //获取待审核的数据列表
+            getList() {
+                this.listLoading = true;
+                
+                this.http.post(this.port.report.importReportList, this.search,
+                res => {
+                    this.listLoading = false;
+                    if (res.code == "ok") {
+                        this.list = res.data;
+                    } else {
+                        this.$message({
+                        message: res.msg,
+                        type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.listLoading = false;
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
+
+            // 通过日报
+            approve(id,date, item) {
+                console.log(item);
+                this.logining = true;
+                
+                var ids = '';
+                var data = item.data;
+                data.forEach(element => {
+                    ids +=(element.id+',');
+                });
+
+                this.http.post(this.port.report.approve, {id: id ,reportIds: ids},
+                res => {
+                    this.logining = false;
+                    if (res.code == "ok") {
+                        this.$message({
+                            message: "审核成功",
+                            type: "success"
+                        });
+                        this.getList();
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.logining = false;
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
+// 修改数组
+            changeArr(arr) {
+                for (var i = 0; i < arr.length; i++) {
+                    if(arr[i].id != -1 && arr[i].id != 0) {
+                        if (arr[i].children != null && arr[i].children.length>0) {
+                            arr[i].children = this.changeArr(arr[i].children);
+                        }
+                        arr[i].id && (arr[i].value = arr[i].id);
+                        delete arr[i].id;
+                    }
+                }
+                for(var i in arr) {
+                    if(arr[i].id == -1 || arr[i].id == 0) {
+                        arr.splice(i,1)
+                    }    
+                }
+                return arr;
+            },
+            
+            //获取项目列表
+            getProjectList() {
+                this.http.post( this.port.project.list, {},
+                res => {
+                    if (res.code == "ok") {
+                        this.projectList = res.data;
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
+            showDenyDialog(id,i, date, item) {
+                this.denyReasonDialog = true;
+                var ids = '';
+                var data = item.data;
+                data.forEach(element => {
+                    ids +=(element.id+',');
+                });
+                this.denyForm = {id: id ,i:i, date: date, reportIds: ids, reason:null};
+            },
+
+            // 未通过日报
+            deny() {
+                this.logining = true;
+                
+                this.http.post( this.port.report.deny, this.denyForm,
+                res => {
+                    this.logining = false;
+                    if (res.code == "ok") {
+                        this.$message({
+                            message: this.denyForm.i==0?"驳回成功":"撤销成功",
+                            type: "success"
+                        });
+                        this.getList();
+                        this.denyReasonDialog = false;
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.logining = false;
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            }
+        },
+        created() {
+            let height = window.innerHeight;
+            this.tableHeight = height - 125;
+            const that = this;
+            window.onresize = function temp() {
+                that.tableHeight = window.innerHeight - 125;
+            };
+        },
+        mounted() {
+            this.getList();
+            this.getDepartment();
+            this.getProjectList();
+        }
+    };
+</script>
+
+<style lang="scss" scoped>
+.propsbtn {
+    display: inline-block;
+    padding-left: 20px;
+}
+</style>