Browse Source

11482-【CR】【投资系统】增加审批流程- 项目机会状态、总裁室审批

hxy 1 month ago
parent
commit
ca1a34684b
32 changed files with 899 additions and 111 deletions
  1. 1 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/invest/TProjectPoolController.java
  2. 10 11
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/InvestmentOpportunityController.java
  3. 1 1
      ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IInvestmentOpportunityService.java
  4. 34 13
      ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/ApprovalServiceImpl.java
  5. 19 3
      ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/DecisionServiceImpl.java
  6. 31 7
      ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/InvestigateServiceImpl.java
  7. 29 9
      ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/InvestmentOpportunityServiceImpl.java
  8. 2 1
      ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectApproval.java
  9. 2 1
      ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectDecision.java
  10. 2 1
      ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectInvestigate.java
  11. 4 2
      ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectPool.java
  12. 1 1
      ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectTermination.java
  13. 2 2
      ruoyi-system/src/main/java/com/ruoyi/invest/mapper/InvestmentOpportunityMapper.java
  14. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TProjectPoolVo.java
  15. 2 2
      ruoyi-system/src/main/resources/mapper/invest/InvestmentOpportunityMapper.xml
  16. 5 2
      ruoyi-system/src/main/resources/mapper/invest/TProjectPoolMapper.xml
  17. 8 0
      ruoyi-ui/src/api/project/investOpp/pool.js
  18. 2 2
      ruoyi-ui/src/views/project/approval/applyList.vue
  19. 10 4
      ruoyi-ui/src/views/project/approval/audit.vue
  20. 41 4
      ruoyi-ui/src/views/project/approval/projectItem.vue
  21. 2 2
      ruoyi-ui/src/views/project/decision/applyList.vue
  22. 8 4
      ruoyi-ui/src/views/project/decision/audit.vue
  23. 40 3
      ruoyi-ui/src/views/project/decision/projectItem.vue
  24. 11 7
      ruoyi-ui/src/views/project/investOpp/audit.vue
  25. 3 3
      ruoyi-ui/src/views/project/investOpp/detail.vue
  26. 2 2
      ruoyi-ui/src/views/project/investigate/applyList.vue
  27. 8 4
      ruoyi-ui/src/views/project/investigate/audit.vue
  28. 5 0
      ruoyi-ui/src/views/project/investigate/dueDiligenceList.vue
  29. 40 3
      ruoyi-ui/src/views/project/investigate/projectItem.vue
  30. 13 7
      ruoyi-ui/src/views/project/meetingList.vue
  31. 558 0
      ruoyi-ui/src/views/project/termination/terminationList.vue
  32. 2 9
      ruoyi-ui/src/views/project/termination/watchList.vue

+ 1 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/invest/TProjectPoolController.java

@@ -135,6 +135,7 @@ public class TProjectPoolController extends BaseController
         startPage();
         tProjectPool.setProjectStage("3");
         tProjectPool.setDelFlag("0");
+        tProjectPool.setProjectStatus("0");
         List<TProjectPool> list = tProjectPoolService.selectTProjectPoolList(tProjectPool)
                             .stream().map(n -> {
                                 n.settProjectMeeting(tProjectMeetingService.listProjectPoolIdNew(n.getId(),"LX"));

+ 10 - 11
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/InvestmentOpportunityController.java

@@ -59,30 +59,29 @@ public class InvestmentOpportunityController extends BaseController
         List<TProjectPoolVo> list=investmentOpportunityService.selectAllWatchList(tProjectPool);
         return getDataTable(list);
     }
-
     /**
-     * 查询所有投资机会流程
+     * 查询所有项目终止列表
      */
-    @ApiOperation("查询所有投资机会流程")
+    @ApiOperation("查询所有项目终止列表")
     @PreAuthorize("@ss.hasPermi('invest:pool:list')")
-    @GetMapping("/listAll")
-    public TableDataInfo listAll(TProjectPool tProjectPool)
+    @GetMapping("/allTerminationList")
+    public TableDataInfo allTerminationList(TProjectPool tProjectPool)
     {
         startPage();
-        List<TProjectPoolVo> list=investmentOpportunityService.selectAllInvestmentOpportunityList(tProjectPool);
+        List<TProjectPoolVo> list=investmentOpportunityService.selectAllTerminationList(tProjectPool);
         return getDataTable(list);
     }
 
     /**
-     * 查询所有审批通过投资机会流程
+     * 查询所有投资机会流程
      */
-    @ApiOperation("查询所有审批通过的投资机会流程")
+    @ApiOperation("查询所有投资机会流程")
     @PreAuthorize("@ss.hasPermi('invest:pool:list')")
-    @GetMapping("/listAllApproved")
-    public TableDataInfo listAllApproved(TProjectPool tProjectPool)
+    @GetMapping("/listAll")
+    public TableDataInfo listAll(TProjectPool tProjectPool)
     {
         startPage();
-        List<TProjectPoolVo> list=investmentOpportunityService.selectAllApprovedList(tProjectPool);
+        List<TProjectPoolVo> list=investmentOpportunityService.selectAllInvestmentOpportunityList(tProjectPool);
         return getDataTable(list);
     }
 

+ 1 - 1
ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IInvestmentOpportunityService.java

@@ -21,7 +21,7 @@ public interface IInvestmentOpportunityService
     List<TProjectPool> selectTProjectList(TProjectPool tProjectPool);
     List<TProjectPoolVo> selectAllInvestmentOpportunityList(TProjectPool tProjectPool);
     List<TProjectPoolVo> selectAllWatchList(TProjectPool tProjectPool);
-    List<TProjectPoolVo> selectAllApprovedList(TProjectPool tProjectPool);
+    List<TProjectPoolVo> selectAllTerminationList(TProjectPool tProjectPool);
     List<TProjectPoolVo> getMyTaskList(String userId, TProjectPool tProjectPool);
     List<TProjectPoolVo> getMyDoneTaskList(String userId, TProjectPool tProjectPool);
     List<TProjectPoolVo> getMyList(String userId,TProjectPool tProjectPool);

+ 34 - 13
ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/ApprovalServiceImpl.java

@@ -227,7 +227,11 @@ public class ApprovalServiceImpl extends FlowServiceFactory implements IApproval
             //List<String> userIds = Arrays.asList(tProjectMeeting.getParticipantsId().split(","));//会议人
             formProperties.put("decisionList", userIds);
         }
