Min 1 jaar geleden
bovenliggende
commit
a0d7b72368
17 gewijzigde bestanden met toevoegingen van 650 en 3 verwijderingen
  1. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProFunWorkContextController.java
  2. 30 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  3. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectFunctionalDivisionController.java
  4. 44 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProFunWorkContext.java
  5. 60 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectFunctionalDivision.java
  6. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProFunWorkContextMapper.java
  7. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectFunctionalDivisionMapper.java
  8. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProFunWorkContextService.java
  9. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectFunctionalDivisionService.java
  10. 13 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  11. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProFunWorkContextServiceImpl.java
  12. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectFunctionalDivisionServiceImpl.java
  13. 61 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  14. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/CodeGenerator.java
  15. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProFunWorkContextMapper.xml
  16. 19 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectFunctionalDivisionMapper.xml
  17. 259 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProFunWorkContextController.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 2023-10-16
+ */
+@RestController
+@RequestMapping("/pro-fun-work-context")
+public class ProFunWorkContextController {
+
+}
+

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

@@ -1363,6 +1363,36 @@ public class ProjectController {
     public HttpRespMsg getTimeCostByToken(@RequestBody String json){
         return projectService.getTimeCostByToken(json);
     }
+    
+    @RequestMapping("/editFunctionalDivision")
+    public HttpRespMsg editFunctionalDivision(String json){
+        return projectService.editFunctionalDivision(json);
+    }
+
+    @RequestMapping("/deleteFunctionalDivision")
+    public HttpRespMsg deleteFunctionalDivision(Integer id){
+        return projectService.deleteFunctionalDivision(id);
+    }
+
+    @RequestMapping("/getFunctionalDivisionList")
+    public HttpRespMsg getFunctionalDivisionList(){
+        return  projectService.getFunctionalDivisionList();
+    }
+
+    @RequestMapping("editFunWorkContext")
+    public HttpRespMsg editFunWorkContext( String json){
+        return projectService.editFunWorkContext(json);
+    }
+
+    @RequestMapping("/deleteFunWorkContext")
+    public HttpRespMsg deleteFunWorkContext(Integer id){
+        return projectService.deleteFunWorkContext(id);
+    }
+
+    @RequestMapping("/getFunWorkContextList")
+    public HttpRespMsg getFunWorkContextList(Integer id){
+        return  projectService.getFunWorkContextList(id);
+    }
 
 
 

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectFunctionalDivisionController.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 2023-10-16
+ */
+@RestController
+@RequestMapping("/project-functional-division")
+public class ProjectFunctionalDivisionController {
+
+}
+

+ 44 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProFunWorkContext.java

@@ -0,0 +1,44 @@
+package com.management.platform.entity;
+
+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 2023-10-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ProFunWorkContext extends Model<ProFunWorkContext> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 职能表id
+     */
+    @TableId("pro_fun_id")
+    private Integer proFunId;
+
+    /**
+     * 工作内容
+     */
+    @TableField("work_context")
+    private String workContext;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.proFunId;
+    }
+
+}

+ 60 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectFunctionalDivision.java

@@ -0,0 +1,60 @@
+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 2023-10-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ProjectFunctionalDivision extends Model<ProjectFunctionalDivision> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 公司id
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 工作类型
+     */
+    @TableField("time_type")
+    private String timeType;
+
+    /**
+     * 角色
+     */
+    @TableField("role")
+    private String role;
+
+    /**
+     * 工作职责
+     */
+    @TableField("job_respon")
+    private String jobRespon;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

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

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

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

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

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

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

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

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

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

@@ -1,6 +1,7 @@
 package com.management.platform.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.entity.ProFunWorkContext;
 import com.management.platform.entity.Project;
 import com.management.platform.entity.ProjectSeparate;
 import com.management.platform.entity.vo.OvertimeListVO;
@@ -247,4 +248,16 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg getProjectListByToken(String json);
 
     HttpRespMsg getTimeCostByToken(String json);
