Browse Source

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

ggooalice 2 years ago
parent
commit
678893d276
17 changed files with 542 additions and 91 deletions
  1. 15 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  2. 4 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectMainController.java
  3. 23 16
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  4. 106 16
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java
  5. 14 8
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java
  6. 6 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProviderInfo.java
  7. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectMainService.java
  8. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  9. 9 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectMainServiceImpl.java
  10. 77 20
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  11. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml
  12. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  13. 9 1
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/User.java
  14. 3 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  15. 98 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/resources/application-dev.yml
  16. 11 1
      fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/UserMapper.xml
  17. 160 16
      fhKeeper/formulahousekeeper/timesheet/src/views/provider/provider.vue

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

@@ -63,8 +63,8 @@ public class ProjectController {
     public HttpRespMsg getProjectPage(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, String keyword,
                                       @RequestParam(required = false, defaultValue = "1") Integer searchField,
                                       Integer projectId, //可以直接传projectId来进行匹配
-                                      Integer status, Integer category,Integer projectMainId) {
-        return projectService.getProjectPage(pageIndex, pageSize, keyword,searchField, status, category, projectId,projectMainId, request);
+                                      Integer status, Integer category,Integer projectMainId, String sortProp, Integer sortOrder) {
+        return projectService.getProjectPage(pageIndex, pageSize, keyword,searchField, status, category, projectId,projectMainId, sortProp, sortOrder, request);
     }
 
     @RequestMapping("/saveBatchAccoDegrees")
@@ -362,8 +362,8 @@ public class ProjectController {
     }
 
     @RequestMapping("/getGanttData")
-    public HttpRespMsg getGanttData(@RequestParam(required = false, defaultValue = "0") Integer type, String startDate, String endDate, String userId, Integer projectId, String groupName, HttpServletRequest request) {
-        return projectService.getGanttData(type, startDate, endDate, userId, projectId, groupName, request);
+    public HttpRespMsg getGanttData(@RequestParam(required = false, defaultValue = "0") Integer type, String startDate, String endDate, String userId, Integer projectId, String groupName,Integer taskType, HttpServletRequest request) {
+        return projectService.getGanttData(type, startDate, endDate, userId, projectId, groupName,taskType, request);
     }
 
     /**
@@ -517,5 +517,16 @@ public class ProjectController {
     public HttpRespMsg batchSetParticipation(HttpServletRequest request,String projectIdArray,String userIds){
         return projectService.batchSetParticipation(request,projectIdArray,userIds);
     }
+    @RequestMapping("/changeCurrentStage")
+    public HttpRespMsg changeCurrentStage(Integer projectId,String currentStage){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        Project project = projectService.getById(projectId);
+        project.setCurrentStage(currentStage);
+        if(projectService.updateById(project)){
+            return httpRespMsg;
+        }
+        httpRespMsg.setError("更新失败");
+        return httpRespMsg;
+    }
 }
 

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

@@ -56,5 +56,9 @@ public class ProjectMainController {
         projectMainService.removeById(id);
         return httpRespMsg;
     }
+    @RequestMapping("/getListByCategory")
+    public HttpRespMsg getListByCategory(Integer categoryId){
+        return projectMainService.getListByCategory(categoryId);
+    }
 }
 

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

@@ -905,17 +905,21 @@ public class ReportController {
                 //时间范围填报, 计算一下时长
                 try {
                     report.setStartTime(startTime).setEndTime(endTime);
-                    int excludeTime = 0;
-                    if (excludeTimeList.size() > 0) {
-                        for (TimeAutoExclude exclude : excludeTimeList) {
-                            if (exclude.getStartTime().compareTo(startTime) >= 0 && exclude.getEndTime().compareTo(endTime) <= 0) {
-                                //落在休息时间范围内,需要计算去掉的时间
-                                excludeTime += sdf.parse(exclude.getEndTime()).getTime() - sdf.parse(exclude.getStartTime()).getTime();
+                    long time = sdf.parse(report.getEndTime()).getTime() - sdf.parse(report.getStartTime()).getTime();
+                    //是否要扣除休息时间,如果是加班,则不需要扣除
+                    if (report.getIsOvertime() == 0) {
+                        int excludeTime = 0;
+                        if (excludeTimeList.size() > 0) {
+                            for (TimeAutoExclude exclude : excludeTimeList) {
+                                if (exclude.getStartTime().compareTo(startTime) >= 0 && exclude.getEndTime().compareTo(endTime) <= 0) {
+                                    //落在休息时间范围内,需要计算去掉的时间
+                                    excludeTime += sdf.parse(exclude.getEndTime()).getTime() - sdf.parse(exclude.getStartTime()).getTime();
+                                }
                             }
                         }
+                        time -= excludeTime;//去掉休息时间
                     }
-                    long time = sdf.parse(report.getEndTime()).getTime() - sdf.parse(report.getStartTime()).getTime();
-                    time -= excludeTime;//去掉休息时间
+
                     int minutes = (int)time/1000/60;
                     double hours = minutes*1.0f/60;
                     report.setWorkingTime(hours);
@@ -933,18 +937,21 @@ public class ReportController {
                 for (int t=0;t<array.size(); t++) {
                     JSONObject jsonObject = array.getJSONObject(t);
                     WorktimeItem item = JSONObject.toJavaObject(jsonObject, WorktimeItem.class);
-                    int excludeTime = 0;
-                    if (excludeTimeList.size() > 0) {
-                        for (TimeAutoExclude exclude : excludeTimeList) {
-                            if (exclude.getStartTime().compareTo(item.getStartTime()) >= 0 && exclude.getEndTime().compareTo(item.getEndTime()) <= 0) {
-                                //落在休息时间范围内,需要计算去掉的时间
-                                excludeTime += sdf.parse(exclude.getEndTime()).getTime() - sdf.parse(exclude.getStartTime()).getTime();
+                    long time = sdf.parse(item.getEndTime()).getTime() - sdf.parse(item.getStartTime()).getTime();
+                    //是否要扣除休息时间,如果是加班,则不需要扣除
+                    if (report.getIsOvertime() == 0) {
+                        int excludeTime = 0;
+                        if (excludeTimeList.size() > 0) {
+                            for (TimeAutoExclude exclude : excludeTimeList) {
+                                if (exclude.getStartTime().compareTo(item.getStartTime()) >= 0 && exclude.getEndTime().compareTo(item.getEndTime()) <= 0) {
+                                    //落在休息时间范围内,需要计算去掉的时间
+                                    excludeTime += sdf.parse(exclude.getEndTime()).getTime() - sdf.parse(exclude.getStartTime()).getTime();
+                                }
                             }
                         }
+                        time -= excludeTime;
                     }
 
-                    long time = sdf.parse(item.getEndTime()).getTime() - sdf.parse(item.getStartTime()).getTime();
-                    time -= excludeTime;
                     int minutes = (int)time/1000/60;
                     double hours = minutes*1.0f/60;
                     item.setTime(hours);

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

@@ -36,7 +36,7 @@ public class WeiXinCorpController {
     public static final String TRANSMIT_SERVER_GET_DEPTDETAIL = "http://47.101.180.183:10010/wxcorp/getCorpDeptDetail?accessToken=ACCESS_TOKEN&deptId=DEPTID";
     public static final String TRANSMIT_SERVER_GET_DEPTMEMBDETAIL = "http://47.101.180.183:10010/wxcorp/getDeptUserDetail?accessToken=ACCESS_TOKEN&deptId=DEPTID";
     public static final String TRANSMIT_SERVER_GET_CONTACT_TOKEN = "http://47.101.180.183:10010/wxcorp/getCorpConcactAccessToken?corpid=CORPID&contactSecret=CONTACT_SECRET";
-    public static final String TRANSMIT_SERVER_GET_USERDETAIL = "http://47.101.180.183:10010/wxcorp/getUserInfoFromTranServer?accessToken=ACCESS_TOKEN&userId=USERID";
+    public static final String TRANSMIT_SERVER_GET_USERDETAIL = "http://47.101.180.183:10010/wxcorp/getUserInfoFromTranServer?accessToken=ACCESS_TOKEN&userId=USERID&deptId=DEPTID";
 
     public static final String POST_CONVERT_USERID = "https://qyapi.weixin.qq.com/cgi-bin/batch/userid_to_openuserid?access_token=ACCESS_TOKEN";
 
@@ -372,12 +372,14 @@ public class WeiXinCorpController {
                         SysRole defaultRole = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id", companyId).eq("is_default", 1));
                         //通过通讯录secret获取到员工姓名
                         String remoteCorpConcactAccessToken = getRemoteCorpConcactAccessToken(wxCorpInfo);
-                        JSONObject userObj = remoteGetUserDetail(remoteCorpConcactAccessToken, corpWxUserId);
+                        org.json.JSONArray departmentArray = jsonObject.getJSONArray("department");
+                        Integer curUserWXDeptid = departmentArray.getInt(departmentArray.length() - 1);
+                        JSONObject userObj = remoteGetUserDetail(remoteCorpConcactAccessToken, corpWxUserId, curUserWXDeptid);
                         if (userObj.getInteger("errcode") == 0) {
                             //成功获取到通讯录的个人详情
                             Long id = SnowFlake.nextId();
                             JSONArray department = userObj.getJSONArray("department");
-                            Integer curUserWXDeptid = department.getInteger(department.size() - 1);
+                            curUserWXDeptid = getMaxDeptIdFromArray(department);
                             Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
 
                             User user = new User()
@@ -410,11 +412,25 @@ public class WeiXinCorpController {
                     //只有授权通讯录同步的,才有机会更新部门或者上级
                     if (!StringUtils.isEmpty(wxCorpInfo.getContactSecret())) {
                         String remoteCorpConcactAccessToken = getRemoteCorpConcactAccessToken(wxCorpInfo);
-                        JSONObject userObj = remoteGetUserDetail(remoteCorpConcactAccessToken, corpWxUserId);
+                        Integer curUserWXDeptid = 0;
+                        if (jsonObject.has("Department")) {
+                            Object departmentJ = jsonObject.get("Department");
+                            if (departmentJ instanceof String || departmentJ instanceof Integer) {
+                                curUserWXDeptid = jsonObject.getInt("Department");
+                            } else if (departmentJ instanceof org.json.JSONArray) {
+                                org.json.JSONArray departmentArray = jsonObject.getJSONArray("Department");
+                                curUserWXDeptid = getMaxDeptIdFromArray(departmentArray);
+                            }
+                        } else {
+                            //取主部门
+                            curUserWXDeptid = jsonObject.getInt("MainDepartment");
+                        }
+
+                        JSONObject userObj = remoteGetUserDetail(remoteCorpConcactAccessToken, corpWxUserId, curUserWXDeptid);
                         if (userObj.getInteger("errcode") == 0) {
                             //成功获取到通讯录的个人详情
                             JSONArray department = userObj.getJSONArray("department");
-                            Integer curUserWXDeptid = department.getInteger(department.size() - 1);
+                            curUserWXDeptid = getMaxDeptIdFromArray(department);
                             Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
 
                             User user = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", companyId).eq("corpwx_userid", corpWxUserId));
@@ -444,7 +460,30 @@ public class WeiXinCorpController {
                             }
                         }
                     }
-
+                } else if ("create_party".equals(changeType)) {
+                    //创建部门,调用中转服务接口获取部门详情
+                    String corpId = jsonObject.getString("AuthCorpId");
+                    Integer deptId = jsonObject.getInt("Id");
+                    Integer parentDeptId = jsonObject.getInt("ParentId");
+                    WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);
+                    if (wxCorpInfo != null && !StringUtils.isEmpty(wxCorpInfo.getContactSecret())) {
+                        String remoteCorpConcactAccessToken = getRemoteCorpConcactAccessToken(wxCorpInfo);
+                        Integer companyId = wxCorpInfo.getCompanyId();
+                        Department department = new Department();
+                        department.setCompanyId(companyId);
+                        department.setCorpwxDeptid(deptId);
+                        JSONObject deptJson = remoteGetDeptDetail(remoteCorpConcactAccessToken, deptId);
+                        if (deptJson != null) {
+                            //成功获取到了
+                            String name = deptJson.getString("name");
+                            department.setDepartmentName(name);
+                            Department parentDept = department.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", parentDeptId));
+                            if (parentDept != null) {
+                                department.setSuperiorId(parentDeptId);
+                            }
+                            departmentMapper.insert(department);
+                        }
+                    }
                 }
             }
         } catch (Exception e) {
@@ -455,6 +494,24 @@ public class WeiXinCorpController {
         return "success";
     }
 
+    private Integer getMaxDeptIdFromArray(JSONArray department) {
+        int deptId=0;
+        for (int i=0;i<department.size(); i++) {
+            if (deptId < department.getInteger(i)) {
+                deptId = department.getInteger(i);
+            }
+        }
+        return deptId;
+    }
+    private Integer getMaxDeptIdFromArray(org.json.JSONArray department) {
+        int deptId=0;
+        for (int i=0;i<department.length(); i++) {
+            if (deptId < department.getInt(i)) {
+                deptId = department.getInt(i);
+            }
+        }
+        return deptId;
+    }
 
 
     //"企业授权微信应用", notes = "企业授权微信应用")
@@ -1295,7 +1352,8 @@ public class WeiXinCorpController {
                 }
             }
             //检查用户是否已经存在
-            User oldUser = userMapper.selectOne(new QueryWrapper<User>().select("id, name").eq("corpwx_userid", curUserid).eq("company_id", companyId));
+            User oldUser = userMapper.selectOne(new QueryWrapper<User>().select("id, name, role_name").eq("corpwx_userid", curUserid).eq("company_id", companyId));
+
             if (oldUser == null) {
                 //先检查姓名+手机号是否存在,如果存在,则更新corpwxId
                 User sameNameUser = userMapper.selectOne(new QueryWrapper<User>().eq("name", user.getName()).eq("phone", user.getPhone()).eq("company_id", companyId).isNull("corpwx_userid").last("limit 1"));
@@ -1307,12 +1365,14 @@ public class WeiXinCorpController {
                 } else {
                     userMapper.insert(user);
                 }
-            } else if (oldUser.getRoleName().equals("超级管理员") && !oldUser.getName().equals(user.getName())){
-                //姓名不一致,需要更新
-                System.out.println("===更新超管姓名==="+user.getName());
-                user.setId(oldUser.getId());
-                oldUser.setName(user.getName());
-                userMapper.updateById(oldUser);
+            } else {
+                if (oldUser.getRoleName().equals("超级管理员") && !oldUser.getName().equals(user.getName())) {
+                    //姓名不一致,需要更新
+                    System.out.println("===更新超管姓名==="+user.getName());
+                    user.setId(oldUser.getId());
+                    oldUser.setName(user.getName());
+                    userMapper.updateById(oldUser);
+                }
             }
         }
 
@@ -1733,6 +1793,20 @@ public class WeiXinCorpController {
         return new HttpRespMsg();
     }
 
+    private JSONObject remoteGetDeptDetail(String accessToken, int deptId) {
+        String url = TRANSMIT_SERVER_GET_DEPTDETAIL.replace("ACCESS_TOKEN", accessToken).replace("DEPTID", ""+deptId);
+        String result = restTemplate.getForObject(url, String.class);
+        System.out.println("部门返回数据:"+result);
+        JSONObject resultObj = JSONObject.parseObject(JSONObject.parseObject(result).getString("data"));
+        if (resultObj.getInteger("errcode") == 0) {
+            JSONObject serverDept = resultObj.getJSONObject("department");
+            return serverDept;
+        } else {
+            System.err.println("同步获取部门详情报错:"+resultObj.toString());
+            return null;
+        }
+    }
+
     private JSONArray remoteGetDeptUserDetail(String accessToken, int deptId) {
         String url = TRANSMIT_SERVER_GET_DEPTMEMBDETAIL.replace("ACCESS_TOKEN", accessToken).replace("DEPTID", ""+deptId);
         String result = restTemplate.getForObject(url, String.class);
@@ -1741,8 +1815,9 @@ public class WeiXinCorpController {
         return obj;
     }
 
-    private JSONObject remoteGetUserDetail(String accessToken, String userId) {
-        String url = TRANSMIT_SERVER_GET_USERDETAIL.replace("ACCESS_TOKEN", accessToken).replace("USERID", userId);
+    private JSONObject remoteGetUserDetail(String accessToken, String userId, Integer deptId) {
+        String url = TRANSMIT_SERVER_GET_USERDETAIL.replace("ACCESS_TOKEN", accessToken).replace("USERID", userId)
+                        .replace("DEPTID", deptId+"");
         System.out.println("请求URL="+url);
         String result = restTemplate.getForObject(url, String.class);
         System.out.println("远程人员详情:"+result);
@@ -1821,7 +1896,22 @@ public class WeiXinCorpController {
     }
     //用于从中转服务器获取企业通讯录的单个人员详情
     @RequestMapping("/getUserInfoFromTranServer")
-    public HttpRespMsg getUserInfoFromTranServer(String accessToken, String userId) {
+    public HttpRespMsg getUserInfoFromTranServer(String accessToken, String userId, Integer deptId) {
+        String sampleOpenUserId = "woy9TkCAAAaAxThm4apuAlWID8HIxh_g";
+        if (userId.length() == sampleOpenUserId.length() && userId.startsWith("woy9Tk")) {
+            //用OpenUserId作userId的情况,需要获取部门下的全部人员进行转化获取
+            System.out.println("人员详情===去获取部门人员详情了===");
+            JSONArray transDeptUserInfo = getTransDeptUserInfo(accessToken, deptId);
+            for (int i=0;i<transDeptUserInfo.size(); i++) {
+                JSONObject userObj = transDeptUserInfo.getJSONObject(i);
+                if (userObj.getString("open_userid").equals(userId)) {
+                    HttpRespMsg msg = new HttpRespMsg();
+                    System.out.println("找到了=="+userObj);
+                    msg.data = userObj.toString();
+                    return msg;
+                }
+            }
+        }
         String url = GET_USER_INFO_URL.replace("ACCESS_TOKEN", accessToken).replace("USERID", userId);
         String result = restTemplate.getForObject(url, String.class);
         JSONObject obj = JSONObject.parseObject(result);

+ 14 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java

@@ -1,27 +1,27 @@
 package com.management.platform.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
-import java.time.LocalDate;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableField;
-import java.io.Serializable;
-import java.util.List;
-import java.util.Map;
-
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * 
  * </p>
  *
  * @author Seyason
- * @since 2022-07-07
+ * @since 2022-07-12
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -276,6 +276,12 @@ public class Project extends Model<Project> {
     @TableField("provider_names")
     private String providerNames;
 
+    /**
+     * 当前任务阶段
+     */
+    @TableField("current_stage")
+    private String currentStage;
+
 
     @Override
     protected Serializable pkVal() {

+ 6 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProviderInfo.java

@@ -1,14 +1,15 @@
 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 com.baomidou.mybatisplus.annotation.TableField;
-import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
+import java.io.Serializable;
+
 /**
  * <p>
  * 
@@ -28,13 +29,13 @@ public class ProviderInfo extends Model<ProviderInfo> {
     private Integer id;
 
     /**
-     * 客户编码
+     * 供应商编码
      */
     @TableField("provider_code")
     private String providerCode;
 
     /**
-     * 客户公司名称
+     * 供应商名称
      */
     @TableField("provider_name")
     private String providerName;

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

@@ -17,4 +17,6 @@ import javax.servlet.http.HttpServletRequest;
 public interface ProjectMainService extends IService<ProjectMain> {
 
     HttpRespMsg addOrMod(HttpServletRequest request,ProjectMain projectMain);
+
+    HttpRespMsg getListByCategory(Integer categoryId);
 }

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

@@ -20,7 +20,7 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg getProjectList(Integer forReport, HttpServletRequest request);
 
     HttpRespMsg getProjectPage(Integer pageIndex, Integer pageSize, String keyword, Integer searchField,
-                               Integer status, Integer category, Integer projectId,Integer projectMainId, HttpServletRequest request);
+                               Integer status, Integer category, Integer projectId,Integer projectMainId, String sortProp, Integer sortOrder, HttpServletRequest request);
 
     HttpRespMsg editProject(Integer id, String name, String code, String[] userIds, String inchargerId,
                             Integer isPublic,
@@ -91,7 +91,7 @@ public interface ProjectService extends IService<Project> {
 
     HttpRespMsg exportCustomerProjectInAndOut(HttpServletRequest request);
 
-    HttpRespMsg getGanttData(Integer type, String startDate, String endDate, String userId, Integer projectId, String groupName, HttpServletRequest request);
+    HttpRespMsg getGanttData(Integer type, String startDate, String endDate, String userId, Integer projectId, String groupName,Integer taskType, HttpServletRequest request);
 
     HttpRespMsg getProjectStagesCost(Integer pageIndex, Integer pageSize, Integer projectId, HttpServletRequest request);
 

+ 9 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectMainServiceImpl.java

@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 /**
  * <p>
@@ -69,4 +70,12 @@ public class ProjectMainServiceImpl extends ServiceImpl<ProjectMainMapper, Proje
         }
         return httpRespMsg;
     }
+
+    @Override
+    public HttpRespMsg getListByCategory(Integer categoryId) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        List<ProjectMain> projectMainList = projectMainMapper.selectList(new QueryWrapper<ProjectMain>().eq("category_id", categoryId));
+        httpRespMsg.data=projectMainList;
+        return httpRespMsg;
+    }
 }

+ 77 - 20
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -167,7 +167,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     //分页获取项目列表
     @Override
     public HttpRespMsg getProjectPage(Integer pageIndex, Integer pageSize, String keyword, Integer searchField,
-                                      Integer status, Integer category, Integer projectId,Integer projectMainId, HttpServletRequest request) {
+                                      Integer status, Integer category, Integer projectId,Integer projectMainId,  String sortProp, Integer sortOrder, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             //通过公司id获取该公司所有的项目列表
@@ -211,7 +211,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             if (projectId != null) {
                 queryWrapper.eq("id", projectId);
             }
-            queryWrapper.orderByDesc("is_public").orderByAsc("id");
+            if (StringUtils.isEmpty(sortProp)) {
+                queryWrapper.orderByDesc("is_public").orderByAsc("id");
+            } else {
+                if (sortOrder == 0) {
+                    //降序
+                    queryWrapper.orderByDesc(sortProp);
+                } else {
+                    queryWrapper.orderByAsc(sortProp);
+                }
+            }
+
             IPage<Project> projectIPage = projectMapper.selectPage(new Page<>(pageIndex, pageSize),
                     queryWrapper);
             List<Project> projectList = projectIPage.getRecords();
@@ -1564,7 +1574,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     }
 
     @Override
-    public HttpRespMsg getGanttData(Integer type, String startDate, String endDate, String targetUserId, Integer targetProjectId, String groupName, HttpServletRequest request) {
+    public HttpRespMsg getGanttData(Integer type, String startDate, String endDate, String targetUserId, Integer targetProjectId, String groupName,Integer taskType, HttpServletRequest request) {
         //根据人员权限来获取,
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
@@ -1706,9 +1716,25 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                     curItem.id = "请假_"+leaveSheetList.get(i).getId();
                     curItem.userId = leaveSheetList.get(i).getOwnerId();
-                    curItem.text = "请假";
+                    switch (leaveSheetList.get(i).getLeaveType()){
+                        case 1:curItem.text = "病假";
+                            break;
+                        case 2:curItem.text = "年假";
+                            break;
+                        case 3:curItem.text = "产假";
+                            break;
+                        case 4:curItem.text = "婚假";
+                            break;
+                        case 5:curItem.text = "丧家";
+                            break;
+                        case 6:curItem.text = "调休假";
+                            break;
+                        case 7:curItem.text = "陪产假";
+                            break;
+                        case 8:curItem.text = "其他";
+                            break;
+                    }
                     curItem.start_date = leaveSheetList.get(i).getStartDate().toString();
-
                     curItem.end_date =leaveSheetList.get(i).getEndDate().toString();
                     curItem.parent = lsLastItemId;
                     itemList.add(curItem);
@@ -1762,6 +1788,18 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         }
                     }
                 }
+                if (taskType!=null) {
+                    List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", user.getCompanyId()));
+                    List<Integer> collect = projectList.stream().map(Project::getId).collect(Collectors.toList());
+                    List<Task> tasks = taskMapper.selectList(new QueryWrapper<Task>().eq("task_type", taskType).in("project_id", collect));
+                    List filterPids = tasks.stream().map(Task::getProjectId).collect(Collectors.toList());
+                    if (projectIds == null) {
+                        projectIds = filterPids;
+                        if (projectIds.size() == 0) {
+                            projectIds.add(-1);
+                        }
+                    }
+                }
                 ganttData = projectMapper.getTaskPlanByProject(projectIds, startDate ,endDate, user.getCompanyId());
                 QueryWrapper<BusinessTrip> btQueryWrapper =new QueryWrapper<>();
                 QueryWrapper<BustripProject> bpQueryWrapper =new QueryWrapper<>();
@@ -3390,13 +3428,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         LocalDateTime sDate = LocalDate.parse(startDate).atTime(LocalTime.MIN);
         LocalDateTime eDate = LocalDate.parse(endDate).atTime(LocalTime.MIN);
         List<LocalDateTime> dateTimeList = getDays(sDate, eDate);
-        //去掉非工作日
-        long days =dateTimeList.size();
-        for (LocalDateTime localDateTime : dateTimeList) {
-            if(!WorkDayCalculateUtils.isWorkDay(localDateTime.toLocalDate())){
-                days-=1;
-            }
-        }
         User targetUser= userMapper.selectById(request.getHeader("token"));
         TimeType timeType = timeTypeMapper.selectById(targetUser.getCompanyId());
         Integer timeliness = timeType.getTimeliness();
@@ -3422,7 +3453,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         if(userId!=null){
             queryWrapper.eq("id",userId);
         }
-        if(deptIds!=null){
+        if(deptIds!=null && deptIds.size()>0){
             queryWrapper.in("department_id",deptIds);
         }
         queryWrapper.eq("is_active",1).orderByAsc("department_id");
@@ -3441,16 +3472,19 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(new QueryWrapper<LeaveSheet>().eq("company_id", targetUser.getCompanyId()));
         List<TimelinessRateVO> resultList=new ArrayList<>();
         for (User user : userList){
+            long days =dateTimeList.size();
             //请假的不参与及时率统计
             List<LeaveSheet> leaveSheets = leaveSheetList.stream().filter(ls -> ls.getOwnerId().equals(user.getId())
                     &&(ls.getStartDate().isAfter(ChronoLocalDate.from(sDate))||ls.getStartDate().isEqual(ChronoLocalDate.from(sDate)))
                     &&(ls.getEndDate().isBefore(ChronoLocalDate.from(eDate))||ls.getEndDate().isEqual(ChronoLocalDate.from(eDate)))).collect(Collectors.toList());
-            for (LeaveSheet leaveSheet : leaveSheets) {
-                Period next = Period.between(leaveSheet.getStartDate(),leaveSheet.getEndDate());
-                if(next.getDays()<1){
-                    days-=1;
-                }else {
-                    days-=next.getDays();
+            if(leaveSheets.size()>0){
+                for (LeaveSheet leaveSheet : leaveSheets) {
+                    Period next = Period.between(leaveSheet.getStartDate(),leaveSheet.getEndDate());
+                    if(next.getDays()<1){
+                        days-=1;
+                    }else {
+                        days-=next.getDays();
+                    }
                 }
             }
             TimelinessRateVO timelinessRateVO=new TimelinessRateVO();
@@ -3461,6 +3495,23 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 timelinessRateVO.setDepartmentName(first.get().getDepartmentName());
             }
             List<Map<String, Object>> mapList = listMap.get(user.getName());
+            //去填未填日报非工作日
+            for (LocalDateTime localDateTime : dateTimeList) {
+                if(mapList!=null){
+                    if(!WorkDayCalculateUtils.isWorkDay(localDateTime.toLocalDate())&&!mapList.stream().anyMatch(ml->{
+                        Object date = ml.get("createDate");
+                        LocalDate createDate = LocalDate.parse(String.valueOf(date));
+                        return createDate.isEqual(localDateTime.toLocalDate());
+                    })){
+                        days-=1;
+                    }
+                }else {
+                    if(!WorkDayCalculateUtils.isWorkDay(localDateTime.toLocalDate())){
+                        days-=1;
+                    }
+                }
+
+            }
             if(mapList!=null){
                 int num=0;
                 for (Map<String, Object> map : mapList) {
@@ -3477,9 +3528,15 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         break;
                     }
                     if(createTimeDate.isBefore(createDate)||createTimeDate.isEqual(createDate)){
-                        num++;
+                        if(!leaveSheets.stream().anyMatch(ls->(createTimeDate.isAfter(ls.getStartDate())||createTimeDate.isEqual(ls.getStartDate()))&&
+                                (createTimeDate.isBefore(ls.getEndDate())||createTimeDate.isEqual(ls.getEndDate())))){
+                            num++;
+                        }
                     }
                 }
+                System.out.println(user.getName());
+                System.out.println(days);
+                System.out.println(num);
                 BigDecimal bigDecimal=new BigDecimal(num);
                 BigDecimal divide;
                 if(days!=0){

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml

@@ -14,7 +14,7 @@ spring:
       location: C:/upload/
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://47.101.180.183:3306/man_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
+    url: jdbc:mysql://47.101.180.183:3306/man_hour_manager?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
     username: root
     password: HuoshiDB@2022
     hikari:

File diff suppressed because it is too large
+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml


+ 9 - 1
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/User.java

@@ -20,13 +20,14 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2021-08-26
+ * @since 2022-07-11
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
 public class User extends Model<User> {
 
+
     private static final long serialVersionUID=1L;
     /**
      * 主键 雪花算法生成
@@ -181,6 +182,13 @@ public class User extends Model<User> {
     @TableField(exist = false)
     private double totalHours;
 
+    /**
+     * 是否可以登录八爪鱼系统
+     */
+    @TableField("is_ops")
+    private Integer isOps;
+
+
     @Override
     protected Serializable pkVal() {
         return this.id;

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

@@ -131,6 +131,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             if (userVO.getRoleId() == null || userVO.getRoleId() == 0) {
                 httpRespMsg.setError("请先联系管理员为您分配角色");
                 return httpRespMsg;
+            } else if (userVO.getIsOps() == 0) {
+                httpRespMsg.setError("无权登录系统,请联系超级管理员为您开通运营权限");
+                return httpRespMsg;
             }
             //还要多返回一个公司名字
             userVO.setPassword("");

+ 98 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/resources/application-dev.yml

@@ -0,0 +1,98 @@
+server:
+  port: 10018
+  tomcat:
+    uri-encoding: utf-8
+    max-http-form-post-size: -1
+    connection-timeout: 18000000s
+spring:
+  servlet:
+    multipart:
+      # 配置上传文件的大小设置
+      # Single file max size  即单个文件大小
+      max-file-size: 100MB
+      max-request-size: 100MB
+  datasource:
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    url: jdbc:mysql://47.101.180.183:3306/man_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
+    username: root
+    password: HuoshiDB@2022
+    hikari:
+      maximum-pool-size: 10
+      minimum-idle: 3
+      max-lifetime: 30000
+      connection-test-query: SELECT 1
+    #######redis配置######
+    # redis
+    redis:
+      host: 127.0.0.1
+      port: 6379
+      timeout: 3
+      # password:
+      pool:
+        minIdle: 1
+        maxIdle: 10
+        maxWait: 3
+        maxActive: 8
+    ####全局配置时间返回格式#####
+  jackson:
+    #参数意义:
+    #JsonInclude.Include.ALWAYS       默认
+    #JsonInclude.Include.NON_DEFAULT   属性为默认值不序列化
+    #JsonInclude.Include.NON_EMPTY     属性为 空(””) 或者为 NULL 都不序列化
+    #JsonInclude.Include.NON_NULL      属性为NULL  不序列化
+    default-property-inclusion: ALWAYS
+    time-zone: GMT+8
+    date-format: yyyy-MM-dd HH:mm:ss
+
+##########日志配置
+logging:
+  level:
+    root: info
+    org.mybatis: error
+    java.sql: error
+    org.springframework.web: error
+    #打印sql语句
+    com.management.platform.mapper: error
+  path: /log/
+  file: octopus.log
+##########
+mybatis-plus:
+  #  mapper-locations: classpath:mapper/*/*.xml
+  #  #实体扫描,多个package用逗号或者分号分隔
+  #  typeAliasesPackage: com.hssx.cloudmodel
+  global-config:
+    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
+    id-type: 0
+    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
+    field-strategy: 2
+    db-column-underline: true
+    refresh-mapper:
+    #################插入和更新非null判断
+    db-config:
+      insert-strategy: not_null
+      update-strategy: not_null
+  configuration:
+    map-underscore-to-camel-case: true
+    cache-enabled: false
+######mybstis配置#######
+mybatis:
+  type-aliases-package: com.management.platform.entity
+  mapper-locations: mappers/*Mapper.xml
+#####配置图片上传路径####
+upload:
+  path: /www/staticproject/timesheet/upload/
+
+##actuator健康检查配置
+management:
+  security:
+    enabled:false:
+  server:
+    port: 10019
+  #  endpoints:
+  #    web:
+  #      exposure:
+  #        include: "*"
+
+  health:
+    redis:
+      enabled: false

+ 11 - 1
fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/UserMapper.xml

@@ -27,12 +27,22 @@
         <result column="dingding_userid" property="dingdingUserid" />
         <result column="dingding_unionid" property="dingdingUnionid" />
         <result column="corpwx_userid" property="corpwxUserid" />
+        <result column="induction_date" property="inductionDate" />
         <result column="inactive_date" property="inactiveDate" />
+        <result column="position" property="position" />
+        <result column="report_status" property="reportStatus" />
+        <result column="superior_id" property="superiorId" />
+        <result column="plate1" property="plate1" />
+        <result column="plate2" property="plate2" />
+        <result column="plate3" property="plate3" />
+        <result column="plate4" property="plate4" />
+        <result column="plate5" property="plate5" />
+        <result column="is_ops" property="isOps" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, name, phone, password, portrait_url, create_time, role, company_id, department_id, department_cascade, cost, month_cost, salary_type, manage_dept_id, color, is_active, wx_openid, role_id, role_name, cost_apply_date, dingding_userid, dingding_unionid, corpwx_userid, inactive_date
+        id, name, phone, password, portrait_url, create_time, role, company_id, department_id, department_cascade, cost, month_cost, salary_type, manage_dept_id, color, is_active, wx_openid, role_id, role_name, cost_apply_date, dingding_userid, dingding_unionid, corpwx_userid, induction_date, inactive_date, position, report_status, superior_id, plate1, plate2, plate3, plate4, plate5, is_ops
     </sql>
     <!--单独分页获取人员-->
     <select id="getUserByDepartment" resultType="java.util.Map">

+ 160 - 16
fhKeeper/formulahousekeeper/timesheet/src/views/provider/provider.vue

@@ -14,8 +14,9 @@
                     </div>
                 </el-form-item>
                 <el-form-item style="float:right;">
-                    <el-link type="primary" :underline="false" @click="handleAdd(-1,null)">新增供应商</el-link>
-                    <el-link type="primary" :underline="false" @click="intocustomerRatio">批量导入供应商</el-link>
+                    <el-link type="primary" :underline="false" @click="handleAdd(-1,null)" style="margin-right: 10px">新增供应商</el-link>
+                    <el-link type="primary" :underline="false" @click="intocustomerRatio" style="margin-right: 10px">批量导入供应商</el-link>
+                    <el-link type="primary" :underline="false" @click="showClfDialog = true">分类管理</el-link>
                 </el-form-item>
             </el-form>
         </el-col>
@@ -28,18 +29,13 @@
                     </template> -->
             </el-table-column>
             <el-table-column prop="providerCode" label="供应商编码"  width="200"></el-table-column>
-            <el-table-column prop="providerName" label="供应商名称" width="200">
-            </el-table-column>
-            <el-table-column prop="contactName" label="联系人"  width="120">
-            </el-table-column>
-            <el-table-column prop="contactPhone" label="联系电话"  width="150">
-            </el-table-column>
-            <el-table-column prop="email" label="邮箱"  width="180">
-            </el-table-column>
-            <el-table-column prop="address" label="地址" width="200">
-            </el-table-column>
-            <el-table-column prop="remark" label="备注" width="300">
-            </el-table-column>
+            <el-table-column prop="providerName" label="供应商名称" width="200"></el-table-column>
+            <el-table-column prop="providerCategoryName" label="供应商分类" width="200"></el-table-column>
+            <el-table-column prop="contactName" label="联系人"  width="120"></el-table-column>
+            <el-table-column prop="contactPhone" label="联系电话"  width="150"></el-table-column>
+            <el-table-column prop="email" label="邮箱"  width="180"></el-table-column>
+            <el-table-column prop="address" label="地址" width="200"></el-table-column>
+            <el-table-column prop="remark" label="备注" width="300"></el-table-column>
             
             <el-table-column label="操作" width="150" fixed="right">
                 <template slot-scope="scope">
@@ -72,6 +68,11 @@
                 <el-form-item label="供应商名称" prop="providerName">
                     <el-input v-model="addForm.providerName" :max="20" placeholder="请输入供应商名称" clearable></el-input>
                 </el-form-item>
+                <el-form-item label="供应商分类" prop="providerCategoryId">
+                    <el-select v-model="addForm.providerCategoryId" filterable placeholder="请选择供应商分类" clearable @change="supplierChange">
+                        <el-option v-for="item in baseClfList" :key="item.id" :label="item.providerCategoryName" :value="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
                 <el-form-item label="联系人" prop="contactName">
                     <el-input v-model="addForm.contactName" :max="20" placeholder="请输入供应商联系人" clearable></el-input>
                 </el-form-item>
@@ -115,6 +116,41 @@
             </el-upload>
             </p>
         </el-dialog>
+
+        <!-- 分类管理 -->
+        <el-dialog title="供应商分类条目管理" show-header="false" v-if="showClfDialog" :visible.sync="showClfDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
+            <el-table :data="baseClfList" highlight-current-row  height="400" style="width: 100%;">
+            <el-table-column type="index" width="60" label="序号">
+                <template slot-scope="scope" >
+                        {{scope.$index+1+(page-1)*size}}
+                    </template>
+            </el-table-column>
+            <el-table-column prop="providerCategoryName" label="名称" ></el-table-column>
+            <el-table-column label="操作" width="150">
+                <template slot-scope="scope" >
+                    <el-button size="small" type="primary" @click="addNewClf(scope.row)">编辑</el-button>
+                    <el-button size="small" type="danger" @click="deleteClf(scope.row)">删除</el-button>
+                </template>
+            </el-table-column>
+
+            </el-table>
+            <div slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="showClfDialog = false" >关闭</el-button>
+                <el-button type="primary" @click="addNewClf()" >新增分类项</el-button>
+            </div>
+        </el-dialog>
+        <!-- 新增/编辑 分类条目 -->
+        <el-dialog title="新增/修改分类条目" v-if="addClfDialog" :visible.sync="addClfDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
+            <el-form ref="form2" :model="addClf" :rules="rules" label-width="100px">
+                <el-form-item label="主项目名称" prop="name">
+                    <el-input v-model="addClf.providerCategoryName" placeholder="请输入主项目名称" clearable></el-input>
+                </el-form-item>
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button @click.native="addClfDialog = false">取消</el-button>
+                <el-button type="primary" @click="submitClf" :loading="addLoading">提交</el-button>
+            </div>
+        </el-dialog>
     </section>
 </template>
 <style scoped>
@@ -175,7 +211,11 @@
                 importResultMsg:null,
                 showImportResult:false,
                 selectArr: [],
-                delLoading: false
+                delLoading: false,
+                showClfDialog: false,
+                baseClfList: [],
+                addClf: {providerCategoryName: '', companyId: ''},
+                addClfDialog: false
             };
         },
         // 过滤器
@@ -200,6 +240,109 @@
             }
         },
         methods: {
+            // 新增/编辑 分类条目
+            addNewClf(row) {
+                this.addClfDialog = true;
+                if (row == null) {
+                    this.addClf = {}
+                } else {
+                    this.addClf = row;
+                }
+            },
+            // 删除分类条目
+            deleteClf(row) {
+                this.$confirm("该操作可能造成已有数据丢失,确定要删除吗?","删除分类条目", {
+                    confirmButtonText: "确定",
+                    cancelButtonText: "取消",
+                    type: "warning"
+                })
+                .then(() => {
+                    this.listLoading = true;
+                    this.http.post('/provider-category/delete',{ 
+                        id: row.id 
+                    },
+                    res => {
+                        this.listLoading = false;
+                        if (res.code == "ok") {
+                            this.$message({
+                                message: "删除成功",
+                                type: "success"
+                            });
+                            this.getClfConfigList();
+                        } else {
+                            this.$message({
+                                message: res.msg,
+                                type: "error"
+                            });
+                        }
+                    },
+                    error => {
+                        this.listLoading = false;
+                        this.$message({
+                            message: error,
+                            type: "error"
+                        });
+                     });
+                })
+                .catch(() => {});
+            },
+            // 获取分类条目
+            getClfConfigList() {
+                this.http.get('/provider-category/list',
+                res => {
+                    if (res.code == "ok") {
+                       this.baseClfList = res.data;
+                       console.log("获取分类条目",res.data);
+                       this.$forceUpdate();
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });  
+            },
+            supplierChange(e) {
+                console.log(this.addForm.providerCategoryId)
+                if(this.addForm.providerCategoryId) {
+                    for(var i in this.baseClfList) {
+                        if(this.baseClfList[i].id == this.addForm.providerCategoryId) {
+                            this.addForm.providerCategoryName = this.baseClfList[i].providerCategoryName
+                        }
+                    }
+                } else {
+                    this.addForm.providerCategoryName = ''
+                }
+            },
+            // 提交分类
+            submitClf() {
+                console.log(this.addClf)
+                this.http.post('/provider-category/addOrMod',this.addClf,
+                    res => {
+                        if (res.code == "ok") {
+                            this.addClfDialog = false;
+                            // this.baseClfList = res.data;
+                            this.getClfConfigList()
+                        } else {
+                            this.$message({
+                                message: res.msg,
+                                type: "error"
+                            });
+                        }
+                    },
+                    error => {
+                        this.$message({
+                            message: error,
+                            type: "error"
+                        });
+                    });
+            },
             // 批量删除
             selectionChange(selection){
                 console.log('sel',selection);
@@ -566,7 +709,8 @@
             };
         },
         mounted() {
-            this.getList();
+            this.getClfConfigList()
+            this.getList()
         }
     };
 </script>