فهرست منبع

餐补按人员统计表

QuYueTing 5 روز پیش
والد
کامیت
4e80042eec
16فایلهای تغییر یافته به همراه472 افزوده شده و 196 حذف شده
  1. 11 6
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/OvertimeAllowanceController.java
  2. 16 25
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  3. 7 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/OvertimeAllowance.java
  4. 10 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java
  5. 4 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java
  6. 14 12
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/AuditWorkflowTimeSettingServiceImpl.java
  7. 32 64
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  8. 23 2
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/OvertimeAllowanceMapper.xml
  9. 56 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  10. 189 7
      fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue
  11. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue
  12. 1 0
      fhKeeper/formulahousekeeper/timesheet/src/views/project/detail.vue
  13. 86 60
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
  14. 4 1
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/dailyReportReview.vue
  15. 4 1
      fhKeeper/formulahousekeeper/timesheet/src/views/workflow/report.vue
  16. 14 12
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

+ 11 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/OvertimeAllowanceController.java

@@ -469,9 +469,11 @@ public class OvertimeAllowanceController {
             headers.add("员工工号");
             headers.add("部门");
             if (isAllowance) {
-                headers.add("在岗时长合计(小时)");
-                headers.add("有效工作时长合计(小时)");
-                headers.add("实际加班时长合计(小时)");
+//                headers.add("在岗时长合计(小时)");
+//                headers.add("有效工作时长合计(小时)");
+//                headers.add("实际加班时长合计(小时)");
+                headers.add("夜班补贴合计(元)");
+                headers.add("餐补合计(元)");
                 headers.add("补贴合计(元)");
             } else {
                 headers.add("考勤时长合计(小时)");
@@ -488,12 +490,15 @@ public class OvertimeAllowanceController {
                 row.add(allowance.getUserName() != null ? "$userName=" + allowance.getUserName() + "$" : "");
                 row.add(allowance.getJobNumber() != null ? allowance.getJobNumber() : "");
                 row.add(allowance.getDepartmentName() != null ? "$departmentName=" + allowance.getDepartmentName() + "$" : "");
-                row.add(allowance.getOnDutyHours() != null ? String.valueOf(allowance.getOnDutyHours()) : "0");
-                row.add(allowance.getWorkHours() != null ? String.valueOf(allowance.getWorkHours()) : "0");
-                row.add(allowance.getOvertimeDuration() != null ? String.valueOf(allowance.getOvertimeDuration()) : "0");
+
                 if (isAllowance) {
+                    row.add(allowance.getNightAllowance() != null ? String.valueOf(allowance.getNightAllowance()) : "0");
+                    row.add(allowance.getMealAllowance() != null ? String.valueOf(allowance.getMealAllowance()) : "0");
                     row.add(allowance.getAllowance() != null ? String.valueOf(allowance.getAllowance()) : "0");
                 } else {
+                    row.add(allowance.getOnDutyHours() != null ? String.valueOf(allowance.getOnDutyHours()) : "0");
+                    row.add(allowance.getWorkHours() != null ? String.valueOf(allowance.getWorkHours()) : "0");
+                    row.add(allowance.getOvertimeDuration() != null ? String.valueOf(allowance.getOvertimeDuration()) : "0");
                     row.add(allowance.getApplyOvertimeDuration() != null ? String.valueOf(allowance.getApplyOvertimeDuration()) : "0");
                     row.add(allowance.getOvertimeDuration() != null ? String.valueOf(allowance.getOvertimeDuration()) : "0");
                 }

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

@@ -290,21 +290,16 @@ public class ReportController {
      * 获取日报列表用于前端表格展示(支持分页)
      * @param startDate 开始日期 格式yyyy-MM-dd
      * @param endDate 结束日期 格式yyyy-MM-dd
-     * @param exportType 导出类型
      * @param projectId 项目ID
-     * @param stateKey 状态键 0-全部 1-待审核 2-已通过 3-已驳回
-     * @param plate 板块
      * @param pageIndex 页码,从1开始
      * @param pageSize 每页大小
      * @return 分页后的日报列表数据
      */
     @RequestMapping("/getReportListForExport")
     public HttpRespMsg getReportListForExport(String startDate, String endDate,
-                                              @RequestParam(required = false) Integer exportType,
                                               Integer projectId,
-                                              @RequestParam(defaultValue = "0") Integer stateKey,
+                                              Integer state,
                                               Integer departmentId,
-                                              String plate,
                                               @RequestParam(defaultValue = "1") Integer pageIndex,
                                               @RequestParam(defaultValue = "20") Integer pageSize,
                                               String userId) {
@@ -317,30 +312,22 @@ public class ReportController {
             httpRespMsg.setError("查询日报时间间隔不得超过1年");
             return httpRespMsg;
         }
-        if (exportType==null){
-            exportType = 0;
-        }
-        return reportService.getReportListForExport(startDate, endDate, exportType, projectId, stateKey, departmentId, plate, pageIndex, pageSize, userId, request);
+        return reportService.getReportListForExport(startDate, endDate, projectId, state, departmentId, pageIndex, pageSize, userId, request);
     }
 
     /**
      * 导出日报列表(按前端表格列导出)
      * @param startDate 开始日期 格式yyyy-MM-dd
      * @param endDate 结束日期 格式yyyy-MM-dd
-     * @param exportType 导出类型
      * @param projectId 项目ID
-     * @param stateKey 状态键 0-全部 1-待审核 2-已通过 3-已驳回
      * @param departmentId 部门ID列表
-     * @param plate 板块
      * @return Excel文件下载地址
      */
     @RequestMapping("/exportReportListForExport")
     public HttpRespMsg exportReportListForExport(String startDate, String endDate,
-                                                 @RequestParam(required = false) Integer exportType,
                                                  Integer projectId,
-                                                 @RequestParam(defaultValue = "0") Integer stateKey,
-                                                 Integer departmentId,
-                                                 String plate, String userId) {
+                                                 Integer state,
+                                                 Integer departmentId, String userId) {
         //startDate和endDate间隔不得超过1年
         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         LocalDate start = LocalDate.parse(startDate, dateTimeFormatter);
@@ -350,14 +337,11 @@ public class ReportController {
             httpRespMsg.setError("导出日报时间间隔不得超过1年");
             return httpRespMsg;
         }
-        if (exportType==null){
-            exportType = 0;
-        }
-        return reportService.exportReportListForExport(startDate, endDate, exportType, projectId, stateKey, departmentId, plate, userId, request);
+        return reportService.exportReportListForExport(startDate, endDate, projectId, state, departmentId, userId, request);
     }
 
     @RequestMapping("/getReportGroupByDay")
-    public HttpRespMsg getReportGroupByDay(String startDate, String endDate,String userId, Integer departmentId, Integer projectId) {
+    public HttpRespMsg getReportGroupByDay(String startDate, String endDate,String userId, Integer departmentId, Integer projectId, Integer state) {
         //startDate和endDate间隔不得超过1年
         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         LocalDate start = LocalDate.parse(startDate, dateTimeFormatter);
@@ -367,11 +351,11 @@ public class ReportController {
             httpRespMsg.setError("日报时间间隔不得超过1年");
             return httpRespMsg;
         }
-        return reportService.getReportGroupByDay(startDate, endDate,userId, departmentId, projectId, request);
+        return reportService.getReportGroupByDay(startDate, endDate,userId, departmentId, projectId, state, request);
     }
 
     @RequestMapping("/exportReportGroupByDay")
-    public HttpRespMsg exportReportGroupByDay(String startDate, String endDate,String userId, Integer departmentId, Integer projectId) {
+    public HttpRespMsg exportReportGroupByDay(String startDate, String endDate,String userId, Integer departmentId, Integer projectId, Integer state) {
         //startDate和endDate间隔不得超过1年
         DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         LocalDate start = LocalDate.parse(startDate, dateTimeFormatter);
@@ -381,7 +365,7 @@ public class ReportController {
             httpRespMsg.setError("日报时间间隔不得超过1年");
             return httpRespMsg;
         }
-        return reportService.exportReportGroupByDay(startDate, endDate,userId, departmentId, projectId, request);
+        return reportService.exportReportGroupByDay(startDate, endDate,userId, departmentId, projectId, state, request);
     }
 
 
@@ -2495,6 +2479,7 @@ public class ReportController {
             }
         }
         //校验补的考勤
+        boolean needSaveCardTime = false;
         if (company.getId() == Constant.XI_HE_CHAO_DAO_COMPANY_ID || company.getId() == Constant.XI_HE_CHAO_DAO_JIA_XING_COMPANY_ID) {
             AbnormalItem abnormalItem = abnormalItemService.getById(abnormalItemId);
             if (abnormalTime != null && abnormalTime && abnormalItem != null && abnormalItem.getRequireCardtime()) {
@@ -2511,8 +2496,14 @@ public class ReportController {
                         return msg;
                     }
                 }
+                needSaveCardTime = true;
             }
         }
+        if (!needSaveCardTime) { //不需要补考勤
+            abnormalStartTime = null;
+            abnormalEndTime = null;
+            abnormalEndDay = null;
+        }
         HttpRespMsg httpRespMsg = reportService.editReport(reportList, createDate.length > 0 ? createDate[0] : null, targetUserList, hourCost, user.getCompanyId(), summary, weeklyAttachment, abnormalStartTime, abnormalEndTime, abnormalEndDay);
         //填报自动通过功能:【上海绎维】、【火石演示】、【博通容合】、【威派格】使用;以及设置了自动审核通过的公司
         //开启了按时间自动审核的功能,直接通过

+ 7 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/OvertimeAllowance.java

@@ -125,6 +125,13 @@ public class OvertimeAllowance extends Model<OvertimeAllowance> {
     @TableField(exist = false)
     private Double applyOvertimeDuration;
 
+    @TableField(exist = false)
+    private Integer nightAllowance;
+
+    @TableField(exist = false)
+    private Integer mealAllowance;
+
+
     @Override
     protected Serializable pkVal() {
         return this.id;

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

@@ -26,6 +26,14 @@ import java.util.Map;
  * @since 2019-12-31
  */
 public interface ReportMapper extends BaseMapper<Report> {
+    List<HashMap<String, Object>> getAllReportByDateForExport(@Param("startDate") String startDate,
+                                                     @Param("companyId") Integer companyId,
+                                                     @Param("userId") String userId,
+                                                     @Param("endDate") String endDate,
+                                                     @Param("projectId") Integer projectId,
+                                                     @Param("state") Integer state,
+                                                     @Param("branchDepartment")List<Integer> branchDepartment
+    );
     List<HashMap<String, Object>> getAllReportByDate(@Param("startDate") String startDate,
                                                      @Param("companyId") Integer companyId,
                                                      @Param("userId") String userId,
@@ -293,6 +301,7 @@ public interface ReportMapper extends BaseMapper<Report> {
                                                    @Param("userId") String userId,
                                                    @Param("departmentId") Integer departmentId,
                                                    @Param("projectId") Integer projectId,
+                                                   @Param("state") Integer state,
                                                    @Param("deptIds") List<Integer> deptIds,
                                                    @Param("pageStart") Integer pageStart,
                                                    @Param("pageSize") Integer pageSize);
@@ -303,6 +312,7 @@ public interface ReportMapper extends BaseMapper<Report> {
                                       @Param("userId") String userId,
                                       @Param("departmentId") Integer departmentId,
                                       @Param("projectId") Integer projectId,
+                                     @Param("state") Integer state,
                                       @Param("deptIds") List<Integer> deptIds);
 
     List<Map<String, Object>> getDepartmentAuditList(@Param("startDate") String startDate,

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

@@ -28,9 +28,9 @@ public interface ReportService extends IService<Report> {
 
     HttpRespMsg exportReport(@RequestParam String startDate, @RequestParam String endDate,Integer exportType, Integer projectId,Integer stateKey,String departmentIds,String plate, HttpServletRequest request);
 
-    HttpRespMsg getReportListForExport(String startDate, String endDate, Integer exportType, Integer projectId, Integer stateKey, Integer departmentId, String plate, Integer pageIndex, Integer pageSize, String targetUserId, HttpServletRequest request);
+    HttpRespMsg getReportListForExport(String startDate, String endDate, Integer projectId, Integer state, Integer departmentId, Integer pageIndex, Integer pageSize, String targetUserId, HttpServletRequest request);
 
-    HttpRespMsg exportReportListForExport(String startDate, String endDate, Integer exportType, Integer projectId, Integer stateKey, Integer departmentId, String plate, String targetUserId, HttpServletRequest request);
+    HttpRespMsg exportReportListForExport(String startDate, String endDate, Integer projectId, Integer state, Integer departmentId, String targetUserId, HttpServletRequest request);
 
     HttpRespMsg getReport(String date, HttpServletRequest request);
 
@@ -215,9 +215,9 @@ public interface ReportService extends IService<Report> {
 
     HttpRespMsg exportMissingCardTimeUserList(String startDate, String endDate, Integer departmentId, HttpServletRequest request);
 
-    HttpRespMsg getReportGroupByDay(String startDate, String endDate, String userId, Integer departmentId, Integer projectId, HttpServletRequest request);
+    HttpRespMsg getReportGroupByDay(String startDate, String endDate, String userId, Integer departmentId, Integer projectId, Integer state, HttpServletRequest request);
 
-    HttpRespMsg exportReportGroupByDay(String startDate, String endDate, String userId, Integer departmentId, Integer projectId, HttpServletRequest request);
+    HttpRespMsg exportReportGroupByDay(String startDate, String endDate, String userId, Integer departmentId, Integer projectId, Integer state, HttpServletRequest request);
 
     HttpRespMsg importNewDataXiHe(Integer companyId, MultipartFile file, HttpServletRequest request);
 }

+ 14 - 12
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/AuditWorkflowTimeSettingServiceImpl.java

@@ -61,19 +61,21 @@ public class AuditWorkflowTimeSettingServiceImpl extends ServiceImpl<AuditWorkfl
                     setting.setProjectAuditors(getProjectAuditorList(company, projectId, user, timeType));
                 } else {
                     Department curDept = departmentMapper.selectById(setting.getAuditDeptId());
-                    String curDeptManagerId = curDept.getManagerId();
-                    //设置每个部门的审核人
-                    if (timeType.getReportAuditFlowEnableSuperDeptAduit() == 1 && curDeptManagerId.equals(user.getId())) {
-                        //当前提交的人是这个部门的主要负责人,那么要取该部门的上一级部门的主要负责人来审核
-                        Integer parentDeptId = curDept.getSuperiorId();
-                        if (parentDeptId == null) {
-                            //没有上级部门,直接取当前部门的负责人
-                        } else {
-                            curDeptManagerId = departmentMapper.selectById(parentDeptId).getManagerId();
+                    if (curDept != null) {
+                        String curDeptManagerId = curDept.getManagerId();
+                        //设置每个部门的审核人
+                        if (timeType.getReportAuditFlowEnableSuperDeptAduit() == 1 && curDeptManagerId.equals(user.getId())) {
+                            //当前提交的人是这个部门的主要负责人,那么要取该部门的上一级部门的主要负责人来审核
+                            Integer parentDeptId = curDept.getSuperiorId();
+                            if (parentDeptId == null) {
+                                //没有上级部门,直接取当前部门的负责人
+                            } else {
+                                curDeptManagerId = departmentMapper.selectById(parentDeptId).getManagerId();
+                            }
+                        }
+                        if (curDeptManagerId != null) {
+                            setting.setAuditDeptManagerName(userMapper.selectById(curDeptManagerId).getName());
                         }
-                    }
-                    if (curDeptManagerId != null) {
-                        setting.setAuditDeptManagerName(userMapper.selectById(curDeptManagerId).getName());
                     }
                 }
             }

+ 32 - 64
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -14322,21 +14322,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
-    public HttpRespMsg getReportListForExport(String startDate, String endDate, Integer exportType, Integer projectId, Integer stateKey, Integer departmentId,
-                                              String plate, Integer pageIndex, Integer pageSize, String targetUserId, HttpServletRequest request) {
+    public HttpRespMsg getReportListForExport(String startDate, String endDate, Integer projectId, Integer state, Integer departmentId, Integer pageIndex, Integer pageSize, String targetUserId, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
-            String field = "";
-            String fieldValue = "";
-            if (!StringUtils.isEmpty(plate)) {
-                String[] strings = plate.split("-");
-                field = strings[0];
-                fieldValue = strings[1];
-            }
-            
             String userId = request.getHeader("Token");
             User user = userMapper.selectById(userId);
-            TimeType timeType = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", user.getCompanyId()));
             Company company = companyMapper.selectById(user.getCompanyId());
             Integer companyId = company.getId();
             List<User> allUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
@@ -14348,44 +14338,24 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 branchDepartment = departmentService.getDeptIncludeSubDeptIds(departmentId, departments);
             }
             
-            List<HashMap<String, Object>> allReportByDate = null;
-            List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
-            
-            if (functionList.size() == 0) {
-                // 检查是否是部门负责人
-                List<Integer> allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
-                if (allVisibleDeptIdList.size() > 0) {
-                    allReportByDate = reportMapper.getDeptMembReportByDate(startDate, null, allVisibleDeptIdList, endDate, projectId, stateKey, branchDepartment, user.getId(), field, fieldValue);
-                }
-                
-                // 检查是否是项目负责人
-                int cnt = projectMapper.selectCount(new QueryWrapper<Project>().eq("incharger_id", user.getId()));
-                List<Integer> auditorPids = null;
-                if (timeType.getReportAuditType() == 5 && timeType.getReportCc() == 1) {
-                    // 启用了抄送人
-                    List<ProjectAuditor> projectAuditors = projectAuditorMapper.selectList(new QueryWrapper<ProjectAuditor>().eq("auditor_id", user.getId()));
-                    if (projectAuditors.size() > 0) {
-                        auditorPids = projectAuditors.stream().map(ProjectAuditor::getProjectId).collect(Collectors.toList());
-                    }
-                }
-                
-                if (cnt > 0 || auditorPids != null) {
-                    List<HashMap<String, Object>> reportsFromProjects = reportMapper.getProjectMembReportByDate(startDate, null, user.getId(), endDate, projectId, stateKey, branchDepartment, auditorPids, field, fieldValue);
-                    if (allReportByDate == null) {
-                        allReportByDate = reportsFromProjects;
-                    } else {
-                        allReportByDate.addAll(reportsFromProjects);
-                    }
-                }
-                
-                if (allReportByDate == null) {
-                    allReportByDate = new ArrayList<>();
-                }
-            } else {
-                // 有查看全公司工时权限
-                allReportByDate = reportMapper.getAllReportByDate(startDate, companyId, targetUserId, endDate, projectId, stateKey, branchDepartment, field, fieldValue);
-            }
-            
+
+//            List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
+
+//            if (functionList.size() == 0) {
+//                // 检查是否是部门负责人
+//                List<Integer> allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
+//                if (allVisibleDeptIdList.size() > 0) {
+//                    allReportByDate = reportMapper.getDeptMembReportByDate(startDate, null, allVisibleDeptIdList, endDate, projectId, stateKey, branchDepartment, user.getId(), field, fieldValue);
+//                }
+//
+//                if (allReportByDate == null) {
+//                    allReportByDate = new ArrayList<>();
+//                }
+//            } else {
+//                }
+            // 有查看全公司工时权限
+            List<HashMap<String, Object>> allReportByDate = reportMapper.getAllReportByDateForExport(startDate, companyId, targetUserId, endDate, projectId, state, branchDepartment);
+
             // 分页处理
             int total = allReportByDate.size();
             int startIndex = (pageIndex - 1) * pageSize;
@@ -14432,11 +14402,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
-    public HttpRespMsg exportReportListForExport(String startDate, String endDate, Integer exportType, Integer projectId, Integer stateKey, Integer departmentId, String plate, String targetUserId, HttpServletRequest request) {
+    public HttpRespMsg exportReportListForExport(String startDate, String endDate, Integer projectId, Integer state, Integer departmentId, String targetUserId, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             // 调用getReportListForExport获取全部数据(不分页)
-            HttpRespMsg queryResult = getReportListForExport(startDate, endDate, exportType, projectId, stateKey, departmentId, plate, 1, Integer.MAX_VALUE, targetUserId, request);
+            HttpRespMsg queryResult = getReportListForExport(startDate, endDate, projectId, state, departmentId, 1, Integer.MAX_VALUE, targetUserId, request);
             
             if (queryResult.code != null && !queryResult.code.equals("ok")) {
                 return queryResult; // 返回错误信息
@@ -14460,6 +14430,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             titles.add("工号");
             titles.add("所属部门");
             titles.add("工作日期");
+            titles.add("填报时间");
             titles.add("项目编号");
             titles.add("项目名称");
             titles.add("项目分类");
@@ -14509,7 +14480,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     createDate = (String) map.get("createDate");
                 }
                 item.add(createDate);
-                
+
+                item.add((String)map.get("createTime"));
                 // 项目编号
                 item.add(map.get("projectCode") != null ? (String) map.get("projectCode") : "");
                 
@@ -14546,10 +14518,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 item.add(map.get("content") != null ? (String) map.get("content") : "");
 
                 // 审核状态
-                Integer state = (Integer) map.get("state");
+                Integer stateValue = (Integer) map.get("state");
                 String auditStatus = "";
-                if (state != null) {
-                    switch (state) {
+                if (stateValue != null) {
+                    switch (stateValue) {
                         case 0:
                             auditStatus = "待审核";
                             break;
@@ -14559,9 +14531,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         case 2:
                             auditStatus = "已驳回";
                             break;
-                        case 3:
-                            auditStatus = "待提交";
-                            break;
                         default:
                             auditStatus = "-";
                     }
@@ -14593,7 +14562,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
-    public HttpRespMsg getReportGroupByDay(String startDate, String endDate, String userId, Integer departmentId, Integer projectId, HttpServletRequest request) {
+    public HttpRespMsg getReportGroupByDay(String startDate, String endDate, String userId, Integer departmentId, Integer projectId, Integer state, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             String token = request.getHeader("Token");
@@ -14601,7 +14570,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             Integer companyId = user.getCompanyId();
             TimeType timeType = timeTypeMapper.selectById(companyId);
             WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
-            boolean needCorpWxTranslate = (wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1);
             // 权限检查:获取可见部门列表
             List<Integer> visibleDeptIds = null;
             List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
@@ -14652,11 +14620,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             
             // 查询按人按天汇总的数据
             List<Map<String, Object>> groupedReportList = reportMapper.getReportGroupByDay(
-                companyId, startDate, endDate, userId, departmentId, projectId, visibleDeptIds, pageStart, pageSize);
+                companyId, startDate, endDate, userId, departmentId, projectId, state, visibleDeptIds, pageStart, pageSize);
 
             // 获取总数
             Integer totalCount = reportMapper.getReportGroupByDayCount(
-                companyId, startDate, endDate, userId, departmentId, projectId, visibleDeptIds);
+                companyId, startDate, endDate, userId, departmentId, projectId, state, visibleDeptIds);
             
             // 获取考勤数据
             DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@@ -14821,7 +14789,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
 
     @Override
-    public HttpRespMsg exportReportGroupByDay(String startDate, String endDate, String userId, Integer departmentId, Integer projectId, HttpServletRequest request) {
+    public HttpRespMsg exportReportGroupByDay(String startDate, String endDate, String userId, Integer departmentId, Integer projectId, Integer state, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             String token = request.getHeader("Token");
@@ -14875,7 +14843,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
             // 查询按人按天汇总的数据
             List<Map<String, Object>> groupedReportList = reportMapper.getReportGroupByDay(
-                    companyId, startDate, endDate, userId, departmentId, projectId, visibleDeptIds, null, null);
+                    companyId, startDate, endDate, userId, departmentId, projectId, state, visibleDeptIds, null, null);
 
             // 获取考勤数据
             DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");

+ 23 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/OvertimeAllowanceMapper.xml

@@ -18,6 +18,23 @@
         <result column="work_hours" property="workHours" />
     </resultMap>
 
+    <resultMap id="RichBaseResultMap" type="com.management.platform.entity.OvertimeAllowance">
+        <id column="id" property="id" />
+        <result column="corpwx_userid" property="corpwxUserid" />
+        <result column="start_time" property="startTime" />
+        <result column="end_time" property="endTime" />
+        <result column="date" property="date" />
+        <result column="overtime_duration" property="overtimeDuration" />
+        <result column="allowance" property="allowance" />
+        <result column="sp_no" property="spNo" />
+        <result column="company_id" property="companyId" />
+        <result column="type" property="type" />
+        <result column="on_duty_hours" property="onDutyHours" />
+        <result column="work_hours" property="workHours" />
+        <result column="night_allowance" property="nightAllowance" />
+        <result column="meal_allowance" property="mealAllowance" />
+    </resultMap>
+
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
         id, corpwx_userid, start_time, end_time, date, overtime_duration, allowance, sp_no, company_id, type, on_duty_hours, work_hours
@@ -55,14 +72,18 @@
     </sql>
 
     <!-- 按人员合计统计餐补数据(GROUP BY corpwx_userid,带分页) -->
-    <select id="getSummaryList" resultMap="BaseResultMap">
+    <select id="getSummaryList" resultMap="RichBaseResultMap">
         SELECT
             corpwx_userid,
             company_id,
             SUM(on_duty_hours)      AS on_duty_hours,
             SUM(work_hours)         AS work_hours,
             SUM(overtime_duration)  AS overtime_duration,
-            SUM(allowance)          AS allowance
+            SUM(allowance)          AS allowance,
+        -- 夜班补贴:type = 1、2、3
+        SUM(CASE WHEN type IN (1,2,3) THEN allowance ELSE 0 END) AS night_allowance,
+        -- 餐补:其他所有情况
+        SUM(CASE WHEN type NOT IN (1,2,3) THEN allowance ELSE 0 END) AS meal_allowance
         FROM overtime_allowance
         <include refid="Summary_Where"/>
         GROUP BY corpwx_userid, company_id

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 56 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml


+ 189 - 7
fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue

@@ -951,6 +951,20 @@
                 :value="item"
               ></el-option>
             </el-select>
+            <!-- 状态筛选(工时日报表、日报明细表) -->
+            <el-select
+              v-if="ins == 37 || ins == 38"
+              v-model="dailyState"
+              placeholder="请选择审核状态"
+              clearable
+              size="small"
+              @change="selcts()"
+              style="margin-left: 10px; width: 140px"
+            >
+              <el-option label="已通过" :value="1"></el-option>
+              <el-option label="待审核" :value="0"></el-option>
+              <el-option label="已驳回" :value="2"></el-option>
+            </el-select>
             <!-- 月度财务报表单独筛选条件 -->
             <template v-if="ins == 31">
               <div class="monthlyFinance">
@@ -5339,15 +5353,32 @@
 
             <!-- 餐补表 -->
             <template v-if="ins == 36">
+              <div style="margin-bottom: 15px">
+                <el-tabs
+                  v-model="allowanceTabActive"
+                  @tab-click="handleAllowanceTabClick"
+                >
+                  <el-tab-pane
+                    label="餐补明细表"
+                    name="detail"
+                  ></el-tab-pane>
+                  <el-tab-pane
+                    label="按人员统计"
+                    name="summary"
+                  ></el-tab-pane>
+                </el-tabs>
+              </div>
+              <!-- 餐补明细表 -->
               <el-table
-                key="36"
+                v-if="allowanceTabActive === 'detail'"
+                key="36-detail"
                 border
                 :data="mealAllowanceList"
                 highlight-current-row
                 v-loading="mealAllowanceLoading"
-                :height="+tableHeight"
+                :height="+tableHeight - 60"
                 style="width: 100%"
-                :max-height="+tableHeight + 50"
+                :max-height="+tableHeight"
               >
                 <el-table-column
                   prop="userName"
@@ -5543,6 +5574,86 @@
                   </template>
                 </el-table-column>
               </el-table>
+              <!-- 按人员统计表 -->
+              <el-table
+                v-if="allowanceTabActive === 'summary'"
+                key="36-summary"
+                border
+                :data="mealAllowanceSummaryList"
+                highlight-current-row
+                v-loading="mealAllowanceLoading"
+                :height="+tableHeight - 60"
+                style="width: 100%"
+                :max-height="+tableHeight"
+              >
+                <el-table-column
+                  prop="userName"
+                  align="center"
+                  label="姓名"
+                  fixed
+                >
+                  <template slot-scope="scope">
+                    <span v-if="user.userNameNeedTranslate == '1'">
+                      <TranslationOpenDataText
+                        type="userName"
+                        :openid="scope.row.corpwxUserid"
+                      ></TranslationOpenDataText>
+                    </span>
+                    <span v-if="user.userNameNeedTranslate != '1'">
+                      {{ scope.row.userName }}
+                    </span>
+                  </template>
+                </el-table-column>
+                <el-table-column
+                  prop="jobNumber"
+                  align="center"
+                  label="工号"
+                ></el-table-column>
+                <el-table-column
+                  prop="departmentName"
+                  align="center"
+                  label="部门"
+                >
+                  <template slot-scope="scope">
+                    <span v-if="user.userNameNeedTranslate == '1'">
+                      <TranslationOpenDataText
+                        type="departmentName"
+                        :openid="scope.row.departmentName"
+                      ></TranslationOpenDataText>
+                    </span>
+                    <span v-if="user.userNameNeedTranslate != '1'">
+                      {{ scope.row.departmentName }}
+                    </span>
+                  </template>
+                </el-table-column>
+                <el-table-column
+                  prop="nightAllowance"
+                  align="center"
+                  label="夜班补贴合计(元)"
+                >
+                  <template slot-scope="scope">
+                    {{ scope.row.nightAllowance ? scope.row.nightAllowance.toFixed(2) : "0.00" }}
+                  </template>
+                </el-table-column>
+                <el-table-column
+                  prop="mealAllowance"
+                  align="center"
+                  label="餐补合计(元)"
+                >
+                  <template slot-scope="scope">
+                    {{ scope.row.mealAllowance ? scope.row.mealAllowance.toFixed(2) : "0.00" }}
+                  </template>
+                </el-table-column>
+                <el-table-column
+                  prop="totalAllowance"
+                  align="center"
+                  label="补贴总计(元)"
+                >
+                  <template slot-scope="scope">
+                    {{ scope.row.allowance ? scope.row.allowance.toFixed(2) : "0.00" }}
+                  </template>
+                </el-table-column>
+              </el-table>
             </template>
 
             <!-- 工时日报表 -->
@@ -5591,6 +5702,12 @@
                     </span>
                   </template>
                 </el-table-column>
+                <el-table-column
+                  prop="createTime"
+                  align="center"
+                  label="填报时间"
+                  width="150"
+                ></el-table-column>
                 <el-table-column
                   prop="cardRecord"
                   align="center"
@@ -5796,6 +5913,12 @@
                   label="工作日期"
                   width="120"
                 ></el-table-column>
+                <el-table-column
+                  prop="createTime"
+                  align="center"
+                  label="填报时间"
+                  width="150"
+                ></el-table-column>
                 <el-table-column
                   prop="projectCode"
                   align="center"
@@ -7741,6 +7864,8 @@ export default {
       mealAllowanceList: [],
       mealAllowanceLoading: false,
       membOvertimeList: [],
+      allowanceTabActive: "detail", // 餐补表tab: 'detail' 明细表, 'summary' 按人员统计
+      mealAllowanceSummaryList: [], // 餐补表按人员统计数据
       // 工时日报表
       dailyWorkHoursList: [],
       dailyWorkHoursLoading: false,
@@ -7749,6 +7874,9 @@ export default {
       dailyDetailList: [],
       dailyDetailLoading: false,
 
+      // 工时日报表/日报明细表状态筛选
+      dailyState: "",
+
       // 项目薪资成本表
       projectSalaryCostList: [],
       projectSalaryCostLoading: false,
@@ -9072,8 +9200,13 @@ export default {
           sl.userId = this.userId;
         }
       } else if (this.ins == 36) {
-        fName = `餐补表.xlsx`;
-        url = `/overtime-allowance/export`;
+        if (this.allowanceTabActive === 'summary') {
+          fName = `餐补表(按人员统计).xlsx`;
+          url = `/overtime-allowance/exportSummaryList`;
+        } else {
+          fName = `餐补表.xlsx`;
+          url = `/overtime-allowance/export`;
+        }
         sl.startDate = this.rangeDatas[0];
         sl.endDate = this.rangeDatas[1];
         if (this.userId) {
@@ -9098,6 +9231,9 @@ export default {
         if (this.proJuctId) {
           sl.projectId = this.proJuctId;
         }
+        if (this.dailyState !== "" && this.dailyState !== null) {
+          sl.state = this.dailyState;
+        }
       } else if (this.ins == 38) {
         fName = `日报明细表.xlsx`;
         url = `/report/exportReportListForExport`;
@@ -9114,6 +9250,9 @@ export default {
         if (this.proJuctId) {
           sl.projectId = this.proJuctId;
         }
+        if (this.dailyState !== "" && this.dailyState !== null) {
+          sl.state = this.dailyState;
+        }
       } else if (this.ins == 39) {
         fName = `项目薪资成本表.xlsx`;
         url = `/project/exportTimeCostForTable`;
@@ -9247,6 +9386,7 @@ export default {
       this.selUserList = this.userList;
       this.tabPosition = "0";
       this.tabsType = "all";
+      this.dailyState = "";
       if (this.user.companyId == 4811) {
         this.proJuctId = "";
         this.projectMainId = "";
@@ -10614,7 +10754,11 @@ export default {
       } else if (this.ins == 35) {
         this.getAbnormalWorkHours();
       } else if (this.ins == 36) {
-        this.getMealAllowance();
+        if (this.allowanceTabActive === "detail") {
+          this.getMealAllowance();
+        } else {
+          this.getMealAllowanceSummary();
+        }
       } else if (this.ins == 37) {
         this.getDailyWorkHours();
       } else if (this.ins == 38) {
@@ -10638,7 +10782,6 @@ export default {
       let parameter = {
         pageIndex: this.page,
         pageSize: this.size,
-        stateKey: 1,
         startDate: this.rangeDatas[0],
         endDate: this.rangeDatas[1],
       };
@@ -10652,6 +10795,9 @@ export default {
       if (this.proJuctId) {
         parameter.projectId = this.proJuctId;
       }
+      if (this.dailyState !== "" && this.dailyState !== null) {
+        parameter.state = this.dailyState;
+      }
       this.postData(`/report/getReportListForExport`, parameter)
         .then((res) => {
           this.dailyDetailList = res.data.list || [];
@@ -11785,6 +11931,39 @@ export default {
         });
     },
 
+    // 餐补表tab切换处理
+    handleAllowanceTabClick(tab) {
+      if (tab.name === "detail") {
+        this.getMealAllowance();
+      } else if (tab.name === "summary") {
+        this.getMealAllowanceSummary();
+      }
+    },
+
+    // 获取餐补表按人员统计数据
+    getMealAllowanceSummary() {
+      this.mealAllowanceLoading = true;
+      let parameter = {
+        startDate: this.rangeDatas[0],
+        endDate: this.rangeDatas[1],
+        isAllowance: true,
+      };
+      if (this.userId) {
+        parameter.userId = this.userId;
+      }
+      if (this.departmentIdArray.length != 0) {
+        parameter.departmentId =
+          this.departmentIdArray[this.departmentIdArray.length - 1];
+      }
+      this.postData(`/overtime-allowance/getSummaryList`, parameter)
+        .then((res) => {
+          this.mealAllowanceSummaryList = res.data || [];
+        })
+        .finally(() => {
+          this.mealAllowanceLoading = false;
+        });
+    },
+
     // 获取工时日报表
     getDailyWorkHours() {
       this.dailyWorkHoursLoading = true;
@@ -11804,6 +11983,9 @@ export default {
       if (this.proJuctId) {
         parameter.projectId = this.proJuctId;
       }
+      if (this.dailyState !== "" && this.dailyState !== null) {
+        parameter.state = this.dailyState;
+      }
       this.postData(`/report/getReportGroupByDay`, parameter)
         .then((res) => {
           this.dailyWorkHoursList = res.data.data || [];

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue

@@ -963,7 +963,7 @@ export default {
                 const pointInPixel = [params.offsetX, params.offsetY];
                 if (myChart.containPixel('grid', pointInPixel)) {
                     if (this.singleChoiceType == '项目') {
-                        if (this.chartDate != null) {
+                        if (this.chartDate != null && this.chartDate.length > 0 && this.chartDate[0] != null) {
                             if (fixMonthcost == 0) {
                                 this.$router.push("/cost/" + this.params[0].data.id + "/" + this.params[0].name
                                     + "?startDate=" + this.chartDate[0] + "&endDate=" + this.chartDate[1]);

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/project/detail.vue

@@ -73,6 +73,7 @@
                 } else {
                     url = "/project/getCostInStage";
                 }
+
                 this.http.post(url, {
                     id: this.detailId,
                     startDate: this.startDate,

+ 86 - 60
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -440,7 +440,10 @@
                     <el-form-item :label="$t('other.attendancePunch')" v-if="workForm.showRefresh && user.company.companyName != mingyiName">
                         <template v-if="user.companyId != 7536">
                             <span v-if="workForm.time">{{workForm.time.startTime}}-{{workForm.time.endTime}}, {{workForm.time.isOffiBusiness?'出差':(workForm.time.outdoorTime?'外出':'工作')}}{{workForm.time.workHours}}{{$t('time.hour')}}
-                                <span v-if="workForm.time.askLeaveTime">|&nbsp;{{ $t('other.AskForLeave') }}{{ workForm.time.askLeaveTime }}{{$t('time.hour')}}</span>
+                                <span v-if="workForm.time.askLeaveTime">|&nbsp;
+                                    <span v-if="workForm.time.askLeaveType" style="color:#FFA500;">{{ workForm.time.askLeaveType == 'T'?'调休':(workForm.time.askLeaveType == 'B'?'病假':workForm.time.askLeaveType)}}</span>
+                                    <span v-else>请假</span>
+                                {{ workForm.time.askLeaveTime }}{{$t('time.hour')}}</span>
                                 <span v-if="workForm.time.otTime" style="color:#FFA500;">|&nbsp;加班{{ workForm.time.otTime }}{{$t('time.hour')}}</span>
                                 <span v-if="workForm.time.modifiedByAdmin == 2" style="color:#FFA500;">(员工申请)</span>
                             </span>
@@ -512,69 +515,92 @@
                     <!-- 000000 -->
                     <div v-for="(domain, index) in workForm.domains" :key="domain.id" :style="index>0?'padding-top:25px;':''" >
                         <div v-if="reportTimeType.multiWorktime==0">
-                        <el-form-item v-if="reportTimeType.type != 3 && !(permissions.reportHideWorkingHours && workForm.domains[index].state == 1)" :label="reportTimeType.type ==2?$t('screening.workHours'):$t('screening.workTime')" :prop="'domains.' + index + '.'+timeFields[reportTimeType.type]"
-                            :rules="{ required: true, message: $t('defaultText.pleaseSelectWorkingHours'), trigger: 'blur' }">
-                            <el-select v-model="domain.timeType" style="width:200px;"
-                                v-if="reportTimeType.type == 0"
-                                :placeholder="$t('defaultText.pleaseSelectWorkingHours')" 
+                        <!-- <template v-if="user.companyId == 10">
+                            <el-form-item v-if="!(permissions.reportHideWorkingHours && workForm.domains[index].state == 1)" label="正常工时" :prop="'domains.' + index + '.'+timeFields[reportTimeType.type]"
+                                :rules="{ required: true, message: '请选择正常工作时长', trigger: 'blur' }">
+                                <el-select v-model="domain.totalWorkingTime" style="width:200px;"
+                                v-if="reportTimeType.type == 1"
                                 :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
-                                @change="onTimeTypeChange(domain.timeType)">
-                                <el-option
-                                    v-for="item in timeType"
-                                    :key="item.value"
-                                    :label="item.label"
-                                    :value="item.value">
-                                </el-option>
-                            </el-select>
-                            <!-- 数字时长选择 -->
-                            <el-select v-model="domain.workingTime" style="width:200px;"
-                            v-if="reportTimeType.type == 1"
-                            :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
-                            :placeholder="$t('defaultText.pleaseSelectWorkingHours') + domain.workingTime"
-                            filterable
-                                :allow-create="user.companyId == 469"
+                                placeholder="请选择正常工作时长"
+                                filterable
                                 default-first-option
-                            @change="seleChn(0,domain)">
-                            <el-option v-for="item in timeRange" :key="item" :value="item.toFixed(1)">{{item.toFixed(1)}}</el-option>
-                            </el-select>
-                            <span v-if="reportTimeType.type == 1">{{$t('time.hour')}}</span>
-
-                            <span v-if="reportTimeType.type == 2">
-                            <!--时间范围选择 -->
-                            <el-time-picker 
-                            :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
-                                v-model="domain.startTime"
-                                :placeholder="$t('time.startTime')"
-                                style="width:120px;"
-                                format="HH:mm"
-                                value-format="HH:mm"
-                                :picker-options="{
-                                start: '08:00',
-                                end: '23:30'
-                                }"
-                                @change="iptChang()">
-                            </el-time-picker> - <el-time-picker 
-                            :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
-                                v-model="domain.endTime"
-                                :placeholder="$t('time.endTime')"
-                                style="width:120px;"
-                                format="HH:mm"
-                                value-format="HH:mm"
-                                :picker-options="{
-                                start: '08:00',
-                                end: '23:30',
-                                minTime: domain.startTime
-                                }"
-                                @change="iptChang()">
-                            </el-time-picker>
-                            </span>
+                                @change="seleChn(0,domain)">
+                                <el-option v-for="item in timeRange" :key="item" :value="item.toFixed(1)">{{item.toFixed(1)}}</el-option>
+                                </el-select>
+                                <span v-if="reportTimeType.type == 1">小时</span>
+                                <div class="overtime" v-if="user.timeType.fillOvertime || (isWeekend && user.timeType.lockWorktime != 1)">
+                                    <el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">额外加班工时</el-checkbox>
+                                    <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">{{$t('time.hour')}}</span>
+                                </div>
+                                ,&nbsp;&nbsp;总工时:{{ parseFloat(domain.totalWorkingTime||0) + parseFloat(domain.overtimeHours || 0)}} 小时
+                            </el-form-item>
+                        </template>
+                        <template v-else> -->
+                            <el-form-item v-if="reportTimeType.type != 3 && !(permissions.reportHideWorkingHours && workForm.domains[index].state == 1)" :label="reportTimeType.type ==2?$t('screening.workHours'):$t('screening.workTime')" :prop="'domains.' + index + '.'+timeFields[reportTimeType.type]"
+                                :rules="{ required: true, message: $t('defaultText.pleaseSelectWorkingHours'), trigger: 'blur' }">
+                                <el-select v-model="domain.timeType" style="width:200px;"
+                                    v-if="reportTimeType.type == 0"
+                                    :placeholder="$t('defaultText.pleaseSelectWorkingHours')" 
+                                    :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
+                                    @change="onTimeTypeChange(domain.timeType)">
+                                    <el-option
+                                        v-for="item in timeType"
+                                        :key="item.value"
+                                        :label="item.label"
+                                        :value="item.value">
+                                    </el-option>
+                                </el-select>
+                                <!-- 数字时长选择 -->
+                                <el-select v-model="domain.workingTime" style="width:200px;"
+                                v-if="reportTimeType.type == 1"
+                                :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
+                                :placeholder="$t('defaultText.pleaseSelectWorkingHours') + domain.workingTime"
+                                filterable
+                                    :allow-create="user.companyId == 469"
+                                    default-first-option
+                                @change="seleChn(0,domain)">
+                                <el-option v-for="item in timeRange" :key="item" :value="item.toFixed(1)">{{item.toFixed(1)}}</el-option>
+                                </el-select>
+                                <span v-if="reportTimeType.type == 1">{{$t('time.hour')}}</span>
 
-                            <div class="overtime" v-if="user.timeType.fillOvertime || (isWeekend && user.timeType.lockWorktime != 1)">
-                                <el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">{{$t('other.IncludingOvertime')}}</el-checkbox>
-                                <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">{{$t('time.hour')}}</span>
-                            </div>
-                        </el-form-item>
+                                <span v-if="reportTimeType.type == 2">
+                                <!--时间范围选择 -->
+                                <el-time-picker 
+                                :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
+                                    v-model="domain.startTime"
+                                    :placeholder="$t('time.startTime')"
+                                    style="width:120px;"
+                                    format="HH:mm"
+                                    value-format="HH:mm"
+                                    :picker-options="{
+                                    start: '08:00',
+                                    end: '23:30'
+                                    }"
+                                    @change="iptChang()">
+                                </el-time-picker> - <el-time-picker 
+                                :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"
+                                    v-model="domain.endTime"
+                                    :placeholder="$t('time.endTime')"
+                                    style="width:120px;"
+                                    format="HH:mm"
+                                    value-format="HH:mm"
+                                    :picker-options="{
+                                    start: '08:00',
+                                    end: '23:30',
+                                    minTime: domain.startTime
+                                    }"
+                                    @change="iptChang()">
+                                </el-time-picker>
+                                </span>
 
+                                <div class="overtime" v-if="user.timeType.fillOvertime || (isWeekend && user.timeType.lockWorktime != 1)">
+                                    <el-checkbox :disabled="!domain.canEdit" v-model="domain.isOvertime">{{$t('other.IncludingOvertime')}}</el-checkbox>
+                                    <el-input :disabled="!domain.canEdit || domain.isOvertime==null || domain.isOvertime==0 || !domain.isOvertime" v-model="domain.overtimeHours" @blur="triggerCalculateOT(index)" @input="domain.overtimeHours=domain.overtimeHours.replace(/[^\d.]/g,'')" style="width: 100px;"></el-input><span style="margin-left:5px">{{$t('time.hour')}}</span>
+                                </div>
+                            </el-form-item>
+
+                        <!-- </template> -->
+                        
                         <el-form-item :label="$t('tianBaoBuMen')" v-if="user.timeType.userWithMultiDept == 1 && userReportDeptList.length > 0"
                             :prop="'domains.' + index + '.reportTargetDeptId'"
                             :rules="{ required: true, message: $t('qing-xuan-ze-bu-men'), trigger: ['change','blur'] }">

+ 4 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/dailyReportReview.vue

@@ -261,7 +261,10 @@
                             <span v-if="scope.row.cardHours">共 {{ scope.row.cardHours.toFixed(1) }} 小时</span>
                             <span v-if="scope.row.modifiedByAdmin == 2" style="color:#FFA500;">(员工申请)</span>
                             <span v-if="scope.row.overtime" style="color:#20a0ff;">加班申请 {{ scope.row.overtime.toFixed(1) }} 小时</span>
-                            <span v-if="scope.row.askLeaveTime" style="color:#20a0ff;">{{ scope.row.askLeaveType == null?'请假': scope.row.askLeaveType}}{{ scope.row.askLeaveTime.toFixed(1) }} 小时</span>
+                            <span v-if="scope.row.askLeaveTime" style="color:#20a0ff;">
+                                <span v-if="scope.row.askLeaveType">{{ scope.row.askLeaveType == 'T'?'调休':(scope.row.askLeaveType == 'B'?'病假':scope.row.askLeaveType)}}</span>
+                                <span v-else>请假</span>
+                                {{ scope.row.askLeaveTime.toFixed(1) }} 小时</span>
                             <span v-if="scope.row.outdoorTime" style="color:#20a0ff;">外出 {{ scope.row.outdoorTime.toFixed(1) }} 小时</span>
                         </span>
                         <span v-else="scope.row.cardHours">-</span>

+ 4 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/workflow/report.vue

@@ -7,7 +7,7 @@
             </el-form>
         </el-col>
         <p style="padding-top:80px;margin: 0 0 10px 10px;color:#666;">{{$t('timeApprovalProcess')}}</p>
-        <div>
+        <div v-if="user.timeType.reportAuditType == 0">
         <el-col :span="6" > 
             <el-scrollbar style="height:100%;border:1px solid #dddddd;margin-left:15px;" >
             <div class="tree" :style="'height:'+ (tableHeight-120) + 'px'">
@@ -69,6 +69,9 @@
             
         </el-col>
         </div>
+        <div v-else>
+            <p style="text-align: center;color:red;font-size:16px">当前审核模式不支持审批流,请联系客服修改审核模式为:项目审核人审核</p>
+        </div>
         
         <!--部门选择列表 -->
         <el-dialog  :title="$t('selectheapprovingdepartment')" v-if="dialogVisible" :visible.sync="dialogVisible"  width="400px">

+ 14 - 12
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -2281,6 +2281,7 @@ export default {
                             }
                             this.form.abnormalTime = abnormalTime;
                             this.form.abnormalItemId = abnormalItemId;
+                            this.form.abnormalEndDay = '0';
                             if (abnormalItemId != null) {
                                 this.selectedAbnormalItem = this.abnormalItemList.filter(a=>a.id == abnormalItemId)[0];
                                 this.form.abnormalItemName = this.selectedAbnormalItem.name;
@@ -2318,6 +2319,7 @@ export default {
                                 ccUserid: { name: '', id: '' }
                             }]
                             this.$set(this.form,'abnormalTime', false);
+                            this.$set(this.form,'abnormalEndDay', '0');
                              // businessTrips 有数据的情况下
                              const businessTrips = res.data.businessTrips || []
                             if(businessTrips.length > 0) {
@@ -3414,20 +3416,20 @@ export default {
                     formData.append('extraField4', this.form.domains[i].extraField4 || '');
                     formData.append('extraField5', this.form.domains[i].extraField5 || '');
                 }
-                //羲合超导的异常工时上报
-                if (this.user.companyId == 8555 || this.user.companyId == 5792) {
-                    formData.append("abnormalTime", this.form.abnormalTime);
-                }
             }
-            // 补考勤时间字段(仅异常填报时提交)
-            if ((this.user.companyId == 8555 || this.user.companyId == 5792) && this.form.abnormalTime) {
-                if (this.form.abnormalStartTime) {
-                    formData.append("abnormalStartTime", this.form.abnormalStartTime || '');
-                }
-                if (this.form.abnormalEndTime) {
-                    formData.append("abnormalEndTime", this.form.abnormalEndTime || '');
+            //羲合超导的异常工时上报
+            if (this.user.companyId == 8555 || this.user.companyId == 5792) {
+                if (this.form.abnormalTime) {
+                    formData.append("abnormalTime", this.form.abnormalTime);
+                    formData.append("abnormalItemId", this.form.abnormalItemId);
+                    if (this.form.abnormalStartTime) {
+                        formData.append("abnormalStartTime", this.form.abnormalStartTime || '');
+                    }
+                    if (this.form.abnormalEndTime) {
+                        formData.append("abnormalEndTime", this.form.abnormalEndTime || '');
+                    }
+                    formData.append("abnormalEndDay", this.form.abnormalEndDay || '0');
                 }
-                formData.append("abnormalEndDay", this.form.abnormalEndDay || '0');
             }
             if (!this.flgLg) {
                 return