+
+    HttpRespMsg editFunctionalDivision(String json);
+
+    HttpRespMsg deleteFunctionalDivision(Integer id);
+
+    HttpRespMsg getFunctionalDivisionList();
+
+    HttpRespMsg editFunWorkContext(String json);
+
+    HttpRespMsg deleteFunWorkContext(Integer id);
+
+    HttpRespMsg getFunWorkContextList(Integer id);
 }

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

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.ProFunWorkContext;
+import com.management.platform.mapper.ProFunWorkContextMapper;
+import com.management.platform.service.ProFunWorkContextService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-10-16
+ */
+@Service
+public class ProFunWorkContextServiceImpl extends ServiceImpl<ProFunWorkContextMapper, ProFunWorkContext> implements ProFunWorkContextService {
+
+}

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

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.ProjectFunctionalDivision;
+import com.management.platform.mapper.ProjectFunctionalDivisionMapper;
+import com.management.platform.service.ProjectFunctionalDivisionService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-10-16
+ */
+@Service
+public class ProjectFunctionalDivisionServiceImpl extends ServiceImpl<ProjectFunctionalDivisionMapper, ProjectFunctionalDivision> implements ProjectFunctionalDivisionService {
+
+}

+ 61 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -39,6 +39,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -218,6 +219,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     private ProjectDocumentTemplateMapper projectDocumentTemplateMapper;
     @Resource
     private ThirdPartyInterfaceMapper thirdPartyInterfaceMapper;
+    @Resource
+    private ProjectFunctionalDivisionService projectFunctionalDivisionService;
+    @Resource
+    private ProFunWorkContextService proFunWorkContextService;
 
     @Resource
     private HttpServletResponse response;
@@ -10984,4 +10989,60 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         }
         return msg;
     }
