Procházet zdrojové kódy

任务导出增加选择类型,添加任务进展相关接口

seyason před 4 roky
rodič
revize
c3f3e61ac6
13 změnil soubory, kde provedl 308 přidání a 66 odebrání
  1. 7 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  2. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java
  3. 6 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java
  4. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java
  5. 3 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  6. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskService.java
  7. 37 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  8. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java
  9. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  10. 3 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskMapper.xml
  11. 78 21
      fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue
  12. 78 18
      fhKeeper/formulahousekeeper/timesheet/src/views/project/earning.vue
  13. 69 12
      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

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

@@ -500,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);
     }
 }
 

+ 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);
 }

+ 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);
 

+ 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);
 }

+ 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;
+    }
 }

+ 2 - 2
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");

+ 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>

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskMapper.xml

@@ -106,6 +106,9 @@
         SELECT task.* , IFNULL(SUM(report.`working_time`),0) AS work_hours FROM task
         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>

+ 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,
@@ -157,7 +148,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,

+ 69 - 12
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;">
@@ -544,6 +544,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>
@@ -580,16 +596,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,
@@ -706,9 +714,58 @@ 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},
+                this.http.post('/task/exportTask', {projectId: this.curProjectId, taskType: this.exportTaskType},
                 res => {
                     if (res.code == "ok") {
                         location.href = res.data;