소스 검색

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

Min 10 달 전
부모
커밋
370e3192ec
16개의 변경된 파일393개의 추가작업 그리고 149개의 파일을 삭제
  1. 4 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  2. 6 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  3. 10 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java
  4. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java
  5. 3 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  6. 34 7
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  7. 84 11
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  8. 24 24
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  9. 41 1
      fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json
  10. 79 1
      fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json
  11. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue
  12. 7 2
      fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue
  13. 18 17
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  14. 73 73
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue
  15. 5 5
      fhKeeper/formulahousekeeper/timesheet/src/views/workflow/report.vue
  16. 2 2
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

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

@@ -172,7 +172,9 @@ public class ProjectController {
                                    Double outputValue,
                                    Double outputValue,
                                    Integer deptId,
                                    Integer deptId,
                                    @RequestParam(defaultValue = "false") boolean onlyChangeParticipate,
                                    @RequestParam(defaultValue = "false") boolean onlyChangeParticipate,
-                                   String buId,Double manDay,String  manDayStartDate,String plate1,
+                                   String buId,Double manDay,String  manDayStartDate,
+                                   String reviwerId,
+                                   String plate1,
                                    String plate2,
                                    String plate2,
                                    String plate3,
                                    String plate3,
                                    String plate4,
                                    String plate4,
@@ -185,7 +187,7 @@ public class ProjectController {
         return projectService.editProject(id, name, code, userId, inchargerId, isPublic, planStartDate, planEndDate, level, contractAmount,changeContractReason,
         return projectService.editProject(id, name, code, userId, inchargerId, isPublic, planStartDate, planEndDate, level, contractAmount,changeContractReason,
                 projectBaseCostData,projectKeyNodesData,
                 projectBaseCostData,projectKeyNodesData,
                  budget,customerId,chosenLeaders, associateDegrees, associateDegreeNames,
                  budget,customerId,chosenLeaders, associateDegrees, associateDegreeNames,
-                taskGpIncharge,auditUserIds, ccUserIds, category, projectDesc,projectMainId, providerIds, providerNames, request,projectSeparate,outputValue,deptId,onlyChangeParticipate,buId,manDay,manDayStartDate,plate1,plate2,plate3,plate4,plate5,plate6,plate7,plate8,plate9,plate10);
+                taskGpIncharge,auditUserIds, ccUserIds, category, projectDesc,projectMainId, providerIds, providerNames, request,projectSeparate,outputValue,deptId,onlyChangeParticipate,buId,manDay,manDayStartDate,reviwerId, plate1,plate2,plate3,plate4,plate5,plate6,plate7,plate8,plate9,plate10);
     }
     }
 
 
     @RequestMapping("/adjustBase")
     @RequestMapping("/adjustBase")

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

@@ -623,7 +623,7 @@ public class ReportController {
         } else {
         } else {
             //自动填充项目审核人
             //自动填充项目审核人
             for (int i=0;i<projectAuditorId.length; i++) {
             for (int i=0;i<projectAuditorId.length; i++) {
-                if (projectAuditorId[i] == null) {
+                if (projectAuditorId[i] == null || comTimeType.getReportAuditType() == 8) {
                     final int index = i;
                     final int index = i;
                     projectAuditorId[i] = projectList.stream().filter(p->p.getId().equals(projectId[index])).findFirst().get().getInchargerId();
                     projectAuditorId[i] = projectList.stream().filter(p->p.getId().equals(projectId[index])).findFirst().get().getInchargerId();
                 }
                 }
@@ -1507,6 +1507,11 @@ public class ReportController {
                     }
                     }
                 }
                 }
             }
             }
+        } else if (comTimeType.getReportAuditType() == 8) {
+            //默认是第一步审核
+            for (Report report : reportList) {
+                report.setIsFinalAudit(0);
+            }
         }
         }
 
 
 
 

+ 10 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java

@@ -26,7 +26,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  * </p>
  *
  *
  * @author Seyason
  * @author Seyason
- * @since 2023-11-19
+ * @since 2024-07-11
  */
  */
 @Data
 @Data
 @EqualsAndHashCode(callSuper = false)
 @EqualsAndHashCode(callSuper = false)
@@ -477,6 +477,15 @@ public class Project extends Model<Project> {
 
 
     @TableField(exist = false)
     @TableField(exist = false)
     private String groupName;
     private String groupName;
+    /**
+     * 项目复审人
+     */
+    @TableField("reviwer_id")
+    private String reviwerId;
+
+    @TableField(exist = false)
+    private String reviwerName;
+
 
 
     @Override
     @Override
     protected Serializable pkVal() {
     protected Serializable pkVal() {

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java

@@ -182,4 +182,6 @@ public interface ProjectMapper extends BaseMapper<Project> {
     List<Map<String, Object>> userTaskProcessList(Integer deptId, String userId, Integer projectId, Integer companyId, @Param("list") List<Integer> deptIds,String startDate,String endDate,@Param("listSecond") List<Integer> regularDeptIds, Integer start, Integer size);
     List<Map<String, Object>> userTaskProcessList(Integer deptId, String userId, Integer projectId, Integer companyId, @Param("list") List<Integer> deptIds,String startDate,String endDate,@Param("listSecond") List<Integer> regularDeptIds, Integer start, Integer size);
 
 
     Long userTaskProcessListCount(Integer deptId, String userId, Integer projectId, Integer companyId, @Param("list") List<Integer> deptIds,String startDate,String endDate,@Param("listSecond") List<Integer> regularDeptIds);
     Long userTaskProcessListCount(Integer deptId, String userId, Integer projectId, Integer companyId, @Param("list") List<Integer> deptIds,String startDate,String endDate,@Param("listSecond") List<Integer> regularDeptIds);
+    @Update("update project set reviwer_id=null where id=#{id}")
+    void removeReviwer(Integer id);
 }
 }

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

@@ -49,7 +49,9 @@ public interface ProjectService extends IService<Project> {
                             String providerIds,
                             String providerIds,
                             String providerNames,
                             String providerNames,
                             HttpServletRequest request,
                             HttpServletRequest request,
-                            ProjectSeparate projectSeparate,Double outputValue,Integer deptId,boolean onlyChangeParticipate,String buId,Double manDay,String manDayStartDate,String plate1,
+                            ProjectSeparate projectSeparate,Double outputValue,Integer deptId,boolean onlyChangeParticipate,String buId,Double manDay,String manDayStartDate,
+                            String reviwerId,
+                            String plate1,
                             String plate2,
                             String plate2,
                             String plate3,
                             String plate3,
                             String plate4,
                             String plate4,

+ 34 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -704,7 +704,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                    String providerIds,
                                    String providerIds,
                                    String providerNames,
                                    String providerNames,
                                    HttpServletRequest request,
                                    HttpServletRequest request,
-                                   ProjectSeparate projectSeparate,Double outputValue,Integer deptId,boolean onlyChangeParticipate,String buId,Double manDay,String  manDayStartDate,String plate1,
+                                   ProjectSeparate projectSeparate,Double outputValue,Integer deptId,boolean onlyChangeParticipate,String buId,Double manDay,String  manDayStartDate,
+                                   String reviwerId,
+                                   String plate1,
                                    String plate2,
                                    String plate2,
                                    String plate3,
                                    String plate3,
                                    String plate4,
                                    String plate4,
@@ -745,6 +747,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         }
         }
         boolean inchargerChanged = false;
         boolean inchargerChanged = false;
         String oldInchargerId = null;
         String oldInchargerId = null;
+        Project oldProject = null;
         if (id == null) {
         if (id == null) {
             //新增项目
             //新增项目
             if (name == null) {
             if (name == null) {
@@ -780,6 +783,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                     convertDepartmentIdToCascade(0) :
                                     convertDepartmentIdToCascade(0) :
                                     convertDepartmentIdToCascade(deptId))
                                     convertDepartmentIdToCascade(deptId))
                             .setProviderNames(providerNames)
                             .setProviderNames(providerNames)
+                            .setReviwerId(reviwerId)
                             .setPlate1(plate1)
                             .setPlate1(plate1)
                             .setPlate2(plate2)
                             .setPlate2(plate2)
                             .setPlate3(plate3)
                             .setPlate3(plate3)
@@ -885,7 +889,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 }
                 }
             }
             }
         } else {
         } else {
-            Project oldProject = projectMapper.selectById(id);
+            oldProject = projectMapper.selectById(id);
             isNew = false;
             isNew = false;
             //修改项目
             //修改项目
             //检查项目编号不能重复
             //检查项目编号不能重复
@@ -897,10 +901,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 //httpRespMsg.setError("提交失败:项目编号已存在");
                 //httpRespMsg.setError("提交失败:项目编号已存在");
                 httpRespMsg.setError(MessageUtils.message("project.submitFailByNoRepeat"));
                 httpRespMsg.setError(MessageUtils.message("project.submitFailByNoRepeat"));
             } else {
             } else {
-                Project project = projectMapper.selectById(id);
-                if (inchargerId != null && !inchargerId.equals(project.getInchargerId())) {
+                if (inchargerId != null && !inchargerId.equals(oldProject.getInchargerId())) {
                     inchargerChanged = true;
                     inchargerChanged = true;
-                    oldInchargerId = project.getInchargerId();
+                    oldInchargerId = oldProject.getInchargerId();
                 }
                 }
                 Project p = new Project();
                 Project p = new Project();
                 p.setProjectName(name).setId(id).setCompanyId(companyId).setProjectCode(code != null?code.trim():null).setInchargerId(inchargerId)
                 p.setProjectName(name).setId(id).setCompanyId(companyId).setProjectCode(code != null?code.trim():null).setInchargerId(inchargerId)
@@ -920,6 +923,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                 convertDepartmentIdToCascade(0) :
                                 convertDepartmentIdToCascade(0) :
                                 convertDepartmentIdToCascade(deptId))
                                 convertDepartmentIdToCascade(deptId))
                         .setProviderNames(providerNames)
                         .setProviderNames(providerNames)
+                        .setReviwerId(reviwerId)
                         .setPlate1(plate1)
                         .setPlate1(plate1)
                         .setPlate2(plate2)
                         .setPlate2(plate2)
                         .setPlate3(plate3)
                         .setPlate3(plate3)
