Explorar el Código

请假审批流

seyason hace 2 años
padre
commit
404fce56b9
Se han modificado 18 ficheros con 649 adiciones y 154 borrados
  1. 51 74
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/AuditWorkflowSettingController.java
  2. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/LeaveAuditLogController.java
  3. 16 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/LeaveSheetController.java
  4. 67 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/LeaveAuditLog.java
  5. 11 18
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/LeaveSheet.java
  6. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/LeaveAuditLogMapper.java
  7. 5 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/AuditWorkflowSettingService.java
  8. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/LeaveAuditLogService.java
  9. 5 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/LeaveSheetService.java
  10. 47 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/AuditWorkflowSettingServiceImpl.java
  11. 7 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java
  12. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/LeaveAuditLogServiceImpl.java
  13. 190 33
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/LeaveSheetServiceImpl.java
  14. 0 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java
  15. 22 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/LeaveAuditLogMapper.xml
  16. 2 3
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/LeaveSheetMapper.xml
  17. 152 17
      fhKeeper/formulahousekeeper/timesheet/src/views/leave/list.vue
  18. 1 1
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/view/index.vue

+ 51 - 74
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/AuditWorkflowSettingController.java

@@ -9,6 +9,7 @@ import com.management.platform.entity.AuditWorkflowSetting;
 import com.management.platform.entity.Department;
 import com.management.platform.entity.Report;
 import com.management.platform.mapper.*;
