Pārlūkot izejas kodu

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

cs 2 gadi atpakaļ
vecāks
revīzija
9e599e0537

+ 2 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ExpenseTypeController.java

@@ -41,7 +41,7 @@ public class ExpenseTypeController {
     public HttpRespMsg getList() {
         User user = userMapper.selectById(request.getHeader("token"));
         HttpRespMsg msg = new HttpRespMsg();
-        msg.data=expenseTypeMapper.selectList(new QueryWrapper<ExpenseType>().eq("company_id",user.getCompanyId()));
+        msg.data=expenseTypeMapper.selectList(new QueryWrapper<ExpenseType>().eq("company_id",user.getCompanyId()).orderByDesc("mainType"));
         return msg;
     }
 
@@ -71,11 +71,7 @@ public class ExpenseTypeController {
                 //msg.setError("该名称已存在");
                 msg.setError(MessageUtils.message("Company.nameRepeat"));
             } else {
-                //检查名称是否有变化
-                ExpenseType oldSetting = expenseTypeMapper.selectById(setting.getId());
-                if (!setting.getTypeName().equals(oldSetting.getTypeName())) {
-                    expenseTypeMapper.updateById(setting);
-                }
+                expenseTypeMapper.updateById(setting);
                 msg.data = expenseTypeMapper.selectList(new QueryWrapper<ExpenseType>().eq("company_id", companyId));
             }
         }

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -484,6 +484,11 @@ public class ProjectController {
         return projectService.getGanttData(type, startDate, endDate, userId, projectId, groupName,taskType, request);
     }
 
