Pārlūkot izejas kodu

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

Lljy-ai 4 gadi atpakaļ
vecāks
revīzija
d9eb1d73fd
29 mainītis faili ar 794 papildinājumiem un 85 dzēšanām
  1. 7 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  2. 10 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java
  3. 54 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskProgressController.java
  4. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TprogressPaticipatorsController.java
  5. 10 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Information.java
  6. 3 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Task.java
  7. 71 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TaskProgress.java
  8. 54 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TprogressPaticipators.java
  9. 6 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java
  10. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java
  11. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskProgressMapper.java
  12. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TprogressPaticipatorsMapper.java
  13. 3 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  14. 24 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskProgressService.java
  15. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskService.java
  16. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TprogressPaticipatorsService.java
  17. 37 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  18. 99 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskProgressServiceImpl.java
  19. 10 9
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java
  20. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TprogressPaticipatorsServiceImpl.java
  21. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/InformationMapper.xml
  22. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  23. 8 5
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskMapper.xml
  24. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskProgressMapper.xml
  25. 18 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TprogressPaticipatorsMapper.xml
  26. 7 3
      fhKeeper/formulahousekeeper/timesheet/src/views/Home.vue
  27. 78 21
      fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue
  28. 78 18
      fhKeeper/formulahousekeeper/timesheet/src/views/project/earning.vue
  29. 83 11
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue

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