+import com.management.platform.service.AuditWorkflowSettingService;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.MessageUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -20,6 +21,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -32,6 +34,9 @@ import java.util.List;
 @RestController
 @RequestMapping("/audit-workflow-setting")
 public class AuditWorkflowSettingController {
+    public static final int TYPE_LEAVE = 1;//请假
+    public static final int TYPE_BUSTRIP = 2;//出差
+    public static final int TYPE_EXPENSE = 3;//费用报销
     @Resource
     private HttpServletRequest request;
     @Resource
@@ -39,50 +44,58 @@ public class AuditWorkflowSettingController {
     @Resource
     UserMapper userMapper;
     @Resource
-    DepartmentMapper departmentMapper;
-    @Resource
-    ReportMapper reportMapper;
-
+    AuditWorkflowSettingService auditWorkflowSettingService;
 
     @RequestMapping("/add")
     public HttpRespMsg add(String json, Integer deptId, @RequestParam Integer type) {
         String token = request.getHeader("TOKEN");
         Integer companyId = userMapper.selectById(token).getCompanyId();
-        auditWorkflowSettingMapper.delete(new QueryWrapper<AuditWorkflowSetting>().eq("dept_id", deptId).eq("type", type));
+        QueryWrapper<AuditWorkflowSetting> eq = new QueryWrapper<AuditWorkflowSetting>().eq("dept_id", deptId).eq("type", type);
+        List<AuditWorkflowSetting> oldAuditSettingList = auditWorkflowSettingMapper.selectList(eq);
         JSONArray array = JSONArray.parseArray(json);
-
-        if (array.size() == 1 && array.getJSONObject(0).getInteger("auditorType") == 0) {
-            //只有一个项目负责人审核,不保存
-        } else {
-            //检查是否有重复的部门
-            List<Integer> auditDeptIds = new ArrayList<>();
-            for (int i=0;i<array.size(); i++) {
-                JSONObject obj = array.getJSONObject(i);
-                AuditWorkflowSetting auditWorkflowTimeSetting = JSONObject.toJavaObject(obj, AuditWorkflowSetting.class);
-                if (auditWorkflowTimeSetting.getAuditDeptId() != null) {
-                    if (auditDeptIds.contains(auditWorkflowTimeSetting.getAuditDeptId())) {
-                        HttpRespMsg msg = new HttpRespMsg();
-                        msg.setError(MessageUtils.message("department.duplicateError", auditWorkflowTimeSetting.getAuditDeptName()));
-                        return msg;
-                    } else {
-                        auditDeptIds.add(auditWorkflowTimeSetting.getAuditDeptId());
-                    }
+        //检查是否有重复的部门
+        List<Integer> auditDeptIds = new ArrayList<>();
+        for (int i=0;i<array.size(); i++) {
+            JSONObject obj = array.getJSONObject(i);
+            AuditWorkflowSetting auditWorkflowTimeSetting = JSONObject.toJavaObject(obj, AuditWorkflowSetting.class);
+            if (auditWorkflowTimeSetting.getAuditDeptId() != null) {
+                if (auditDeptIds.contains(auditWorkflowTimeSetting.getAuditDeptId())) {
+                    HttpRespMsg msg = new HttpRespMsg();
+                    msg.setError(MessageUtils.message("department.duplicateError", auditWorkflowTimeSetting.getAuditDeptName()));
+                    return msg;
+                } else {
+                    auditDeptIds.add(auditWorkflowTimeSetting.getAuditDeptId());
                 }
             }
+        }
 
-            for (int i=0;i<array.size(); i++) {
-                JSONObject obj = array.getJSONObject(i);
-                AuditWorkflowSetting auditWorkflowTimeSetting = JSONObject.toJavaObject(obj, AuditWorkflowSetting.class);
-                auditWorkflowTimeSetting.setCompanyId(companyId);
-                auditWorkflowTimeSetting.setType(type);
-                auditWorkflowTimeSetting.setSeq(i+1);
-                if (i == array.size() -1) {
-                    auditWorkflowTimeSetting.setIsFinal(1);
-                } else {
-                    auditWorkflowTimeSetting.setIsFinal(0);
-                }
-                auditWorkflowTimeSetting.setDeptId(deptId);
+        //
+        List<Integer> existingIds = new ArrayList<>();
+        for (int i=0;i<array.size(); i++) {
+            JSONObject obj = array.getJSONObject(i);
+            AuditWorkflowSetting auditWorkflowTimeSetting = JSONObject.toJavaObject(obj, AuditWorkflowSetting.class);
+            auditWorkflowTimeSetting.setCompanyId(companyId);
+            auditWorkflowTimeSetting.setType(type);
+            auditWorkflowTimeSetting.setSeq(i+1);
+            if (i == array.size() -1) {
+                auditWorkflowTimeSetting.setIsFinal(1);
+            } else {
+                auditWorkflowTimeSetting.setIsFinal(0);
+            }
+            auditWorkflowTimeSetting.setDeptId(deptId);
+            if (auditWorkflowTimeSetting.getId() == null) {
                 auditWorkflowSettingMapper.insert(auditWorkflowTimeSetting);
+            } else {
+                auditWorkflowSettingMapper.updateById(auditWorkflowTimeSetting);
+                existingIds.add(auditWorkflowTimeSetting.getId());
+            }
+        }
+
+        //移除不在本次保存范围内的已有节点数据
+        if (oldAuditSettingList.size() > 0) {
+            List<Integer> collect = oldAuditSettingList.stream().map(AuditWorkflowSetting::getId).filter(oldId -> !existingIds.stream().anyMatch(ex -> ex.equals(oldId))).collect(Collectors.toList());
+            if (collect.size() > 0) {
+                auditWorkflowSettingMapper.deleteBatchIds(collect);
             }
         }
         return new HttpRespMsg();
@@ -91,55 +104,19 @@ public class AuditWorkflowSettingController {
     @RequestMapping("/checkNodeInUse")
     public HttpRespMsg checkNodeInUse(String auditDeptId, Integer deptId, Integer type) {
         String token = request.getHeader("TOKEN");
-        Integer companyId = userMapper.selectById(token).getCompanyId();
         HttpRespMsg msg = new HttpRespMsg();
         List<AuditWorkflowSetting> targetNode = auditWorkflowSettingMapper.selectList(new QueryWrapper<AuditWorkflowSetting>().eq("dept_id", deptId).eq("audit_dept_id", auditDeptId).eq("type", type));
-//        if (targetNode.size() > 0) {
-//            //要删除的部门节点是存在的,需要检测是否有待审核的走到这个流程点了
-//            long num = reportMapper.selectCount(new QueryWrapper<Report>().eq("state", 0).eq("is_dept_audit", 1).eq("audit_deptid", auditDeptId));
-//            if (num > 0) {
-//                msg.setError("当前部门存在待审核报告,无法操作!");
-//            }
-//        }
+        if (targetNode.size() > 0) {
+
+        }
 
         return msg;
     }
 
     @RequestMapping("/get")
     public HttpRespMsg get(Integer deptId, @RequestParam Integer type) {
-        String token = request.getHeader("TOKEN");
-        Integer companyId = userMapper.selectById(token).getCompanyId();
-        List<AuditWorkflowSetting> auditWorkflowTimeSettings = auditWorkflowSettingMapper.selectList(new QueryWrapper<AuditWorkflowSetting>().eq("dept_id", deptId).eq("type", type).orderByAsc("seq"));
         HttpRespMsg msg = new HttpRespMsg();
-        if (auditWorkflowTimeSettings.size() == 0) {
-            int seq = 1;
-            //出差,默认是项目负责人审批
-            Department dept = departmentMapper.selectById(deptId);
-            AuditWorkflowSetting setting = new AuditWorkflowSetting();
-            setting.setSeq(seq);
-            setting.setCompanyId(companyId);
-            setting.setDeptId(dept.getDepartmentId());
-            setting.setIsFinal(1);
-            setting.setAuditorType(0);
-            auditWorkflowTimeSettings.add(setting);
-//            if (type ==1) {
-//
-//            } else {
-//                //获取默认的设置,默认直接就是部门负责人审批
-//                Department dept = departmentMapper.selectById(deptId);
-//                AuditWorkflowSetting setting = new AuditWorkflowSetting();
-//                setting.setSeq(seq);
-//                setting.setCompanyId(companyId);
-//                setting.setDeptId(dept.getDepartmentId());
-//                setting.setAuditDeptId(dept.getDepartmentId());
-//                setting.setAuditDeptName(dept.getDepartmentName());
-//                setting.setIsFinal(1);
-//                setting.setAuditorType(1);
-//                auditWorkflowTimeSettings.add(setting);
-//            }
-
-        }
-        msg.data = auditWorkflowTimeSettings;
+        msg.data = auditWorkflowSettingService.get(deptId, type);
         return msg;
     }
 

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/LeaveAuditLogController.java

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-12-10
+ */
+@RestController
+@RequestMapping("/leave-audit-log")
+public class LeaveAuditLogController {
+
+}
+

+ 16 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/LeaveSheetController.java

@@ -52,7 +52,7 @@ public class LeaveSheetController {
 
 
     /**
-     *
+     * 提交请假申请单
      * @param sheet 请假单封装数据
      * @return
      */
@@ -63,6 +63,14 @@ public class LeaveSheetController {
 
     }
 
+    @RequestMapping("/cancel")
+    public HttpRespMsg cancel(Integer id) {
+        String userId = request.getHeader("Token");
+        return leaveSheetService.cancel(id, userId);
+    }
+
+
+
     @RequestMapping("/delete")
     public HttpRespMsg delete(Integer id) {
         return leaveSheetService.delete(id);
@@ -74,15 +82,18 @@ public class LeaveSheetController {
         return leaveSheetService.queryList(sheet, pageIndex, pageSize);
     }
 
+    @RequestMapping("/auditList")
+    public HttpRespMsg auditList(LeaveSheet sheet, @RequestParam Integer pageIndex, @RequestParam Integer pageSize) {
+        return leaveSheetService.auditList(sheet, pageIndex, pageSize);
+    }
+
     @RequestMapping("/approve")
     public HttpRespMsg approve(Integer id) {
         return leaveSheetService.approve(id);
     }
     @RequestMapping("/deny")
-    public HttpRespMsg deny(Integer id) {
-
-        return leaveSheetService.deny(id);
-
+    public HttpRespMsg deny(Integer id, String reason) {
+        return leaveSheetService.deny(id, reason);
     }
 
     /**

+ 67 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/LeaveAuditLog.java

@@ -0,0 +1,67 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-12-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class LeaveAuditLog extends Model<LeaveAuditLog> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 表单id
+     */
+    @TableField("sheet_id")
+    private Integer sheetId;
+
+    /**
+     * 审批节点id
+     */
+    @TableField("audit_node_id")
+    private Integer auditNodeId;
+
+    @TableField("auditor_id")
+    private String auditorId;
+
+    @TableField("auditor_name")
+    private String auditorName;
+
+    /**
+     * 是否审核通过,1-通过,0-驳回
+     */
+    @TableField("is_pass")
+    private Integer isPass;
+
+    @TableField("indate")
+    private LocalDateTime indate;
+
+    @TableField("deny_reason")
+    private String denyReason;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 11 - 18
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/LeaveSheet.java

@@ -20,12 +20,13 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2022-07-15
+ * @since 2022-12-10
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
 public class LeaveSheet extends Model<LeaveSheet> {
+
     private static final long serialVersionUID=1L;
 
     @TableId(value = "id", type = IdType.AUTO)
@@ -73,7 +74,6 @@ public class LeaveSheet extends Model<LeaveSheet> {
 
     /**
      * 0-审核通过,1-待审核,2-驳回,3-已撤回
-     * WX状态:1-审批中;2-已通过;3-已驳回;4-已撤销;6-通过后撤销;7-已删除;10-已支付
      */
     @TableField("status")
     private Integer status;
@@ -133,38 +133,31 @@ public class LeaveSheet extends Model<LeaveSheet> {
     private String auditorName;
 
     /**
-     * 审核流程:当前审核的部门id
-     */
-    @TableField("audit_deptid")
-    private Integer auditDeptid;
-
-    /**
-     * 是否是最后一步审核
-     */
-    @TableField("is_final_audit")
-    private Integer isFinalAudit;
-
-    /**
-     * 1-部门审核,0-项目负责人审核,2-指定人员审核
+     * 1-部门审核,2-指定人员审核
      */
     @TableField("auditor_type")
     private Integer auditorType;
 
-    @TableField(exist = false)
-    private String dept;
     /**
      * 钉钉审批实例procInst_id
      */
     @TableField("procinst_id")
     private String procinstId;
 
-
     /**
      * 钉钉审批实例的审批通过时间
      */
     @TableField("gmt_finished")
     private String gmtFinished;
 
+    /**
+     * 当前审核节点id
+     */
+    @TableField("cur_audit_setting_id")
+    private Integer curAuditSettingId;
+
+    @TableField(exist = false)
+    private String dept;
 
     @Override
     protected Serializable pkVal() {

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/LeaveAuditLogMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.LeaveAuditLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-12-10
+ */
+public interface LeaveAuditLogMapper extends BaseMapper<LeaveAuditLog> {
+
+}

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

@@ -2,6 +2,10 @@ package com.management.platform.service;
 
 import com.management.platform.entity.AuditWorkflowSetting;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
 
 /**
  * <p>
@@ -12,5 +16,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @since 2022-03-28
  */
 public interface AuditWorkflowSettingService extends IService<AuditWorkflowSetting> {
-
+    public List<AuditWorkflowSetting> get(Integer deptId, @RequestParam Integer type);
 }

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/LeaveAuditLogService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.LeaveAuditLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-12-10
+ */
+public interface LeaveAuditLogService extends IService<LeaveAuditLog> {
+
+}

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

@@ -26,11 +26,15 @@ public interface LeaveSheetService extends IService<LeaveSheet> {
 
     HttpRespMsg approve(Integer id);
 
-    HttpRespMsg deny(Integer id);
+    HttpRespMsg deny(Integer id, String reason);
 
     HttpRespMsg summaryData(String keyword, String startDate, String endDate, String userId);
 
     HttpRespMsg getOTAvaiDays(String userId);
 
     HttpRespMsg exportLeaveData(String userId,Integer status, Integer leaveType, String startTime,String endTime);
+
+    HttpRespMsg cancel(Integer id, String userId);
+
+    HttpRespMsg auditList(LeaveSheet sheet, Integer pageIndex, Integer pageSize);
 }

+ 47 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/AuditWorkflowSettingServiceImpl.java

@@ -1,11 +1,22 @@
 package com.management.platform.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.AuditWorkflowSetting;
+import com.management.platform.entity.Department;
 import com.management.platform.mapper.AuditWorkflowSettingMapper;
+import com.management.platform.mapper.DepartmentMapper;
+import com.management.platform.mapper.ReportMapper;
+import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.AuditWorkflowSettingService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.util.HttpRespMsg;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * <p>
  *  服务实现类
@@ -16,5 +27,41 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class AuditWorkflowSettingServiceImpl extends ServiceImpl<AuditWorkflowSettingMapper, AuditWorkflowSetting> implements AuditWorkflowSettingService {
+    @Resource
+    private HttpServletRequest request;
+    @Resource
+    AuditWorkflowSettingMapper auditWorkflowSettingMapper;
+    @Resource
+    UserMapper userMapper;
+    @Resource
+    DepartmentMapper departmentMapper;
+    @Resource
+    ReportMapper reportMapper;
 
+    @Override
+    public List<AuditWorkflowSetting> get(Integer deptId, Integer type) {
+        if (deptId != null && deptId > 0) {
+            List<AuditWorkflowSetting> auditWorkflowTimeSettings = auditWorkflowSettingMapper.selectList(new QueryWrapper<AuditWorkflowSetting>().eq("dept_id", deptId).eq("type", type).orderByAsc("seq"));
+            Integer companyId = departmentMapper.selectById(deptId).getCompanyId();
+            if (auditWorkflowTimeSettings.size() == 0) {
+                //生成默认数据
+                int seq = 1;
+                //获取默认的设置,默认直接就是部门负责人审批
+                Department dept = departmentMapper.selectById(deptId);
+                AuditWorkflowSetting setting = new AuditWorkflowSetting();
+                setting.setSeq(seq);
+                setting.setCompanyId(companyId);
+                setting.setDeptId(dept.getDepartmentId());
+                setting.setAuditDeptId(dept.getDepartmentId());
+                setting.setAuditDeptName(dept.getDepartmentName());
+                setting.setIsFinal(1);
+                setting.setAuditorType(type);
+                auditWorkflowSettingMapper.insert(setting);
+                auditWorkflowTimeSettings.add(setting);
+            }
+            return auditWorkflowTimeSettings;
+        } else {
+            return new ArrayList<>();
+        }
+    }
 }

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

@@ -149,6 +149,13 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                 department.setManagerId(managerId);
                 department.setReportAuditUserid(reportAuditUserid);
 
+                //修改审批流中的部门名称
+                if (deptNameChanged) {
+                    AuditWorkflowSetting auditWorkflowSetting = new AuditWorkflowSetting();
+                    auditWorkflowSetting.setAuditDeptName(departmentName);
+                    auditWorkflowSettingMapper.update(auditWorkflowSetting, new QueryWrapper<AuditWorkflowSetting>().eq("audit_dept_id", departmentId));
+                }
+
                 if (departmentMapper.updateById(department) == 0) {
                     //httpRespMsg.setError("修改失败");
                     httpRespMsg.setError(MessageUtils.message("other.modifyFail"));

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/LeaveAuditLogServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.LeaveAuditLog;
+import com.management.platform.mapper.LeaveAuditLogMapper;
+import com.management.platform.service.LeaveAuditLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-12-10
+ */
+@Service
+public class LeaveAuditLogServiceImpl extends ServiceImpl<LeaveAuditLogMapper, LeaveAuditLog> implements LeaveAuditLogService {
+
+}

+ 190 - 33
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/LeaveSheetServiceImpl.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.management.platform.controller.AuditWorkflowSettingController;
 import com.management.platform.entity.*;
 import com.management.platform.entity.vo.SysRichFunction;
 import com.management.platform.mapper.*;
@@ -48,6 +49,8 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
     @Resource
     private ReportMapper reportMapper;
     @Resource
+    private AuditWorkflowSettingService auditWorkflowSettingService;
+    @Resource
     private AuditWorkflowSettingMapper auditWorkflowSettingMapper;
     @Resource
     private DepartmentMapper departmentMapper;
@@ -65,6 +68,10 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
     WxCorpInfoMapper wxCorpInfoMapper;
     @Resource
     ExcelExportService excelExportService;
+    @Resource
+    LeaveAuditLogMapper leaveAuditLogMapper;
+    @Value(value = "${upload.path}")
+    private String path;
 
     @Override
     public HttpRespMsg add(LeaveSheet sheet, String userId) {
@@ -94,33 +101,42 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
             if (count > 0) {
                 //msg.setError("该时间段已有请假申请,不能重复请假");
                 msg.setError(MessageUtils.message("leave.repeatedLeave"));
-            } else {
-                //校验当前的指定的项目审核人
-                //获取第一个审批人
-                User owner = userMapper.selectById(sheet.getOwnerId());
-                AuditWorkflowSetting workflowNode = auditWorkflowSettingMapper.selectOne(new QueryWrapper<AuditWorkflowSetting>().eq("type", 0)
-                        .eq("dept_id", owner.getDepartmentId()).orderByAsc("seq").last("limit 1"));
-                if (workflowNode != null) {
-                    if (workflowNode.getAuditorType() == 0) {
-                        //项目负责人审核, 创建时指定的项目审核人
-
-                    } else if (workflowNode.getAuditorType() == 1) {
-                        //部门负责人
-                        Department dept = departmentMapper.selectById(workflowNode.getAuditDeptId());
-                        sheet.setAuditorId(dept.getManagerId());
+            }
+        }
 
-                    } else {
-                        //指定一个人审批
-                        sheet.setAuditorId(workflowNode.getUserId());
-                        sheet.setAuditorName(workflowNode.getUserName());
+        //获取第一个审批人
+        User owner = userMapper.selectById(sheet.getOwnerId());
+        if (owner.getDepartmentId() == 0) {
+            //没有部门,不能提交请假申请
+            msg.setError("请联系管理员设置您所在部门");
+            return msg;
+        } else {
+            List<AuditWorkflowSetting> auditList = auditWorkflowSettingService.get(owner.getDepartmentId(), AuditWorkflowSettingController.TYPE_LEAVE);
+            if (auditList.size() > 0) {
+                AuditWorkflowSetting workflowNode = auditList.get(0);
+                if (workflowNode.getAuditorType() == 1) {
+                    //部门负责人
+                    Department dept = departmentMapper.selectById(workflowNode.getAuditDeptId());
+                    if (dept.getManagerId() == null) {
+                        msg.setError("请联系管理员设置您所在部门的主要负责人");
+                        return msg;
                     }
+                    sheet.setAuditorId(dept.getManagerId());
+                    sheet.setAuditorName(userMapper.selectById(dept.getManagerId()).getName());
+                } else if (workflowNode.getAuditorType() == 2) {
+                    //指定一个人审批
+                    sheet.setAuditorId(workflowNode.getUserId());
+                    sheet.setAuditorName(workflowNode.getUserName());
                 }
-                leaveSheetMapper.insert(sheet);
             }
+        }
+
+        if (isNew) {
+            leaveSheetMapper.insert(sheet);
         } else {
+            //编辑修改
             leaveSheetMapper.updateById(sheet);
         }
-
         return msg;
     }
 
@@ -135,6 +151,7 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
         QueryWrapper<LeaveSheet> queryWrapper = new QueryWrapper<LeaveSheet>();
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
+
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部请假单");
         if (functionList.size() == 0) {
             //部门负责人可以看这个部门的
@@ -197,20 +214,97 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
 
     @Override
     public HttpRespMsg approve(Integer id) {
-        LeaveSheet sheet = new LeaveSheet();
-        sheet.setId(id);
-        sheet.setStatus(0);
-        leaveSheetMapper.updateById(sheet);
-        return new HttpRespMsg();
+        String token = request.getHeader("TOKEN");
+        //检查操作人权限
+        User user = userMapper.selectById(token);
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        LeaveSheet originSheet = leaveSheetMapper.selectById(id);
+        if (user.getId().equals(originSheet.getAuditorId())) {
+            //是当前的审核人,获取下个审核节点
+            AuditWorkflowSetting auditWorkflowSetting = auditWorkflowSettingMapper.selectById(originSheet.getCurAuditSettingId());
+            LeaveSheet sheet = new LeaveSheet();
+            sheet.setId(id);
+            if (auditWorkflowSetting == null) {
+                //当前审核节点已不存在,直接审核通过
+                sheet.setStatus(0);
+            } else {
+                Integer seq = auditWorkflowSetting.getSeq();
+                AuditWorkflowSetting nextAuditNode = auditWorkflowSettingMapper.selectOne(new QueryWrapper<AuditWorkflowSetting>().eq("seq", (seq + 1)).eq("dept_id", auditWorkflowSetting.getDeptId()));
+                if (nextAuditNode == null) {
+                    sheet.setStatus(0);
+                } else {
+                    //进入下个审核节点
+                    if (nextAuditNode.getAuditorType() == 1) {
+                        //部门负责人审核
+                        Department department = departmentMapper.selectById(nextAuditNode.getAuditDeptId());
+                        if (department == null) {
+                            //部门已被删除,直接审核通过
+                            sheet.setStatus(0);
+                        } else {
+                            if (department.getManagerId() == null) {
+                                httpRespMsg.setError("尚未设置下个节点的部门负责人,请联系管理员");
+                                return httpRespMsg;
+                            } else {
+                                sheet.setCurAuditSettingId(nextAuditNode.getId());
+                                sheet.setAuditorId(department.getManagerId());
+                                sheet.setAuditorName(userMapper.selectById(department.getManagerId()).getName());
+                                sheet.setAuditorType(nextAuditNode.getAuditorType());
+                            }
+                        }
+                    }
+                }
+            }
+            leaveSheetMapper.updateById(sheet);
+            //保存审核记录
+            saveAgreeLog(id, auditWorkflowSetting, user);
+        }
+
+        return httpRespMsg;
+    }
+
+    private void saveAgreeLog(int sheetId, AuditWorkflowSetting curAuditNode, User operator) {
+        LeaveAuditLog log = new LeaveAuditLog();
+        log.setSheetId(sheetId);
+        if (curAuditNode != null) {
+            log.setAuditNodeId(curAuditNode.getId());
+        }
+        log.setAuditorId(operator.getId());
+        log.setAuditorName(operator.getName());
+        log.setIsPass(1);
+        leaveAuditLogMapper.insert(log);
+    }
+    private void saveDenyLog(int sheetId, AuditWorkflowSetting curAuditNode, User operator, String reason) {
+        LeaveAuditLog log = new LeaveAuditLog();
+        log.setSheetId(sheetId);
+        if (curAuditNode != null) {
+            log.setAuditNodeId(curAuditNode.getId());
+        }
+        log.setAuditorId(operator.getId());
+        log.setAuditorName(operator.getName());
+        log.setIsPass(0);
+        log.setDenyReason(reason);
+        leaveAuditLogMapper.insert(log);
     }
 
+
     @Override
-    public HttpRespMsg deny(Integer id) {
-        LeaveSheet sheet = new LeaveSheet();
-        sheet.setId(id);
-        sheet.setStatus(2);
-        leaveSheetMapper.updateById(sheet);
-        return new HttpRespMsg();
+    public HttpRespMsg deny(Integer id, String reason) {
+        String token = request.getHeader("TOKEN");
+        //检查操作人权限
+        User user = userMapper.selectById(token);
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        LeaveSheet originSheet = leaveSheetMapper.selectById(id);
+        if (user.getId().equals(originSheet.getAuditorId())) {
+            //是当前的审核人,获取当前审核节点
+            AuditWorkflowSetting auditWorkflowSetting = auditWorkflowSettingMapper.selectById(originSheet.getCurAuditSettingId());
+            LeaveSheet sheet = new LeaveSheet();
+            sheet.setId(id);
+            sheet.setStatus(2);
+            leaveSheetMapper.updateById(sheet);
+            saveDenyLog(id, auditWorkflowSetting, user, reason);
+        }
+
+        return httpRespMsg;
     }
 
     @Override
@@ -238,8 +332,7 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
         return msg;
     }
 
-    @Value(value = "${upload.path}")
-    private String path;
+
     @Override
     public HttpRespMsg exportLeaveData(String userId,Integer status,Integer leaveType,String startTime,String endTime) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
@@ -362,4 +455,68 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
         }
         return httpRespMsg;
     }
+
+    @Override
+    public HttpRespMsg cancel(Integer id, String userId) {
+        HttpRespMsg msg = new HttpRespMsg();
+        LeaveSheet oldSheet = leaveSheetMapper.selectById(id);
+        if (oldSheet.getStatus() == 0) {
+            msg.setError("当前请假申请已通过,无法撤销");
+        } else if (oldSheet.getStatus() == 2) {
+            msg.setError("当前请假申已驳回,无法撤销");
+        } else {
+            LeaveSheet sheet = new LeaveSheet();
+            sheet.setId(id);
+            sheet.setStatus(3);//撤销状态
+            leaveSheetMapper.updateById(sheet);
+            //删除相关的审批记录
+            leaveAuditLogMapper.delete(new QueryWrapper<LeaveAuditLog>().eq("sheet_id", id));
+        }
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg auditList(LeaveSheet sheet, Integer pageIndex, Integer pageSize) {
+        QueryWrapper<LeaveSheet> queryWrapper = new QueryWrapper<LeaveSheet>();
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
+
+        sheet.setCompanyId(user.getCompanyId());
+
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        queryWrapper.eq("company_id", sheet.getCompanyId()).orderByDesc("id");
+        queryWrapper.eq("status", 1);
+        queryWrapper.eq("auditor_id", user.getId());
+
+        if (!StringUtils.isEmpty(sheet.getOwnerId())) {
+            queryWrapper.eq("owner_id", sheet.getOwnerId());
+        }
+        if (sheet.getLeaveType() != null) {
+            queryWrapper.eq("leave_type", sheet.getLeaveType());
+        }
+        if (sheet.getStartDate() != null && sheet.getEndDate() != null) {
+            queryWrapper.le("start_date", sheet.getEndDate()).ge("end_date", sheet.getStartDate());
+        }
+        IPage<LeaveSheet> listIPager = leaveSheetMapper.selectPage(new Page<>(pageIndex, pageSize),
+                queryWrapper);
+        List<LeaveSheet> records = listIPager.getRecords();
+        List<String> userIds = records.stream().map(LeaveSheet::getOwnerId).collect(Collectors.toList());
+        if (userIds.size() > 0) {
+            List<User> userList = userMapper.getUserWithDept(new QueryWrapper<User>().in("id", userIds));
+            records.stream().forEach(r->{
+                Optional<User> find = userList.stream().filter(u->u.getId().equals(r.getOwnerId())).findFirst();
+                if (find.isPresent()) {
+                    r.setDept(find.get().getDepartmentName());
+                }
+            });
+        }
+
+        Long total = listIPager.getTotal();
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("records", records);
+        map.put("total", total);
+        httpRespMsg.data = map;
+        return httpRespMsg;
+    }
 }

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

@@ -1544,7 +1544,6 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                             String leaveType = date_range.getString("type");
                             LeaveSheet leaveSheet = new LeaveSheet();
                             leaveSheet.setProcinstId(sp_no_lists[i].toString());
-                            leaveSheet.setIsFinalAudit(1);
                             leaveSheet.setIndate(applyTime);
                             leaveSheet.setOwnerName(name);
                             leaveSheet.setOwnerId(user==null?"":user.getId());

+ 22 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/LeaveAuditLogMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.LeaveAuditLogMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.LeaveAuditLog">
+        <id column="id" property="id" />
+        <result column="sheet_id" property="sheetId" />
+        <result column="audit_node_id" property="auditNodeId" />
+        <result column="auditor_id" property="auditorId" />
+        <result column="auditor_name" property="auditorName" />
+        <result column="is_pass" property="isPass" />
+        <result column="indate" property="indate" />
+        <result column="deny_reason" property="denyReason" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, sheet_id, audit_node_id, auditor_id, auditor_name, is_pass, indate, deny_reason
+    </sql>
+
+</mapper>

+ 2 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/LeaveSheetMapper.xml

@@ -21,16 +21,15 @@
         <result column="tel" property="tel" />
         <result column="auditor_id" property="auditorId" />
         <result column="auditor_name" property="auditorName" />
-        <result column="audit_deptid" property="auditDeptid" />
-        <result column="is_final_audit" property="isFinalAudit" />
         <result column="auditor_type" property="auditorType" />
         <result column="procinst_id" property="procinstId" />
         <result column="gmt_finished" property="gmtFinished" />
+        <result column="cur_audit_setting_id" property="curAuditSettingId" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, company_id, owner_id, owner_name, start_date, end_date, leave_type, status, remark, operator_id, time_hours, time_days, indate, time_type, tel, auditor_id, auditor_name, audit_deptid, is_final_audit, auditor_type, procinst_id, gmt_finished
+        id, company_id, owner_id, owner_name, start_date, end_date, leave_type, status, remark, operator_id, time_hours, time_days, indate, time_type, tel, auditor_id, auditor_name, auditor_type, procinst_id, gmt_finished, cur_audit_setting_id
     </sql>
     <select id="summaryData"  resultMap="BaseResultMap">
         select owner_id, owner_name, sum(time_hours) as time_hours, sum(time_days) as time_days from leave_sheet

+ 152 - 17
fhKeeper/formulahousekeeper/timesheet/src/views/leave/list.vue

@@ -20,18 +20,28 @@
             <i class="iconfont firerock-icontianbao"></i>
             <span slot="title">{{ $t('staffleavetofillin') }}</span>
           </el-menu-item>
-          <el-submenu index="2" v-if="permissions.leaveAll">
+          <!-- <el-submenu index="2" v-if="permissions.leaveAll || permissions.leaveAudit">
             <template slot="title">
               <i class="iconfont firerock-iconbaoxiaodan"></i>
               <span>{{ $t('singlelistofleave') }}</span>
             </template>
             <el-menu-item index="2-1" ><p @click="bills(false, 2)" v-if="permissions.leaveAll">{{ $t('all') }}</p></el-menu-item>
             <el-menu-item index="2-2" ><p @click="bills(true, 1)" v-if="permissions.leaveAudit">{{ $t('state.WaitingAudit') }}</p></el-menu-item>
-          </el-submenu>
-            <el-menu-item index="3" @select="bills" @click="bills(false, 2)" v-if="!permissions.leaveAll">
+          </el-submenu> -->
+
+          <el-menu-item index="2" @select="bills" @click="auditList()" v-if="permissions.leaveAudit">
               <i class="iconfont firerock-iconbaoxiaodan"></i>
-              <span slot="title">{{ $t('myleaveform') }}</span>
+              <span slot="title">请假审核</span>
             </el-menu-item>
+            <el-menu-item index="3" @select="bills" @click="bills(false, 2)" >
+              <i class="iconfont firerock-iconbaoxiaodan"></i>
+              <span slot="title">{{ $t('singlelistofleave') }}</span>
+            </el-menu-item>
+            <!-- <el-menu-item index="3" @select="bills" @click="bills(false, 2)" v-if="!permissions.leaveAll">
+              <i class="iconfont firerock-iconbaoxiaodan"></i>
+              <span slot="title">{{ $t('myleaveform') }}</span>
+            </el-menu-item> -->
+            
             <el-menu-item index="4" v-if="permissions.leaveStatistical">
               <template slot="title">
                 <i class="iconfont firerock-icontianbao"></i>
@@ -153,8 +163,22 @@
                 <el-form-item :label="$t('bei-zhu')" style="width: 100%">
                     <el-input type="textarea" v-model="addForm.remark" :rows="5" style="width: 550px" maxlength="100" show-word-limit></el-input>
                 </el-form-item>
+                <!--请假流程显示-->
+                <el-form-item label="审批流程" style="width: 100%">
+                  <span v-for="(item, index) in curWorkflowList" :key="item.id" >
+                    <span v-if="index>0"><i class="el-icon-right"></i></span>
+                    <span><i class="el-icon-s-custom"></i></span>
+                    <span v-if="user.userNameNeedTranslate == 1">
+                      <ww-open-data type='departmentName' :openid='item.auditDeptName' v-if="item.auditorType == 1"></ww-open-data>(主要负责人)
+                      <ww-open-data type='userName' :openid='item.userName' v-if="item.auditorType == 2"></ww-open-data>
+                    </span>
+                    <span v-if="user.userNameNeedTranslate == 0">
+                      {{item.auditorType == 1?item.auditDeptName+'(主要负责人)':item.userName}}
+                    </span>
+                  </span>
+                </el-form-item>
             </el-form>
-
+            
             <div>
               <p style="margin-left: 20%"><el-button type="primary" @click="submits('addFormRules')" size="mini" :disabled="txselnum == 0 && addForm.leaveType == 6 && addForm.ownerId != '' ? true : false">{{ $t('btn.submit') }}</el-button></p>
             </div>
@@ -239,13 +263,18 @@
                     <div>{{scope.row.timeHours}} {{ $t('time.hour') }}</div>
                   </template>
                 </el-table-column>
-                <el-table-column prop="status" :label="$t('state.states')" min-width="100">
+                <el-table-column prop="status" :label="$t('state.states')" min-width="180">
                   <template slot-scope="scope">
                     <div v-if="scope.row.status == 0 || scope.row.status == 1 || scope.row.status == 2 || scope.row.status == 3 || scope.row.status == 4">
                       <div v-if="scope.row.status == 0" >{{ $t('state.approved') }}</div>
-                      <div v-if="scope.row.status == 1" style="color: orange">{{ $t('state.WaitingAudit') }}</div>
+                      <div v-if="scope.row.status == 1" style="color: orange"><span>{{ $t('state.WaitingAudit') }}-</span>
+                        <span v-if="user.userNameNeedTranslate != 1">{{scope.row.auditorName}}</span>
+                        <span v-if="user.userNameNeedTranslate == 1">
+                          <ww-open-data type='userName' :openid='scope.row.auditorName'></ww-open-data>
+                        </span>
+                      </div>
                       <div v-if="scope.row.status == 2" style="color: red">{{ $t('btn.rejected') }}</div>
-                      <div v-if="scope.row.status == 3" style="color: #666666">{{ $t('btn.undo') }}</div>
+                      <div v-if="scope.row.status == 3" style="color: #666666">已撤回</div>
                     </div>
                     <div v-else>
                       <span>{{ $t('norequestforleaveatpresent') }}</span>
@@ -271,8 +300,9 @@
                 <el-table-column :label="$t('operation')" min-width="180" fixed="right" v-if="!isAuditList && !isSyncData">
                     <template slot-scope="scope">
                       <div v-if="(scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.leaveAll">
-                        <el-button icon="el-icon-delete" circle size="mini"  @click.stop.native="deletes(scope.row)" ></el-button>
-                        <el-button icon="el-icon-edit" circle size="mini" @click.stop.native="editor(scope.row)"></el-button>
+                        <el-button size="mini" v-if="scope.row.status == 3" @click.stop.native="deletes(scope.row)" >删除</el-button>
+                        <el-button size="mini" v-if="scope.row.status == 1" @click.stop.native="cancel(scope.row)">撤回</el-button>
+                        <el-button size="mini" v-if="scope.row.status == 3" type="primary" @click.stop.native="editor(scope.row)">重新提交</el-button>
                       </div>
                       <!-- <div>
                         <el-button icon="el-icon-delete" circle size="mini"  @click.stop.native="deletes(scope.row)"></el-button>
@@ -639,12 +669,13 @@
         <!-- 请假人 -->
         <el-form-item :label="$t('leavepeople')" prop="ownerId"  style="width: 300px;display: inline-block;">
             <!--普通员工只能自己填报自己的 -->
-            <!-- <el-select v-if="user.userNameNeedTranslate != 1" v-model="addForm.ownerId" @change="selts()" :placeholder="$t('pleaseselectthepersonaskingforleave')" style="width: 240px" :disabled="true" filterable="true">
+            <el-select v-if="user.userNameNeedTranslate != 1" v-model="addForm.ownerId" @change="selts()" :placeholder="$t('pleaseselectthepersonaskingforleave')" style="width: 240px" :disabled="true" filterable="true">
                 <span v-for="(item, index) in users" :key="index">
                 <el-option :label="item.name" :value="item.id"></el-option>
                 </span>
-            </el-select> -->
+            </el-select>
             <selectCat v-if="user.userNameNeedTranslate == 1" :size="'mini'" :subject="users" :subjectId="addForm.ownerId" :disabled="true" :distinction="'4'" :filterable="false" @selectCal="selectCal"></selectCat>
+
         </el-form-item>
         <!-- 电话 -->
         <el-form-item :label="$t('phone')" prop="tel" style="width: 300px;display: inline-block;">
@@ -690,7 +721,15 @@
       <el-button type="primary" @click="determine()">{{ $t('btn.determine') }}</el-button>
     </span>
   </el-dialog>
- 
+  <el-dialog :title="$t('defaultText.pleaseEnterTheReason')"  v-if="denyDialogV" :visible.sync="denyDialogV" :close-on-click-modal="false" customClass="customWidth" width="500px">
+            <div>
+                <el-input type="textarea" v-model="denyInfo.denyReason" rows="2" :placeholder="$t('reasonforyourdecisiontoreject')" />
+            </div>
+            <div slot="footer" class="dialog-footer">
+                <el-button  @click="denyDialogV = false" >{{ $t('btn.cancel') }}</el-button>
+                <el-button type="primary" @click="submitDeny()" >{{ $t('btn.determine') }}</el-button>
+            </div>
+        </el-dialog>
   </section>
 </template>
 
@@ -737,6 +776,8 @@ export default {
         }
     };
     return {
+      denyDialogV: false,
+      denyInfo: {},
       addFormRules: {
         ownerId: [{ required: true, message: this.$t('pleaseselectthepersonaskingforleave'), trigger: "blur" }],
         tel: [{required: true, validator: checkTel, trigger: 'blur'}],
@@ -869,7 +910,8 @@ export default {
       vueCasaderItem: [], // 仿数据
       vueIAlDataSItems: undefined, // 仿数据
       exporLoading: false,
-      addNodeObj: {}
+      addNodeObj: {},
+      curWorkflowList:{}
     };
   },
   computed: {},
@@ -897,11 +939,32 @@ export default {
       this.getUsers() // 获取人员信息
     this.getDepartment();
     this.getAl();
-    this.getApproverList()
+    this.getApproverList();
+    this.getAuditWorkflow();
     }
   },
   filters: {},
   methods: {
+    
+    //获取添加请假单时的审批流
+    getAuditWorkflow() {
+      this.http.post('/audit-workflow-setting/get',{deptId: this.user.departmentId, type: 1},
+        res => {
+          if(res.code == 'ok'){
+            this.curWorkflowList = res.data;
+          }else{
+            this.$message({
+              message: res.msg,
+              type: 'error'
+            })
+          }
+        },err => {
+          this.$message({
+            message: err,
+            type: 'error'
+          })
+        })
+    },
     // 导出请假单
     exportLeave(){
       let param = {}
@@ -1451,12 +1514,17 @@ export default {
         });
     },
     deny(item) {
+      this.denyDialogV = true;
+      this.denyInfo = {id:item.id, reason:null};
+    },
+
+    submitDeny(id) {
       //审核驳回
-      this.http.post('/leave-sheet/deny', {id:item.id
-        },
+      this.http.post('/leave-sheet/deny', this.denyInfo,
         res => {
             if (res.code == "ok") {
                 this.bills(true);
+                this.denyDialogV = false;
             } else {
                 this.$message({
                 message: res.msg,
@@ -1547,6 +1615,46 @@ export default {
         this.getDepartmentOptions()
       }
     },
+    auditList() {
+      this.falg = 1
+      this.code = 1
+      this.tableData = []
+      this.displayTable = true;
+      this.isAuditList = true;
+      this.loading = true
+      this.page = '1'
+      var param = { pageIndex: this.page,
+                    pageSize: this.size,
+                    // createDate: this.createDate,
+                    startDate: this.createDate == null ? '' : this.createDate[0],
+                    endDate: this.createDate == null ? '' : this.createDate[1],
+                    ownerId: this.ownerIds,
+                    leaveType: this.type,
+                  };
+      this.list = [];
+      // this.total = 0;
+      this.http.post('/leave-sheet/auditList', param,
+        res => {
+            if (res.code == "ok") {
+              this.tableData = res.data.records
+              this.total = res.data.total
+              this.loading = false
+            } else {
+              this.loading = false
+                this.$message({
+                message: res.msg,
+                type: "error"
+                });
+            }
+        },
+        error => {
+          this.loading = false
+            this.$message({
+                message: error,
+                type: "error"
+            });
+        });
+    },
     bills(audit, tr){
       if(tr) {
         this.code = ''
@@ -1881,6 +1989,33 @@ export default {
       }
       // console.log(this.addForm)
     },
+    cancel(e) {
+      this.$confirm('确定要撤回该请假申请吗', this.$t('other.prompts'), {
+          //type: 'warning'
+      }).then(() => {
+          this.http.post('/leave-sheet/cancel', {id:e.id},
+          res => {
+              if (res.code == "ok") {
+                  this.bills();
+                  this.$message({
+                      message: '操作成功',
+                      type: "success"
+                  });
+              } else {
+                  this.$message({
+                  message: res.msg,
+                  type: "error"
+                  });
+              }
+          },
+          error => {
+              this.$message({
+                  message: error,
+                  type: "error"
+              });
+          });
+      });
+    },
     deletes(e) {
       this.$confirm(this.$t('deleteit'), this.$t('other.prompts'), {
           //type: 'warning'

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet_h5/src/views/view/index.vue

@@ -47,7 +47,7 @@
                             </span>
                             <span v-else-if="item1.isDeptAudit==1">
-                                <span v-if="user.userNameNeedTranslate == '1'"><ww-open-data type='userName' :openid='item1.auditDeptName'></ww-open-data></span>
+                                <span v-if="user.userNameNeedTranslate == '1'"><ww-open-data type='departmentName' :openid='item1.auditDeptName'></ww-open-data></span>
                                 <span v-else>{{item1.auditDeptName}}</span>
                                 审核
                             </span>