+    @RequestMapping("/getGanttDataNew")
+    public HttpRespMsg getGanttDataNew(@RequestParam(required = false, defaultValue = "0") Integer type, String startDate, String endDate, String userId, Integer projectId, String groupName,Integer taskType, HttpServletRequest request) {
+        return projectService.getGanttDataNew(type, startDate, endDate, userId, projectId, groupName,taskType, request);
+    }
+
     /**
      *
      * @return

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

@@ -1011,46 +1011,46 @@ public class WeiXinCorpController {
                         //生成费用报销默认条目
                         String[] expenseTypes = Constant.EXPENSE_TYPES;
                         List<String> commonly = new ArrayList<>();
-                        //commonly.add("材料费");
-                        commonly.add(MessageUtils.message("entry.materialCost"));
-                        //commonly.add("办公用品");
-                        commonly.add(MessageUtils.message("entry.workCost"));
-                        //commonly.add("培训费");
-                        commonly.add(MessageUtils.message("entry.trainCost"));
-                        //commonly.add("打印费");
-                        commonly.add(MessageUtils.message("entry.printCost"));
-                        //commonly.add("快递费");
-                        commonly.add(MessageUtils.message("entry.expressCost"));
-                        //commonly.add("制作费");
-                        commonly.add(MessageUtils.message("entry.makeCost"));
-                        //commonly.add("律师费");
-                        commonly.add(MessageUtils.message("entry.lawyerCost"));
-                        //commonly.add("水费");
-                        commonly.add(MessageUtils.message("entry.waterCost"));
-                        //commonly.add("电费");
-                        commonly.add(MessageUtils.message("entry.electricCost"));
-                        //commonly.add("团建费");
-                        commonly.add(MessageUtils.message("entry.leagueCost"));
-                        //commonly.add("其他");
-                        commonly.add(MessageUtils.message("entry.other"));
+                        commonly.add("材料费");
+                        //commonly.add(MessageUtils.message("entry.materialCost"));
+                        commonly.add("办公用品");
+                        //commonly.add(MessageUtils.message("entry.workCost"));
+                        commonly.add("培训费");
+                        //commonly.add(MessageUtils.message("entry.trainCost"));
+                        commonly.add("打印费");
+                        //commonly.add(MessageUtils.message("entry.printCost"));
+                        commonly.add("快递费");
+                        //commonly.add(MessageUtils.message("entry.expressCost"));
+                        commonly.add("制作费");
+                        //commonly.add(MessageUtils.message("entry.makeCost"));
+                        commonly.add("律师费");
+                        //commonly.add(MessageUtils.message("entry.lawyerCost"));
+                        commonly.add("水费");
+                        //commonly.add(MessageUtils.message("entry.waterCost"));
+                        commonly.add("电费");
+                        //commonly.add(MessageUtils.message("entry.electricCost"));
+                        commonly.add("团建费");
+                        //commonly.add(MessageUtils.message("entry.leagueCost"));
+                        commonly.add("其他");
+                        //commonly.add(MessageUtils.message("entry.other"));
                         List<String> travel  = new ArrayList<>();
-                        //travel.add("城市间交通费");
-                        travel.add(MessageUtils.message("entry.cityTrafficCost"));
-                        //travel.add("住宿费");
-                        travel.add(MessageUtils.message("entry.liveCost"));
-                        //travel.add("伙食补助费");
-                        travel.add(MessageUtils.message("entry.eatCost"));
-                        //travel.add("市内交通费");
-                        travel.add(MessageUtils.message("entry.insideCityCost"));
-                        //travel.add("其他差旅费");
-                        travel.add(MessageUtils.message("entry.otherLiveTraCost"));
+                        travel.add("城市间交通费");
+                        //travel.add(MessageUtils.message("entry.cityTrafficCost"));
+                        travel.add("住宿费");
+                        //travel.add(MessageUtils.message("entry.liveCost"));
+                        travel.add("伙食补助费");
+                        //travel.add(MessageUtils.message("entry.eatCost"));
+                        travel.add("市内交通费");
+                        //travel.add(MessageUtils.message("entry.insideCityCost"));
+                        travel.add("其他差旅费");
+                        //travel.add(MessageUtils.message("entry.otherLiveTraCost"));
                         List<String> outsource = new ArrayList<>();
-                        //outsource.add("项目外包费");
-                        outsource.add(MessageUtils.message("entry.projectCost"));
-                        //outsource.add("劳务外包费");
-                        outsource.add(MessageUtils.message("entry.labourCost"));
-                        //outsource.add("其他外包费");
-                        outsource.add(MessageUtils.message("entry.OtherOutsourceCost"));
+                        outsource.add("项目外包费");
+                        //outsource.add(MessageUtils.message("entry.projectCost"));
+                        outsource.add("劳务外包费");
+                        //outsource.add(MessageUtils.message("entry.labourCost"));
+                        outsource.add("其他外包费");
+                        //outsource.add(MessageUtils.message("entry.OtherOutsourceCost"));
                         List<ExpenseType> expenseTypeList=new ArrayList<>();
                         for (String expenseType : expenseTypes) {
                             ExpenseType item=new ExpenseType();

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/GanttDataItem.java

@@ -2,6 +2,8 @@ package com.management.platform.entity.vo;
 
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class GanttDataItem {
     public String id;
@@ -16,4 +18,6 @@ public class GanttDataItem {
     public Integer projectId;
     public String render;
     public String type;
+    public String color;
+    public List<GanttDataItem> children;
 }

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

@@ -210,6 +210,7 @@ public interface ProjectService extends IService<Project> {
 
     HttpRespMsg exportDeptPartInProjects(String month, Integer departmentId, HttpServletRequest request);
 
-
     HttpRespMsg exportReportTimelinessRateByQuarter(HttpServletRequest request, String year, Integer quarter);
+
+    HttpRespMsg getGanttDataNew(Integer type, String startDate, String endDate, String userId, Integer projectId, String groupName, Integer taskType, HttpServletRequest request);
 }

+ 450 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -7,9 +7,6 @@ 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
 import com.management.platform.entity.*;
 import com.management.platform.entity.vo.*;
 import com.management.platform.mapper.*;
@@ -34,13 +31,10 @@ import org.apache.poi.xssf.usermodel.XSSFCell;
 import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.apache.tomcat.jni.Local;
 import org.assertj.core.util.Lists;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Isolation;
-import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -54,6 +48,7 @@ import java.math.BigDecimal;
 import java.sql.Timestamp;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.Duration;
 import java.time.LocalDate;
@@ -65,8 +60,6 @@ import java.time.temporal.TemporalAdjusters;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static java.time.format.DateTimeFormatter.ISO_DATE;
-
 
 /**
  * <p>
@@ -2350,6 +2343,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     curItem.id = "请假_"+leaveSheetList.get(i).getId();
                     curItem.userId = leaveSheetList.get(i).getOwnerId();
                     switch (leaveSheetList.get(i).getLeaveType()){
+                        //case 0:curItem.text = "事假";
+                        case 0:curItem.text = MessageUtils.message("leave.thing");
+                            break;
                         //case 1:curItem.text = "病假";
                         case 1:curItem.text = MessageUtils.message("leave.illness");
                             break;
@@ -7855,6 +7851,23 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 break;
         }
         HttpRespMsg msg = getUserReportTimelinessRate(request, startDate, endDate, null, null, null, null);
+        try {
+            List<String> monthList = SplitDateUtil.doDateByStatisticsType("month", startDate, endDate);
+            for (int i = 0; i < monthList.size(); i++) {
+                String sDate = monthList.get(i);
+                String eDate = monthList.get(i + 1);
+                i++;
+                List<String> weekList = SplitDateUtil.doDateByStatisticsType("week", sDate, eDate);
+                for (int i1 = 0; i1 < weekList.size(); i1++) {
+                    String sDate1 = weekList.get(i1);
+                    String eDate1 = weekList.get(i1 + 1);
+                    i1++;
+                    System.out.println(sDate1+"-----"+eDate1);
+                }
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
         HashMap map= (HashMap) msg.data;
         List<TimelinessRateVO> list = (List<TimelinessRateVO>) map.get("list");
         //String[] s={"人员","工号","部门","填报及时率"};
@@ -7885,4 +7898,433 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return httpRespMsg;
     }
 
+    @Override
+    public HttpRespMsg getGanttDataNew(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);
+        List<String> userIds = new ArrayList<>();
+        List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部项目");
+        List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
+        List<User> AllUser = userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId()));
+        if (functionList.size() == 0) {
+            //看看是部门经理还是项目负责人
+            if (user.getManageDeptId() != null && user.getManageDeptId() != 0) {
+                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("department_id", user.getManageDeptId()));
+                userIds = userList.stream().map(User::getId).collect(Collectors.toList());
+            } else {
+                //检查是否是项目负责人
+                List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("incharger_id", user.getId()));
+                if (projectList.size() > 0) {
+                    List<Integer> collect = projectList.stream().map(Project::getId).collect(Collectors.toList());
+                    List<Participation> participationList = participationMapper.selectList(new QueryWrapper<Participation>().in("project_id", collect));
+                    userIds = participationList.stream().map(Participation::getUserId).collect(Collectors.toList());
+                }
+                //把自己加进去
+                if (!userIds.contains(user.getId())) {
+                    userIds.add(user.getId());
+                }
+            }
+        } else {
+            //查看全部
+            List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId()));
+            userIds = userList.stream().map(User::getId).collect(Collectors.toList());
+        }
+        if (!StringUtils.isEmpty(targetUserId)) {
+            userIds = userIds.stream().filter(u->u.equals(targetUserId)).collect(Collectors.toList());
+        }
+        HttpRespMsg msg = new HttpRespMsg();
+        List<GanttDataItem> itemList = new ArrayList<>();
+
+        List<Integer> projectIds = null;
+        if (targetProjectId != null) {
+            projectIds = new ArrayList<>();
+            projectIds.add(targetProjectId);
+        } else {
+            if (functionList.size() == 0) {
+                //普通员工只看自己相关的
+                List<Participation> participationList
+                        = participationMapper.selectList(new QueryWrapper<Participation>().in("user_id", userIds));
+                projectIds = participationList.stream().map(Participation::getProjectId).collect(Collectors.toList());
+            } else {
+                projectIds = null;//查看全部的
+            }
+        }
+        List<Map> ganttData = null;
+        if (userIds.size() > 0) {
+            if (type == 0) {
+                String lsLastItemId = null;
+                String btLastItemId = null;
+                //按人员获取
+                ganttData = projectMapper.getTaskPlanByMemb(userIds, startDate ,endDate, user.getCompanyId());
+                QueryWrapper<LeaveSheet> lsQueryWrapper=new QueryWrapper();
+                lsQueryWrapper.in("owner_id", userIds);
+                if (startDate != null && endDate != null) {
+                    lsQueryWrapper.le("start_date", endDate).ge("end_date", startDate);
+                }
+                List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(lsQueryWrapper);
+                QueryWrapper<BusinessTrip> btQueryWrapper =new QueryWrapper<>();
+                btQueryWrapper.in("owner_id", userIds);
+                if (startDate != null && endDate != null) {
+                    btQueryWrapper.le("start_date", endDate).ge("end_date", startDate);
+                }
+                List<BusinessTrip> businessTripList = businessTripMapper.selectList(btQueryWrapper);
+                for(Department department:departmentList){
+                    GanttDataItem parent = new GanttDataItem();
+                    parent.id=department.getDepartmentId().toString();
+                    parent.time = 0;
+                    parent.text=department.getDepartmentName();
+                    parent.type="department";
+                    if(department.getSuperiorId()!=null){
+                        parent.parent=String.valueOf(department.getSuperiorId());
+                        parent.type="milestone";
+                    }
+                    parent= getGanttDataItemList(parent, department, departmentList);
+                    Set set=new HashSet();
+                    if(set.add(parent.id)&&department.getSuperiorId()==null){
+                        itemList.add(parent);
+                    }
+                }
+                //加上全部的人员(不含已离职),不要和已有任务的人员重复
+                List<String> extraUidList = new ArrayList<>();
+                for (String uid : userIds) {
+                    boolean find = false;
+                    for (Map userMap : ganttData) {
+                        String taskUid = (String)userMap.get("user_id");
+                        if (taskUid.equals(uid)) {
+                            find = true;
+                            break;
+                        }
+                    }
+                    if (!find) {
+                        extraUidList.add(uid);
+                    }
+                }
+                if (extraUidList.size() > 0) {
+                    List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("id", extraUidList).eq("is_active", 1));
+                    for (User u : userList) {
+                        GanttDataItem userGantt = new GanttDataItem();
+                        userGantt.id = u.getId();
+                        userGantt.userId = u.getId();
+                        userGantt.text = u.getName();
+                        userGantt.render = "split";
+                        userGantt.start_date = null;
+                        userGantt.end_date = null;
+                        userGantt.time = 0;
+                        userGantt.color=u.getColor();
+                        userGantt.parent=String.valueOf(u.getDepartmentId());
+                        userGantt.children=new ArrayList<>();
+                        userGantt.type="user";
+                        itemList=getUserGanttDataItemList(userGantt,itemList);
+                    }
+                }
+
+
+                for(int i=0;i<leaveSheetList.size();i++){
+                    GanttDataItem curItem = new GanttDataItem();;
+                    if (!leaveSheetList.get(i).getOwnerId().equals(lsLastItemId)) {
+                        //抽取父级对象,人员名称
+                        int finalI = i;
+                        Optional<User> first = AllUser.stream().filter(us -> us.getId().equals(leaveSheetList.get(finalI).getOwnerId())).findFirst();
+                        Integer departmentId =null;
+                        if(first.isPresent()){
+                            departmentId=first.get().getDepartmentId();
+                        }
+                        System.out.println("====================="+departmentId+"======================");
+                        GanttDataItem parent = new GanttDataItem();
+                        parent.id = leaveSheetList.get(i).getOwnerId();
+                        parent.userId = leaveSheetList.get(i).getOwnerId();
+                        parent.text = leaveSheetList.get(i).getOwnerName();
+                        parent.render = "split";
+                        parent.start_date = leaveSheetList.get(i).getStartDate().toString();
+                        parent.end_date = leaveSheetList.get(i).getEndDate().toString();
+                        parent.time = 0;
+                        parent.parent=String.valueOf(departmentId);
+                        lsLastItemId =leaveSheetList.get(i).getOwnerId();
+                    }
+                    curItem.id = "请假_"+leaveSheetList.get(i).getId();
+                    curItem.userId = leaveSheetList.get(i).getOwnerId();
+                    switch (leaveSheetList.get(i).getLeaveType()){
+                        //case 0:curItem.text = "事假";
+                        case 0:curItem.text = MessageUtils.message("leave.thing");
+                            break;
+                        //case 1:curItem.text = "病假";
+                        case 1:curItem.text = MessageUtils.message("leave.illness");
+                            break;
+                        //case 2:curItem.text = "年假";
+                        case 2:curItem.text = MessageUtils.message("leave.year");
+                            break;
+                        //case 3:curItem.text = "产假";
+                        case 3:curItem.text = MessageUtils.message("leave.maternity");
+                            break;
+                        //case 4:curItem.text = "婚假";
+                        case 4:curItem.text = MessageUtils.message("leave.marry");
+                            break;
+                        //case 5:curItem.text = "丧假";
+                        case 5:curItem.text = MessageUtils.message("leave.die");
+                            break;
+                        //case 6:curItem.text = "调休假";
+                        case 6:curItem.text = MessageUtils.message("leave.compensatory");
+                            break;
+                        //case 7:curItem.text = "陪产假";
+                        case 7:curItem.text = MessageUtils.message("leave.paternity");
+                            break;
+                        //case 8:curItem.text = "其他";
+                        case 8:curItem.text = MessageUtils.message("leave.other");
+                            break;
+                    }
+                    curItem.start_date = leaveSheetList.get(i).getStartDate().toString();
+                    curItem.end_date =leaveSheetList.get(i).getEndDate().toString();
+                    curItem.parent = lsLastItemId;
+                    curItem.children=new ArrayList<>();
+                    itemList=getUserGanttDataItemList(curItem,itemList);
+                    lsLastItemId = leaveSheetList.get(i).getOwnerId();
+                }
+                for(int i=0;i<businessTripList.size();i++){
+                    GanttDataItem curItem = new GanttDataItem();;
+                    if (!businessTripList.get(i).getOwnerId().equals(btLastItemId)) {
+                        //抽取父级对象,人员名称
+                        int finalI = i;
+                        Optional<User> first = AllUser.stream().filter(us -> us.getId().equals(businessTripList.get(finalI).getOwnerId())).findFirst();
+                        Integer departmentId =null;
+                        if(first.isPresent()){
+                            departmentId=first.get().getDepartmentId();
+                        }
+                        GanttDataItem parent = new GanttDataItem();
+                        parent.id = businessTripList.get(i).getOwnerId();
+                        parent.userId = businessTripList.get(i).getOwnerId();
+                        parent.text = businessTripList.get(i).getOwnerName();
+                        parent.render = "split";
+                        parent.start_date = businessTripList.get(i).getStartDate().toString();
+                        parent.end_date = businessTripList.get(i).getEndDate().toString();
+                        parent.time = 0;
+                        parent.parent=String.valueOf(departmentId);
+                        btLastItemId =businessTripList.get(i).getOwnerId();
+                    }
+                    //curItem.id = "出差_"+businessTripList.get(i).getId();
+                    curItem.id = MessageUtils.message("leave.busTra") + "_" + businessTripList.get(i).getId();
+                    curItem.userId = businessTripList.get(i).getOwnerId();
+                    //curItem.text = "出差";
+                    curItem.text = MessageUtils.message("leave.busTra");
+                    curItem.start_date = businessTripList.get(i).getStartDate().toString();
+
+                    curItem.end_date =businessTripList.get(i).getEndDate().toString();
+                    curItem.parent = btLastItemId;
+                    curItem.children=new ArrayList<>();
+                    itemList=getUserGanttDataItemList(curItem,itemList);
+                    btLastItemId = businessTripList.get(i).getOwnerId();
+                }
+            } else {
+                //按照项目获取
+                String btLastItemId = null;
+                GanttDataItem btLastParentItem=null;
+                if (!StringUtils.isEmpty(groupName)) {
+                    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<TaskGroup> taskGroups = taskGroupMapper.selectList(new QueryWrapper<TaskGroup>().eq("name", groupName).in("project_id", collect));
+                    List filterPids = taskGroups.stream().map(TaskGroup::getProjectId).collect(Collectors.toList());
+                    if (projectIds == null) {
+                        projectIds = filterPids;
+                        if (projectIds.size() == 0) {
+                            projectIds.add(-1);
+                        }
+                    }
+                }
+                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<>();
+                btQueryWrapper.in("owner_id", userIds);
+                if (startDate != null && endDate != null) {
+                    bpQueryWrapper.le("start_date", endDate).ge("end_date", startDate);
+                }
+                List<Integer> btIdList=new ArrayList<>();
+                List<BusinessTrip> businessTripList = businessTripMapper.selectList(btQueryWrapper);
+                if(businessTripList.size()>0){
+                    businessTripList.forEach(bt->{
+                        btIdList.add(bt.getId());
+                    });
+                    bpQueryWrapper.in("bustrip_id", btIdList);
+                    if(projectIds!=null){
+                        bpQueryWrapper.in("project_id", projectIds);
+                    }
+                }
+                List<BustripProject> bustripProjectList = bustripProjectMapper.selectList(bpQueryWrapper);
+                List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", user.getCompanyId()));
+                for(BusinessTrip businessTrip:businessTripList){
+                    List<BustripProject> collect = bustripProjectList.stream().filter(bp -> bp.getBustripId().equals(businessTrip.getId())).collect(Collectors.toList());
+                    for(BustripProject bustripProject:collect){
+                        GanttDataItem curItem = new GanttDataItem();
+                        if(bustripProject.getProjectId()!=null) {
+                            Project project = projectList.stream().filter(pro -> pro.getId().equals(bustripProject.getProjectId())).collect(Collectors.toList()).get(0);
+                            if (!bustripProject.getProjectId().equals(btLastItemId)) {
+                                //抽取父级对象,项目名称
+                                GanttDataItem parent = new GanttDataItem();
+                                parent.id = String.valueOf(bustripProject.getProjectId());
+                                parent.userId = businessTrip.getOwnerId();
+                                parent.text = project.getProjectName();
+                                parent.render = "split";
+                                parent.start_date = bustripProject.getStartDate().toString();
+                                parent.end_date = bustripProject.getEndDate().toString();
+                                parent.time = 0;
+                                parent.children=new ArrayList<>();
+                                itemList.add(parent);
+                                btLastItemId = String.valueOf(bustripProject.getProjectId());
+                            }
+                            //curItem.id = "出差_" + businessTrip.getId();
+                            curItem.id = MessageUtils.message("leave.busTra") + "_" + businessTrip.getId();
+                            curItem.userId = businessTrip.getOwnerId();
+                            //curItem.text = "出差/" + businessTrip.getOwnerName();
+                            curItem.text = MessageUtils.message("leave.busTra")+"/" + businessTrip.getOwnerName();
+                            curItem.start_date = bustripProject.getStartDate().toString();
+                            curItem.end_date = bustripProject.getEndDate().toString();
+                            curItem.type="user";
+                            curItem.parent = btLastItemId;
+                            itemList=getUserGanttDataItemList(curItem,itemList);
+                            btLastItemId = String.valueOf(bustripProject.getProjectId());
+                        }
+                    }
+                }
+            }
+            String lastItemId = null;
+            GanttDataItem lastParentItem = null;
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            for (int i=0;i<ganttData.size(); i++) {
+                Map map = ganttData.get(i);
+                String userId = (String) map.get("user_id");
+                List<Map> finalGanttData = ganttData;
+                int finalI = i;
+                Optional<User> first = AllUser.stream().filter(us -> us.getId().equals(finalGanttData.get(finalI).get("user_id"))).findFirst();
+                Integer departmentId =null;
+                if(first.isPresent()){
+                    departmentId=first.get().getDepartmentId();
+                }
+                String start_date = sdf.format((Date) map.get("start_date"));
+                String end_date = sdf.format((Date) map.get("end_date"));
+                String projectId = ""+ (Integer) map.get("id");
+                System.out.println(map);
+                //String exeId = "任务_"+map.get("task_id") +"_"+ (type==0?(Integer) map.get("exe_id"):userId);
+                String exeId = MessageUtils.message("excel.task") + "_"+map.get("task_id") +"_"+ (type==0?(Integer) map.get("exe_id"):userId);
+                String taskId = ""+ (Integer) map.get("task_id");
+
+                GanttDataItem curItem = new GanttDataItem();;
+                if (type == 0) {
+                    if (!userId.equals(lastItemId)) {
+                        //抽取父级对象,人员名称
+                        GanttDataItem parent = new GanttDataItem();
+                        parent.id = userId;
+                        parent.userId = (String) map.get("user_id");
+                        parent.text = (String) map.get("name");
+                        parent.render = "split";
+                        parent.start_date = start_date;
+                        parent.end_date = end_date;
+                        parent.time = 0;
+                        parent.type="user";
+                        parent.parent=String.valueOf(departmentId);
+                        parent.children=new ArrayList<>();
+                        Optional<User> optional = AllUser.stream().filter(au -> au.getId().equals(userId)).findFirst();
+                        if(optional.isPresent()){
+                            parent.color=optional.get().getColor();
+                        }
+                        lastItemId = userId;
+                        itemList.add(parent);
+                        lastParentItem = parent;
+                    }
+
+                    curItem.id = exeId;
+                    curItem.userId = (String) map.get("user_id");
+                    curItem.text = (String) map.get("project_name")+"/"+(String)map.get("task_name");
+                    curItem.start_date = start_date;
+
+                    curItem.end_date = end_date;
+                    curItem.time = (Integer)map.get("duration");
+                    curItem.parent = lastItemId;
+                    curItem.children=new ArrayList<>();
+                    itemList=getUserGanttDataItemList(curItem,itemList);
+                    lastItemId = userId;
+                } else {
+                    if (!projectId.equals(lastItemId)) {
+                        //抽取父级对象,项目名称
+                        GanttDataItem parent = new GanttDataItem();
+                        parent.id = projectId;
+                        parent.userId = (String) map.get("user_id");
+                        parent.text = (String) map.get("project_name");
+                        parent.render = "split";
+                        parent.start_date = start_date;
+                        parent.end_date = end_date;
+                        parent.time = 0;
+                        parent.children=new ArrayList<>();
+                        lastItemId = projectId;
+                        itemList.add(parent);
+                        lastParentItem = parent;
+                    }
+                    curItem.id = projectId+"_"+exeId;
+                    curItem.userId = (String) map.get("user_id");
+                    curItem.text = (String) map.get("name")+"/"+(String)map.get("task_name");
+                    curItem.start_date = start_date;
+                    curItem.end_date = end_date;
+                    curItem.time = (Integer)map.get("duration");
+                    curItem.type="user";
+                    curItem.parent = lastItemId;
+                    itemList=getUserGanttDataItemList(curItem,itemList);
+                    lastItemId = projectId;
+                }
+                //校正父对象
+                if (curItem.start_date.compareTo(lastParentItem.start_date) < 0) {
+                    lastParentItem.start_date = curItem.start_date;
+                }
+                if (curItem.end_date.compareTo(lastParentItem.end_date) > 0) {
+                    lastParentItem.end_date = curItem.end_date;
+                }
+                lastParentItem.time = lastParentItem.time + curItem.time;
+            }
+        }
+
+        msg.data = itemList;
+
+        return msg;
+    }
+    private List<GanttDataItem> getUserGanttDataItemList(GanttDataItem userGantt, List<GanttDataItem> itemList) {
+        if(itemList==null){
+            itemList=new ArrayList<>();
+        }
+        for (GanttDataItem ganttDataItem : itemList) {
+                if(ganttDataItem.getId().equals(userGantt.parent)){
+                    ganttDataItem.children.add(userGantt);
+                }
+            getUserGanttDataItemList(userGantt,ganttDataItem.children);
+        }
+        return itemList;
+    }
+
+    private GanttDataItem getGanttDataItemList(GanttDataItem parent, Department department, List<Department> departmentList) {
+        List<Department> collect = departmentList.stream().filter(dl ->dl.getSuperiorId()!=null&& dl.getSuperiorId().equals(department.getDepartmentId())).collect(Collectors.toList());
+        parent.children=new ArrayList<>();
+        for (Department dept : collect) {
+            GanttDataItem subParent = new GanttDataItem();
+            subParent.id=dept.getDepartmentId().toString();
+            subParent.time = 0;
+            subParent.text=dept.getDepartmentName();
+            subParent.type="department";
+            if(dept.getSuperiorId()!=null){
+                subParent.parent=String.valueOf(dept.getSuperiorId());
+                subParent.type="milestone";
+            }
+            GanttDataItem sub = getGanttDataItemList(subParent, dept, departmentList);
+            parent.children.add(sub);
+        }
+        return parent;
+    }
+
 }

+ 12 - 8
fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue

@@ -54,7 +54,7 @@
   <div class="contents" v-if="allWrong">
     <div class="headine headConCon" ref="headine" :style="'width:'+(windowWidth - 400)+'px'">
       <h3 ref="headHe" style="padding-left: 10px;float:left;width:15%">{{shuz[ins]}}</h3>
-      <div class="headScreen" :style="ins == 9 ? 'width:60%' : 'width:70%'">
+      <div class="headScreen" :style="ins == 9 ? 'width:60%' : 'width:72%'">
       <!-- 客户项目利润表的筛选 -->
         <template v-if="ins == 4">
           <el-select v-model="customerId" :placeholder="$t('pleaseelectcustomers')" clearable filterable size="small" @change="selcts(4)" style="margin-right:20px">
@@ -69,7 +69,7 @@
           </el-select>
         </template>
         <!-- 时间段筛选 -->
-          <template v-if="ins == 6 || ins == 8 || ins == 9 || ins == 10 || ins == 11 || ins == 12 || ins == 15">
+          <template v-if="ins == 6 || ins == 8 || ins == 9 || ins == 10 || ins == 11 || ins == 12">
             <span>
               <span class="demonstration" style="color:#999;padding:0 10px">
                 {{ ins == 15 ? $t('xiang-mu-chuang-jian-shi-jian-duan') : $t('message.period') }}
@@ -91,11 +91,11 @@
           </el-option>
         </el-select>
         <!-- 月份选择 -->
-        <el-date-picker v-if="ins == 14" value-format="yyyy-MM" v-model="monthPersonnel" type="month" :placeholder="$t('Selectmonth')" :clearable="false" @change="selcts()" size="small"></el-date-picker>
+        <el-date-picker v-if="ins == 14 || ins == 15" value-format="yyyy-MM" v-model="monthPersonnel" type="month" :placeholder="$t('Selectmonth')" :clearable="false" @change="selcts()" size="small"></el-date-picker>
           
           <!-- 部门筛选 -->
           <el-cascader v-if="(ins == 15 || (ins == 9 && permissions.reportAllTimely) || (ins == 8 && permissions.reportAllTimeDivide) || (ins == 6 && permissions.reportAllOvertime) || (ins == 11 && permissions.reportPersonnel) || (ins == 14)) && user.userNameNeedTranslate != 1" v-model="departmentIdArray" :options="departmentList" :placeholder="$t('qing-xuan-ze-bu-men')"
-            :props="{ checkStrictly: true,expandTrigger: 'hover' }" :show-all-levels="false" clearable
+            :props="{ checkStrictly: true,expandTrigger: 'hover',multiple: ins == 6 ? true : false }" collapse-tags :show-all-levels="false" clearable
             @change="selcts(9)" size="small" style="margin-left:10px"
           ></el-cascader>
 
@@ -729,9 +729,12 @@
             <!-- 部门参与项目情况表 -->
             <el-table v-if="ins == 15"  key="15" border :data="tableList" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
                 <el-table-column align="center" prop="deptName" :label="$t('departmentname')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="deptHeadCount" :label="'部门人数'" min-width="150"></el-table-column>
                 <el-table-column align="center" prop="projectCount" :label="$t('can-yu-de-xiang-mu-de-shu-liang')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="centerCount" :label="this.user.timeType.customDegreeName + '数量'" min-width="150"></el-table-column>
                 <el-table-column align="center" prop="peopleCount" :label="$t('can-yu-ren-ci')" min-width="150"></el-table-column>
                 <el-table-column align="center" prop="tripCount" :label="$t('chu-cha-de-tian-shu')" min-width="150"></el-table-column>
+                <el-table-column align="center" prop="tripPeopleCount" :label="'出差人数'" min-width="150"></el-table-column>
             </el-table>
 
         <!--工具条-->
@@ -1469,8 +1472,7 @@ export default {
         } else if(this.ins == 15) {
           fName = this.$t('bumenchanyuqingkuang') + '.xls'
           url += "/exportDeptPartInProjects"
-          sl.startDate= this.rangeDatas ? this.rangeDatas[0] : '',
-          sl.endDate = this.rangeDatas ? this.rangeDatas[1] : '',
+          sl.month = this.monthPersonnel + '-01'
           sl.departmentId = this.departmentIdArray.length > 0 ? this.departmentIdArray[this.departmentIdArray.length - 1] : ''
         }
           this.http.post(url, sl,
@@ -1705,11 +1707,11 @@ export default {
     },
     // 部门参与项目情况表
     getDepartmentsInvolved() {
+
       let parameter = {
         pageIndex: this.page,
         pageSize: this.size,
-        startDate: this.rangeDatas ? this.rangeDatas[0] : '',
-        endDate: this.rangeDatas ? this.rangeDatas[1] : '',
+        month: this.monthPersonnel + '-01',
         departmentId: this.departmentIdArray.length > 0 ? this.departmentIdArray[this.departmentIdArray.length - 1] : '',
       }
       this.listLoading = true
@@ -2288,6 +2290,8 @@ export default {
       if(this.ins == 12){
         this.groupWorktimeList.right = []
         this.getGroupWorktimeList()
+      }else if(this.ins == 15){
+        this.getDepartmentsInvolved()
       }else{
       if(e == 9){
         this.userId = null

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

@@ -465,7 +465,7 @@
                             border="0"
                             :autosize="{ minRows: 2, maxRows: 6}"
                             :placeholder="$t('detailedprogressdescription')"
-                            v-model.trim="text2"
+                            v-model="text2"
                             style="margin:10px 0 0 0">
                             </el-input>
 
@@ -803,7 +803,7 @@
                             type="textarea"
                             :placeholder="$t('pleaseentercontent')"
                             :autosize="{ minRows: 6, maxRows: 6}"
-                            v-model.trim="textarea2"
+                            v-model="textarea2"
                             class="inputDeeps"
                             >
                             </el-input></div>

+ 41 - 33
fhKeeper/formulahousekeeper/timesheet/src/views/project/project_gantt.vue

@@ -75,13 +75,13 @@
       </div>
     </div>
 
-    <gantt v-if="isDataLoaded" ref="ganttTable1" class="left-container" :tasks="tasks" 
+    <gantt v-if="isDataLoaded && user.userNameNeedTranslate != 1" ref="ganttTable1" class="left-container" :tasks="tasks" 
     :stafforpro="radio1"
     :valueDate="valueDate"
     :key="updatakey1"></gantt>
-    <!-- <vueGantt v-if="isDataLoaded" ref="ganttTable1" :stafforpro="radio1"
+    <vueGantt v-if="isDataLoaded && user.userNameNeedTranslate == 1" ref="ganttTable1" :stafforpro="radio1"
     :valueDate="valueDate"
-    :key="updatakey1" :tasks="tasks"></vueGantt> -->
+    :key="updatakey1" :tasks="tasks"></vueGantt>
 
   <div class="demand-container" v-if="!isDataLoaded">
     <el-table height="90%" :loading="demandListLoading" :data="demandList">
@@ -497,8 +497,14 @@ export default {
             getlistcs.userId = this.valuex
           }
         }
-        
-        this.http.post('/project/getGanttData', getlistcs ,
+        var urls = ''
+        if(this.user.userNameNeedTranslate == '1') {
+          urls = '/project/getGanttDataNew'
+        } else {
+          urls = '/project/getGanttData'
+        }
+        this.http.post(urls, getlistcs ,
+        // this.http.post('/project/getGanttDataNew', getlistcs,
                         res => {
                             if (res.code == "ok") {
                                 for(var i in res.data) {
@@ -510,41 +516,43 @@ export default {
                                   }
                                 }
                                 this.tasks = {data:res.data};
-                                let taskson = []
-                                for(let m in this.tasks.data){
-                                  this.tasks.data[m].render = null
-                                  if(this.tasks.data[m].time != 0){
-                                    
-                                    if(this.tasks.data[m].id != this.tasks.data[m].userId){
-                                      this.tasks.data[m].render = 'split'
-                                      let item = JSON.parse(JSON.stringify(this.tasks.data[m]))
-                                      item.parent = this.tasks.data[m].id
-                                      item.id = this.tasks.data[m].id + 'son'
-                                      taskson.push(item)
-                                      this.tasks.data[m].time = 0
+                                if(this.user.userNameNeedTranslate != '1') {
+                                  let taskson = []
+                                  for(let m in this.tasks.data){
+                                    this.tasks.data[m].render = null
+                                    if(this.tasks.data[m].time != 0){
+                                      
+                                      if(this.tasks.data[m].id != this.tasks.data[m].userId){
+                                        this.tasks.data[m].render = 'split'
+                                        let item = JSON.parse(JSON.stringify(this.tasks.data[m]))
+                                        item.parent = this.tasks.data[m].id
+                                        item.id = this.tasks.data[m].id + 'son'
+                                        taskson.push(item)
+                                        this.tasks.data[m].time = 0
+                                      }
+                                      
                                     }
-                                    
-                                  }
-                                }
-                                this.tasks.data.push.apply(this.tasks.data,taskson) 
-                                for(let i in this.tasks.data){
-                                  if(this.tasks.data[i].time == 0){
-                                    delete this.tasks.data[i].start_date
-                                    delete this.tasks.data[i].end_date
-                                    this.tasks.data[i].type = 'milestone'
                                   }
-                                  if(this.tasks.data[i].end_date){
-                                    let date = new Date(this.tasks.data[i].end_date)
-                                    let date2 = new Date(date.getFullYear(),date.getMonth(),date.getDate() + 1)
-                                    let dmonth = date2.getMonth() + 1
-                                    let dday = date2.getDate()
-                                    this.tasks.data[i].end_date = date2.getFullYear() + '-' + (dmonth < 10 ? '0' + dmonth : dmonth) + '-' + (dday < 10 ? '0' + dday : dday)
+                                  this.tasks.data.push.apply(this.tasks.data,taskson) 
+                                  for(let i in this.tasks.data){
+                                    if(this.tasks.data[i].time == 0){
+                                      delete this.tasks.data[i].start_date
+                                      delete this.tasks.data[i].end_date
+                                      this.tasks.data[i].type = 'milestone'
+                                    }
+                                    if(this.tasks.data[i].end_date){
+                                      let date = new Date(this.tasks.data[i].end_date)
+                                      let date2 = new Date(date.getFullYear(),date.getMonth(),date.getDate() + 1)
+                                      let dmonth = date2.getMonth() + 1
+                                      let dday = date2.getDate()
+                                      this.tasks.data[i].end_date = date2.getFullYear() + '-' + (dmonth < 10 ? '0' + dmonth : dmonth) + '-' + (dday < 10 ? '0' + dday : dday)
+                                    }
                                   }
                                 }
                                 console.log('ganttData',this.tasks.data);
                                 this.$nextTick(()=>{
                                   this.updatakey1 += 1
-                          })
+                                })
                         
                             } else {
                                 this.$message({

+ 125 - 79
fhKeeper/formulahousekeeper/timesheet/src/views/project/vueGantt.vue

@@ -1,9 +1,29 @@
 <template>
   <div>
-     <el-table :data="treeDataList" height="490px" row-key="id" show-overflow-tooltip :cell-style="TableCellStyle" size="mini" :span-method="arraySpanMethod" style="width: 100%;margin-bottom: 20px;" border default-expand-all :tree-config="{children: 'children', expandAll: true}" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
-        <el-table-column prop="text" label="姓名" width="240" fixed="left"></el-table-column>
+     <el-table :data="treeDataList" height="490px" row-key="id" :key="'1'" show-overflow-tooltip :cell-style="TableCellStyle" size="mini" :span-method="arraySpanMethod" style="width: 100%;margin-bottom: 20px;" border default-expand-all :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
+        <el-table-column prop="text" label="姓名" width="240" fixed="left" v-if="stafforpro != '按项目查看'">
+          <template slot-scope="scope">
+              <!-- user.userNameNeedTranslate == 1 -->
+              <span v-if="user.userNameNeedTranslate == 1 && scope.row.type == 'department'"><ww-open-data type='departmentName' :openid='scope.row.text'></ww-open-data></span>
+              <span v-if="user.userNameNeedTranslate == 1 && scope.row.type == 'user'"><ww-open-data type='userName' :openid='scope.row.text'></ww-open-data></span>
+              <span v-if="user.userNameNeedTranslate == 1 && (scope.row.type == 'null' || scope.row.type == null)">{{scope.row.text}}</span>
+              <span v-if="user.userNameNeedTranslate != 1">{{scope.row.text}}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="text" label="项目" width="240" fixed="left" v-if="stafforpro == '按项目查看'">
+          <template slot-scope="scope">
+            <span v-if="user.userNameNeedTranslate == 1 && scope.row.type == 'user'">
+              <span v-for="(item, index) in scope.row.userNameList" :key="index">
+                <ww-open-data type='userName' :openid='scope.row.text'></ww-open-data>
+              </span>
+            </span>
+            <span v-if="user.userNameNeedTranslate == 1 && scope.row.type == 'user'">{{scope.row.proNameText}}</span>
+            <span v-if="user.userNameNeedTranslate == 1 && (scope.row.type == 'null' || scope.row.type == null)"> {{scope.row.text}}</span>
+            <span v-if="user.userNameNeedTranslate != 1">{{scope.row.text}}</span>
+          </template>
+        </el-table-column>
         <el-table-column :label="item.name" v-for="(item, index) in headerData" :key="index">
-            <el-table-column :label="items" v-for="items, idx in item.children" :key="idx" width="160px">
+            <el-table-column :label="items" v-for="items, idx in item.children" :key="idx" width="120px" align="center">
               <template slot-scope="scope">
                 <div>
                   {{scope.row.end_date | dataValue(scope.column, scope.row)}}
@@ -38,71 +58,21 @@ export default {
   components: {},
   data() {
     return {
-      tableData: [{
-          id: 1,
-          date: '2016-05-02',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1518 弄'
-        }, {
-          id: 2,
-          date: '2016-05-04',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1517 弄'
-        }, {
-          id: 3,
-          date: '2016-05-01',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1519 弄',
-          children: [{
-              id: 31,
-              date: '2016-05-01',
-              name: '王小虎',
-              address: '上海市普陀区金沙江路 1519 弄'
-            }, {
-              id: 32,
-              date: '2016-05-01',
-              name: '王小虎',
-              address: '上海市普陀区金沙江路 1519 弄'
-          }]
-        }, {
-          id: 4,
-          date: '2016-05-03',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1516 弄'
-        }],
-        tableData1: [{
-          id: 1,
-          date: '2016-05-02',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1518 弄'
-        }, {
-          id: 2,
-          date: '2016-05-04',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1517 弄'
-        }, {
-          id: 3,
-          date: '2016-05-01',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1519 弄',
-          hasChildren: true
-        }, {
-          id: 4,
-          date: '2016-05-03',
-          name: '王小虎',
-          address: '上海市普陀区金沙江路 1516 弄'
-        }],
         initialMonth: '', // 开始月份
         headerData: [], // 表头数据
-        treeDataList: []
+        treeDataList: [],
+        num: 0,
+        mergeList: [],
+        valueDateList: [],
+        user: JSON.parse(sessionStorage.getItem("user")),
     };
   },
   filters: {
     dataValue: function (endDate, item, value) {
       if(endDate) {
-        let biaoto = item.label
-        if(biaoto >= value.start_date && biaoto < endDate) {
-          return value.text
+        let biaoto = item.label.split(' ')[0]
+        if(biaoto == value.end_date) {
+          // return value.text
         }
       }
     }
@@ -111,21 +81,85 @@ export default {
   watch: {},
   created() {},
   mounted() {
-    console.log(this.stafforpro)
-    console.log(this.valueDate)
-    console.log(this.updatakey1)
-    console.log(this.tasks)
+    console.log(this.stafforpro,'值')
+    // 重置两个属性值
+    this.num = 0,
+    this.mergeList = []
     let dataList = []
     let allDataList = []
+    this.valueDateList = this.valueDate
     let star = this.valueDate[0].split('-')
     let end = this.valueDate[1].split('-')
     this.initialMonth = star[0] + '-' + star[1]
     dataList = this.getYearAndMonth(star[0] + '-' + star[1], end[0] + '-' + end[1])
     allDataList = this.getdiffdate(this.valueDate[0], this.valueDate[1])
     this.combination(dataList, allDataList)
-    this.treeDataList = this.integrationTree(this.tasks.data)
+    // 递归加颜色
+    this.treeDataList = this.recursive(this.tasks.data);
+
+    // this.treeDataList = this.integrationTree(this.tasks.data)
+    console.log(this.mergeList, '合并数据')
   },
   methods: {
+    // 递归加颜色以及存储需要合并的数据
+    recursive(data) {
+      for (let i in data) {
+            if(this.stafforpro == '按项目查看') {
+              data[i].color = '#409EFF'
+              if(data[i].type == 'user' && data[i].text) {
+                let arr = []
+                if(data[i].text.indexOf('/') != '-1') {
+                  let str = data[i].text.split('/')[0]
+                  if(str.indexOf(',') != '-1') {
+                    let arrList = str.split(',')
+                    data[i].userNameList = arrList
+                  } else {
+                    arr.push(str)
+                    data[i].userNameList = arr
+                  }
+                  data[i].proNameText = data[i].text.split('/')[1]
+                }
+              }
+            }
+            this.num++
+            let obj = {
+              ins: this.num,
+              numDay: 1,
+              column: 1
+            }
+            if(data[i].end_date) {
+              let day = this.dayjs(data[i].end_date).diff(data[i].start_date, 'day') // 和并多少行
+              let column = this.dayjs(data[i].end_date).diff(this.valueDateList[0], 'day') // 从多少列开始
+              console.log(day)
+              if(day >= 1) {
+                if(day >= 3) {
+                  if(this.valueDateList[0] > data[i].start_date) {
+                    obj.column = 1
+                    day >= column ? obj.numDay = column : obj.numDay = day
+                  } else {
+                    let num = this.dayjs(data[i].start_date).diff(this.valueDateList[0], 'day')
+                    obj.column = +num + 1
+                    day >= column ? obj.numDay = column : obj.numDay = day
+                  }
+                } else {
+                  day >= column ? obj.numDay = column : obj.numDay = day
+                  obj.column = column
+                }
+              }
+            }
+            this.mergeList.push(obj)
+            if(data[i].id.indexOf(this.$t('chu-cha')) != '-1') {
+              data[i].color = '#E6A23C'
+            }
+            if(data[i].id.indexOf(this.$t('other.AskForLeave')) != '-1') {
+              data[i].color = '#F56C6C'
+            }
+            if (data[i].children) {
+                this.recursive(data[i].children);
+            }
+        }
+        return data
+    },
     // 截取两个日期的月份数
      getYearAndMonth(start, end) {
       console.log(start, end)
@@ -176,13 +210,15 @@ export default {
     combination(month, data) {
       let monthStr = [this.initialMonth, ...month]
       let arrList = []
+      let weekArrayList = ['周日', '周一', '周二', '周三', '周四', '周五', '周六',]
       for(let i in monthStr) {
         let obj = {}
         obj.name = monthStr[i]
         obj.children = []
         for(let j in data) {
-          if(data[j].indexOf(monthStr[i]) != '-1') {
-            obj.children.push(data[j])
+          let index = new Date(data[j]).getDay()
+          if(data[j].indexOf(monthStr[i]) != '-1') { 
+            obj.children.push(data[j] + ' (' + weekArrayList[index] + ')')
           }
         }
         arrList.push(obj)
@@ -217,21 +253,31 @@ export default {
        return treeData;
     },
     arraySpanMethod({ row, column, rowIndex, columnIndex }) {
-        if (rowIndex == 4) {
-          if (columnIndex == 4) {
-            return [1, 5];
-          } else if (columnIndex === 1) {
-            return [0, 0];
-          }
-        }
+        // if (rowIndex == 0) {
+        //   if (columnIndex == 2) {
+        //     return [1, 18];
+        //   } else if(columnIndex == 1){
+        //     return [0, 0];
+        //   }
+        // }
+
+        // if (rowIndex == +this.mergeList[rowIndex].ins -1) {
+        //   if (columnIndex == +this.mergeList[rowIndex].column + 1) {
+        //     return [1, +this.mergeList[rowIndex].numDay + 1];
+        //   } else if(columnIndex == 1){
+        //     return [0, 0];
+        //   }
+        // }
     },
     // 设置每一个单元格的样式
     TableCellStyle(row) {
       if(row.row.color) {
-        let biaoto = row.column.label
-        if(biaoto >= row.row.start_date && biaoto < row.row.end_date) {
-          console.log('进来了')
-          return 'background-color: '+ row.row.color +' !important;'
+        let biaoto = row.column.label.split(' ')[0]
+        // if(biaoto >= row.row.end_date || biaoto <= row.row.start_date) {
+        if(biaoto >= row.row.start_date && biaoto <= row.row.end_date) {
+          if(row.row.color) {
+            return 'background-color: '+ row.row.color +' !important;color: #fff'
+          }
         }
       }
     }

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/task/list.vue

@@ -298,7 +298,7 @@
                             border="0"
                             :autosize="{ minRows: 2, maxRows: 6}"
                             :placeholder="$t('detailedprogressdescription')"
-                            v-model.trim="text2"
+                            v-model="text2"
                             style="margin:10px 0 0 0">
                             </el-input>
 
@@ -465,7 +465,7 @@
                             type="textarea"
                             :placeholder="$t('pleaseentercontent')"
                             :autosize="{ minRows: 6, maxRows: 6}"
-                            v-model.trim="textarea2"
+                            v-model="textarea2"
                             class="inputDeeps"
                             >
                             </el-input></div>