@@ -127,8 +127,8 @@ public class ProjectController {
      * 导出查询者所在公司每个项目的工时成本
      */
     @RequestMapping("/exportTimeCost")
-    public HttpRespMsg exportTimeCost(@RequestParam String startDate, @RequestParam String endDate) {
-        return projectService.exportTimeCost(startDate, endDate, request);
+    public HttpRespMsg exportTimeCost(@RequestParam String startDate, @RequestParam String endDate, Integer projectId) {
+        return projectService.exportTimeCost(startDate, endDate, projectId, request);
     }
 
     /**
@@ -140,6 +140,11 @@ public class ProjectController {
         return projectService.getProjectCost(startDate, endDate, id, request);
     }
 
+    @RequestMapping("/getAllMembCost")
+    public HttpRespMsg getAllMembCost(String startDate, String endDate, Integer id) {
+        return projectService.getAllMembCost(startDate, endDate, id, request);
+    }
+
     /**
      * 获取项目详细信息
      * @param id

+ 10 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java

@@ -61,6 +61,8 @@ public class TaskController {
     private TaskCommentService taskCommentService;
     @Resource
     private InformationService informationService;
+    @Resource
+    private TaskProgressService taskProgressService;
 
     @RequestMapping("/save")
     public HttpRespMsg save(Task task) {
@@ -381,6 +383,12 @@ public class TaskController {
         //查询直接子任务
         QueryWrapper<Task> subQuery = new QueryWrapper<Task>().eq("parent_tid", id);
         t.setSubTaskList(taskService.list(subQuery));
+
+        //查询最新的一条任务进展
+        List<TaskProgress> list = taskProgressService.list(new QueryWrapper<TaskProgress>().eq("task_id", id).orderByDesc("id").last("limit 1"));
+        if (list.size() > 0) {
+            t.setProgress(list.get(0));
+        }
         msg.data = t;
         return msg;
     }
@@ -492,8 +500,8 @@ public class TaskController {
     }
 
     @RequestMapping("exportTask")
-    public HttpRespMsg exportTask(Integer projectId) {
-        return taskService.exportTask(projectId);
+    public HttpRespMsg exportTask(Integer projectId, Integer taskType) {
+        return taskService.exportTask(projectId, taskType);
     }
 }
 

+ 54 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskProgressController.java

@@ -0,0 +1,54 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.TaskProgress;
+import com.management.platform.entity.TprogressPaticipators;
+import com.management.platform.entity.User;
+import com.management.platform.mapper.UserMapper;
+import com.management.platform.service.TaskProgressService;
+import com.management.platform.service.TprogressPaticipatorsService;
+import com.management.platform.util.HttpRespMsg;
+import com.management.platform.util.ListUtil;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-17
+ */
+@RestController
+@RequestMapping("/task-progress")
+public class TaskProgressController {
+    @Resource
+    private HttpServletRequest request;
+    @Resource
+    private TaskProgressService taskProgressService;
+
+    @RequestMapping("/addProgress")
+    public HttpRespMsg addProgress(TaskProgress progress, String participatorIds) {
+        return taskProgressService.addProgress(progress, participatorIds, request);
+    }
+
+    @RequestMapping("/deleteProgress")
+    public HttpRespMsg deleteProgress(Integer id) {
+        return taskProgressService.deleteProgress(id, request);
+    }
+
+    @RequestMapping("/list")
+    public HttpRespMsg list(Integer taskId) {
+        return taskProgressService.getList(taskId);
+    }
+}
+

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

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-17
+ */
+@RestController
+@RequestMapping("/tprogress-paticipators")
+public class TprogressPaticipatorsController {
+
+}
+

+ 10 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Information.java

@@ -15,8 +15,8 @@ import lombok.experimental.Accessors;
  * 提示消息
  * </p>
  *
- * @author 吴涛涛
- * @since 2020-02-18
+ * @author Seyason
+ * @since 2021-05-17
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -38,13 +38,13 @@ public class Information extends Model<Information> {
     private String userId;
 
     /**
-     * 类型 0-审批未通过或撤销
+     * 类型 0-审批未通过或撤销,1-任务待执行, 2-任务有进展
      */
     @TableField("type")
     private Integer type;
 
     /**
-     * 具体内容
+     * 附加数据
      */
     @TableField("content")
     private String content;
@@ -61,6 +61,12 @@ public class Information extends Model<Information> {
     @TableField("checked")
     private Integer checked;
 
+    /**
+     * 通知内容
+     */
+    @TableField("msg")
+    private String msg;
+
 
     @Override
     protected Serializable pkVal() {

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Task.java

@@ -180,6 +180,9 @@ public class Task extends Model<Task> {
     @TableField(exist = false)
     private String stagesName;
 
+    @TableField(exist = false)
+    private TaskProgress progress;
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 71 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TaskProgress.java

@@ -0,0 +1,71 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import java.util.List;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class TaskProgress extends Model<TaskProgress> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 任务ID
+     */
+    @TableField("task_id")
+    private Integer taskId;
+
+    /**
+     * 状态
+     */
+    @TableField("status")
+    private Integer status;
+
+    /**
+     * 内容
+     */
+    @TableField("content")
+    private String content;
+
+    /**
+     * 发布人id
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+    /**
+     * 发布时间
+     */
+    @TableField("indate")
+    private LocalDateTime indate;
+
+    @TableField(exist = false)
+    private List<TprogressPaticipators> paticipatorsList;
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 54 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TprogressPaticipators.java

@@ -0,0 +1,54 @@
+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 lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class TprogressPaticipators extends Model<TprogressPaticipators> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 任务进展id
+     */
+    @TableField("progress_id")
+    private Integer progressId;
+
+    /**
+     * 参与人id
+     */
+    @TableField("user_id")
+    private String userId;
+
+    /**
+     * 参与人姓名
+     */
+    @TableField("user_name")
+    private String userName;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 6 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java

@@ -21,9 +21,14 @@ import java.util.Map;
 public interface ProjectMapper extends BaseMapper<Project> {
     List<Map<String, Object>> getParticipatedProject(@Param("userId") String userId);
 
-    List<Map<String, Object>> getTimeCost(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate);
+    List<Map<String, Object>> getTimeCost(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate,
+        @Param("projectId") Integer projectId);
 
     List<Map<String, Object>> getProjectCost(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId);
     @Update("update project set status = 1, finish_date = null where id = #{id}")
     void restartProject(Integer id);
+
+    //获取全部人员成本
+    List<Map<String, Object>> getAllMembCost(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId,
+                                             @Param("companyId") Integer companyId);
 }

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java

@@ -28,5 +28,5 @@ public interface TaskMapper extends BaseMapper<Task> {
 
     List getTaskTimeCompare(Integer projectId);
 
-    List<TimeTask> getTaskWithWorktime(Integer projectId);
+    List<TimeTask> getTaskWithWorktime(Integer projectId, Integer taskType);
 }

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

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.TaskProgress;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-17
+ */
+public interface TaskProgressMapper extends BaseMapper<TaskProgress> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.TprogressPaticipators;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-17
+ */
+public interface TprogressPaticipatorsMapper extends BaseMapper<TprogressPaticipators> {
+
+}

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

@@ -39,7 +39,9 @@ public interface ProjectService extends IService<Project> {
 
     HttpRespMsg getProjectCost(String startDate, String endDate, Integer projectId, HttpServletRequest request);
 
-    HttpRespMsg exportTimeCost(String startDate, String endDate, HttpServletRequest request);
+    HttpRespMsg getAllMembCost(String startDate, String endDate, Integer projectId, HttpServletRequest request);
+
+    HttpRespMsg exportTimeCost(String startDate, String endDate, Integer projectId, HttpServletRequest request);
 
     HttpRespMsg updateProgress(Integer id, Integer progress, HttpServletRequest request);
 

+ 24 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskProgressService.java

@@ -0,0 +1,24 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.TaskProgress;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.util.HttpRespMsg;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-17
+ */
+public interface TaskProgressService extends IService<TaskProgress> {
+
+    HttpRespMsg addProgress(TaskProgress progress, String participatorIds, HttpServletRequest request);
+
+    HttpRespMsg deleteProgress(Integer id, HttpServletRequest request);
+
+    HttpRespMsg getList(Integer taskId);
+}

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

@@ -30,5 +30,5 @@ public interface TaskService extends IService<Task> {
     HttpRespMsg getTaskTimeCompare(Integer projectId);
     HttpRespMsg exportTaskTimeCompare(Integer projectId);
 
-    HttpRespMsg exportTask(Integer projectId);
+    HttpRespMsg exportTask(Integer projectId, Integer taskType);
 }

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

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.TprogressPaticipators;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-17
+ */
+public interface TprogressPaticipatorsService extends IService<TprogressPaticipators> {
+
+}

+ 37 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -288,7 +288,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
             Map<String, Object> resultMap = new HashMap<>();
             //时薪固定计算
-            List<Map<String, Object>> list = projectMapper.getTimeCost(companyId, startDate, endDate);
+            List<Map<String, Object>> list = projectMapper.getTimeCost(companyId, startDate, endDate, null);
             BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
             for (Map<String, Object> map : list) {
                 if (!map.containsKey("cost")) {
@@ -312,12 +312,12 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
     //导出查询者所在公司每个项目的工时成本,包括项目人员明细统计
     @Override
-    public HttpRespMsg exportTimeCost(String startDate, String endDate, HttpServletRequest request) {
+    public HttpRespMsg exportTimeCost(String startDate, String endDate,Integer projectId, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
             Map<String, Object> resultMap = new HashMap<>();
-            List<Map<String, Object>> list = projectMapper.getTimeCost(companyId, startDate, endDate);
+            List<Map<String, Object>> list = projectMapper.getTimeCost(companyId, startDate, endDate, projectId);
             BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
             List<String> headList = new ArrayList<String>();
             headList.add("项目");
@@ -344,8 +344,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 rowData.add(((BigDecimal)map.get("costMoney")).toString());
                 allList.add(rowData);
                 //统计每个项目中的人员时间成本投入
-                int projectId = (Integer)map.get("id");
-                List<Map<String, Object>> membList = projectMapper.getProjectCost(startDate, endDate, projectId);
+                int curProjectId = (Integer)map.get("id");
+                List<Map<String, Object>> membList = projectMapper.getProjectCost(startDate, endDate, curProjectId);
                 map.put("membList", membList);
                 for (Map<String, Object> membMap : membList) {
                     List<String> membRowData = new ArrayList<String>();
@@ -536,4 +536,36 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         }
         return httpRespMsg;
     }
+
+    //获取人员工时成本,可指定项目
+    @Override
+    public HttpRespMsg getAllMembCost(String startDate, String endDate, Integer projectId, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        try {
+            Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
+            //首先查看有无浏览权限
+            if (projectId != null && !projectMapper.selectById(projectId).getCompanyId().equals(companyId)) {
+                httpRespMsg.setError("无权查看其他公司的项目详情");
+            } else {
+                Map<String, Object> resultMap = new HashMap<>();
+                List<Map<String, Object>> list = projectMapper.getAllMembCost(startDate, endDate, projectId, companyId);
+                BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
+                for (Map<String, Object> map : list) {
+                    if (!map.containsKey("costMoney")) {
+                        map.put("costMoney", 0);
+                    } else {
+                        totalMoneyCost = totalMoneyCost.add((BigDecimal)map.get("costMoney"));
+                    }
+                }
+                resultMap.put("costList", list);
+                resultMap.put("totalMoneyCost", totalMoneyCost);
+                httpRespMsg.data = resultMap;
+            }
+        } catch (NullPointerException e) {
+            e.printStackTrace();
+            httpRespMsg.setError("验证失败");
+            return httpRespMsg;
+        }
+        return httpRespMsg;
+    }
 }

+ 99 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskProgressServiceImpl.java

@@ -0,0 +1,99 @@
+package com.management.platform.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.*;
+import com.management.platform.mapper.*;
+import com.management.platform.service.TaskProgressService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.service.TprogressPaticipatorsService;
+import com.management.platform.util.HttpRespMsg;
+import com.management.platform.util.ListUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-17
+ */
+@Service
+@Transactional
+public class TaskProgressServiceImpl extends ServiceImpl<TaskProgressMapper, TaskProgress> implements TaskProgressService {
+    @Resource
+    private TaskProgressMapper taskProgressMapper;
+    @Resource
+    private TprogressPaticipatorsMapper tprogressPaticipatorsMapper;
+    @Resource
+    private UserMapper userMapper;
+    @Resource
+    private InformationMapper informationMapper;
+    @Resource
+    private TaskMapper taskMapper;
+    @Resource
+    private ProjectMapper projectMapper;
+
+    @Override
+    public HttpRespMsg addProgress(TaskProgress progress, String participatorIds, HttpServletRequest request) {
+        HttpRespMsg msg = new HttpRespMsg();
+        User creator = userMapper.selectById(request.getHeader("Token"));
+        progress.setCreatorId(request.getHeader("Token"));
+        taskProgressMapper.insert(progress);
+        if (!StringUtils.isEmpty(participatorIds)) {
+            List<String> ids = ListUtil.convertLongIdsArrayToList(participatorIds);
+            List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("id", ids));
+            for (User user : userList) {
+                TprogressPaticipators item = new TprogressPaticipators();
+                item.setProgressId(progress.getId());
+                item.setUserId(user.getId());
+                item.setUserName(user.getName());
+                tprogressPaticipatorsMapper.insert(item);
+
+                //发消息通知进展
+                Information information = new Information();
+                information.setContent(""+progress.getTaskId());
+                information.setMsg("任务有新进展");
+                information.setUserId(user.getId());
+                information.setType(2);
+                informationMapper.insert(information);
+            }
+        }
+
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg deleteProgress(Integer id, HttpServletRequest request) {
+        String userId = request.getHeader("Token");
+        HttpRespMsg msg = new HttpRespMsg();
+        TaskProgress taskProgress = taskProgressMapper.selectById(id);
+        Task task = taskMapper.selectById(taskProgress.getTaskId());
+        Project project = projectMapper.selectById(task.getProjectId());
+        if (taskProgress.getCreatorId().equals(userId)
+            ||userId.equals(project.getInchargerId())) {
+            taskProgressMapper.deleteById(id);
+            tprogressPaticipatorsMapper.delete(new QueryWrapper<TprogressPaticipators>().eq("progress_id", id));
+        } else {
+            msg.setError("只有创建人和项目经理可以删除");
+        }
+
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg getList(Integer taskId) {
+        //倒序,最新的在最上面
+        List<TaskProgress> taskProgressList
+                = taskProgressMapper.selectList(new QueryWrapper<TaskProgress>().eq("task_id", taskId).orderByDesc("id"));
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.data = taskProgressList;
+        return msg;
+    }
+}

+ 10 - 9
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java

@@ -163,9 +163,9 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
 
 
     @Override
-    public HttpRespMsg exportTask(Integer projectId) {
+    public HttpRespMsg exportTask(Integer projectId, Integer taskType) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
-        List<TimeTask> list= taskMapper.getTaskWithWorktime(projectId);
+        List<TimeTask> list= taskMapper.getTaskWithWorktime(projectId, taskType);
         Project project = projectMapper.selectById(projectId);
         try {
             DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@@ -185,7 +185,6 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
             sheet.setColumnWidth(7, 20 * 256);
             sheet.setColumnWidth(8, 20 * 256);
             sheet.setColumnWidth(9, 20 * 256);
-            sheet.setColumnWidth(10, 20 * 256);
             //设置为居中加粗
             HSSFCellStyle headStyle = workbook.createCellStyle();
             HSSFFont font = workbook.createFont();
@@ -222,10 +221,10 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
             headCell.setCellValue("是否逾期");
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(8);
-            headCell.setCellValue("计划工时");
+            headCell.setCellValue("计划工时(h)");
             headCell.setCellStyle(headStyle);
-            headCell = headRow.createCell(10);
-            headCell.setCellValue("实际工时");
+            headCell = headRow.createCell(9);
+            headCell.setCellValue("实际工时(h)");
             headCell.setCellStyle(headStyle);
             int rowNum = 1;
             for (TimeTask task : list) {
@@ -234,11 +233,11 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
                 row.createCell(1).setCellValue(project.getProjectName());
                 row.createCell(2).setCellValue(task.getExecutorName());
                 row.createCell(3).setCellValue(dateTimeFormatter.format(task.getCreateDate()));
-                row.createCell(4).setCellValue(dateTimeFormatter.format(task.getEndDate()));
-                row.createCell(5).setCellValue(dateTimeFormatter.format(task.getFinishDate()));
+                row.createCell(4).setCellValue(task.getEndDate() != null?dateTimeFormatter.format(task.getEndDate()):"");
+                row.createCell(5).setCellValue(task.getFinishDate() !=null?dateTimeFormatter.format(task.getFinishDate()):"");
                 row.createCell(6).setCellValue(task.getTaskStatus() == 1?"Y":"N");
                 boolean isExpired = false;
-                if (task.getTaskStatus() == 0 && !task.getEndDate().isAfter(LocalDate.now())) {
+                if (task.getTaskStatus() == 0 && task.getEndDate() !=null&& !task.getEndDate().isAfter(LocalDate.now())) {
                     isExpired = true;
                 }
                 row.createCell(7).setCellValue(isExpired?"Y":"N");
@@ -255,9 +254,11 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
             //返回生成的文件地址/upload文件夹下
             httpRespMsg.data = "/upload/" + fileUrlSuffix;
         } catch (NullPointerException e) {
+            e.printStackTrace();
             httpRespMsg.setError("验证失败或缺少数据");
             return httpRespMsg;
         } catch (IOException e) {
+            e.printStackTrace();
             httpRespMsg.setError("文件生成错误");
             return httpRespMsg;
         }

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

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.TprogressPaticipators;
+import com.management.platform.mapper.TprogressPaticipatorsMapper;
+import com.management.platform.service.TprogressPaticipatorsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-17
+ */
+@Service
+public class TprogressPaticipatorsServiceImpl extends ServiceImpl<TprogressPaticipatorsMapper, TprogressPaticipators> implements TprogressPaticipatorsService {
+
+}

+ 2 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/InformationMapper.xml

@@ -10,11 +10,12 @@
         <result column="content" property="content" />
         <result column="time" property="time" />
         <result column="checked" property="checked" />
+        <result column="msg" property="msg" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, user_id, type, content, time, checked
+        id, user_id, type, content, time, checked, msg
     </sql>
 
 </mapper>

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -53,6 +53,9 @@
         LEFT JOIN report AS b ON b.project_id = a.id
         JOIN user AS c ON b.creator_id = c.id
         WHERE a.company_id = #{companyId}
+        <if test="projectId != null">
+            AND a.id = #{projectId}
+        </if>
         <if test="startDate != null and endDate != null">
             AND b.create_date between #{startDate} and #{endDate}
         </if>
@@ -74,4 +77,22 @@
         GROUP BY b.id
         ORDER BY b.id ASC
     </select>
+
+    <!--获取全部人员工时 -->
+    <select id="getAllMembCost" resultType="java.util.Map">
+        SELECT b.name, SUM(a.working_time) AS cost, SUM(a.cost) AS costMoney
+        FROM user AS b
+        left JOIN report AS a ON a.creator_id = b.id
+        WHERE a.state = 1
+        and b.company_id = #{companyId}
+        <if test="startDate != null and endDate != null">
+            AND a.create_date between #{startDate} and #{endDate}
+        </if>
+        <if test="projectId != null">
+            AND a.project_id = #{projectId}
+        </if>
+
+        GROUP BY b.id
+        ORDER BY b.id ASC
+    </select>
 </mapper>

+ 8 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskMapper.xml

@@ -96,16 +96,19 @@
     <!-- 查询任务实际工时和计划工时对比,仅查询有实际工时的数据 -->
     <select id="getTaskTimeCompare" resultType="java.util.Map">
         SELECT task.id , task.name AS name, task.plan_hours as planHours, IFNULL(SUM(report.`working_time`),0) AS workHours FROM report
-        LEFT JOIN task ON report.`task_id` = task.id
-        WHERE task.project_id = #{projectId} AND report.state = 1
-        GROUP BY task.id ORDER BY SUM(report.`working_time`) DESC
+        LEFT JOIN task ON report.`task_id` = task.id AND report.state = 1
+        WHERE task.project_id = #{projectId}
+        GROUP BY task.id
     </select>
 
     <!--查询任务,带实际工时-->
     <select id="getTaskWithWorktime" resultMap="timeResultMap">
         SELECT task.* , IFNULL(SUM(report.`working_time`),0) AS work_hours FROM task
-        LEFT JOIN report ON report.`task_id` = task.id
-        WHERE task.project_id = #{projectId} and report.state = 1
+        LEFT JOIN report ON report.`task_id` = task.id and report.state = 1
+        WHERE task.project_id = #{projectId}
+        <if test="taskType != null" >
+            and task.task_type = #{taskType}
+        </if>
         GROUP BY task.id ORDER BY SUM(report.`working_time`) DESC LIMIT 10
     </select>
 </mapper>

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskProgressMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.TaskProgressMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.TaskProgress">
+        <id column="id" property="id" />
+        <result column="task_id" property="taskId" />
+        <result column="status" property="status" />
+        <result column="content" property="content" />
+        <result column="creator_id" property="creatorId" />
+        <result column="indate" property="indate" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, task_id, status, content, creator_id, indate
+    </sql>
+
+</mapper>

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TprogressPaticipatorsMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.TprogressPaticipatorsMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.TprogressPaticipators">
+        <id column="id" property="id" />
+        <result column="progress_id" property="progressId" />
+        <result column="user_id" property="userId" />
+        <result column="user_name" property="userName" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, progress_id, user_id, user_name
+    </sql>
+
+</mapper>

+ 7 - 3
fhKeeper/formulahousekeeper/timesheet/src/views/Home.vue

@@ -41,7 +41,7 @@
                         <el-table-column property="type" label="消息中心" align="center">
                             <template slot-scope="scope">
                                 <el-link type="primary" :underline="false" @click="locationHerf(scope.row.id,scope.row.content, scope.row.type)">
-                                    {{scope.row.type==0?"审批未通过":"有新任务啦"}}
+                                    {{msgTypeTxt[scope.row.type]}}
                                 </el-link>
                             </template>
                         </el-table-column>
@@ -167,7 +167,7 @@
                 collapsed: sessionStorage.collapsed!=null?(sessionStorage.collapsed=='true'?true:false):false,
                 sysUserName: "",
                 menu: [],
-
+                msgTypeTxt:["审批未通过","有新任务啦","任务有新进展"],
                 editInformation: false,
                 editPassWord: false,
                 editLoading: false,
@@ -376,10 +376,14 @@
                             }
                             this.$router.push("/daily");
                             this.drawer = true;
-                        } else{
+                        } else if (type == 1) {
                             //1- 有新任务待执行
                             this.$router.push("/projectInside/"+date);
                             this.drawer = false;
+                        } else if (type == 2) {
+                            //2- 任务有新进展
+                            this.$router.push("/projectInside/"+date);
+                            this.drawer = false;
                         }
                         
                     } else {

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

@@ -1,19 +1,6 @@
 <template>
     <section>
         <el-col :span="24" style="padding-bottom: 0px;text-align:center;margin-top:10px;">
-            <!-- <el-date-picker
-                v-model="dateRange"
-                type="monthrange"
-                align="right"
-                unlink-panels
-                :clearable="false" 
-                range-separator="至"
-                start-placeholder="开始月份"
-                end-placeholder="结束月份"
-                :picker-options="pickerOptions"
-                value-format="yyyy-MM"
-                @change="getEchart">
-            </el-date-picker> -->
             <el-date-picker
             v-model="dateRange" :editable="false" 
             format="yyyy-MM-dd" value-format="yyyy-MM-dd" 
@@ -25,13 +12,40 @@
             end-placeholder="结束日期"
             ></el-date-picker>
 
-            <el-radio-group v-model="radio" @change="getEchart">
+            <el-radio-group v-model="radio" @change="getEchart" style="margin-left:10px;">
                 <el-radio-button label="项目"></el-radio-button>
                 <el-radio-button label="部门"></el-radio-button>
+                <el-radio-button label="人员"></el-radio-button>
             </el-radio-group>
         </el-col>
         <div id="container" :style="'height:'+containerHeight+'px'"></div>
-        <div style="position:fixed;top:120px;right:150px;"><el-button @click="exportProjectData()">导出数据</el-button></div>
+        <div style="position:fixed;top:120px;right:150px;"><el-button @click="showExportDialog">报表导出</el-button></div>
+
+        <!--导出报表条件选择 -->
+        <el-dialog title="工时报表导出" v-if="exportDialog" :visible.sync="exportDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
+            <el-form ref="form3" :model="exportParam" >
+                <el-form-item prop="projectId" label="选择项目">
+                    <el-select v-model="exportParam.projectId" placeholder="全部项目"  clearable style="width:350px;">
+                        <el-option v-for="item in projectList"  :key="item.id" :label="item.projectName" :value="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item prop="projectId" label="日期范围">
+                    <el-date-picker
+                        v-model="exportParam.dateRange" :editable="false" 
+                        format="yyyy-MM-dd" value-format="yyyy-MM-dd" 
+                        :clearable="true" 
+                        range-separator="至"
+                        type="daterange" 
+                        start-placeholder="开始日期"
+                        end-placeholder="结束日期"
+                    ></el-date-picker>
+                </el-form-item>
+                
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="exportProjectData" style="width:100%;" >导出</el-button>
+            </div>
+        </el-dialog>
     </section>
 </template>
 
@@ -40,6 +54,9 @@
     export default {
         data() {
             return {
+                projectList:[],
+                exportParam:{projectId:null,datRange:[]},
+                exportDialog:false,
                 dateRange:[],
                 user: JSON.parse(sessionStorage.getItem("user")),
                 radio: sessionStorage.radio!=null?sessionStorage.radio:'项目',
@@ -49,11 +66,40 @@
             };
         },
         methods: {
+            showExportDialog() {
+                this.exportDialog = true;
+                this.exportParam.dateRange = this.dateRange;
+            },
+            //获取我的项目列表
+            getMyProjectList() {
+                this.http.post('/project/getProjectList', {
+                },
+                res => {
+                    if (res.code == "ok") {
+                        this.projectList = res.data;
+                    } else {
+                        this.$message({
+                        message: res.msg,
+                        type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
             exportProjectData() {
                  var param = {};
-                if (this.dateRange != null) {
+                if (this.exportParam.dateRange != null) {
                     param = {startDate:this.dateRange[0], endDate: this.dateRange[1]};
                 }
+                if (this.exportParam.projectId != null) {
+                    param.projectId = this.exportParam.projectId;
+                }
+
                 this.http.post("/project/exportTimeCost", param,
                     res => {
                         this.listLoading = false;
@@ -85,14 +131,22 @@
                 if (this.dateRange != null) {
                     param = {startDate:this.dateRange[0], endDate: this.dateRange[1]};
                 }
-                this.http.post(this.radio=='项目'?this.port.project.listCost:this.port.project.depCost, param,
+                var url = '';
+                if (this.radio=='项目') {
+                    url = this.port.project.listCost;
+                } else if (this.radio=='部门') {
+                    url = this.port.project.depCost;
+                } else if (this.radio=='人员') {
+                    url = '/project/getAllMembCost';
+                }
+                this.http.post(url, param,
                 res => {
                     if (res.code == "ok") {
                         var xList = [], yList = [], list = res.data.costList, 
-                        totalMoneyCost = (this.radio=='项目'?res.data.totalMoneyCost:res.data.totalCostMoney);
+                        totalMoneyCost = ((this.radio=='项目' || this.radio=='人员')?res.data.totalMoneyCost:res.data.totalCostMoney);
                         for(var i in list) {
-                            if(this.radio=='项目') {
-                                xList.push(list[i].project);
+                            if(this.radio=='项目' || this.radio == '人员') {
+                                xList.push(this.radio=='项目'?list[i].project:list[i].name);
                                 yList.push({
                                     "value": list[i].costMoney,
                                     "id": list[i].id,
@@ -185,7 +239,7 @@
                                     } else {
                                         _this.$router.push("/cost/" + _this.params[0].data.id + "/" + _this.params[0].name);
                                     }
-                                } else {
+                                } else if (_this.radio=='部门') {
                                     if (_this.dateRange != null) {
                                         _this.$router.push("/costDep/" + _this.params[0].data.id + "/" + _this.params[0].name
                                             +"?startDate="+_this.dateRange[0]+"&endDate="+_this.dateRange[1]);
@@ -228,12 +282,15 @@
                 var startStr = util.formatDate.format(new Date(), 'yyyy-MM') + "-01";
                 this.dateRange = [startStr,t];
             }
+            this.exportParam.dateRange = this.dateRange;
             
             this.getEchart();
             var _this = this;
             window.addEventListener("resize", function() {
                 _this.myChart.resize();
             });
+
+            this.getMyProjectList();
         }
     };
 </script>

+ 78 - 18
fhKeeper/formulahousekeeper/timesheet/src/views/project/earning.vue

@@ -3,7 +3,7 @@
         <div style="margin: 0 auto;width:1120px;">
             <el-row :gutter="10">
             <el-col :span="24">    
-            <div class="box" style="height:350px;">
+            <div class="box" style="height:650px;">
                 <div >
                     <div class="lableTxt">项目利润快照</div>
                     <el-divider></el-divider>
@@ -71,28 +71,15 @@
                                 </template>
                             </el-table-column>
                         </el-table-column>
-                        
                     </el-table>
+
+                    <el-divider ></el-divider>
+                    <!--图形显示 -->
+                    <div id="chartPanel" style="height:300px;"></div>
                 </div>
             </div>
             </el-col>
             </el-row>
-            <el-row :gutter="10">
-                <el-col :span="12">    
-                    <div class="box">   
-                        <div class="lableTxt">耗时最多任务</div>
-                        <el-divider></el-divider>
-                        <div id="costPanel" style="height:300px;"></div>
-                    </div>
-                </el-col>
-                <el-col :span="12">    
-                    <div class="box">   
-                        <div class="lableTxt">按任务列表统计</div>
-                        <el-divider></el-divider>
-                        <div id="stagesPanel" style="height:300px;"></div>
-                    </div>
-                </el-col>
-            </el-row>
         </div>
         
     </div>
@@ -130,6 +117,10 @@
     export default {
         data() {
             return {
+                yList3:[],
+                yList2:[],
+                yList1:[],
+                xList:[],
                 list:[],
                 costChart:null,
                 stagesChart: null,
@@ -172,7 +163,76 @@
                 this.http.post('/earning-snapshot/list', {projectId: this.curProjectId},
                 res => {
                     if (res.code == "ok") {
+                        var list = JSON.parse(JSON.stringify(res.data)).reverse();
                         _this.list = res.data;
+                        for (var m=0;m<list.length; m++) {
+                            this.xList.push(list[m].indate);
+                            this.yList1.push(list[m].profitA);
+                            this.yList2.push(list[m].profitB);
+                            this.yList3.push(list[m].profitC);
+                        }
+                        //图表展示
+                        var myChart = echarts.init(document.getElementById("chartPanel"));
+                        myChart.setOption({
+                            title: {
+                                textStyle: {
+                                    color: "#666666",
+                                    fontSize: 18,
+                                    fontWeight: 'normal',
+                                 },
+                              text: list.length == 0?"暂无数据":"利润率趋势图",
+                              left: list.length == 0?"center":"left",
+                              top: list.length == 0?"center":"left"
+                            },
+                            toolbox: {
+                                show: true,
+                                feature:{
+                                    saveAsImage:{
+                                        show:true
+                                    },
+                                }
+                            },
+                            tooltip:{
+                               trigger: 'axis'
+                            },
+                            legend: {
+                                data: ['利润率A', '利润率B', '利润率C']
+                            },
+                            grid: {
+                                left: '3%',
+                                right: '4%',
+                                bottom: '3%',
+                                containLabel: true
+                            },
+                            xAxis: {
+                                type: 'category',
+                                boundaryGap: false,
+                                data: this.xList
+                            },
+                            yAxis: {
+                                type: 'value'
+                            },
+                            series : [
+                                {
+                                    name: '利润率A',
+                                    type: 'line',
+                                    stack: '百分比',
+                                    data: this.yList1
+                                },
+                                {
+                                    name: '利润率B',
+                                    type: 'line',
+                                    stack: '百分比',
+                                    data: this.yList2
+                                },
+                                {
+                                    name: '利润率C',
+                                    type: 'line',
+                                    stack: '百分比',
+                                    data: this.yList3
+                                },
+                            ]
+                        })
                     } else {
                         this.$message({
                             message: res.msg,

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

@@ -87,7 +87,7 @@
                             </el-select>
                         </el-col>
                         <el-col :span="2">
-                            <el-button icon="iconfont firerock-iconexport" size="mini" @click="exportTask">导出</el-button>
+                            <el-button icon="iconfont firerock-iconexport" size="mini" @click="showExportDialog">导出</el-button>
                         </el-col>
                         </el-row>
                         <!-- <div style="color:#999;margin-top:10px;">
@@ -562,6 +562,22 @@
                 <el-button type="primary" @click="addStagePost" style="width:100%;" >保存</el-button>
             </div>
         </el-dialog>
+
+        <!--导出数据条件选择 -->
+        <el-dialog title="工作计划导出" v-if="exportDialog" :visible.sync="exportDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
+            <el-form ref="form3" >
+                <el-form-item label="选择类型">
+                    <el-select v-model="exportTaskType" placeholder="全部类型"  clearable style="width:350px;">
+                        <el-option label="任务" value="0"></el-option>
+                        <el-option label="里程碑" value="1"></el-option>
+                        <el-option label="风险" value="2"></el-option>
+                    </el-select>
+                </el-form-item>
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="exportTask" style="width:100%;" >导出</el-button>
+            </div>
+        </el-dialog>
     </section>
 </template>
 <script>
@@ -598,16 +614,8 @@
         
         data() {
             return {
-                editorInit: {
-                    language_url: '/static/tinymce/zh_CN.js',
-                    language: 'zh_CN',
-                    skin_url: '/static/tinymce/skins/lightgray',
-                    height: 300,
-                    branding: false, // 是否禁用“Powered by TinyMCE”
-menubar: true, // 顶部菜单栏显示
-plugins: 'link lists image code table colorpicker textcolor wordcount contextmenu',
-toolbar: 'bold italic underline strikethrough | fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent blockquote | undo redo | link unlink image code | removeformat'
-                },
+                exportDialog: false,
+                exportTaskType:null,
                 groupTemplateList:[],
                 createGroupWay:'new',
                 modGroupDialog:false,
@@ -742,6 +750,70 @@ toolbar: 'bold italic underline strikethrough | fontsizeselect | forecolor backc
             };
         },
         methods: {
+            //删除任务进展
+            deleteTaskProgress() {
+                this.http.post('/task-progress/deleteProgress', {id:1},
+                    res => {
+                        if (res.code == "ok") {
+                            
+                        } else {
+                            this.$message({
+                                message: res.msg,
+                                type: "error"
+                            });
+                        }
+                    }
+                );
+            },
+            //创建任务进展
+            addTaskProgress() {
+                var param = {taskId:0,status:0,content:'输入进展内容',participatorIds:'1,2,3,4,5'};
+                this.http.post('/task-progress/addProgress', param,
+                    res => {
+                        if (res.code == "ok") {
+                            
+                        } else {
+                            this.$message({
+                                message: res.msg,
+                                type: "error"
+                            });
+                        }
+                    }
+                );
+            },
+            //获取任务进展列表
+            getTaskProgressList(taskId) {
+                this.http.post('/task-progress/list', {taskId: taskId},
+                    res => {
+                        if (res.code == "ok") {
+                            var list = res.data;
+                        } else {
+                            this.$message({
+                                message: res.msg,
+                                type: "error"
+                            });
+                        }
+                    }
+                );
+            },
+            showExportDialog() {
+                this.exportDialog = true;
+            },
+            exportTask() {
+                let _this = this;
+                this.http.post('/task/exportTask', {projectId: this.curProjectId, taskType: this.exportTaskType},
+                res => {
+                    if (res.code == "ok") {
+                        location.href = res.data;
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                }
+                );
+            },
             sss(){
                 this.$refs.addRem.style.display="none" 
             },