@@ -996,10 +1000,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                     }
                 }
                 }
                 //编辑项目合同修改 添加记录
                 //编辑项目合同修改 添加记录
-                if(contractAmount!=null&&project.getContractAmount().doubleValue()!=contractAmount){
+                if(contractAmount!=null&&oldProject.getContractAmount().doubleValue()!=contractAmount){
                     ContractModifyRecord contractModifyRecord=new ContractModifyRecord();
                     ContractModifyRecord contractModifyRecord=new ContractModifyRecord();
                     contractModifyRecord.setEditUserId(user.getId());
                     contractModifyRecord.setEditUserId(user.getId());
-                    contractModifyRecord.setOldContractAmount(project.getContractAmount());
+                    contractModifyRecord.setOldContractAmount(oldProject.getContractAmount());
                     contractModifyRecord.setNewContractAmount(contractAmount);
                     contractModifyRecord.setNewContractAmount(contractAmount);
                     contractModifyRecord.setProjectId(id);
                     contractModifyRecord.setProjectId(id);
                     contractModifyRecord.setReason(changeContractReason);
                     contractModifyRecord.setReason(changeContractReason);
@@ -1049,6 +1053,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         //去掉客户
                         //去掉客户
                         projectMapper.removeProjectCustomer(id);
                         projectMapper.removeProjectCustomer(id);
                     }
                     }
+                    if (timeType.getReportAuditType() == 8 && oldProject.getReviwerId() != null && reviwerId == null) {
+                        //清空复核人
+                        projectMapper.removeReviwer(id);
+                    }
                     //修改项目相关表
                     //修改项目相关表
                     ProjectTimer timer = new ProjectTimer();
                     ProjectTimer timer = new ProjectTimer();
                     timer.setProjectName(name);
                     timer.setProjectName(name);
@@ -1276,6 +1284,19 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         }
                         }
                     }
                     }
 
 
+                    //有项目复核人的情况
+                    if (timeType.getReportAuditType() == 8) {
+                        if (oldProject.getReviwerId() != null && reviwerId != null && !oldProject.getReviwerId().equals(reviwerId)) {
+                            //发生变化,查找日报中待审核状态下的
+                            QueryWrapper<Report> queryWrapper = new QueryWrapper<Report>().eq("company_id", companyId).eq("project_id", id).eq("state",0).eq("project_auditor_id", oldProject.getReviwerId());
+                            int count = reportMapper.selectCount(queryWrapper);
+                            if (count > 0) {
+                                //更新日报的审核人
+                                Report upR = new Report().setProjectAuditorId(reviwerId);
+                                reportMapper.update(upR, queryWrapper);
+                            }
+                        }
+                    }
                 }
                 }
             }
             }
             //针对启用了简单非项目模式的情况,确保项目经理,级别,合同金额,开始日期,截止日期,预估工时都是null
             //针对启用了简单非项目模式的情况,确保项目经理,级别,合同金额,开始日期,截止日期,预估工时都是null
@@ -2284,6 +2305,12 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 project.setInchargerName(incharger.getName());
                 project.setInchargerName(incharger.getName());
             }
             }
         }
         }
+        if (project.getReviwerId() != null) {
+            User reviewer = userMapper.selectById(project.getReviwerId());
+            if (reviewer != null) {
+                project.setReviwerName(reviewer.getName());
+            }
+        }
         Optional<Department> first = departmentList.stream().filter(dt -> dt.getDepartmentId().equals(project.getDeptId())).findFirst();
         Optional<Department> first = departmentList.stream().filter(dt -> dt.getDepartmentId().equals(project.getDeptId())).findFirst();
         if(first.isPresent()){
         if(first.isPresent()){
             project.setDepartmentName(first.get().getDepartmentName());
             project.setDepartmentName(first.get().getDepartmentName());

+ 84 - 11
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -1894,15 +1894,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                     item.put("key","审核人");
                                     item.put("key","审核人");
                                     item.put("value",wxCorpInfo.getSaasSyncContact() == 1?("$userName="+user.getName()+"$"): user.getName());
                                     item.put("value",wxCorpInfo.getSaasSyncContact() == 1?("$userName="+user.getName()+"$"): user.getName());
                                     dataJson.add(item);
                                     dataJson.add(item);
-//                                    if(timeType.getNeedEvaluate()==1){
-//                                        JSONObject item1=new JSONObject();
-//                                        item1.put("key","评价");
-//                                        item1.put("value",StringUtils.isEmpty(report.getEvaluate())?"":report.getEvaluate());
-//                                        dataJson.add(item1);
-//                                        json.put("template_id","tty9TkCAAAWoUyhGnXRCZuhkgCqw_Uow");
-//                                    }else {
-//                                        json.put("template_id","tty9TkCAAANpvEtLrkPUGeOEd1-U7W2w");
-//                                    }
                                     json.put("template_id","tty9TkCAAANpvEtLrkPUGeOEd1-U7W2w");
                                     json.put("template_id","tty9TkCAAANpvEtLrkPUGeOEd1-U7W2w");
                                     JSONObject item2=new JSONObject();
                                     JSONObject item2=new JSONObject();
                                     item2.put("key","日期");
                                     item2.put("key","日期");
@@ -1929,7 +1920,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             ReportAuditLog log = new ReportAuditLog();
             ReportAuditLog log = new ReportAuditLog();
             log.setAuditChannel(channel);
             log.setAuditChannel(channel);
             log.setCompanyId(company.getId());
             log.setCompanyId(company.getId());
-            //log.setResult("通过");
             log.setResult(MessageUtils.message("profession.approved"));
             log.setResult(MessageUtils.message("profession.approved"));
             log.setUserId(user.getId());
             log.setUserId(user.getId());
             log.setUserName(user.getName());
             log.setUserName(user.getName());
@@ -2243,7 +2233,48 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 if (updateReportList.size() > 0) {
                 if (updateReportList.size() > 0) {
                     updateBatchById(updateReportList);
                     updateBatchById(updateReportList);
                 }
                 }
-            }else {
+            } else if (timeType.getReportAuditType() == 8) {
+                //项目经理先审核,复核人后审核
+                boolean hasAuditAllPri = sysFunctionService.hasPriviledge(user.getRoleId(), "审核全员日报");
+                List<Report> updateReportList = new ArrayList<>();
+                List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().select("id, state, creator_id, create_date, project_id, project_auditor_id, is_final_audit").in("id", ids));
+                for (Report r : reportList) {
+                    //直属领导审核或者部门负责人审核
+                    Report newReport = new Report();
+                    newReport.setId(r.getId());
+                    if (hasAuditAllPri) {
+                        newReport.setState(1);
+                        newReport.setProjectAuditState(1);
+                        newReport.setProjectAuditTime(LocalDateTime.now());
+                    } else {
+                        if (r.getProjectAuditorId().equals(user.getId())) {
+                            if (r.getIsFinalAudit() == 0) {
+                                //当前是项目经理审核,判断是否有复核人
+
+                                String reviwerId = projectMapper.selectById(r.getProjectId()).getReviwerId();
+                                if (reviwerId == null) {
+                                    r.setIsFinalAudit(1);
+                                    newReport.setIsFinalAudit(1);
+                                } else {
+                                    newReport.setProjectAuditorId(reviwerId);
+                                }
+                            }
+                            //上面可能处理为最终审核了
+                            if (r.getIsFinalAudit() == 1) {
+                                newReport.setProjectAuditState(1);
+                                newReport.setState(1);
+                            } else {
+                                newReport.setIsFinalAudit(1);
+                            }
+                            newReport.setProjectAuditTime(LocalDateTime.now());
+                        }
+                    }
+                    updateReportList.add(newReport);
+                }
+                if (updateReportList.size() > 0) {
+                    updateBatchById(updateReportList);
+                }
+            } else {
                 //之前的流程逻辑,综合了一层项目审核,或者一层任务分组审核。 可叠加部门审批流(部门审批时,本部门的负责人是否由上级部门负责人审核,可配置)
                 //之前的流程逻辑,综合了一层项目审核,或者一层任务分组审核。 可叠加部门审批流(部门审批时,本部门的负责人是否由上级部门负责人审核,可配置)
                 List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
                 List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
                         new QueryWrapper<AuditWorkflowTimeSetting>().eq("dept_id", auditTargetUser.getDepartmentId())
                         new QueryWrapper<AuditWorkflowTimeSetting>().eq("dept_id", auditTargetUser.getDepartmentId())
@@ -3513,6 +3544,48 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 if (updateReportList.size() > 0) {
                 if (updateReportList.size() > 0) {
                     updateBatchById(updateReportList);
                     updateBatchById(updateReportList);
                 }
                 }
+            } else if (timeType.getReportAuditType() == 8) {
+                //项目经理先审核,复核人后审核
+                boolean hasAuditAllPri = sysFunctionService.hasPriviledge(user.getRoleId(), "审核全员日报");
+                List<Report> updateReportList = new ArrayList<>();
+                List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().select("id, state, group_audit_state, creator_id, create_date, project_id,audit_dept_managerid,department_audit_state,project_audit_state, project_auditor_id, is_dept_audit, is_final_audit").in("id", ids));
+                allUsers = userMapper.selectList(new QueryWrapper<User>().select("id, name, department_id").eq("company_id", company.getId()));
+                allReports = reportList;
+                for (Report r : reportList) {
+                    //直属领导审核或者部门负责人审核
+                    Report newReport = new Report();
+                    newReport.setId(r.getId());
+                    if (hasAuditAllPri) {
+                        newReport.setState(1);
+                        newReport.setProjectAuditState(1);
+                        newReport.setProjectAuditTime(LocalDateTime.now());
+                    } else {
+                        if (r.getProjectAuditorId().equals(user.getId())) {
+                            if (r.getIsFinalAudit() == 0) {
+                                //当前是项目经理审核,判断是否有复核人
+                                String reviwerId = projectMapper.selectById(r.getProjectId()).getReviwerId();
+                                if (reviwerId == null) {
+                                    newReport.setIsFinalAudit(1);
+                                    r.setIsFinalAudit(1);
+                                } else {
+                                    newReport.setProjectAuditorId(reviwerId);
+                                }
+                            }
+                            //上面可能处理为最终审核了
+                            if (r.getIsFinalAudit() == 1) {
+                                newReport.setProjectAuditState(1);
+                                newReport.setState(1);
+                            } else {
+                                newReport.setIsFinalAudit(1);
+                            }
+                            newReport.setProjectAuditTime(LocalDateTime.now());
+                        }
+                    }
+                    updateReportList.add(newReport);
+                }
+                if (updateReportList.size() > 0) {
+                    updateBatchById(updateReportList);
+                }
             } else {
             } else {
                 List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
                 List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(
                         new QueryWrapper<AuditWorkflowTimeSetting>().eq("company_id", company.getId())
                         new QueryWrapper<AuditWorkflowTimeSetting>().eq("company_id", company.getId())

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 24 - 24
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml


+ 41 - 1
fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json

@@ -207,6 +207,7 @@
     "waitForTheProjectReviewer": "Waiting for project reviewers",
     "waitForTheProjectReviewer": "Waiting for project reviewers",
     "audit": "review",
     "audit": "review",
     "projectAuditor": "project reviewer",
     "projectAuditor": "project reviewer",
+    "projectReviwer": "secondary reviewer",
     "reviewer": "Reviewer",
     "reviewer": "Reviewer",
     "await": "await",
     "await": "await",
     "importWaitingForReview": "Import waiting for review",
     "importWaitingForReview": "Import waiting for review",
@@ -1965,5 +1966,44 @@
   "qingXuanZeZeRenRen": "Please select the responsible person",
   "qingXuanZeZeRenRen": "Please select the responsible person",
   "xinJianRenWu": "New Task",
   "xinJianRenWu": "New Task",
   "xuanZeRiQiShiJian": "Select date and time",
   "xuanZeRiQiShiJian": "Select date and time",
-  "zhongQiRenWu": "Restart task"
+  "zhongQiRenWu": "Restart task",
+  "buFenGongShi": "Partial working hours",
+  "caoZuoChengGong": "Operation successful:",
+  "caoZuoShiJian": "Operation time",
+  "cuoWuXinXi": "error message",
+  "dangQianYuanGongYouDaiShenHeRiBaoQueRenTingYongBingBoHuiRiBaoMa": "Is the current employee awaiting review of the daily report, confirming its discontinuation and rejecting it?",
+  "gaiYuanGong": "The employee",
+  "jiangGaiYuanGongDeGongShiShuJuCanYuDeXiangMuYuRenWuZhuanYiZhi": "Transfer the employee's working hours data, projects and tasks they have participated in to",
+  "keJianFanWeiSheZhi": "Visible range setting",
+  "keTianBaoBuMen": "Department that can be filled in",
+  "keZhuanRang": "Transferable",
+  "liZhiRiQi": "Resignation date",
+  "liangCengShenHe": "Two level review",
+  "luJingGuanLiQiYeYingYongGuanLiGongShiGuanJiaKeJianFanWei": "Path: Manage Enterprise - Application Management - Hour Manager - Visible Range",
+  "piLiangQiYongYuanGong": "Batch enable employees",
+  "qiTaCuoWu": "Other errors",
+  "qingXuanZeJieShouRen": "Please select recipient",
+  "quanBuGongShi": "All working hours",
+  "queDingShanChuGaiYuanGongMa": "Are you sure to delete this employee?",
+  "queDingYaoShanChuGaiBuMenMa": "Are you sure you want to delete this department?",
+  "renYuanSuoZaiBuMenYuDingDingTongXunLuBaoChiYiZhi": "The department where the personnel are located should be consistent with the DingTalk contact list",
+  "shenHeCengJi": "Review hierarchy",
+  "shiFouShanChuGaiJiLu": "Do you want to delete this record?",
+  "tiaoYongRenShenFenBuFuHe": "The caller's identity does not match",
+  "tiaoZhengBuMen": "Adjusting departments",
+  "tongBuQianQingLianXiQiYeWeiXinGuanLiYuanJianChaYingYongShouQuanDeKeJianFanWei": "Please contact the enterprise WeChat administrator to check the visible range of application authorization before synchronization",
+  "tongBuRiZhi": "Synchronize logs",
+  "tongBuZhong": "Synchronizing",
+  "tuiSongZhiSap": "Push to SAP",
+  "weiSheZhiShiYouSuoShuBuMenFuZeRenShenHe": "When not set, it shall be reviewed by the department head",
+  "xiuZhengGongShi": "Correction of working hours",
+  "xiuZhengGongShiSuoShuBuMen": "Revise the department to which the working hours belong",
+  "yiCengShenHe": "First level review",
+  "yiQuXiao": "Canceled",
+  "yingYongLeiXingBuFuHeYaoQiu": "The application type does not meet the requirements",
+  "yingYongXinXiHuoQuShiBai": "Application information retrieval failed",
+  "zhuanYiDao": "Transfer to",
+  "caoZuoChengGong-0": "Operation successful!",
+  "dangQianBuMenCunZaiDaiShenHeBaoGao": "There are pending reports in the current department for review",
+  "dangQianBuMenCunZaiDaiShenHeBaoGaoShiFouQuanBuZhuanWeiTongGuo": "Are all pending reports in the current department approved?"
 }
 }