-
+        if(StringUtils.isNotBlank(tProjectApproval.getIsTerminate())) {//不为空代表结束流程
+            formProperties.put("whetherToEnd", true);
+        }else{
+            formProperties.put("whetherToEnd", false);
+        }
         Map<String, Object> fpMap = flowService.getFormProperties(task.getProcessDefinitionId(), task.getId());
         try {
             rs = flowService.taskComplete( task.getId(), tProjectApproval.isFlag(), formProperties, userInfo.getUserId().toString());
@@ -344,6 +348,11 @@ public class ApprovalServiceImpl extends FlowServiceFactory implements IApproval
                 isOk = tProjectApproval.isFlag() ? "[提交]" : "[关闭]";
             } else {
                 tProjectApproval.setStatus(tProjectApproval.isFlag() ? 2 : 0);
+                if("president".equals(task.getTaskDefinitionKey())){//总裁室
+                    if(!tProjectApproval.isFlag()&&StringUtils.isNotBlank(tProjectApproval.getIsTerminate())){//如果不为空代表可能是驳回(终止)或者观望
+                        isOk= "[关闭]";
+                    }
+                }
             }
             if (null != flow.getComment()) {
                 flow.setComment(isOk + flow.getComment());
@@ -357,22 +366,34 @@ public class ApprovalServiceImpl extends FlowServiceFactory implements IApproval
             // 表示流程已经审批结束了
             if (processInstance == null) {
                 flow.setStatus(FlowStatusEnum.ENDED.getName());
-                if (!"modifyApply".equals(task.getTaskDefinitionKey())&&!"president".equals(task.getTaskDefinitionKey())) {
-                    tProjectApproval.setStatus(3);
-                    tProjectPool.setProjectStage("4");//项目阶段-尽调背调
-                    tProjectPool.setProjectState("f");//项目状态-尽调背调
-                    tProjectPool.setUpdateBy(userInfo.getNickName());
-                    tProjectPool.setProjectDate(new Date());//立项通过日期
-                    // todo 增加项目创建记录
-                    tProjectCirculationService.insertTProjectCirculation(tProjectPool.getId(),"项目立项完成", userInfo.getNickName());
-                }else{
+                if (!"modifyApply".equals(task.getTaskDefinitionKey())) {
+                    if(tProjectApproval.isFlag()) {//审批通过
+                        tProjectApproval.setStatus(3);
+                        tProjectPool.setProjectStage("4");//项目阶段-尽调背调
+                        tProjectPool.setProjectState("f");//项目状态-尽调背调
+                        tProjectPool.setUpdateBy(userInfo.getNickName());
+                        tProjectPool.setProjectDate(new Date());//立项通过日期
+                        // todo 增加项目创建记录
+                        tProjectCirculationService.insertTProjectCirculation(tProjectPool.getId(), "项目立项完成", userInfo.getNickName());
+                    }else{//终止和观望
+                        if(StringUtils.isNotBlank(tProjectApproval.getIsTerminate())) {
+                            tProjectApproval.setStatus(4);//流程状态为关闭
+                            if ("1".equals(tProjectApproval.getIsTerminate())) {
+                                tProjectPool.setProjectStatus("1");//终止
+                            } else {
+                                tProjectPool.setProjectStatus("2");//观望
+                            }
+                            tProjectPool.setProjectStage("3");//项目阶段-项目立项
+                            tProjectPool.setProjectState("c");//项目状态-准备立项材料
+                            tProjectPool.setApprovalFlag("0");
+                            tProjectPool.setUpdateBy(userInfo.getNickName());
+                        }
+                    }
+                }else{//暂存的关闭
                     tProjectPool.setProjectStage("3");//项目阶段-项目立项
                     tProjectPool.setProjectState("c");//项目状态-准备立项材料
                     tProjectPool.setApprovalFlag("0");
                     tProjectPool.setUpdateBy(userInfo.getNickName());
-                    if("president".equals(task.getTaskDefinitionKey())){
-                        tProjectApproval.setStatus(4);//关闭
-                    }
                 }
                 tProjectPoolService.updateTProjectPool(tProjectPool);
             }

+ 19 - 3
ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/DecisionServiceImpl.java

@@ -239,7 +239,11 @@ public class DecisionServiceImpl extends FlowServiceFactory implements IDecision
             //List<String> userIds = Arrays.asList(tProjectMeeting.getParticipantsId().split(","));//会议人
             formProperties.put("decisionList", userIds);
         }
-
+        if(StringUtils.isNotBlank(tProjectDecision.getIsTerminate())) {//不为空代表结束流程
+            formProperties.put("whetherToEnd", true);
+        }else{
+            formProperties.put("whetherToEnd", false);
+        }
         Map<String, Object> fpMap = flowService.getFormProperties(task.getProcessDefinitionId(), task.getId());
         try {
             rs = flowService.taskComplete( task.getId(), tProjectDecision.isFlag(), formProperties, userInfo.getUserId().toString());
@@ -343,6 +347,11 @@ public class DecisionServiceImpl extends FlowServiceFactory implements IDecision
                 isOk = tProjectDecision.isFlag() ? "[提交]" : "[关闭]";
             } else {
                 tProjectDecision.setStatus(tProjectDecision.isFlag() ? 2 : 0);
+                if("president".equals(task.getTaskDefinitionKey())){//总裁室
+                    if(!tProjectDecision.isFlag()&&StringUtils.isNotBlank(tProjectDecision.getIsTerminate())){//如果不为空代表可能是驳回(终止)或者观望
+                        isOk= "[关闭]";
+                    }
+                }
             }
             if (null != flow.getComment()) {
                 flow.setComment(isOk + flow.getComment());
@@ -369,8 +378,15 @@ public class DecisionServiceImpl extends FlowServiceFactory implements IDecision
                     tProjectPool.setProjectState("c");//项目状态-
                     tProjectPool.setDecisionFlag("0");
                     tProjectPool.setUpdateBy(userInfo.getNickName());
-                    if("president".equals(task.getTaskDefinitionKey())){
-                        tProjectDecision.setStatus(4);//关闭
+                    if("president".equals(task.getTaskDefinitionKey())){//终止和观望
+                        if(StringUtils.isNotBlank(tProjectDecision.getIsTerminate())) {
+                            tProjectDecision.setStatus(4);//流程状态为关闭
+                            if ("1".equals(tProjectDecision.getIsTerminate())) {
+                                tProjectPool.setProjectStatus("1");//终止
+                            } else {
+                                tProjectPool.setProjectStatus("2");//观望
+                            }
+                        }
                     }
                 }
                 tProjectPoolService.updateTProjectPool(tProjectPool);

+ 31 - 7
ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/InvestigateServiceImpl.java

@@ -222,6 +222,11 @@ public class InvestigateServiceImpl extends FlowServiceFactory implements IInves
             List<String> userIds = Arrays.asList(tProjectInvestigate.getInvestigatePersonId().split(","));
             formProperties.put("uploadList", userIds);
         }
+        if(StringUtils.isNotBlank(tProjectInvestigate.getIsTerminate())) {//不为空代表结束流程
+            formProperties.put("whetherToEnd", true);
+        }else{
+            formProperties.put("whetherToEnd", false);
+        }
         Map<String, Object> fpMap = flowService.getFormProperties(task.getProcessDefinitionId(), task.getId());
         try {
             rs = flowService.taskComplete( task.getId(), tProjectInvestigate.isFlag(), formProperties, userInfo.getUserId().toString());
@@ -282,6 +287,11 @@ public class InvestigateServiceImpl extends FlowServiceFactory implements IInves
                 isOk = tProjectInvestigate.isFlag() ? "[提交]" : "[关闭]";
             } else {
                 tProjectInvestigate.setStatus(tProjectInvestigate.isFlag() ? 2 : 0);
+                if("president".equals(task.getTaskDefinitionKey())){//总裁室
+                    if(!tProjectInvestigate.isFlag()&&StringUtils.isNotBlank(tProjectInvestigate.getIsTerminate())){//如果不为空代表可能是驳回(终止)或者观望
+                        isOk= "[关闭]";
+                    }
+                }
             }
             if (null != flow.getComment()) {
                 flow.setComment(isOk + flow.getComment());
@@ -296,13 +306,27 @@ public class InvestigateServiceImpl extends FlowServiceFactory implements IInves
             if (processInstance == null) {
                 flow.setStatus(FlowStatusEnum.ENDED.getName());
                 if (!"modifyApply".equals(task.getTaskDefinitionKey())) {
-                    tProjectInvestigate.setStatus(3);
-                    tProjectPool.setProjectStage("5");//项目阶段-项目投决
-                    tProjectPool.setProjectState("h");//项目状态-准备项目投决材料
-                    tProjectPool.setUpdateBy(userInfo.getNickName());
-                    //tProjectPool.setInvestigateDate(new Date());//投决通过日期
-                    // todo 增加项目创建记录
-                    tProjectCirculationService.insertTProjectCirculation(tProjectPool.getId(),"尽职背调完成", userInfo.getNickName());
+                    if(tProjectInvestigate.isFlag()) {//审批通过
+                        tProjectInvestigate.setStatus(3);
+                        tProjectPool.setProjectStage("5");//项目阶段-项目投决
+                        tProjectPool.setProjectState("h");//项目状态-准备项目投决材料
+                        tProjectPool.setUpdateBy(userInfo.getNickName());
+                        // todo 增加项目创建记录
+                        tProjectCirculationService.insertTProjectCirculation(tProjectPool.getId(), "尽职背调完成", userInfo.getNickName());
+                    }else{//终止和观望
+                        if(StringUtils.isNotBlank(tProjectInvestigate.getIsTerminate())) {
+                            tProjectInvestigate.setStatus(4);//流程状态为关闭
+                            if ("1".equals(tProjectInvestigate.getIsTerminate())) {
+                                tProjectPool.setProjectStatus("1");//终止
+                            } else {
+                                tProjectPool.setProjectStatus("2");//观望
+                            }
+                            tProjectPool.setProjectStage("4");//项目阶段-尽职背调
+                            tProjectPool.setProjectState("f");//项目状态-尽职背调
+                            tProjectPool.setInvestigateFlag("0");
+                            tProjectPool.setUpdateBy(userInfo.getNickName());
+                        }
+                    }
                 }else{
                     tProjectPool.setProjectStage("4");//项目阶段-尽职背调
                     tProjectPool.setProjectState("f");//项目状态-尽职背调

+ 29 - 9
ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/InvestmentOpportunityServiceImpl.java

@@ -93,8 +93,8 @@ public class InvestmentOpportunityServiceImpl extends FlowServiceFactory impleme
         return investmentOpportunityMapper.selectAllWatchList(tProjectPool);
     }
     @Override
-    public List<TProjectPoolVo> selectAllApprovedList(TProjectPool tProjectPool){
-        return investmentOpportunityMapper.selectAllApprovedList(tProjectPool);
+    public List<TProjectPoolVo> selectAllTerminationList(TProjectPool tProjectPool){
+        return investmentOpportunityMapper.selectAllTerminationList(tProjectPool);
     }
     @Override
     public List<TProjectPoolVo> getMyTaskList(String userId, TProjectPool tProjectPool){
@@ -248,7 +248,11 @@ public class InvestmentOpportunityServiceImpl extends FlowServiceFactory impleme
         String leader=sysDeptMapper.selectDeptLeader("投资部");
         SysUser sysUser=sysUserService.selectUserByUserName(leader);
         formProperties.put("MANAGER",sysUser.getUserId());
-        //taskService.complete(task.getId(), formProperties);
+        if(StringUtils.isNotBlank(tProjectPool.getIsTerminate())) {//不为空代表结束流程
+            formProperties.put("whetherToEnd", true);
+        }else{
+            formProperties.put("whetherToEnd", false);
+        }
         Map<String, Object> fpMap = flowService.getFormProperties(task.getProcessDefinitionId(), task.getId());
         try {
             rs = flowService.taskComplete( task.getId(), tProjectPool.isFlag(), formProperties, userInfo.getUserId().toString());
@@ -334,6 +338,11 @@ public class InvestmentOpportunityServiceImpl extends FlowServiceFactory impleme
                 isOk = tProjectPool.isFlag() ? "[提交]" : "[关闭]";
             } else {
                 tProjectPool.setStatus(tProjectPool.isFlag() ? 2 : 0);
+                if("presidents".equals(task.getTaskDefinitionKey())){//总裁室
+                    if(!tProjectPool.isFlag()&&StringUtils.isNotBlank(tProjectPool.getIsTerminate())){//如果不为空代表可能是驳回(终止)或者观望
+                        isOk= "[关闭]";
+                    }
+                }
             }
             if (null != flow.getComment()) {
                 flow.setComment(isOk + flow.getComment());
@@ -346,12 +355,23 @@ public class InvestmentOpportunityServiceImpl extends FlowServiceFactory impleme
             // 表示流程已经审批结束了
             if (processInstance == null) {
                 flow.setStatus(FlowStatusEnum.ENDED.getName());
-                if (!"modifyApply".equals(task.getTaskDefinitionKey())) {
-                    tProjectPool.setStatus(3);
-                    tProjectPool.setProjectStage("3");//项目阶段-项目立项
-                    tProjectPool.setProjectState("c");//项目状态-准备立项材料
-                    // todo 增加项目创建记录
-                    tProjectCirculationService.insertTProjectCirculation(tProjectPool.getId(), "项目报备完成", userInfo.getNickName());
+                if (!"modifyApply".equals(task.getTaskDefinitionKey())) {//
+                    if(tProjectPool.isFlag()) {//审批通过
+                        tProjectPool.setStatus(3);
+                        tProjectPool.setProjectStage("3");//项目阶段-项目立项
+                        tProjectPool.setProjectState("c");//项目状态-准备立项材料
+                        // todo 增加项目创建记录
+                        tProjectCirculationService.insertTProjectCirculation(tProjectPool.getId(), "项目报备完成", userInfo.getNickName());
+                    }else{//总裁室的驳回
+                        if(StringUtils.isNotBlank(tProjectPool.getIsTerminate())) {
+                            tProjectPool.setStatus(4);//流程状态为关闭
+                            if ("1".equals(tProjectPool.getIsTerminate())) {
+                                tProjectPool.setProjectStatus("1");//终止
+                            } else {
+                                tProjectPool.setProjectStatus("2");//观望
+                            }
+                        }
+                    }
                 }
             }
             tProjectPool.setUpdateBy(userInfo.getNickName());

+ 2 - 1
ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectApproval.java

@@ -63,7 +63,7 @@ public class TProjectApproval extends BaseEntity
      * 流程状态
      */
     @ApiModelProperty("流程状态")
-    private int status;//流程状态( //0暂存1已提交2审批中3审批通过4关闭)
+    private Integer status;//流程状态( //0暂存1已提交2审批中3审批通过4关闭)
 
     //表外
     private String procInstId;//流程实例Id
@@ -71,6 +71,7 @@ public class TProjectApproval extends BaseEntity
     private String taskDefKey;
 
     private boolean flag; // true - 同意; false - 驳回
+    private String isTerminate; // 是否终止 0 - 否/观望; 1 - 是/终止N
 
     public void setId(String id) 
     {

+ 2 - 1
ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectDecision.java

@@ -58,7 +58,7 @@ public class TProjectDecision extends BaseEntity
      * 流程状态
      */
     @ApiModelProperty("流程状态")
-    private int status;//流程状态( //0暂存1已提交2审批中3审批通过4关闭)
+    private Integer status;//流程状态( //0暂存1已提交2审批中3审批通过4关闭)
 
     //表外
     private String procInstId;//流程实例Id
@@ -66,6 +66,7 @@ public class TProjectDecision extends BaseEntity
     private String taskDefKey;
 
     private boolean flag; // true - 同意; false - 驳回
+    private String isTerminate; // 是否终止 0 - 否/观望; 1 - 是/终止
 
     public void setId(String id) 
     {

+ 2 - 1
ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectInvestigate.java

@@ -93,9 +93,10 @@ public class TProjectInvestigate extends BaseEntity
      * 流程状态
      */
     @ApiModelProperty("流程状态")
-    private int status;//流程状态( //0暂存1已提交2审批中3审批通过4关闭)
+    private Integer status;//流程状态( //0暂存1已提交2审批中3审批通过4关闭)
     //表外
     private boolean flag;
+    private String isTerminate; // 是否终止 0 - 否/观望; 1 - 是/终止
 
     private String taskId;//任务节点编号
     private String taskDefKey;

+ 4 - 2
ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectPool.java

@@ -222,7 +222,7 @@ public class TProjectPool extends BaseEntity
      * 流程状态
      */
     @ApiModelProperty("流程状态")
-    private int status;//流程状态( //0暂存1已提交2审批中3审批通过4关闭)
+    private Integer status;//流程状态( //0暂存1已提交2审批中3审批通过4关闭)
     //表外
     private boolean flag; // true - 同意; false - 驳回
 
@@ -233,7 +233,9 @@ public class TProjectPool extends BaseEntity
      * 项目状态(0正常、1终止、2观望)
      */
     @ApiModelProperty("项目机会状态")
-    private int projectStatus;
+    private String projectStatus;
+
+    private String isTerminate; // 是否终止 0 - 否/观望; 1 - 是/终止
 
     public void setId(String id) 
     {

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/invest/domain/TProjectTermination.java

@@ -41,7 +41,7 @@ public class TProjectTermination extends BaseEntity
      * 流程状态
      */
     @ApiModelProperty("流程状态")
-    private int status;//流程状态( //0暂存1已提交2审批中3审批通过4关闭)
+    private Integer status;//流程状态( //0暂存1已提交2审批中3审批通过4关闭)
 
 
     //表外

+ 2 - 2
ruoyi-system/src/main/java/com/ruoyi/invest/mapper/InvestmentOpportunityMapper.java

@@ -19,8 +19,8 @@ public interface InvestmentOpportunityMapper {
     List<TProjectPoolVo> selectAllInvestmentOpportunityList(@Param("projectPool")TProjectPool tProjectPool);
     /*查询所有项目观望列表*/
     List<TProjectPoolVo> selectAllWatchList(@Param("projectPool")TProjectPool tProjectPool);
-    /*查询所有额审批通过投资机会*/
-    List<TProjectPoolVo> selectAllApprovedList(@Param("projectPool")TProjectPool tProjectPool);
+    /*查询所有项目终止列表*/
+    List<TProjectPoolVo> selectAllTerminationList(@Param("projectPool")TProjectPool tProjectPool);
     /*待办任务*/
     List<TProjectPoolVo> getMyTaskList(@Param("userId") String userId,@Param("projectPool")TProjectPool tProjectPool);
     /*已办任务*/

+ 1 - 1
ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TProjectPoolVo.java

@@ -227,7 +227,7 @@ public class TProjectPoolVo extends BaseEntity
      * 项目状态(0正常、1终止、2观望)
      */
     @ApiModelProperty("项目机会状态")
-    private int projectStatus;
+    private String projectStatus;
 
     //流程信息
     @ApiModelProperty("流程实例ID")

+ 2 - 2
ruoyi-system/src/main/resources/mapper/invest/InvestmentOpportunityMapper.xml

@@ -317,7 +317,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where a.project_status="2" and a.status=3
         <include refid="where_sql"></include>
     </select>
-    <select id="selectAllApprovedList" resultMap="TProjectPoolVoResult">
+    <select id="selectAllTerminationList" resultMap="TProjectPoolVoResult">
         select a.id,a.proc_inst_id,a.project_name, d.channel_group project_group, a.record_date, a.project_code, a.channel, a.contact_date, a.project_date, a.decision_date, a.industry, a.company, a.description, a.project_contacts,
         a.invest_head, a.previous_financing, a.financing_stage, a.financing_condition, a.financing_money, a.financing_date, a.invest_sparkle, a.invest_valuation, a.invest_money, a.invest_type, a.invest_ploy, a.invest_worth, a.shareholding,
         a.project_stage, a.project_state, a.mark, a.approval_flag, a.investigate_flag, a.decision_flag, a.del_flag, a.create_by, a.create_time, a.update_by, a.update_time, a.status,a.project_status,
@@ -350,7 +350,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         left join (select * from sys_user limit 100000) ui on t.ASSIGNEE_ = ui.user_id
         left join ACT_RU_IDENTITYLINK ru on ru.TASK_ID_ = t.ID_
         LEFT JOIN act_re_procdef rp ON t.PROC_DEF_ID_ = rp.ID_
-        where a.del_flag="0" and a.status=3
+        where a.project_status="1"
         <include refid="where_sql"></include>
     </select>
     <select id="getMyTaskList" resultMap="TProjectPoolVoResult">

File diff suppressed because it is too large
+ 5 - 2
ruoyi-system/src/main/resources/mapper/invest/TProjectPoolMapper.xml


+ 8 - 0
ruoyi-ui/src/api/project/investOpp/pool.js

@@ -7,6 +7,14 @@ export function getAllWatchList(query) {
     params: query
   })
 }
+// 所有项目终止列表
+export function getAllTerminationList(query) {
+  return request({
+    url: '/project/investmentOpportunity/allTerminationList',
+    method: 'get',
+    params: query
+  })
+}
 // 所有投资机会列表
 export function getAllInvestOppList(query) {
   return request({

+ 2 - 2
ruoyi-ui/src/views/project/approval/applyList.vue

@@ -164,7 +164,7 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column
+<!--      <el-table-column
         label="已发起立项申请"
         align="center"
         prop="approvalFlag"
@@ -174,7 +174,7 @@
             {{ scope.row.approvalFlag === "1" ? "是" : "否" }}
           </div>
         </template>
-      </el-table-column>
+      </el-table-column>-->
       <el-table-column label="项目负责人" align="center" prop="investHead">
         <template slot-scope="scope">
           <div :title="scope.row.investHead">

+ 10 - 4
ruoyi-ui/src/views/project/approval/audit.vue

@@ -1332,7 +1332,10 @@
           <!--          <div class="btn-group">-->
           <el-button @click="goBack">返 回</el-button>
           <el-button type="success" @click="handleComplete(true)">同意</el-button>
-          <el-button v-if="formLXApply.taskDefKey!='decision'" type="warning" @click="handleComplete(false)">驳回</el-button>
+          <el-button v-if="formLXApply.taskDefKey!='decision'&&formLXApply.taskDefKey!='president'" type="warning" @click="handleComplete(false)">驳回</el-button>
+          <el-button v-if="formLXApply.taskDefKey!='decision'&&formLXApply.taskDefKey=='president'" type="warning" @click="handleComplete(false)">驳回(修改)</el-button>
+          <el-button v-if="formLXApply.taskDefKey=='president'" type="danger" @click="handleComplete(false,1)">驳回(终止)</el-button>
+          <el-button v-if="formLXApply.taskDefKey=='president'" type="warning" @click="handleComplete(false,0)">观望</el-button>
           <!--          </div>-->
         </el-form-item>
       </el-form>
@@ -1826,12 +1829,14 @@ export default {
         this.$refs.meetingForm.clearValidate(["promoter"]);
       }
     },
+    // flag 区分同意(true)和驳回(false)
+    // isTerminate , 区分是否:终止(1)和观望(0)
     /** 加载审批任务弹框 */
-    handleComplete(flag) {
-      this.taskComplete(flag);
+    handleComplete(flag,isTerminate) {
+      this.taskComplete(flag,isTerminate);
     },
     /** 用户审批任务 */
-    taskComplete(flag) {
+    taskComplete(flag,isTerminate) {
       let allValid = true;
       if(this.formLXApply.taskDefKey==="meeting") {//发起会议节点
         this.formLXApply.listFile = this.fileListLXApply;
@@ -1865,6 +1870,7 @@ export default {
       }
       //会议人
       this.formLXApply.flag=flag;
+      this.formLXApply.isTerminate=isTerminate;
       const params={
         projectApproval: this.formLXApply,  // 拆分明确字段
         projectMeeting: this.meetingForm,

+ 41 - 4
ruoyi-ui/src/views/project/approval/projectItem.vue

@@ -60,13 +60,42 @@
             />
           </template>
         </el-table-column>
-        <el-table-column label="项目状态" align="center" prop="projectState">
+<!--        <el-table-column label="项目状态" align="center" prop="projectState">
           <template slot-scope="scope">
             <dict-tag
               :options="dict.type.project_state"
               :value="scope.row.projectState"
             />
           </template>
+        </el-table-column>-->
+        <el-table-column label="项目机会状态" align="center" prop="projectStatus">
+          <template slot-scope="scope">
+            <!-- 定义状态文本映射对象 -->
+            <el-tag
+              :type="{
+              0: 'success',
+              1: 'danger',
+              2: 'warning'
+            }[scope.row.projectStatus] || 'info'"
+            >
+              {{ {
+              0: '正常',
+              1: '终止',
+              2: '观望'
+            }[scope.row.projectStatus] || '未知状态' }}
+            </el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="已发起立项申请"
+          align="center"
+          prop="approvalFlag"
+        >
+          <template slot-scope="scope">
+            <div>
+              {{ scope.row.approvalFlag === "1" ? "是" : "否" }}
+            </div>
+          </template>
         </el-table-column>
       </el-table>
       <pagination
@@ -125,6 +154,14 @@ export default {
     this.getList();
   },
   methods: {
+    // 刷新项目列表的方法
+    refreshProjectList() {
+      // 清空现有列表
+      this.poolList = [];
+      this.projectItemTotal=0;
+      // 重新请求接口获取最新数据
+      this.getList();
+    },
     clickRow(row) {
       this.$refs.dataTable.toggleRowSelection(row);
     },
@@ -150,7 +187,7 @@ export default {
     submit() {
       // console.log("确定", this.ids);
       const row = this.ids[0];
-        if (row.delFlag == "1") {
+        if (row.delFlag == "1"||row.projectStatus=="1") {
           this.$message({
             message: "项目已终止",
             duration: 1500,
@@ -175,11 +212,11 @@ export default {
             type: "error",
           });
         }
-      
+
     },
     cancel() {
       this.showProjectItem = false;
     },
   },
 };
-</script>
+</script>

+ 2 - 2
ruoyi-ui/src/views/project/decision/applyList.vue

@@ -176,7 +176,7 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column
+<!--      <el-table-column
         label="已发起投决申请"
         align="center"
         prop="decisionFlag"
@@ -186,7 +186,7 @@
             {{ scope.row.decisionFlag === "1" ? "是" : "否" }}
           </div>
         </template>
-      </el-table-column>
+      </el-table-column>-->
 
       <el-table-column label="项目负责人" align="center" prop="investHead">
         <template slot-scope="scope">

+ 8 - 4
ruoyi-ui/src/views/project/decision/audit.vue

@@ -1322,7 +1322,10 @@
           <!--          <div class="btn-group">-->
           <el-button @click="goBack">返 回</el-button>
           <el-button type="success" @click="handleComplete(true)">同意</el-button>
-          <el-button v-if="formTJApply.taskDefKey!='decision'" type="warning" @click="handleComplete(false)">驳回</el-button>
+          <el-button v-if="formTJApply.taskDefKey!='decision'&&formTJApply.taskDefKey!='president'" type="warning" @click="handleComplete(false)">驳回</el-button>
+          <el-button v-if="formTJApply.taskDefKey=='president'" type="warning" @click="handleComplete(false)">驳回(修改)</el-button>
+          <el-button v-if="formTJApply.taskDefKey=='president'" type="danger" @click="handleComplete(false,1)">驳回(终止)</el-button>
+          <el-button v-if="formTJApply.taskDefKey=='president'" type="warning" @click="handleComplete(false,0)">观望</el-button>
           <!--          </div>-->
         </el-form-item>
       </el-form>
@@ -1831,11 +1834,11 @@ export default {
       }
     },
     /** 加载审批任务弹框 */
-    handleComplete(flag) {
-      this.taskComplete(flag);
+    handleComplete(flag,isTerminate) {
+      this.taskComplete(flag,isTerminate);
     },
     /** 用户审批任务 */
-    taskComplete(flag) {
+    taskComplete(flag,isTerminate) {
       let allValid = true;
       if(this.formTJApply.taskDefKey==="meeting") {//发起会议节点
         this.formTJApply.listFile = this.fileListTJApply;
@@ -1869,6 +1872,7 @@ export default {
       }
       //会议人
       this.formTJApply.flag=flag;
+      this.formTJApply.isTerminate=isTerminate;
       const params={
         projectDecision: this.formTJApply,  // 拆分明确字段
         projectMeeting: this.meetingForm,

+ 40 - 3
ruoyi-ui/src/views/project/decision/projectItem.vue

@@ -60,13 +60,42 @@
             />
           </template>
         </el-table-column>
-        <el-table-column label="项目状态" align="center" prop="projectState">
+<!--        <el-table-column label="项目状态" align="center" prop="projectState">
           <template slot-scope="scope">
             <dict-tag
               :options="dict.type.project_state"
               :value="scope.row.projectState"
             />
           </template>
+        </el-table-column>-->
+        <el-table-column label="项目机会状态" align="center" prop="projectStatus">
+          <template slot-scope="scope">
+            <!-- 定义状态文本映射对象 -->
+            <el-tag
+              :type="{
+              0: 'success',
+              1: 'danger',
+              2: 'warning'
+            }[scope.row.projectStatus] || 'info'"
+            >
+              {{ {
+              0: '正常',
+              1: '终止',
+              2: '观望'
+            }[scope.row.projectStatus] || '未知状态' }}
+            </el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="已发起投决申请"
+          align="center"
+          prop="decisionFlag"
+        >
+          <template slot-scope="scope">
+            <div>
+              {{ scope.row.decisionFlag === "1" ? "是" : "否" }}
+            </div>
+          </template>
         </el-table-column>
       </el-table>
       <pagination
@@ -125,6 +154,14 @@ export default {
     this.getList();
   },
   methods: {
+    // 刷新项目列表的方法
+    refreshProjectList() {
+      // 清空现有列表
+      this.poolList = [];
+      this.projectItemTotal=0;
+      // 重新请求接口获取最新数据
+      this.getList();
+    },
     clickRow(row) {
       this.$refs.dataTable.toggleRowSelection(row);
     },
@@ -175,11 +212,11 @@ export default {
             type: "error",
           });
         }
-      
+
     },
     cancel() {
       this.showProjectItem = false;
     },
   },
 };
-</script>
+</script>

+ 11 - 7
ruoyi-ui/src/views/project/investOpp/audit.vue

@@ -15,7 +15,7 @@
         <el-tab-pane label="项目联系人信息" name="2"></el-tab-pane>
         <el-tab-pane label="项目融资信息" name="3"></el-tab-pane>
         <el-tab-pane label="商业计划书及其他" name="4"></el-tab-pane>
-        <el-tab-pane v-if="form.taskDefKey=='presidents' && formAssess !== null && formAssess !== undefined && formAssess !== ''"  label="软件工程院评估意见" name="5"></el-tab-pane>
+<!--        <el-tab-pane v-if="form.taskDefKey=='presidents' && formAssess !== null && formAssess !== undefined && formAssess !== ''"  label="软件工程院评估意见" name="5"></el-tab-pane>-->
       </el-tabs>
       <section>
         <el-form ref="form" :model="form" label-width="160px" class="special-el-form">
@@ -535,7 +535,7 @@
             </el-row>
           </div>
         </el-form>
-        <el-form ref="formAssess" :model="formAssess" label-width="160px" class="special-el-form">
+<!--        <el-form ref="formAssess" :model="formAssess" label-width="160px" class="special-el-form">
           <div v-if="activeName === '5'">
             <el-row :gutter="20">
               <el-col>
@@ -553,7 +553,7 @@
               </el-col>
             </el-row>
           </div>
-        </el-form>
+        </el-form>-->
       </section>
     </section>
     <section v-if="form.taskDefKey=='softwareDept'">
@@ -598,7 +598,10 @@
 <!--          <div class="btn-group">-->
             <el-button @click="goBack">返 回</el-button>
             <el-button type="success" @click="handleComplete(true)">同意</el-button>
-            <el-button type="warning" @click="handleComplete(false)">驳回</el-button>
+            <el-button v-if="form.taskDefKey!='presidents'" type="warning" @click="handleComplete(false)">驳回</el-button>
+            <el-button v-if="form.taskDefKey=='presidents'" type="warning" @click="handleComplete(false)">驳回(修改)</el-button>
+            <el-button v-if="form.taskDefKey=='presidents'" type="danger" @click="handleComplete(false,1)">驳回(终止)</el-button>
+            <el-button v-if="form.taskDefKey=='presidents'" type="warning" @click="handleComplete(false,0)">观望</el-button>
 <!--          </div>-->
         </el-form-item>
       </el-form>
@@ -833,15 +836,15 @@ export default {
       this.$tab.closeOpenPage(obj);
     },
     /** 加载审批任务弹框 */
-    handleComplete(flag) {
+    handleComplete(flag,isTerminate) {
       this.completeOpen = true;
       this.completeTitle = "流程审批";
       ///his.submitForm(flag);
 
-      this.taskComplete(flag);
+      this.taskComplete(flag,isTerminate);
     },
     /** 用户审批任务 */
-    taskComplete(flag) {
+    taskComplete(flag,isTerminate) {
 
       if (this.form.taskDefKey=='softwareDept'&&!this.formAssess.context) {
           this.$modal.msgError("请输入评估意见!");
@@ -852,6 +855,7 @@ export default {
         return;
       }
       this.form.flag=flag;
+      this.form.isTerminate=isTerminate;
       const params={
         projectPool: this.form,  // 拆分明确字段
         projectReview: this.formAssess,

+ 3 - 3
ruoyi-ui/src/views/project/investOpp/detail.vue

@@ -15,7 +15,7 @@
         <el-tab-pane label="项目联系人信息" name="2"></el-tab-pane>
         <el-tab-pane label="项目融资信息" name="3"></el-tab-pane>
         <el-tab-pane label="商业计划书及其他" name="4"></el-tab-pane>
-        <el-tab-pane v-if="formAssess!=null" label="软件工程院评估意见" name="5"></el-tab-pane>
+<!--        <el-tab-pane v-if="formAssess!=null" label="软件工程院评估意见" name="5"></el-tab-pane>-->
       </el-tabs>
       <section>
         <el-form ref="form" :model="form" label-width="160px" class="special-el-form">
@@ -530,7 +530,7 @@
             </el-row>
           </div>
         </el-form>
-        <el-form ref="formAssess" :model="formAssess" label-width="160px" class="special-el-form">
+<!--        <el-form ref="formAssess" :model="formAssess" label-width="160px" class="special-el-form">
           <div v-if="activeName === '5'">
             <el-row :gutter="20">
               <el-col>
@@ -548,7 +548,7 @@
               </el-col>
             </el-row>
           </div>
-        </el-form>
+        </el-form>-->
       </section>
     </section>
 <!--    <section v-if="form.taskDefKey=='softwareDept'">

+ 2 - 2
ruoyi-ui/src/views/project/investigate/applyList.vue

@@ -164,7 +164,7 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column
+<!--      <el-table-column
         label="已发起尽调申请"
         align="center"
         prop="investigateFlag"
@@ -174,7 +174,7 @@
             {{ scope.row.investigateFlag === "1" ? "是" : "否" }}
           </div>
         </template>
-      </el-table-column>
+      </el-table-column>-->
       <!-- <el-table-column label="投决通过日期" align="center" prop="decisionDate">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.decisionDate, "{y}-{m}-{d}") }}</span>

+ 8 - 4
ruoyi-ui/src/views/project/investigate/audit.vue

@@ -265,7 +265,10 @@
         <el-form-item class="btnList">
           <el-button @click="goBack">返 回</el-button>
           <el-button type="success" @click="handleComplete(true)">同意</el-button>
-          <el-button v-if="dueForm.taskDefKey!='upload'" type="warning" @click="handleComplete(false)">驳回</el-button>
+          <el-button v-if="dueForm.taskDefKey!='upload'&&dueForm.taskDefKey!='president'" type="warning" @click="handleComplete(false)">驳回</el-button>
+          <el-button v-if="dueForm.taskDefKey=='president'" type="warning" @click="handleComplete(false)">驳回(修改)</el-button>
+          <el-button v-if="dueForm.taskDefKey=='president'" type="danger" @click="handleComplete(false,1)">驳回(终止)</el-button>
+          <el-button v-if="dueForm.taskDefKey=='president'" type="warning" @click="handleComplete(false,0)">观望</el-button>
         </el-form-item>
       </el-form>
     </section>
@@ -468,11 +471,11 @@ export default {
 
 
     /** 加载审批任务弹框 */
-    handleComplete(flag) {
-      this.taskComplete(flag);
+    handleComplete(flag,isTerminate) {
+      this.taskComplete(flag,isTerminate);
     },
     /** 用户审批任务 */
-    taskComplete(flag) {
+    taskComplete(flag,isTerminate) {
       let allValid = true;
       if(this.dueForm.taskDefKey==="upload") {//上传尽职背调报告
         this.duePeportForm.projectPoolId = this.dueForm.projectPoolId;
@@ -492,6 +495,7 @@ export default {
       }
       //会议人
       this.dueForm.flag=flag;
+      this.dueForm.isTerminate=isTerminate;
       const params={
         projectInvestigate: this.dueForm,  // 拆分明确字段
         projectInvestigatePerson: this.duePeportForm,

+ 5 - 0
ruoyi-ui/src/views/project/investigate/dueDiligenceList.vue

@@ -783,6 +783,11 @@ export default {
      //展示人员
     handleProjectItem() {
       this.$refs.projectItem.showProjectItem = true;
+      // 2. 调用子组件的刷新方法,重新加载项目列表
+      // 确保子组件已加载且存在刷新方法
+      if (this.$refs.projectItem && typeof this.$refs.projectItem.refreshProjectList === 'function') {
+        this.$refs.projectItem.refreshProjectList();
+      }
     },
     // 获取公司信息
     getProjectInfo(info) {

+ 40 - 3
ruoyi-ui/src/views/project/investigate/projectItem.vue

@@ -60,13 +60,42 @@
             />
           </template>
         </el-table-column>
-        <el-table-column label="项目状态" align="center" prop="projectState">
+<!--        <el-table-column label="项目状态" align="center" prop="projectState">
           <template slot-scope="scope">
             <dict-tag
               :options="dict.type.project_state"
               :value="scope.row.projectState"
             />
           </template>
+        </el-table-column>-->
+        <el-table-column label="项目机会状态" align="center" prop="projectStatus">
+          <template slot-scope="scope">
+            <!-- 定义状态文本映射对象 -->
+            <el-tag
+              :type="{
+              0: 'success',
+              1: 'danger',
+              2: 'warning'
+            }[scope.row.projectStatus] || 'info'"
+            >
+              {{ {
+              0: '正常',
+              1: '终止',
+              2: '观望'
+            }[scope.row.projectStatus] || '未知状态' }}
+            </el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="已发起尽调申请"
+          align="center"
+          prop="investigateFlag"
+        >
+          <template slot-scope="scope">
+            <div>
+              {{ scope.row.investigateFlag === "1" ? "是" : "否" }}
+            </div>
+          </template>
         </el-table-column>
       </el-table>
       <pagination
@@ -125,6 +154,14 @@ export default {
     this.getList();
   },
   methods: {
+    // 刷新项目列表的方法
+    refreshProjectList() {
+      // 清空现有列表
+      this.poolList = [];
+      this.projectItemTotal=0;
+      // 重新请求接口获取最新数据
+      this.getList();
+    },
     clickRow(row) {
       this.$refs.dataTable.toggleRowSelection(row);
     },
@@ -175,11 +212,11 @@ export default {
             type: "error",
           });
         }
-      
+
     },
     cancel() {
       this.showProjectItem = false;
     },
   },
 };
-</script>
+</script>

+ 13 - 7
ruoyi-ui/src/views/project/meetingList.vue

@@ -944,6 +944,7 @@ import {
   updateDecision,
 } from "@/api/invest/meeting";
 import {approvalStart} from "@/api/project/approval/pool";
+import {decisionStart} from "@/api/project/decision/pool";
 import projectItem from "../invest/components/projectItem";
 import projectItemLX from "./approval/projectItem";
 import projectItemTJ from "./decision/projectItem";
@@ -1339,7 +1340,7 @@ export default {
     },
     // 展示立项申请弹窗
     showLXApplyPop(row) {
-      // this.resetLXApply(row);
+      this.resetLXApply(row);
       this.fileListLXApply = [];
       this.openLXApply = true;
       this.titleLXApply = "立项申请";
@@ -1348,8 +1349,8 @@ export default {
       }, 200);
     },
     // 展示投决申请弹窗
-    showTJApplyPop() {
-      // this.resetTJApply(row);
+    showTJApplyPop(row) {
+      this.resetTJApply(row);
       this.fileListLXApply = [];
       this.openTJApply = true;
       this.titleTJApply = "投决申请";
@@ -1401,6 +1402,11 @@ export default {
     //展示人员
     handleProjectItem() {
       this.$refs.projectItem.showProjectItem = true;
+      // 2. 调用子组件的刷新方法,重新加载项目列表
+      // 确保子组件已加载且存在刷新方法
+      if (this.$refs.projectItem && typeof this.$refs.projectItem.refreshProjectList === 'function') {
+        this.$refs.projectItem.refreshProjectList();
+      }
     },
     /** 查询会议记录列表 */
     getList() {
@@ -1450,8 +1456,8 @@ export default {
     resetLXApply(row) {
       this.formLXApply = {
         id: null,
-        projectPoolId: row.id,
-        projectName: row.projectName,
+        projectPoolId: null,
+        projectName: null,
         projectOverview: null,
         projectSparkle: null,
         listFile: null,
@@ -1462,8 +1468,8 @@ export default {
     resetTJApply(row) {
       this.formTJApply = {
         id: null,
-        projectPoolId: row.id,
-        projectName: row.projectName,
+        projectPoolId: null,
+        projectName: null,
         projectOverview: null,
         projectSparkle: null,
         listFile: null,

+ 558 - 0
ruoyi-ui/src/views/project/termination/terminationList.vue

@@ -0,0 +1,558 @@
+<template>
+  <div class="app-container">
+    <!-- 项目投决 -->
+    <el-form
+      :model="queryParams"
+      ref="queryForm"
+      size="small"
+      :inline="true"
+      v-show="showSearch"
+      label-width="90px"
+      style="margin-left: -22px"
+    >
+      <el-form-item label="项目名称" prop="projectName">
+        <el-input
+          v-model.trim="queryParams.projectName"
+          placeholder="请输入项目名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="项目负责人" prop="investHead">
+        <el-input
+          v-model.trim="queryParams.investHead"
+          placeholder="请输入项目负责人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="公司联系人" prop="projectContacts">
+        <el-input
+          v-model.trim="queryParams.projectContacts"
+          placeholder="请输入公司联系人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="渠道" prop="channel">
+        <el-select v-model="queryParams.channel" placeholder="全部" clearable>
+          <el-option
+            v-for="item in channelList"
+            :key="item.id"
+            :label="item.channelName"
+            :value="item.id"
+          />
+          <el-option
+            label="无"
+            value="-1"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="所属组别" prop="projectGroup">
+        <el-select
+          v-model="queryParams.projectGroup"
+          placeholder="全部"
+          clearable
+        >
+          <el-option
+            v-for="dict in dict.type.project_group"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+
+      <el-form-item label="项目公司" prop="company">
+        <el-input
+          v-model.trim="queryParams.company"
+          placeholder="请输入项目所属公司"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item class="searchWrapper">
+        <el-button
+          type="primary"
+          icon="el-icon-search"
+          size="mini"
+          @click="handleQuery"
+          >搜索</el-button
+        >
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+          >重置</el-button
+        >
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+<!--      <el-col :span="1.5">
+        <el-button
+          plain
+          type="warning"
+          size="mini"
+          icon="el-icon-document"
+          @click="handleAdd(1)"
+          >立项申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          type="warning"
+          size="mini"
+          icon="el-icon-tickets"
+          @click="handleAdd(2)"
+          v-hasPermi="['invest:pool:due']"
+          >尽调申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          type="warning"
+          size="mini"
+          icon="el-icon-document"
+          @click="handleAdd(3)"
+          >投决申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          type="warning"
+          size="mini"
+          icon="el-icon-document"
+          @click="handleAdd(4)"
+        >终止申请</el-button>
+      </el-col>-->
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+    <el-table
+      ref="dataTable"
+      @row-click="clickRow"
+      class="tableWrapper"
+      v-loading="loading"
+      border
+      :data="poolList"
+      @selection-change="handleSelectionChange"
+    >
+      <!-- <el-table-column type="selection" width="40" align="center" /> -->
+      <el-table-column
+        type="index"
+        label="序号"
+        width="50"
+        align="center"
+      ></el-table-column>
+      <!-- <el-table-column label="主键id" align="center" prop="id" /> -->
+      <el-table-column label="项目名称" align="center" prop="projectName">
+        <template slot-scope="scope">
+          <div
+            :title="scope.row.projectName"
+            class="public-text-blue public-cursor"
+            @click.stop="handleDetail(scope.row)"
+          >
+            {{ scope.row.projectName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="所属行业" align="center" prop="industry"
+        ><template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.CUSTOMER_TRADE"
+            :value="scope.row.industry"
+          />
+        </template>
+      </el-table-column>
+      <el-table-column label="项目阶段" align="center" prop="projectStage">
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.project_stage"
+            :value="scope.row.projectStage"
+          />
+        </template>
+      </el-table-column>
+      <el-table-column label="项目负责人" align="center" prop="investHead">
+        <template slot-scope="scope">
+          <div :title="scope.row.investHead">
+            {{ scope.row.investHead }}
+          </div>
+        </template>
+      </el-table-column>
+<!--      <el-table-column label="终止原因" align="center" prop="reason">
+        <template slot-scope="scope">
+          <div :title="scope.row.reason">
+            {{ scope.row.reason }}
+          </div>
+        </template>
+      </el-table-column>-->
+      <!-- delFlag -->
+      <el-table-column label="项目机会状态" align="center" prop="projectStatus">
+        <template slot-scope="scope">
+          <!-- 定义状态文本映射对象 -->
+          <el-tag
+            :type="{
+              0: 'success',
+              1: 'danger',
+              2: 'warning'
+            }[scope.row.projectStatus] || 'info'"
+          >
+            {{ {
+            0: '正常',
+            1: '终止',
+            2: '观望'
+          }[scope.row.projectStatus] || '未知状态' }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="申请人" align="center" prop="startUserName">
+        <template slot-scope="scope">
+          <div :title="scope.row.startUserName">
+            {{ scope.row.startUserName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="申请日期" align="center" prop="createTime">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="流程状态" align="center" prop="status">
+        <template slot-scope="scope">
+          <div :title="scope.row.status">
+            <span v-if="scope.row.status === 0">暂存</span>
+            <span v-else-if="scope.row.status === 1">已提交</span>
+            <span v-else-if="scope.row.status === 2">审批中</span>
+            <span v-else-if="scope.row.status === 3">审批完成</span>
+            <span v-else-if="scope.row.status === 4">关闭</span>
+          </div>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <!-- 尽调组件 -->
+    <dueDiligenceList
+      ref="dueDiligenceLists"
+      :projectId="projectId"
+      @getList="getList"
+    ></dueDiligenceList>
+    <!-- 会议管理组件 -->
+    <meetingList
+      :type="'3'"
+      ref="meetingList"
+      :projectId="projectId"
+      @getList="getList"
+    ></meetingList>
+    <!-- 设置项目状态对话框 -->
+    <businessUpdate @getList="getList" ref="businessUpdate"></businessUpdate>
+  </div>
+</template>
+
+<script>
+import {
+  getAllTerminationList
+} from "@/api/project/investOpp/pool";
+import { listChannel } from "@/api/invest/channel";
+import dueDiligenceList from "../investigate/dueDiligenceList";
+import meetingList from "../meetingList.vue";
+import businessUpdate from "../../invest/components/businessUpdate";
+import { mapGetters } from "vuex";
+export default {
+  name: "Pool5",
+  dicts: ["project_group", "project_stage", "project_state", "CUSTOMER_TRADE"],
+  components: {
+    dueDiligenceList,
+    meetingList,
+    businessUpdate,
+  },
+  data() {
+    return {
+      // 遮罩层
+      loading: false,
+
+      // 选中id数组
+      ids: [],
+      idsName: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 选中数组
+      selectRowList: [],
+      // 显示搜索条件
+      showSearch: false,
+      // 总条数
+      total: 0,
+      // 项目池表格数据
+      poolList: [],
+      // 查询参数
+      queryParams: {
+        id: null,
+        pageNum: 1,
+        pageSize: 10,
+        projectName: null,
+        projectGroup: "",
+        projectCode: null,
+        channel: null,
+        contactDate: null,
+        projectDate: null,
+        decisionDate: null,
+        industry: null,
+        company: null,
+        projectContacts: null,
+        investHead: null,
+        previousFinancing: null,
+        financingStage: null,
+        financingMoney: null,
+        financingDate: null,
+        investValuation: null,
+        investMoney: null,
+        investType: null,
+        investPloy: null,
+        investWorth: null,
+        projectStage: null,
+        projectState: null,
+        orderByColumn: "createTime",
+        isAsc: "desc",
+        createTime: null,
+      },
+      channelList: [],
+      projectId: "",
+    };
+  },
+  computed: {
+    ...mapGetters(["user"]),
+  },
+  created() {},
+  mounted() {
+    this.getList();
+    // 渠道
+    listChannel({
+      pageNum: 1,
+      pageSize: 100,
+    }).then((response) => {
+      this.channelList = response.rows;
+    });
+  },
+  methods: {
+    /** 查询所有项目终止列表 */
+    getList() {
+      this.loading = true;
+      getAllTerminationList(this.queryParams).then((response) => {
+        this.poolList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.queryParams.orderByColumn = "createTime";
+      this.queryParams.isAsc = "desc";
+      this.handleQuery();
+    },
+
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.id);
+      if (selection.length > 1) {
+        //移除上一次选中行数据
+        selection.shift();
+        //修改选中图标为未选中状态
+        this.$refs.dataTable.clearSelection();
+        //将当前选中行改为选中状态
+        this.$refs.dataTable.toggleRowSelection(selection[0]);
+      }
+      this.idsName = selection.map((item) => item.projectName);
+      this.single = selection.length !== 1;
+      this.multiple = !selection.length;
+      this.selectRowList = selection;
+    },
+
+    clickRow(row) {
+      this.$refs.dataTable.toggleRowSelection(row);
+    },
+    /** 新增按钮操作 */
+    handleAdd(val) {
+      if(val==1){
+        // 立项申请
+        this.$refs.meetingList.showLXApplyPop();
+      }
+      if(val==2){
+        // 尽调申请
+        this.$refs.dueDiligenceLists.handleShowApplyPop();
+      }
+      if(val==3){
+        // 投决申请
+        this.$refs.meetingList.showTJApplyPop();
+      }
+      if(val==4){
+        // 终止申请
+        this.$refs.meetingList.showZZApplyPop();
+      }
+
+      // this.$router.push({ path: "/invest/pool/add" });
+    },
+    handleSelectData(type, otherData) {
+      // type 1=修改 2=详情 3=设置项目阶段 4=终止 5=上传评估意见
+      // 6=立项申请 7=发起立项会议 8=上传打分表(立项)
+      // 9=尽调申请 10=上传尽调报告
+      // 11=投决申请 12=发起投决会议 13=上传打分表(投决)
+      // 14=终止申请
+      if (this.selectRowList.length == 1) {
+        const row = this.selectRowList[0];
+        // 1.单条数据 2.项目是否终止  3.是否能操作
+        if (row.delFlag === "1") {
+          this.$message({
+            message: "项目已终止",
+            duration: 1500,
+            type: "error",
+          });
+        } else if (type === 13) {
+          // 有立项会议
+          if (row.tProjectMeeting) {
+            // 参与人
+            if (
+              row.tProjectMeeting.participants.indexOf(this.user.nickName) > -1
+            ) {
+              // 是否打过分
+              if (row.tProjectScoring) {
+                this.$message.warning("您已打分,无需重复操作");
+              } else {
+                // 投决-去打分
+                this.$refs.meetingList.handleMark(
+                  row.tProjectMeeting,
+                  "3",
+                  false
+                );
+              }
+            } else {
+              this.$message.warning("无权限");
+            }
+          } else {
+            if (row.investHead === this.user.nickName) {
+              this.$message({
+                message: "请先发起投决会议",
+                duration: 1500,
+                type: "warning",
+              });
+            } else {
+              this.$message.warning("无权限");
+            }
+          }
+        } else if (row.investHead === this.user.nickName) {
+          if (type === 2) {
+            // 详情
+            this.handleDetail(row);
+          } else if (type === 3) {
+            // 设置项目阶段
+            this.$refs.businessUpdate.handleBusinessUpdate(row);
+          } else if (type === 4) {
+            this.handleDelete(row);
+          } else if (type === 14) {
+            if (row.delFlag === "0") {
+              // 终止申请
+              this.$refs.meetingList.showZZApplyPop(row);
+            } else {
+              this.$message({
+                message: "您已发起终止申请,无需重复操作",
+                duration: 1500,
+                type: "warning",
+              });
+            }
+          } else if (type === 12) {
+            // 发起投决会议
+            this.handleMeeting(row, otherData);
+          }
+        } else {
+          this.$message({
+            message: "无权限",
+            duration: 1500,
+            type: "error",
+          });
+        }
+      } else {
+        this.$message({
+          message: "只能选择一条数据",
+          duration: 1500,
+          type: "warning",
+        });
+      }
+    },
+    // 发起会议
+    handleMeeting(row, meetingType) {
+      this.$store.commit("SET_PROJECTITEMMESSAGE", row);
+      this.$refs.meetingList.handleAdd(row.id, meetingType);
+    },
+    handleDetail(row) {
+      const id = row.id || this.ids;
+      this.$router.push({ path: "/invest/pool/detail", query: { id: id } });
+    },
+    /**终止按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      const idsName = row.projectName ? row.projectName : this.idsName;
+      this.$modal
+        .confirm('是否终止"' + idsName + '"项目?')
+        .then(function () {
+          return delPool(ids);
+        })
+        .then(() => {
+          this.getList();
+          this.$modal.msgSuccess("已终止");
+        })
+        .catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download(
+        "invest/pool/export",
+        {
+          ...this.queryParams,
+        },
+        `pool_${new Date().getTime()}.xlsx`
+      );
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.tableWrapper {
+  font-size: 12px;
+  color: #000;
+  ::v-deep .el-table__header-wrapper th {
+    font-size: 12px;
+    font-weight: bolder;
+    color: #000;
+  }
+
+  ::v-deep td.el-table__cell:not(:last-child) div {
+    text-overflow: -o-ellipsis-lastline;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: -webkit-box;
+    -webkit-line-clamp: 1;
+    line-clamp: 1;
+    -webkit-box-orient: vertical;
+  }
+}
+/**找到表头那一行,然后把里面的复选框隐藏掉**/
+.tableWrapper::v-deep .el-table__header-wrapper .el-table__header .el-checkbox {
+  display: none;
+}
+</style>

+ 2 - 9
ruoyi-ui/src/views/project/termination/watchList.vue

@@ -182,13 +182,13 @@
           </div>
         </template>
       </el-table-column>
-      <el-table-column label="终止原因" align="center" prop="reason">
+<!--      <el-table-column label="终止原因" align="center" prop="reason">
         <template slot-scope="scope">
           <div :title="scope.row.reason">
             {{ scope.row.reason }}
           </div>
         </template>
-      </el-table-column>
+      </el-table-column>-->
       <!-- delFlag -->
       <el-table-column label="项目机会状态" align="center" prop="projectStatus">
         <template slot-scope="scope">
@@ -260,15 +260,8 @@
 
 <script>
 import {
-  listDecisionList,
   delPool,
-  editStage,
-  addDecision,
 } from "@/api/invest/pool";
-import {
-  getAllTerminationList,
-  listTerminationList,
-} from "@/api/project/termination/pool";
 import {
   getAllWatchList,
 } from "@/api/project/investOpp/pool";