+
+    @Override
+    public HttpRespMsg editFunctionalDivision(String json) {
+        HttpRespMsg msg=new HttpRespMsg();
+        List<ProjectFunctionalDivision> projectFunctionalDivisions = JSONArray.parseArray(String.valueOf(JSON.toJSON(json)), ProjectFunctionalDivision.class);
+        if(!projectFunctionalDivisionService.saveOrUpdateBatch(projectFunctionalDivisions)){
+            msg.setError("验证失败");
+        };
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg deleteFunctionalDivision(Integer id) {
+        HttpRespMsg msg=new HttpRespMsg();
+        //todo:存在已填日报绑定不能删除
+        if(!projectFunctionalDivisionService.removeById(id)){
+            msg.setError("验证失败");
+        }
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg getFunctionalDivisionList() {
+        HttpRespMsg msg=new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        List<ProjectFunctionalDivision> divisionList = projectFunctionalDivisionService.list(new QueryWrapper<ProjectFunctionalDivision>().eq("company_id", companyId));
+        msg.setData(divisionList);
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg editFunWorkContext(String json) {
+        HttpRespMsg msg=new HttpRespMsg();
+        List<ProFunWorkContext> proFunWorkContexts = JSONArray.parseArray(json, ProFunWorkContext.class);
+        if(!proFunWorkContextService.saveOrUpdateBatch(proFunWorkContexts)){
+            msg.setError("验证失败");
+        };
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg deleteFunWorkContext(Integer id) {
+        HttpRespMsg msg=new HttpRespMsg();
+        if(!proFunWorkContextService.removeById(id)){
+            msg.setError("验证失败");
+        }
+        return msg;
+    }
+
+    @Override
+    public HttpRespMsg getFunWorkContextList(Integer id) {
+        HttpRespMsg msg=new HttpRespMsg();
+        List<ProFunWorkContext> contexts = proFunWorkContextService.list(new QueryWrapper<ProFunWorkContext>().eq("pro_fun_id", id));
+        msg.setData(contexts);
+        return msg;
+    }
 }

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/CodeGenerator.java

@@ -92,11 +92,11 @@ public class CodeGenerator {
 
         // 数据源配置
         DataSourceConfig dsc = new DataSourceConfig();
-        dsc.setUrl("jdbc:mysql://47.101.180.183:3306/man_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8");
+        dsc.setUrl("jdbc:mysql://47.101.180.183:17089/man_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8");
 //        dsc.setSchemaName("public");
         dsc.setDriverName("com.mysql.cj.jdbc.Driver");
         dsc.setUsername("root");
-        dsc.setPassword("HuoshiDB@2022");
+        dsc.setPassword("P011430@Huoshi*");
         mpg.setDataSource(dsc);
 
         // 包配置

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProFunWorkContextMapper.xml

@@ -0,0 +1,16 @@
+<?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.ProFunWorkContextMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ProFunWorkContext">
+        <id column="pro_fun_id" property="proFunId" />
+        <result column="work_context" property="workContext" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        pro_fun_id, work_context
+    </sql>
+
+</mapper>

+ 19 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectFunctionalDivisionMapper.xml

@@ -0,0 +1,19 @@
+<?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.ProjectFunctionalDivisionMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ProjectFunctionalDivision">
+        <id column="id" property="id" />
+        <result column="company_id" property="companyId" />
+        <result column="time_type" property="timeType" />
+        <result column="role" property="role" />
+        <result column="job_respon" property="jobRespon" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, company_id, time_type, role, job_respon
+    </sql>
+
+</mapper>

+ 259 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -92,6 +92,9 @@
                             <el-dropdown-item v-if="user.timeType.syncFanwei==1">
                                 <el-link type="primary" :underline="false" @click="syncProjectForFanWei()">{{'同步项目信息'}}</el-link>
                             </el-dropdown-item>
+                            <el-dropdown-item>
+                                <el-link type="primary" :underline="false" @click="functionalDivisionDig=true,getFunctionalList()">{{'职能分工设置'}}</el-link>
+                            </el-dropdown-item>
                         </el-dropdown-menu>
                         </el-dropdown>
                 </el-form-item>
@@ -1404,7 +1407,89 @@
                 <div >
                     {{importResultMsg}}
                 </div>
-            </el-dialog>
+        </el-dialog>
+
+        <!-- 项目模块管理 -->
+        <el-dialog :title="'职能分工设置'" v-if="functionalDivisionDig" :visible.sync="functionalDivisionDig" width="80%">
+            <el-table border :data="functionalList" style="width: 100%">
+                <el-table-column prop="id" label="序号" width="50" type="index" align="center"
+                                    :index="index=>index+1"/>
+                <el-table-column prop="timeType" label="工时类型" align="center">
+                    <template slot-scope="scope">
+                        <span v-show="!scope.row.editFlag">{{scope.row.timeType}}</span>
+                        <el-select v-show="scope.row.editFlag" v-model="scope.row.timeType" placeholder="请选择">
+                            <el-option
+                            v-for="item in timeTypeList"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.label">
+                            </el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="roleId" label="角色" align="center">
+                    <template  slot-scope="scope">
+                        <span v-show="!scope.row.editFlag">{{scope.row.role}}</span>
+                        <el-select v-show="scope.row.editFlag" v-model="scope.row.role" placeholder="请选择">
+                            <el-option
+                            v-for="item in roleList"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.label">
+                            </el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="jobRespon" label="工作职责" align="center">
+                    <template  slot-scope="scope">
+                        <span v-show="!scope.row.editFlag">{{scope.row.jobRespon}}</span>
+                        <el-input v-show="scope.row.editFlag"
+                                    v-model="scope.row.jobRespon">
+                        </el-input>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="workContext" label="工作内容" align="center">
+                    <template>
+                        <a style="color:#409EFF">{{'数据维护'}}</a>
+                    </template>
+                </el-table-column>
+                <el-table-column label="操作" width="120" align="center">
+                    <template  slot-scope="scope">
+                        <div style="display: flex;">
+                            <el-button size="small"
+                                        type="text"
+                                        icon="CircleCheck"
+                                        v-show="scope.row.editFlag"
+                                        @click="functionalSubmit(scope.row)">确定
+                            </el-button>
+                            <el-button size="small"
+                                        type="text"
+                                        icon="CircleClose"
+                                        v-show="scope.row.editFlag"
+                                        @click="functionalCancel(scope.row,scope.$index)">取消
+                            </el-button>
+                            <el-button size="small"
+                                        icon="Edit"
+                                        type="text"
+                                        v-show="!scope.row.editFlag"
+                                        @click="functionalEditVersion(scope.row)"> 编辑
+                            </el-button>
+                            <el-button size="small"
+                                        icon="Delete"
+                                        type="text"
+                                        v-show="!scope.row.editFlag"
+                                        @click="functionalDelVersion(scope.row,scope.$index)">删除
+                            </el-button>
+                        </div>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <div slot="footer" class="dialog-footer">
+                <el-button @click="addFunctional()" type="primary">添加一行</el-button>
+                <el-button  @click="functionalDivisionDig = false" >{{ $t('btn.cancel') }}</el-button>
+                <el-button type="primary" @click="submitFunctional()">{{ $t('btn.determine') }}</el-button>
+            </div>
+        </el-dialog>
     </section>
 </template>
 <style scoped>
@@ -1662,6 +1747,28 @@ a {
 
                 // 威派格定制(只有管理员才能更改项目名称,编号,级别,合同,大区,经理)
                 isShowProjectName: false,
+                functionalDivisionDig:false,
+                functionalList:[],
+                timeTypeList:[
+                    {
+                        value: 1,
+                        label: '项目工时'
+                    },
+                    {
+                        value: 2,
+                        label: '非项目工时'
+                    },
+                ],
+                roleList:[
+                    {
+                        value: 1,
+                        label: 'CRC&LM'
+                    },
+                    {
+                        value: 2,
+                        label: 'PM'
+                    },
+                ],
             };
         },
         // 过滤器
@@ -4875,7 +4982,157 @@ a {
             //计算预估工时
             jisuanEstimatedWorkTime(manDay){
                 this.estimatedWorkTime=manDay*this.user.timeType.allday
+            },
+            //点击添加
+            addFunctional(){
+                this.functionalList.push({
+                    "id":null,
+                    'timeType': '',
+                    'role': '',
+                    'jobRespon': '',
+                    "companyId":this.user.companyId,
+                    'editFlag': true,  // 可编辑标识
+                    'isSubmit': false, // 是否点击确定标识
+                })
+                console.log("----------",this.functionalList)
+            },
+            // 确定
+            functionalSubmit(row){
+                row.editFlag = false
+                row.isSubmit = true
+            },
+            // 取消
+            functionalCancel(row, index){
+                console.log("index",index,'row',row)
+                row.editFlag = false
+                if (row.isSubmit) {
+                    this.functionalList[index] = row
+                } else {
+                    console.log("del-index",index,'del-row',row)
+                    this.functionalDelVersion(row,index);
+                }
+            },
+            // 编辑
+            functionalEditVersion(row){
+                // v.value = JSON.parse(JSON.stringify(row));
+                row.editFlag = true;
+            },
+            // 删除
+            functionalDelVersion (row,index){
+                console.log("index",index,'row',row)
+                if(row.id==null){
+                    this.functionalList.splice(index, 1)
+                    return
+                }
+                this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
+                    confirmButtonText: '确定',
+                    cancelButtonText: '取消',
+                    type: 'warning'
+                }).then(() => {
+                    this.functionalList.splice(index, 1)
+                    this.http.post('/project/deleteFunctionalDivision',{ 
+                        id:row.id,
+                    },
+                    res => {
+                        if (res.code == "ok") {
+                            this.$message({
+                                message: '删除成功',
+                                type: "success"
+                            });
+                        } else {
+                            this.$message({
+                                message: res.msg,
+                                type: "error"
+                            });
+                        }
+                    },
+                    error => {
+                        this.$message({
+                            message: error,
+                            type: "error"
+                        });
+                        }
+                    );
+                }).catch(() => {
+                    this.$message({
+                        type: 'info',
+                        message: '已取消删除'
+                    });          
+                });
+                
+            },
+            //保存职能分工
+            submitFunctional(){
+                this.http.post('/project/editFunctionalDivision',{ 
+                    json:JSON.stringify(this.functionalList),
+                },
+                res => {
+                    if (res.code == "ok") {
+                        this.$message({
+                            message: '操作成功',
+                            type: "success"
+                        });
+                        this.getFunctionalList()
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                    }
+                );
+            },
+            //获取职能列表
+            getFunctionalList(){
+                this.http.post('/project/getFunctionalDivisionList',{},
+                res => {
+                    if (res.code == "ok") {
+                        this.functionalList=res.data
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                    }
+                );
+            },
+            //获取角色列表
+            getRoleList(){
+                this.http.post('/permission/getRoleList',{ 
+                    companyId:this.user.companyId,
+                },
+                res => {
+                    if (res.code == "ok") {
+                        this.roleList=res.data
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                    }
+                );
             }
+
         },
         created() {
             let height = window.innerHeight;
@@ -4902,6 +5159,7 @@ a {
             this.getClfConfigList()
             this.yanjiuzx()
             this.getObtain()
+            // this.getRoleList()
 
             // 判断是否有供应商字段
             if(this.user.company.packageProvider == 1){