+ 79 - 1
fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json

@@ -207,6 +207,7 @@
     "waitForTheProjectReviewer": "待项目审核人",
     "waitForTheProjectReviewer": "待项目审核人",
     "audit": "审核",
     "audit": "审核",
     "projectAuditor": "项目审核人",
     "projectAuditor": "项目审核人",
+    "projectReviwer": "项目复审人",
     "reviewer": "审核人",
     "reviewer": "审核人",
     "await": "待",
     "await": "待",
     "importWaitingForReview": "导入待审核",
     "importWaitingForReview": "导入待审核",
@@ -1965,5 +1966,82 @@
   "xuanZeRiQiShiJian": "选择日期时间",
   "xuanZeRiQiShiJian": "选择日期时间",
   "huiYiJieShuShiJian": "会议结束时间",
   "huiYiJieShuShiJian": "会议结束时间",
   "chengGongFaQiHuiYi": "成功发起会议",
   "chengGongFaQiHuiYi": "成功发起会议",
-  "daiBanRenWuDaoChuXlsx": "待办任务导出.xlsx"
+  "daiBanRenWuDaoChuXlsx": "待办任务导出.xlsx",
+  "tiaoZhengBuMen": "调整部门",
+  "xiuZhengGongShiSuoShuBuMen": "修正工时所属部门",
+  "piLiangQiYongYuanGong": "批量启用员工",
+  "xiuZhengGongShi": "修正工时",
+  "quanBuGongShi": "全部工时",
+  "buFenGongShi": "部分工时",
+  "tuiSongZhiSap": "推送至SAP",
+  "keTianBaoBuMen": "可填报部门",
+  "shenHeCengJi": "审核层级",
+  "liangCengShenHe": "两层审核",
+  "yiCengShenHe": "一层审核",
+  "weiSheZhiShiYouSuoShuBuMenFuZeRenShenHe": "未设置时由所属部门负责人审核",
+  "liZhiRiQi": "离职日期",
+  "queDingShanChuGaiYuanGongMa": "确定删除该员工吗?",
+  "jiangGaiYuanGongDeGongShiShuJuCanYuDeXiangMuYuRenWuZhuanYiZhi": "将该员工的工时数据、参与的项目与任务转移 至",
+  "renYuanSuoZaiBuMenYuDingDingTongXunLuBaoChiYiZhi": "人员所在部门与钉钉通讯录保持一致",
+  "tongBuRiZhi": "同步日志",
+  "caoZuoShiJian": "操作时间",
+  "cuoWuXinXi": "错误信息",
+  "tongBuQianQingLianXiQiYeWeiXinGuanLiYuanJianChaYingYongShouQuanDeKeJianFanWei": "同步前请联系企业微信管理员检查应用授权的可见范围",
+  "luJingGuanLiQiYeYingYongGuanLiGongShiGuanJiaKeJianFanWei": "路径:管理企业-应用管理-工时管家-可见范围",
+  "keJianFanWeiSheZhi": "可见范围设置",
+  "zhuanYiDao": "转移到",
+  "shiFouShanChuGaiJiLu": "是否删除该记录?",
+  "keZhuanRang": "可转让",
+  "qingXuanZeJieShouRen": "请选择接收人",
+  "tongBuZhong": "同步中",
+  "dangQianYuanGongYouDaiShenHeRiBaoQueRenTingYongBingBoHuiRiBaoMa": "当前员工有待审核日报,确认停用并驳回日报吗?",
+  "yiQuXiao": "已取消",
+  "gaiYuanGong": "该员工",
+  "queDingYaoShanChuGaiBuMenMa": "确定要删除该部门吗?",
+  "tiaoYongRenShenFenBuFuHe": "调用人身份不符合",
+  "yingYongXinXiHuoQuShiBai": "应用信息获取失败",
+  "yingYongLeiXingBuFuHeYaoQiu": "应用类型不符合要求",
+  "qiTaCuoWu": "其它错误",
+  "caoZuoChengGong": "操作成功:",
+  "caoZuoChengGong-0": "操作成功!",
+  "dangQianBuMenCunZaiDaiShenHeBaoGao": "当前部门存在待审核报告",
+  "dangQianBuMenCunZaiDaiShenHeBaoGaoShiFouQuanBuZhuanWeiTongGuo": "当前部门存在待审核报告, 是否全部转为通过?",
+  "tuiSongGongShi": "推送工时",
+  "gongShiTuiSongRiZhi": "工时推送日志",
+  "riBaoShenHeXiuGai": "日报审核修改",
+  "fuWu": "服务",
+  "jiaZaiGengDuoRiBao": "加载更多日报",
+  "tuiSongShiJian": "推送时间",
+  "tTuisongshijian": "$t('tuiSongShiJian')",
+  "tuiSongMingCheng": "推送名称",
+  "tuiSongFangShi": "推送方式",
+  "tuiSongJieGuo": "推送结果",
+  "shiBai": "失败",
+  "zhiNengTianBao": "智能填报",
+  "tianBaoBuMen": "填报部门",
+  "jiaoSeXuanZe": "角色选择",
+  "qingXuanZeFuWu": "请选择服务",
+  "tuPianShangChuan": "图片上传",
+  "heJiGongShi": "合计工时",
+  "buKeChaoQianTianBao": "不可超前填报",
+  "zhengZaiWei": "*正在为",
+  "daiTian": "代填",
+  "renWuLiChengBei": "任务 / 里程碑",
+  "daoChuFangShi": "导出方式",
+  "wanZhengDaoChu": "完整导出",
+  "jingJianDaoChu": "精简导出",
+  "jingJianRiBaoBuHanGongZuoShiXiangHeShenPiXinXiShuJuLiangGengXiaoDaoChuGengKuai": "精简日报不含工作事项和审批信息,数据量更小导出更快。",
+  "daoChuRiBaoShenHeJiLuShuJu": "导出日报审核记录数据",
+  "daoRuRiBaoShenHeJiLuXiuGaiShuJu": "导入日报审核记录修改数据",
+  "yiBoHuiLouTian": "已驳回/漏填",
+  "weiTiJiao": "未提交",
+  "weiTiJiaoRenYuanLieBiao": "未提交人员列表",
+  "gongShiYiChangMingXi": "工时异常明细",
+  "shiFouYiChang": "是否异常",
+  "bianGengTiXing": "变更提醒",
+  "tianBaoGongShi": "填报工时",
+  "kaoQinGongShi": "考勤工时",
+  "cuiBan": "催办",
+  "quXiaoYiChang": "取消异常",
+  "xiuGaiDaoRuJiLu": "修改导入记录"
 }
 }

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

@@ -716,7 +716,7 @@
                                         if(!name) {
                                         if(!name) {
                                             return ''
                                             return ''
                                         }
                                         }
-                                        const unit = yAxisValue == 0 ? this.$t('yuan') : this.$t('time.hour');
+                                        const unit = yAxisValue == 0 ? _this.$t('yuan') : _this.$t('time.hour');
                                         console.log(nameObj, name, nameObj[name], params)
                                         console.log(nameObj, name, nameObj[name], params)
                                         const totalValue = yAxisValue == 0 ? nameObj[name].moneyTol : nameObj[name].timeTol;
                                         const totalValue = yAxisValue == 0 ? nameObj[name].moneyTol : nameObj[name].timeTol;
                                         return seriesName === cerName ? `${totalValue ? totalValue.toFixed(0) : 0} ${unit}` : '';
                                         return seriesName === cerName ? `${totalValue ? totalValue.toFixed(0) : 0} ${unit}` : '';

+ 7 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue

@@ -122,8 +122,13 @@
                         <span v-if="user.userNameNeedTranslate != 1">{{project.inchargerName}}</span>
                         <span v-if="user.userNameNeedTranslate != 1">{{project.inchargerName}}</span>
                         <span v-else><TranslationOpenDataText type='userName' :openid='project.inchargerName'></TranslationOpenDataText></span>
                         <span v-else><TranslationOpenDataText type='userName' :openid='project.inchargerName'></TranslationOpenDataText></span>
                     </el-link></div>
                     </el-link></div>
-                    <div style="margin-top:10px;color:#999;">{{ user.timeType.reportCc == 1?'日报抄送人':$t('newspaperauditor') }}</div>
-                    <div>
+                    <div v-if="user.timeType.reportAuditType == 8" style="margin-top:10px;color:#999;">{{ $t('other.projectReviwer') }}</div>
+                    <div v-if="user.timeType.reportAuditType == 8"><el-link style="margin:10px" @click="showUser(project.reviwerId)">
+                        <span v-if="user.userNameNeedTranslate != 1">{{project.reviwerName}}</span>
+                        <span v-else><TranslationOpenDataText type='userName' :openid='project.reviwerName'></TranslationOpenDataText></span>
+                    </el-link></div>
+                    <div v-if="user.timeType.reportAuditType != 8" style="margin-top:10px;color:#999;">{{ user.timeType.reportCc == 1?'日报抄送人':$t('newspaperauditor') }}</div>
+                    <div v-if="user.timeType.reportAuditType != 8">
                         <span v-if="project.auditorList.length == 0" style="margin:10px;">-</span>
                         <span v-if="project.auditorList.length == 0" style="margin:10px;">-</span>
                         <el-link v-for="item in project.auditorList" :key="item.id" style="margin:10px;" @click="showUser(item.auditorId)">
                         <el-link v-for="item in project.auditorList" :key="item.id" style="margin:10px;" @click="showUser(item.auditorId)">
                             <span v-if="user.userNameNeedTranslate != 1">
                             <span v-if="user.userNameNeedTranslate != 1">

+ 18 - 17
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -539,6 +539,16 @@
                             </el-option>
                             </el-option>
                         </el-select>
                         </el-select>
                         <selectCat v-if="user.userNameNeedTranslate == 1" :filterable="true" :size="'medium'" :subject="participator" :subjectId="addForm.inchargerId" :distinction="'3'" @selectCal="selectCal" :disabled="canOnlyModParticipator || projectManagerEdit || isShowProjectName"></selectCat>
                         <selectCat v-if="user.userNameNeedTranslate == 1" :filterable="true" :size="'medium'" :subject="participator" :subjectId="addForm.inchargerId" :distinction="'3'" @selectCal="selectCal" :disabled="canOnlyModParticipator || projectManagerEdit || isShowProjectName"></selectCat>
+
+                        <!--项目复审人-->
+                        <span v-if="user.timeType.reportAuditType == 8" style="margin-left:63px;margin-right:10px;" >{{ $t('other.projectReviwer') }}</span>
+                        <el-select v-if="user.userNameNeedTranslate != 1" v-model="addForm.reviwerId" clearable filterable :placeholder="$t('defaultText.pleaseChoose')" style="width:32%;" :disabled="canOnlyModParticipator || projectManagerEdit">
+                            <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id">
+                                <span style="float: left">{{ item.name }}</span>
+                                <span style="float: right; color: #8492a6;">{{ item.jobNumber }}</span>
+                            </el-option>
+                        </el-select>
+                        <selectCat v-if="user.userNameNeedTranslate == 1" :filterable="true" :size="'medium'" :subject="users" :subjectId="addForm.reviwerId" :distinction="'4'" @selectCal="selectCal" :disabled="canOnlyModParticipator || projectManagerEdit || isShowProjectName"></selectCat>
                     </el-form-item>
                     </el-form-item>
 
 
                     <span v-if="user.companyId != 469">
                     <span v-if="user.companyId != 469">
@@ -2033,7 +2043,7 @@ a {
                 selectedGroup:{},
                 selectedGroup:{},
                 changeParticipation:false,
                 changeParticipation:false,
                 participatorVisible: false,
                 participatorVisible: false,
-                participatorValue: []
+                participatorValue: [],
             };
             };
         },
         },
         // 过滤器
         // 过滤器
@@ -4678,12 +4688,6 @@ a {
                 })
                 })
             },
             },
             getUsers() {
             getUsers() {
-                // this.http.post(this.port.manage.list, {
-                //     departmentId: -1,
-                //     pageIndex: 1,
-                //     // pageSize: 99999
-                //     pageSize: -1
-                // },
                 this.http.post('/user/getSimpleActiveUserList', {},
                 this.http.post('/user/getSimpleActiveUserList', {},
                 res => {
                 res => {
                     if (res.code == "ok") {
                     if (res.code == "ok") {
@@ -4872,9 +4876,7 @@ a {
                 
                 
             },
             },
             // 处理数据
             // 处理数据
-            chulishuju(data) {
-                console.log(data, 12345)
-                console.log(this.dataListBf, '看看')
+            handleData(data) {
                 let arrLists = JSON.parse(JSON.stringify(this.dataListBf))
                 let arrLists = JSON.parse(JSON.stringify(this.dataListBf))
                 var arr = []
                 var arr = []
                 for(var s in arrLists) {
                 for(var s in arrLists) {
@@ -4985,7 +4987,7 @@ a {
                     this.http.post('/project/detailTwo', {id: item.id},
                     this.http.post('/project/detailTwo', {id: item.id},
                     res => {
                     res => {
                     if (res.code == "ok") {
                     if (res.code == "ok") {
-                        this.chulishuju(res.data)
+                        this.handleData(res.data)
                         this.estimatedWorkTime=res.data.estimatedWorkTime==null?0:res.data.estimatedWorkTime
                         this.estimatedWorkTime=res.data.estimatedWorkTime==null?0:res.data.estimatedWorkTime
                         this.addForm.estimatedWorkTime=res.data.estimatedWorkTime==null?0:res.data.estimatedWorkTime
                         this.addForm.estimatedWorkTime=res.data.estimatedWorkTime==null?0:res.data.estimatedWorkTime
                     }
                     }
@@ -5047,6 +5049,7 @@ a {
                         userNames:names,
                         userNames:names,
                         code:item.projectCode,
                         code:item.projectCode,
                         inchargerId: item.inchargerId,
                         inchargerId: item.inchargerId,
+                        reviwerId: item.reviwerId,
                         level: item.level,
                         level: item.level,
                         planStartDate: item.planStartDate,
                         planStartDate: item.planStartDate,
                         planEndDate: item.planEndDate,
                         planEndDate: item.planEndDate,
@@ -5510,12 +5513,10 @@ a {
                                 formData.append(str,this.dataList[i].valuelist.join('@'));
                                 formData.append(str,this.dataList[i].valuelist.join('@'));
                              }
                              }
                          }
                          }
-                        // formData.append("associateDegreeNames", listName)
-                        //console.log("addform",this.addForm);
-                        // for (const key of formData.keys()) {
-                        //     console.log(key + ': ' + formData.get(key));
-                        // }
-                        // return
+                        //复核人
+                        if (this.addForm.reviwerId) {
+                            formData.append('reviwerId', this.addForm.reviwerId);
+                        }
                         this.http.uploadFile(this.port.project.add,formData,
                         this.http.uploadFile(this.port.project.add,formData,
                         res => {
                         res => {
                             this.addLoading = false;
                             this.addLoading = false;

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

@@ -11,9 +11,9 @@
                   </div>
                   </div>
             </div> 
             </div> 
             <div style="width: 100%;display: flex">
             <div style="width: 100%;display: flex">
-              <el-button v-if="!adjustPosition" style="width: 100%;" size="small" @click="adjustPositionClick()">调整部门</el-button>
-              <el-button v-if="adjustPosition" style="width: 50%" size="small" @click="adjustPosition = !adjustPosition,data = dataRepeat">取消</el-button>
-              <el-button v-if="adjustPosition" style="width: 50%" size="small" @click="adjustPositionClick()">确定</el-button>
+              <el-button v-if="!adjustPosition" style="width: 100%;" size="small" @click="adjustPositionClick()">{{ $t('tiaoZhengBuMen') }}</el-button>
+              <el-button v-if="adjustPosition" style="width: 50%" size="small" @click="adjustPosition = !adjustPosition,data = dataRepeat">{{ $t('btn.cancel') }}</el-button>
+              <el-button v-if="adjustPosition" style="width: 50%" size="small" @click="adjustPositionClick()">{{ $t('btn.determine') }}</el-button>
             </div>
             </div>
             <el-divider style="margin: 0px 0px !important;height:0.5px;"></el-divider>
             <el-divider style="margin: 0px 0px !important;height:0.5px;"></el-divider>
             <div class="tree" :style="'height:'+ (tableHeight + 83) + 'px'">
             <div class="tree" :style="'height:'+ (tableHeight + 83) + 'px'">
@@ -169,11 +169,11 @@
                     </el-form-item>
                     </el-form-item>
                     <el-form-item style="float:right;">
                     <el-form-item style="float:right;">
                         <div style="width: 300px;display: inline-block;margin-top: 4px">
                         <div style="width: 300px;display: inline-block;margin-top: 4px">
-                            <el-input v-model="keyword" class="input-with-select" placeholder="请输入" clearable="true" size="small" @keyup.enter.native="searchList()">
+                            <el-input v-model="keyword" class="input-with-select" :placeholder="$t('peaseenterthe')" clearable="true" size="small" @keyup.enter.native="searchList()">
                               <el-select v-model="integer" slot="prepend" style="width: 80px">
                               <el-select v-model="integer" slot="prepend" style="width: 80px">
-                                <el-option label="姓名" value="0"></el-option>
-                                <el-option label="电话" value="1"></el-option>
-                                <el-option label="工号" value="2"></el-option>
+                                <el-option :label="$t('lable.name')" value="0"></el-option>
+                                <el-option :label="$t('phone')" value="1"></el-option>
+                                <el-option :label="$t('Worknumber')" value="2"></el-option>
                               </el-select>
                               </el-select>
                                 <el-button slot="append" @click="searchList" icon="el-icon-search"></el-button>
                                 <el-button slot="append" @click="searchList" icon="el-icon-search"></el-button>
                             </el-input>
                             </el-input>
@@ -220,7 +220,7 @@
                     </div>
                     </div>
                   </template>
                   </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column prop="superiorName" label="直属审核人" width="120" v-if="user.timeType.reportAuditType == 5 || user.timeType.reportAuditType == 6">
+                <el-table-column prop="superiorName" :label="$t('immediatesuperior')" width="120" v-if="user.timeType.reportAuditType == 5 || user.timeType.reportAuditType == 6">
                   <template slot-scope="scope">
                   <template slot-scope="scope">
                     <div>
                     <div>
                       <div v-if="user.userNameNeedTranslate == 1">
                       <div v-if="user.userNameNeedTranslate == 1">
@@ -230,8 +230,8 @@
                     </div>
                     </div>
                   </template>
                   </template>
                 </el-table-column>
                 </el-table-column>
-                <el-table-column v-if="user.companyId==4374" :label="'员工类型'" width="100">
-                    <template slot-scope="scope">{{findValue('员工类型',scope.row.plateMap)}}</template>
+                <el-table-column v-if="user.companyId==4374" :label="$t('yuanGongLeiXing')" width="100">
+                    <template slot-scope="scope">{{findValue($t('yuanGongLeiXing'),scope.row.plateMap)}}</template>
                 </el-table-column>
                 </el-table-column>
                 <el-table-column :label="$t('jiao-se')" width="100">
                 <el-table-column :label="$t('jiao-se')" width="100">
                     <template slot-scope="scope">{{scope.row.roleName}}</template>
                     <template slot-scope="scope">{{scope.row.roleName}}</template>
@@ -255,14 +255,14 @@
                     <template slot-scope="scope">
                     <template slot-scope="scope">
                         <el-button size="mini" type="default" v-if="scope.row.roleName == $t('role.superAdministrator') && user.id == scope.row.id" @click="transferRole(scope.row)">{{ $t('transfer') }}</el-button>
                         <el-button size="mini" type="default" v-if="scope.row.roleName == $t('role.superAdministrator') && user.id == scope.row.id" @click="transferRole(scope.row)">{{ $t('transfer') }}</el-button>
                         <el-button size="mini" type="default" v-if="scope.row.roleName != $t('role.superAdministrator') && user.userNameNeedTranslate != 1" @click="resetPwd(scope.row)">{{ $t('reset') }}</el-button>
                         <el-button size="mini" type="default" v-if="scope.row.roleName != $t('role.superAdministrator') && user.userNameNeedTranslate != 1" @click="resetPwd(scope.row)">{{ $t('reset') }}</el-button>
-                        <el-button size="mini" type="default" v-if="(user.roleName == '超级管理员' || user.roleName == '系统管理员') && user.companyId == 936" @click="resetPwd(scope.row)">{{ $t('reset') }}</el-button>
+                        <el-button size="mini" type="default" v-if="(user.roleName == $t('role.superAdministrator') || user.roleName == $t('role.systemAdministrator')) && user.companyId == 936" @click="resetPwd(scope.row)">{{ $t('reset') }}</el-button>
                         <!-- <el-button size="mini" type="primary" v-if="scope.row.roleName != $t('role.superAdministrator')" @click="openInsertDialog(scope.row)">{{ $t('bian-ji') }}</el-button> -->
                         <!-- <el-button size="mini" type="primary" v-if="scope.row.roleName != $t('role.superAdministrator')" @click="openInsertDialog(scope.row)">{{ $t('bian-ji') }}</el-button> -->
                         <el-button size="mini" type="primary" @click="openInsertDialog(scope.row, scope.row.roleName)">{{ $t('bian-ji') }}</el-button>
                         <el-button size="mini" type="primary" @click="openInsertDialog(scope.row, scope.row.roleName)">{{ $t('bian-ji') }}</el-button>
                         <!-- <el-button size="mini" type="primary" v-if="scope.row.roleName == $t('role.superAdministrator')" @click="openInsertDialog1(scope.row)">{{ $t('bian-ji') }}</el-button> -->
                         <!-- <el-button size="mini" type="primary" v-if="scope.row.roleName == $t('role.superAdministrator')" @click="openInsertDialog1(scope.row)">{{ $t('bian-ji') }}</el-button> -->
                         <!-- <el-button size="mini" type="danger"  v-if="scope.row.roleName != $t('role.superAdministrator')" @click="deleteUser(scope.row)">删除</el-button> -->
                         <!-- <el-button size="mini" type="danger"  v-if="scope.row.roleName != $t('role.superAdministrator')" @click="deleteUser(scope.row)">删除</el-button> -->
                         <el-button size="mini" type="default" v-if="scope.row.roleName != $t('role.superAdministrator') && scope.row.isActive==1" @click="showDeactiveDialog(scope.row)">{{ $t('ting-yong') }}</el-button>
                         <el-button size="mini" type="default" v-if="scope.row.roleName != $t('role.superAdministrator') && scope.row.isActive==1" @click="showDeactiveDialog(scope.row)">{{ $t('ting-yong') }}</el-button>
                         <el-button size="mini" type="success" v-if="scope.row.roleName != $t('role.superAdministrator') && scope.row.isActive==0" @click="setActive(scope.row, 1)">{{ $t('enable') }}</el-button>
                         <el-button size="mini" type="success" v-if="scope.row.roleName != $t('role.superAdministrator') && scope.row.isActive==0" @click="setActive(scope.row, 1)">{{ $t('enable') }}</el-button>
-                        <el-button size="mini" type="default" v-if="scope.row.roleName != $t('role.superAdministrator') && scope.row.activeInfoByUser == 1" @click="transferActiveDialog(scope.row)">转让</el-button>
+                        <el-button size="mini" type="default" v-if="scope.row.roleName != $t('role.superAdministrator') && scope.row.activeInfoByUser == 1" @click="transferActiveDialog(scope.row)">{{ $t('transfer') }}</el-button>
                       </template>
                       </template>
                 </el-table-column>
                 </el-table-column>
             </el-table>
             </el-table>
@@ -277,8 +277,8 @@
                     
                     
                 <el-button size="small" type="primary" @click="handleSelectionZzjgbtn3" v-if="user.userNameNeedTranslate != 1">{{ $t('modifyingDepartments') }}</el-button>
                 <el-button size="small" type="primary" @click="handleSelectionZzjgbtn3" v-if="user.userNameNeedTranslate != 1">{{ $t('modifyingDepartments') }}</el-button>
                 <el-button size="small" type="primary" @click="handJue">{{ $t('modifyingRoles') }}</el-button>
                 <el-button size="small" type="primary" @click="handJue">{{ $t('modifyingRoles') }}</el-button>
-                <el-button size="small" type="primary" @click="workingHoursDialogClick()">修正工时所属部门</el-button>
-                <el-button size="small" type="primary" @click="handleSelectionUser()">批量启用员工</el-button>
+                <el-button size="small" type="primary" @click="workingHoursDialogClick()">{{ $t('xiuZhengGongShiSuoShuBuMen') }}</el-button>
+                <el-button size="small" type="primary" @click="handleSelectionUser()">{{ $t('piLiangQiYongYuanGong') }}</el-button>
                
                
                 
                 
                 
                 
@@ -297,20 +297,20 @@
       </div>
       </div>
 
 
       <!-- 修正工时所属部门 -->
       <!-- 修正工时所属部门 -->
-      <el-dialog title="修正工时" :visible.sync="workingHoursDialog" width="650px" :before-close="handleClose">
+      <el-dialog :title="$t('xiuZhengGongShi')" :visible.sync="workingHoursDialog" width="650px" :before-close="handleClose">
         <div>
         <div>
           <div class="workingHours">
           <div class="workingHours">
-            <el-radio v-model="workingHoursRadio" label="1">全部工时</el-radio>
-            <el-radio v-model="workingHoursRadio" label="2">部分工时</el-radio>
+            <el-radio v-model="workingHoursRadio" label="1">{{ $t('quanBuGongShi') }}</el-radio>
+            <el-radio v-model="workingHoursRadio" label="2">{{ $t('buFenGongShi') }}</el-radio>
           </div>
           </div>
           <div class="workingHours workingHoursData" v-if="workingHoursRadio == 2">
           <div class="workingHours workingHoursData" v-if="workingHoursRadio == 2">
-            <span class="workingHoursSpan">日期范围</span>
-            <el-date-picker v-model="workingHoursDatas" type="daterange" value-format="yyyy-MM-dd" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+            <span class="workingHoursSpan">{{ $t('time.dateRange') }}</span>
+            <el-date-picker v-model="workingHoursDatas" type="daterange" value-format="yyyy-MM-dd" :range-separator="$t('other.to')" :start-placeholder="$t('time.startDate')" :end-placeholder="$t('time.endDate')"></el-date-picker>
           </div>
           </div>
         </div>
         </div>
         <span slot="footer" class="dialog-footer">
         <span slot="footer" class="dialog-footer">
-          <el-button @click="workingHoursDialog = false">取 消</el-button>
-          <el-button type="primary" @click="workingHours()">确 定</el-button>
+          <el-button @click="workingHoursDialog = false">{{ $t('quXiao') }}</el-button>
+          <el-button type="primary" @click="workingHours()">{{ $t('queDing') }}</el-button>
         </span>
         </span>
       </el-dialog>
       </el-dialog>
 
 
@@ -385,10 +385,10 @@
                     <selectCat :size="'medium'" :widthStr="'360'" v-if="user.userNameNeedTranslate == '1'" :subject="users" :subjectId="depForm.reportAuditUserid" :distinction="'5'" @selectCal="selectCal"></selectCat>
                     <selectCat :size="'medium'" :widthStr="'360'" v-if="user.userNameNeedTranslate == '1'" :subject="users" :subjectId="depForm.reportAuditUserid" :distinction="'5'" @selectCal="selectCal"></selectCat>
                 </el-form-item>
                 </el-form-item>
                 <!-- 是否推送到SAP -->
                 <!-- 是否推送到SAP -->
-                <el-form-item :label="'推送至SAP'" prop="pushToSap" v-if="user.companyId==3092">
+                <el-form-item :label="$t('tuiSongZhiSap')" prop="pushToSap" v-if="user.companyId==3092">
                    <el-radio-group v-model="depForm.pushToSap">
                    <el-radio-group v-model="depForm.pushToSap">
-                      <el-radio :label="1"></el-radio>
-                      <el-radio :label="0"></el-radio>
+                      <el-radio :label="1">{{ $t('state.yes') }}</el-radio>
+                      <el-radio :label="0">{{ $t('state.no') }}</el-radio>
                    </el-radio-group>
                    </el-radio-group>
                 </el-form-item>
                 </el-form-item>
             </el-form>
             </el-form>
@@ -440,25 +440,25 @@
                       <vueCascader :size="'medium'" :widthStr="'430'" :clearable="true && user.userNameNeedTranslate != 1" :subject="option" :subjectId="insertForm.departmentId" :radios="true" :distinction="'2'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" ></vueCascader>
                       <vueCascader :size="'medium'" :widthStr="'430'" :clearable="true && user.userNameNeedTranslate != 1" :subject="option" :subjectId="insertForm.departmentId" :radios="true" :distinction="'2'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" ></vueCascader>
 
 
                   </el-form-item>
                   </el-form-item>
-                  <el-form-item label="可填报部门" prop="reportDeptIds" v-if="user.timeType.userWithMultiDept">
+                  <el-form-item :label="$t('keTianBaoBuMen')" prop="reportDeptIds" v-if="user.timeType.userWithMultiDept">
                     <template v-if="insertForm.reportDeptIdsList && insertForm.reportDeptIdsList.length > 0"> 
                     <template v-if="insertForm.reportDeptIdsList && insertForm.reportDeptIdsList.length > 0"> 
                       <el-tag v-for="(tag, tagIndex) in insertForm.reportDeptIdsList" :key="tag.id" closable :type="'success'" style="margin-right: 10px;" @close="handleDeptClose(tagIndex)">
                       <el-tag v-for="(tag, tagIndex) in insertForm.reportDeptIdsList" :key="tag.id" closable :type="'success'" style="margin-right: 10px;" @close="handleDeptClose(tagIndex)">
                         <TranslationOpenDataText type='departmentName' :openid='tag.label'></TranslationOpenDataText>
                         <TranslationOpenDataText type='departmentName' :openid='tag.label'></TranslationOpenDataText>
                       </el-tag>
                       </el-tag>
                     </template>
                     </template>
-                    <el-link type="primary" :underline="false" @click="addFilldDepartment(insertForm.reportDeptIdsList)">添加</el-link>
+                    <el-link type="primary" :underline="false" @click="addFilldDepartment(insertForm.reportDeptIdsList)">{{ $t('addTian') }}</el-link>
                   </el-form-item>
                   </el-form-item>
 
 
-                  <el-form-item label="审核层级" v-if="user.timeType.reportAuditType == 6">
+                  <el-form-item :label="$t('shenHeCengJi')" v-if="user.timeType.reportAuditType == 6">
                       <el-radio-group v-model="insertForm.onlyAuditOnce" >
                       <el-radio-group v-model="insertForm.onlyAuditOnce" >
-                      <el-radio  :label="0" >两层审核</el-radio>
-                      <el-radio  :label="1">一层审核</el-radio>
+                      <el-radio  :label="0" >{{ $t('liangCengShenHe') }}</el-radio>
+                      <el-radio  :label="1">{{ $t('yiCengShenHe') }}</el-radio>
                       </el-radio-group>
                       </el-radio-group>
                   </el-form-item>
                   </el-form-item>
                   <el-form-item v-if="user.timeType.reportAuditType == 5 || user.timeType.reportAuditType == 6">
                   <el-form-item v-if="user.timeType.reportAuditType == 5 || user.timeType.reportAuditType == 6">
                       <span slot="label">
                       <span slot="label">
-                        <span>直属审核人</span>
-                        <el-tooltip effect="dark" content="未设置时由所属部门负责人审核" placement="top-start">
+                        <span>{{ $t('immediatesuperior') }}</span>
+                        <el-tooltip effect="dark" :content="$t('weiSheZhiShiYouSuoShuBuMenFuZeRenShenHe')" placement="top-start">
                           <i class="el-icon-question" style="color:#606266"></i>
                           <i class="el-icon-question" style="color:#606266"></i>
                         </el-tooltip>
                         </el-tooltip>
                       </span>
                       </span>
@@ -488,7 +488,7 @@
                   <el-form-item :label="$t('entrytime')" prop="phone">
                   <el-form-item :label="$t('entrytime')" prop="phone">
                       <el-date-picker v-model="insertForm.inductionDate" value-format="yyyy-MM-dd"></el-date-picker>
                       <el-date-picker v-model="insertForm.inductionDate" value-format="yyyy-MM-dd"></el-date-picker>
                   </el-form-item>
                   </el-form-item>
-                  <el-form-item label="离职日期" prop="inactiveDate" v-if="insertForm.isActive == 0">
+                  <el-form-item :label="$t('liZhiRiQi')" prop="inactiveDate" v-if="insertForm.isActive == 0">
                       <el-date-picker v-model="insertForm.inactiveDate" value-format="yyyy-MM-dd"></el-date-picker>
                       <el-date-picker v-model="insertForm.inactiveDate" value-format="yyyy-MM-dd"></el-date-picker>
                   </el-form-item>
                   </el-form-item>
                   <el-form-item :label="$t('postrank')" prop="phone">
                   <el-form-item :label="$t('postrank')" prop="phone">
@@ -520,12 +520,12 @@
             </span>
             </span>
         </el-dialog>
         </el-dialog>
         <!-- 删除员工时转移日报 -->
         <!-- 删除员工时转移日报 -->
-        <el-dialog title="提示" :visible.sync="deleteUserFlg" width="600px" :before-close="handleClose">
+        <el-dialog :title="$t('other.prompts')" :visible.sync="deleteUserFlg" width="600px" :before-close="handleClose">
         <div>
         <div>
-          <div class="deteee">确定删除该员工吗?</div>
+          <div class="deteee">{{ $t('queDingShanChuGaiYuanGongMa') }}</div>
           <div class="deteeeAce" v-if="deleteUserFlgData.isExistsReport">
           <div class="deteeeAce" v-if="deleteUserFlgData.isExistsReport">
 
 
-            <div style="margin-right: 10px">将该员工的工时数据、参与的项目与任务转移 至</div>
+            <div style="margin-right: 10px">{{ $t('jiangGaiYuanGongDeGongShiShuJuCanYuDeXiangMuYuRenWuZhuanYiZhi') }}</div>
             <el-select v-if="user.userNameNeedTranslate != 1" v-model="moveReportUserId" style="width:140px;" :placeholder="$t('defaultText.pleaseChoose')" clearable size="small" filterable popper-class="managePopperClass">
             <el-select v-if="user.userNameNeedTranslate != 1" v-model="moveReportUserId" style="width:140px;" :placeholder="$t('defaultText.pleaseChoose')" clearable size="small" filterable popper-class="managePopperClass">
                 <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id">
                 <el-option v-for="item in users" :key="item.id" :label="item.name" :value="item.id">
                     <span style="float: left">{{ item.name }}</span>
                     <span style="float: left">{{ item.name }}</span>
@@ -538,8 +538,8 @@
           </div>
           </div>
         </div>
         </div>
         <span slot="footer" class="dialog-footer">
         <span slot="footer" class="dialog-footer">
-          <el-button @click="deleteUserFlg = false">取 消</el-button>
-          <el-button type="primary" @click="deleteUser(deleteUserFlgData)" :loading="deleteUserFlgloading">确 定</el-button>
+          <el-button @click="deleteUserFlg = false">{{ $t('quXiao') }}</el-button>
+          <el-button type="primary" @click="deleteUser(deleteUserFlgData)" :loading="deleteUserFlgloading">{{ $t('queDing') }}</el-button>
         </span>
         </span>
       </el-dialog>
       </el-dialog>
         <el-dialog :title="$t('historicalpersonnelcost')" :visible.sync="userSalaryListDialog" width="750px" >
         <el-dialog :title="$t('historicalpersonnelcost')" :visible.sync="userSalaryListDialog" width="750px" >
@@ -570,7 +570,7 @@
                 </el-table-column>
                 </el-table-column>
                 <el-table-column  >
                 <el-table-column  >
                     <template slot-scope="scope" >
                     <template slot-scope="scope" >
-                        <el-button size="small" @click="delHisSalary(scope.row.id,scope.row.userId)">删除</el-button>
+                        <el-button size="small" @click="delHisSalary(scope.row.id,scope.row.userId)">{{ $t('btn.delete') }}</el-button>
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
             </el-table>
             </el-table>
@@ -771,11 +771,11 @@
                 <el-button type="primary" :underline="false" :loading="importingData" :disabled="!canSync" @click="startCorpWxImport">{{ $t('startsynchronization') }}</el-button>
                 <el-button type="primary" :underline="false" :loading="importingData" :disabled="!canSync" @click="startCorpWxImport">{{ $t('startsynchronization') }}</el-button>
             </p>
             </p>
         </el-dialog>
         </el-dialog>
-        <el-dialog title="同步钉钉通讯录" v-if="showSyncDDDialog" :visible.sync="showSyncDDDialog" customClass="customWidth" width="500px">
+        <el-dialog :title="$t('synchronizetheaddressbook')" v-if="showSyncDDDialog" :visible.sync="showSyncDDDialog" customClass="customWidth" width="500px">
             <p>{{ $t('areyousuretosynchronize') }} 
             <p>{{ $t('areyousuretosynchronize') }} 
             </p>
             </p>
             <p>
             <p>
-              <el-checkbox v-model="isSyncContact" @change="setSyncContactDD()">人员所在部门与钉钉通讯录保持一致</el-checkbox>
+              <el-checkbox v-model="isSyncContact" @change="setSyncContactDD()">{{ $t('renYuanSuoZaiBuMenYuDingDingTongXunLuBaoChiYiZhi') }}</el-checkbox>
             </p>
             </p>
             <p style="display: flex;justify-content: center;padding-bottom:1em;">
             <p style="display: flex;justify-content: center;padding-bottom:1em;">
                 <el-button type="primary" :underline="false" :loading="importingData"  @click="syncWithCorpDingding">{{ $t('startsynchronization') }}</el-button>
                 <el-button type="primary" :underline="false" :loading="importingData"  @click="syncWithCorpDingding">{{ $t('startsynchronization') }}</el-button>
@@ -786,43 +786,43 @@
             {{syncMembByCardTimeMsg}}
             {{syncMembByCardTimeMsg}}
             </p>
             </p>
         </el-dialog>
         </el-dialog>
-        <el-dialog title="同步日志" v-if="recordMsgDialog" :visible.sync="recordMsgDialog" customClass="customWidth" width="500px">
+        <el-dialog :title="$t('tongBuRiZhi')" v-if="recordMsgDialog" :visible.sync="recordMsgDialog" customClass="customWidth" width="500px">
             <el-row style="height:70px;line-height:40px;padding-top:30px;padding-left:20px">
             <el-row style="height:70px;line-height:40px;padding-top:30px;padding-left:20px">
-              <el-col :span="6">操作时间</el-col>
+              <el-col :span="6">{{ $t('caoZuoShiJian') }}</el-col>
               <el-col :span="18">{{recordIndate(recordMsg.indate)}}</el-col>
               <el-col :span="18">{{recordIndate(recordMsg.indate)}}</el-col>
             </el-row>
             </el-row>
             <el-row style="height:70px;line-height:40px;padding-bottom:30px;padding-left:20px">
             <el-row style="height:70px;line-height:40px;padding-bottom:30px;padding-left:20px">
-              <el-col :span="6">错误信息</el-col>
+              <el-col :span="6">{{ $t('cuoWuXinXi') }}</el-col>
               <el-col :span="18">{{recordMsg.msg}}</el-col>
               <el-col :span="18">{{recordMsg.msg}}</el-col>
             </el-row>
             </el-row>
         </el-dialog>
         </el-dialog>
         <el-dialog :title="$t('synchronizetheenterprisemicrodirectory')" :visible.sync="newSyncWithCorpWxDayload" width="400px" :before-close="handleClose">
         <el-dialog :title="$t('synchronizetheenterprisemicrodirectory')" :visible.sync="newSyncWithCorpWxDayload" width="400px" :before-close="handleClose">
         <span>
         <span>
-          同步前请联系企业微信管理员检查应用授权的可见范围 <br/>
-          路径:管理企业-应用管理-工时管家-可见范围
+          {{ $t('tongBuQianQingLianXiQiYeWeiXinGuanLiYuanJianChaYingYongShouQuanDeKeJianFanWei') }} <br/>
+          {{ $t('luJingGuanLiQiYeYingYongGuanLiGongShiGuanJiaKeJianFanWei') }} 
         </span>
         </span>
         <span slot="footer" class="dialog-footer">
         <span slot="footer" class="dialog-footer">
-          <el-button type="primary" @click="visibleRange" v-if="wxManager">可见范围设置</el-button>
-          <el-button type="primary" @click="newSyncWithCorpWx">开始同步</el-button>
+          <el-button type="primary" @click="visibleRange" v-if="wxManager">{{ $t('keJianFanWeiSheZhi') }}</el-button>
+          <el-button type="primary" @click="newSyncWithCorpWx">{{ $t('startsynchronization') }}</el-button>
         </span>
         </span>
       </el-dialog>
       </el-dialog>
 
 
       <el-dialog
       <el-dialog
-        title="转移到"
+        :title="$t('zhuanYiDao')"
         :visible.sync="transferActiveDialogFlag"
         :visible.sync="transferActiveDialogFlag"
         width="20%">
         width="20%">
-        <span style="margin-left:25px;margin-right:5px;color:#606266;">转移到</span>
+        <span style="margin-left:25px;margin-right:5px;color:#606266;">{{ $t('zhuanYiDao') }}</span>
         <selectCat v-if="user.userNameNeedTranslate == 1" :subject="users" :subjectId="transferActive.takeoverId" :distinction="'23'" :clearable="true" @selectCal="selectCal"></selectCat>            
         <selectCat v-if="user.userNameNeedTranslate == 1" :subject="users" :subjectId="transferActive.takeoverId" :distinction="'23'" :clearable="true" @selectCal="selectCal"></selectCat>            
         <span slot="footer" class="dialog-footer">
         <span slot="footer" class="dialog-footer">
-          <el-button @click="transferActiveDialogFlag = false">取 消</el-button>
-          <el-button type="primary" @click="transferActiveMethod">确 定</el-button>
+          <el-button @click="transferActiveDialogFlag = false">{{ $t('quXiao') }}</el-button>
+          <el-button type="primary" @click="transferActiveMethod">{{ $t('queDing') }}</el-button>
         </span>
         </span>
       </el-dialog>
       </el-dialog>
 
 
       <!-- 多选部门 -->
       <!-- 多选部门 -->
-      <el-dialog :title="'请选择部门'" :top="'10vh'"  v-if="specialHolidaysDialog" :visible.sync="specialHolidaysDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
+      <el-dialog :title="$t('qing-xuan-ze-bu-men')" :top="'10vh'"  v-if="specialHolidaysDialog" :visible.sync="specialHolidaysDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
             <div v-if="user.userNameNeedTranslate == '1'">
             <div v-if="user.userNameNeedTranslate == '1'">
-                <el-input placeholder="请输入名字搜索" v-model.trim="wxFilterText" clearable @keyup.enter.native="echartDepartment()" @clear="getWhiteListAll()" class="input-with-select">
+                <el-input :placeholder="$t('qingShuRuMingZiSouSuo')" v-model.trim="wxFilterText" clearable @keyup.enter.native="echartDepartment()" @clear="getWhiteListAll()" class="input-with-select">
                     <el-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
                     <el-button slot="append" icon="el-icon-search" @click="echartDepartment()"></el-button>
                 </el-input>
                 </el-input>
             </div>
             </div>
@@ -1193,7 +1193,7 @@ export default {
   },
   },
   methods: {
   methods: {
     delHisSalary(id, userId) {
     delHisSalary(id, userId) {
-      this.$confirm('是否删除该记录?', this.$t('other.prompts'), {
+      this.$confirm(this.$t('shiFouShanChuGaiJiLu'), this.$t('other.prompts'), {
             confirmButtonText: this.$t('btn.determine'),
             confirmButtonText: this.$t('btn.determine'),
             cancelButtonText: this.$t('btn.cancel'),
             cancelButtonText: this.$t('btn.cancel'),
             type: 'warning'
             type: 'warning'
@@ -1203,7 +1203,7 @@ export default {
             },res => {
             },res => {
                 if(res.code == 'ok'){
                 if(res.code == 'ok'){
                     this.$message({
                     this.$message({
-                        message: '操作成功',
+                        message: this.$t('operationissuccessful'),
                         type: 'success'
                         type: 'success'
                     })
                     })
                     this.reqSalaryList(userId);
                     this.reqSalaryList(userId);
@@ -1228,7 +1228,7 @@ export default {
     },
     },
     statesPush(){
     statesPush(){
       if(this.user.corpwxUserid != null && this.user.userNameNeedTranslate == 1){
       if(this.user.corpwxUserid != null && this.user.userNameNeedTranslate == 1){
-        var state = {value: "2",label: "可转让"}
+        var state = {value: "2",label: this.$t('keZhuanRang')}
         this.states.push(state);
         this.states.push(state);
       } 
       } 
     },
     },
@@ -1241,7 +1241,7 @@ export default {
     transferActiveMethod(){
     transferActiveMethod(){
       if(this.transferActive.takeoverId == null){
       if(this.transferActive.takeoverId == null){
         this.$message({
         this.$message({
-                  message: "请选择接收人",
+                  message: this.$t('qingXuanZeJieShouRen'),
                   type: "error"
                   type: "error"
               });
               });
         return;
         return;
@@ -1481,7 +1481,7 @@ export default {
     newSyncWithCorpWx() {
     newSyncWithCorpWx() {
       const loading = this.$loading({
       const loading = this.$loading({
           lock: true,
           lock: true,
-          text: '同步中',
+          text: this.$t('tongBuZhong'),
           spinner: 'el-icon-loading',
           spinner: 'el-icon-loading',
           background: 'rgba(0, 0, 0, 0.7)'
           background: 'rgba(0, 0, 0, 0.7)'
         });
         });
@@ -1495,7 +1495,7 @@ export default {
           loading.close();
           loading.close();
           if (res.code == "ok") {
           if (res.code == "ok") {
             this.$message({
             this.$message({
-              message: '同步成功',
+              message: this.$t('synchronoussuccess'),
               type: "success",
               type: "success",
             });
             });
             this.getDepartment();
             this.getDepartment();
@@ -2243,9 +2243,9 @@ export default {
             this.getUser();
             this.getUser();
           } else {
           } else {
             if(this.user.companyId==876||this.user.companyId==877||this.user.companyId==878){
             if(this.user.companyId==876||this.user.companyId==877||this.user.companyId==878){
-                this.$confirm('当前员工有待审核日报,确认停用并驳回日报吗?', '提示', {
-                confirmButtonText: '确定',
-                cancelButtonText: '取消',
+                this.$confirm(this.$t('dangQianYuanGongYouDaiShenHeRiBaoQueRenTingYongBingBoHuiRiBaoMa'), this.$t('other.prompts'), {
+                confirmButtonText: this.$t('btn.determine'),
+                cancelButtonText: this.$t('btn.cancel'),
                 type: 'warning'
                 type: 'warning'
                 }).then(() => {
                 }).then(() => {
                   this.http.post(
                   this.http.post(
@@ -2275,7 +2275,7 @@ export default {
                 }).catch(() => {
                 }).catch(() => {
                   this.$message({
                   this.$message({
                     type: 'info',
                     type: 'info',
-                    message: '已取消'
+                    message: this.$t('yiQuXiao')
                   });          
                   });          
               });
               });
             }else{
             }else{
@@ -2693,7 +2693,7 @@ export default {
     syncFeishu(){
     syncFeishu(){
       const loading = this.$loading({
       const loading = this.$loading({
           lock: true,
           lock: true,
-          text: '同步中',
+          text: this.$t('tongBuZhong'),
           spinner: 'el-icon-loading',
           spinner: 'el-icon-loading',
           background: 'rgba(0, 0, 0, 0.7)'
           background: 'rgba(0, 0, 0, 0.7)'
         });
         });
@@ -2704,7 +2704,7 @@ export default {
               loading.close()
               loading.close()
               if (res.code == "ok") {
               if (res.code == "ok") {
                 this.$message({
                 this.$message({
-                  message: '同步成功',
+                  message: this.$t('synchronoussuccess'),
                   type: "success",
                   type: "success",
                 });
                 });
               } else {
               } else {
@@ -2732,7 +2732,7 @@ export default {
             (res) => {
             (res) => {
               if (res.code == "ok") {
               if (res.code == "ok") {
                 this.$message({
                 this.$message({
-                  message: '同步成功',
+                  message: this.$t('synchronoussuccess'),
                   type: "success",
                   type: "success",
                 });
                 });
               } else {
               } else {
@@ -3077,7 +3077,7 @@ export default {
     setActive(item, isActive) {
     setActive(item, isActive) {
       var txt = isActive == 1 ? this.$t('enable') : this.$t('ting-yong');
       var txt = isActive == 1 ? this.$t('enable') : this.$t('ting-yong');
       // this.$confirm(this.$t('sureyouwantto') + txt + " " + item.name + this.$t('ma'), this.$t('zhang-hao') + txt, {
       // this.$confirm(this.$t('sureyouwantto') + txt + " " + item.name + this.$t('ma'), this.$t('zhang-hao') + txt, {
-      this.$confirm(this.$t('sureyouwantto') + txt + '该员工' + this.$t('ma'), this.$t('zhang-hao') + txt, {
+      this.$confirm(this.$t('sureyouwantto') + txt + this.$t('gaiYuanGong') + this.$t('ma'), this.$t('zhang-hao') + txt, {
         confirmButtonText: this.$t('btn.determine'),
         confirmButtonText: this.$t('btn.determine'),
         cancelButtonText: this.$t('btn.cancel'),
         cancelButtonText: this.$t('btn.cancel'),
         type: "warning",
         type: "warning",
@@ -3357,7 +3357,7 @@ export default {
     // 删除部门
     // 删除部门
     deleteDep() {
     deleteDep() {
       var that = this;
       var that = this;
-      var txtMsg = this.user.userNameNeedTranslate == '1'?'确定要删除该部门吗?':this.$t('deletethedepartment') + that.depData.label + this.$t('ma')
+      var txtMsg = this.user.userNameNeedTranslate == '1'?this.$t('queDingYaoShanChuGaiBuMenMa'):this.$t('deletethedepartment') + that.depData.label + this.$t('ma')
       setTimeout(() => {
       setTimeout(() => {
         that
         that
           .$confirm(txtMsg, this.$t('deletethedepartmentdsa'), {
           .$confirm(txtMsg, this.$t('deletethedepartmentdsa'), {
@@ -3777,19 +3777,19 @@ export default {
           }
           }
           if(res.err_msg == "openAppManage:fail:no permission") {
           if(res.err_msg == "openAppManage:fail:no permission") {
               // 调用人身份不符合                 
               // 调用人身份不符合                 
-              this.$message({message: '调用人身份不符合',type: "error"});
+              this.$message({message: this.$t('tiaoYongRenShenFenBuFuHe'),type: "error"});
           }
           }
           if(res.err_msg == "openAppManage:fail:unknown app") {
           if(res.err_msg == "openAppManage:fail:unknown app") {
               // 应用信息获取失败
               // 应用信息获取失败
-              this.$message({message: '应用信息获取失败',type: "error"});
+              this.$message({message: this.$t('yingYongXinXiHuoQuShiBai'),type: "error"});
           }
           }
           if(res.err_msg == "openAppManage:fail:unsupported app type") {
           if(res.err_msg == "openAppManage:fail:unsupported app type") {
               // 应用类型不符合要求
               // 应用类型不符合要求
-              this.$message({message: '应用类型不符合要求',type: "error"});
+              this.$message({message: this.$t('yingYongLeiXingBuFuHeYaoQiu'),type: "error"});
           }
           }
           if(res.err_msg == "openAppManage:fail") {
           if(res.err_msg == "openAppManage:fail") {
               // 其它错误                  
               // 其它错误                  
-              this.$message({message: '其它错误',type: "error"});
+              this.$message({message: this.$t('qiTaCuoWu'),type: "error"});
           }      
           }      
        })
        })
     },
     },
@@ -3814,7 +3814,7 @@ export default {
         if (res.code == "ok") {
         if (res.code == "ok") {
           this.getUser();
           this.getUser();
           this.workingHoursDialog = false
           this.workingHoursDialog = false
-          this.$message({message: '操作成功:'+res.data,type: "success"});
+          this.$message({message: this.$t('caoZuoChengGong')+res.data,type: "success"});
         } else {
         } else {
             this.$message({message: res.msg,type: "error"});
             this.$message({message: res.msg,type: "error"});
         }
         }

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

@@ -282,7 +282,7 @@
                     if (res.code == "ok") {
                     if (res.code == "ok") {
                         this.$message({
                         this.$message({
                             type: 'success',
                             type: 'success',
-                            message: '操作成功!'
+                            message: this.$t('caoZuoChengGong-0')
                         });
                         });
 
 
                         this.isAdd = false;
                         this.isAdd = false;
@@ -317,10 +317,10 @@
                             this.dialogVisible = true;
                             this.dialogVisible = true;
                             this.curDeptId = item.auditDeptId;
                             this.curDeptId = item.auditDeptId;
                         } else {
                         } else {
-                            if(res.msg.indexOf('当前部门存在待审核报告') != '-1') {
-                                this.$confirm('当前部门存在待审核报告, 是否全部转为通过?', '提示', {
-                                    confirmButtonText: '确定',
-                                    cancelButtonText: '取消',
+                            if(res.msg.indexOf(this.$t('dangQianBuMenCunZaiDaiShenHeBaoGao')) != '-1') {
+                                this.$confirm(this.$t('dangQianBuMenCunZaiDaiShenHeBaoGaoShiFouQuanBuZhuanWeiTongGuo'), this.$t('other.prompts'), {
+                                    confirmButtonText: this.$t('btn.determine'),
+                                    cancelButtonText: this.$t('btn.cancel'),
                                     type: 'warning'
                                     type: 'warning'
                                 }).then(() => {
                                 }).then(() => {
                                     this.judgmentDepartment(item.auditDeptId, item, index)
                                     this.judgmentDepartment(item.auditDeptId, item, index)

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

@@ -992,7 +992,7 @@
             },
             },
             // 获取项目
             // 获取项目
             getPeoject() {
             getPeoject() {
-                this.$axios.post("/project/getProjectList", {})
+                this.$axios.post("/project/getProjectList", {forReport:1})
                 .then(res => {
                 .then(res => {
                     if(res.code == "ok") {
                     if(res.code == "ok") {
                         for(var i in res.data) {
                         for(var i in res.data) {
@@ -1390,7 +1390,7 @@
                     forbidClick: true,
                     forbidClick: true,
                     duration: 0
                     duration: 0
                 });
                 });
-                this.$axios.post("/project/getProjectList", {})
+                this.$axios.post("/project/getProjectList", {forReport:1})
                 .then(res => {
                 .then(res => {
                     if(res.code == "ok") {
                     if(res.code == "ok") {
                         this.$toast.clear();
                         this.$toast.clear();