瀏覽代碼

11482-【CR】【投资系统】增加审批流程-各个流程列表信息-项目阶段接口

hxy 1 月之前
父節點
當前提交
bdfc857eee

+ 473 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/project/ProjectController.java

@@ -0,0 +1,473 @@
+package com.ruoyi.web.controller.project;
+
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.flowable.service.IInvestmentOpportunityService;
+import com.ruoyi.invest.domain.*;
+import com.ruoyi.invest.service.*;
+import com.ruoyi.system.service.ISysDictDataService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 项目池Controller
+ *
+ * @author ruoyi
+ * @date 2024-02-21
+ */
+@Api(tags = "项目观望")
+@RestController
+@RequestMapping("/project")
+public class ProjectController extends BaseController
+{
+
+    @Autowired
+    private IInvestmentOpportunityService investmentOpportunityService;
+    @Autowired
+    private ITProjectInvestigateService tProjectInvestigateService;
+
+    @Autowired
+    private ITProjectInvestigatePersonService tProjectInvestigatePersonService;
+
+    @Autowired
+    private ITProjectMeetingService tProjectMeetingService;
+
+    @Autowired
+    private ITProjectScoringService tProjectScoringService;
+
+    @Autowired
+    private ISysDictDataService dictDataService;
+
+    /**
+     * 查询项目池列表
+     */
+    @ApiOperation("查询项目池列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");//数据未删除
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool);
+        return getDataTable(list);
+    }
+    /**
+     * 导出项目池列表
+     */
+    @ApiOperation("导出项目池列表")
+    @Log(title = "项目池列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportList")
+    public void exportList(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");//数据未删除
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "项目池数据");
+    }
+    /**
+     * 查询项目机会阶段项目信息
+     */
+    @ApiOperation("查询项目机会阶段列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/listInvestOppStage")
+    public TableDataInfo listInvestOppStage(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");//数据未删除
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("1");//项目报备(项目机会)
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool);
+        return getDataTable(list);
+    }
+    /**
+     * 导出项目机会阶段列表
+     */
+    @ApiOperation("导出项目机会阶段列表")
+    @Log(title = "项目机会阶段列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportInvestOppStage")
+    public void exportInvestOppStage(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("1");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "项目机会阶段数据");
+    }
+    /**
+     * 查询项目立项阶段项目信息
+     */
+    @ApiOperation("查询项目立项阶段列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/listApprovalStage")
+    public TableDataInfo listApprovalStage(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("3");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    n.settProjectMeeting(tProjectMeetingService.listProjectPoolIdNew(n.getId(),"LX"));
+                    if(null != n.gettProjectMeeting()){
+                        n.settProjectScoring(tProjectScoringService.getCanScoringMeetingId(n.gettProjectMeeting().getId(),getUserId()));
+                    }
+                    return n;
+                }).collect(Collectors.toList());
+        return getDataTable(list);
+    }
+    /**
+     * 导出项目立项阶段列表
+     */
+    @ApiOperation("导出项目立项阶段列表")
+    @Log(title = "项目立项阶段列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportApprovalStage")
+    public void exportApprovalStage(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("3");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "项目立项阶段数据");
+    }
+    /**
+     * 查询项目背调阶段项目信息
+     */
+    @ApiOperation("查询项目背调阶段列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/listInvestigateStage")
+    public TableDataInfo listInvestigateStage(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("4");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    n.settProjectInvestigate(tProjectInvestigateService.listProjectPoolIdNew(n.getId()));
+                    if(null != n.gettProjectInvestigate()){
+                        n.settProjectInvestigatePerson(tProjectInvestigatePersonService.selectByProjectInvestigateId(n.gettProjectInvestigate().getId(),getUserId()));
+                    }
+                    return n;
+                }).collect(Collectors.toList());
+        return getDataTable(list);
+    }
+    /**
+     * 导出项目背调阶段列表
+     */
+    @ApiOperation("导出项目背调阶段列表")
+    @Log(title = "项目背调阶段列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportInvestigateStage")
+    public void exportInvestigateStage(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("4");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "项目背调阶段数据");
+    }
+    /**
+     * 查询项目投决阶段项目信息
+     */
+    @ApiOperation("查询项目投决阶段列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/listDecisionStage")
+    public TableDataInfo listDecisionStage(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("5");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool).stream().map(n -> {
+            n.settProjectMeeting(tProjectMeetingService.listProjectPoolIdNew(n.getId(),"TJ"));
+            if(null != n.gettProjectMeeting()){
+                n.settProjectScoring(tProjectScoringService.getCanScoringMeetingId(n.gettProjectMeeting().getId(),getUserId()));
+            }
+            return n;
+        }).collect(Collectors.toList());
+        return getDataTable(list);
+    }
+    /**
+     * 导出项目投决阶段列表
+     */
+    @ApiOperation("导出项目投决阶段列表")
+    @Log(title = "项目投决阶段列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportDecisionStage")
+    public void exportDecisionStage(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("5");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "项目投决阶段数据");
+    }
+    /**
+     * 查询项目签约阶段项目信息
+     */
+    @ApiOperation("查询项目签约阶段列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/listSignStage")
+    public TableDataInfo listSignStage(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("6");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool);
+        return getDataTable(list);
+    }
+    /**
+     * 导出项目签约阶段列表
+     */
+    @ApiOperation("导出项目签约阶段列表")
+    @Log(title = "项目签约阶段列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportSignStage")
+    public void exportSignStage(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStage("6");
+        tProjectPool.setProjectStatus("0");//项目机会状态非观望2、非终止1(也就是项目机会状态为正常0)
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "项目签约阶段数据");
+    }
+    //所有项目观望列表
+    @ApiOperation("所有项目观望列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/allWatchlist")
+    public TableDataInfo allWatchlist(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");//未删除
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStatus("2");//项目机会状态为观望2
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool);
+        return getDataTable(list);
+
+    }
+    /**
+     * 导出所有项目终止列表
+     */
+    @ApiOperation("导出所有项目观望列表")
+    @Log(title = "所有项目观望列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportAllWatch")
+    public void exportAllWatch(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");//未删除
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStatus("2");//项目机会状态为观望2
+        List<TProjectPool> list=investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "所有项目观望数据");
+    }
+    /**
+     * 查询所有项目终止列表
+     */
+    @ApiOperation("查询所有项目终止列表")
+    @PreAuthorize("@ss.hasPermi('invest:pool:list')")
+    @GetMapping("/allTerminationList")
+    public TableDataInfo allTerminationList(TProjectPool tProjectPool)
+    {
+        startPage();
+        tProjectPool.setDelFlag("0");//未删除
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStatus("1");//项目机会状态为终止1
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool);
+        return getDataTable(list);
+    }
+    /**
+     * 导出所有项目终止列表
+     */
+    @ApiOperation("导出所有项目终止列表")
+    @Log(title = "所有项目终止列表", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportAllTermination")
+    public void exportAllTermination(HttpServletResponse response, TProjectPool tProjectPool)
+    {
+        tProjectPool.setDelFlag("0");//未删除
+        //tProjectPool.setStatus(4);//流程状态非关闭
+        tProjectPool.setProjectStatus("1");//项目机会状态为终止1
+        List<TProjectPool> list = investmentOpportunityService.selectProjectList(tProjectPool)
+                .stream().map(n -> {
+                    if(null != n.gettProjectChannel()){
+                        n.setChannel(n.gettProjectChannel().getChannelName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getIndustry()))n.setIndustry(dictDataService.selectDictLabel("CUSTOMER_TRADE",n.getIndustry()));
+                    if(null != n.gettProjectCompany()){
+                        n.setCompany(n.gettProjectCompany().getCompanyName());
+                    }
+                    if(null != n.gettProjectContacts()){
+                        n.setProjectContacts(n.gettProjectContacts().getName());
+                    }
+                    if(StringUtils.isNotEmpty(n.getInvestType()))n.setInvestType(dictDataService.selectDictLabel("INVEST_TYPE",n.getInvestType()));
+                    if(StringUtils.isNotEmpty(n.getInvestPloy()))n.setInvestPloy(dictDataService.selectDictLabel("INVEST_PLOY",n.getInvestPloy()));
+                    if(StringUtils.isNotEmpty(n.getInvestWorth()))n.setInvestWorth(dictDataService.selectDictLabel("INVEST_WORTH",n.getInvestWorth()));
+                    if(StringUtils.isNotEmpty(n.getProjectStage()))n.setProjectStage(dictDataService.selectDictLabel("PROJECT_STAGE",n.getProjectStage()));
+                    if(StringUtils.isNotEmpty(n.getProjectState()))n.setProjectState(dictDataService.selectDictLabel("PROJECT_STATE",n.getProjectState()));
+                    return n;
+                })
+                .collect(Collectors.toList());
+        ExcelUtil<TProjectPool> util = new ExcelUtil<TProjectPool>(TProjectPool.class);
+        util.exportExcel(response, list, "所有项目终止数据");
+    }
+
+}

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

@@ -0,0 +1,67 @@
+import request from '@/utils/request'
+//项目池
+// 查询项目池列表
+export function listPool(query) {
+  return request({
+    url: '/project/list',
+    method: 'get',
+    params: query
+  })
+}
+//项目机会阶段项目信息列表
+export function listInvestOppStage(query) {
+  return request({
+    url: '/project/listInvestOppStage',
+    method: 'get',
+    params: query
+  })
+}
+
+//项目立项阶段项目信息
+export function listApprovalStage(query) {
+  return request({
+    url: '/project/listApprovalStage',
+    method: 'get',
+    params: query
+  })
+}
+//项目背调阶段项目信息
+export function listInvestigateStage(query) {
+  return request({
+    url: '/project/listInvestigateStage',
+    method: 'get',
+    params: query
+  })
+}
+//项目投决阶段项目信息
+export function listDecisionStage(query) {
+  return request({
+    url: '/project/listDecisionStage',
+    method: 'get',
+    params: query
+  })
+}
+//项目签约阶段项目信息
+export function listSignStage(query) {
+  return request({
+    url: '/project/listSignStage',
+    method: 'get',
+    params: query
+  })
+}
+// 所有项目观望列表
+export function getAllWatchList(query) {
+  return request({
+    url: '/project/allWatchlist',
+    method: 'get',
+    params: query
+  })
+}
+// 所有项目终止列表
+export function getAllTerminationList(query) {
+  return request({
+    url: '/project/allTerminationList',
+    method: 'get',
+    params: query
+  })
+}

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

@@ -18,59 +18,33 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="项目负责人" prop="investHead">
+      <el-form-item label="项目概况" prop="projectOverview">
         <el-input
-          v-model.trim="queryParams.investHead"
-          placeholder="请输入项目负责人"
+          v-model.trim="queryParams.projectOverview"
+          placeholder="请输入项目概况"
           clearable
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="公司联系人" prop="projectContacts">
+      <el-form-item label="项目亮点" prop="projectSparkle">
         <el-input
-          v-model.trim="queryParams.projectContacts"
-          placeholder="请输入公司联系人"
+          v-model.trim="queryParams.projectSparkle"
+          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-form-item label="流程状态" prop="status">
+        <!-- el-select 绑定表单字段 -->
+        <el-select v-model="queryParams.status" placeholder="请选择" clearable>
+          <!-- 静态选项 -->
+          <el-option label="暂存" value="0"></el-option>
+          <el-option label="已提交" value="1"></el-option>
+          <el-option label="审批中" value="2"></el-option>
+          <el-option label="审核完成" value="3"></el-option>
+          <el-option label="关闭" value="4"></el-option>
         </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"
@@ -86,7 +60,7 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
+<!--      <el-col :span="1.5">
         <el-button
           plain
           type="warning"
@@ -95,6 +69,15 @@
           @click="handleAdd"
           >立项申请</el-button
         >
+      </el-col>-->
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
       </el-col>
       <right-toolbar
         :showSearch.sync="showSearch"
@@ -118,7 +101,7 @@
         align="center"
       ></el-table-column>
       <!-- <el-table-column label="主键id" align="center" prop="id" /> -->
-      <el-table-column label="项目名称" align="center" prop="projectName">
+<!--      <el-table-column label="项目名称" align="center" prop="projectName">
         <template slot-scope="scope">
           <div
             :title="scope.row.projectName"
@@ -128,6 +111,13 @@
             {{ scope.row.projectName }}
           </div>
         </template>
+      </el-table-column-->>
+      <el-table-column label="项目名称" align="center" prop="projectName">
+        <template slot-scope="scope">
+          <div :title="scope.row.projectName">
+            {{ scope.row.projectName }}
+          </div>
+        </template>
       </el-table-column>
 
       <el-table-column label="所属行业" align="center" prop="industry"
@@ -221,6 +211,23 @@
           <span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span>
         </template>
       </el-table-column>
+      <el-table-column label="当前节点" align="center" prop="taskName">
+        <template slot-scope="scope">
+          <div  v-if="scope.row.deployId !== null && scope.row.deployId !== undefined && scope.row.deployId !== ''"  :title="scope.row.taskName" class="public-text-blue public-cursor" @click="handleReadImage(scope.row)">
+            {{ scope.row.taskName}}
+          </div>
+          <div v-else :title="scope.row.taskName">
+            {{ scope.row.taskName}}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="当前处理人" align="center" prop="assigneeName">
+        <template slot-scope="scope">
+          <div :title="scope.row.assigneeName">
+            {{ scope.row.assigneeName}}
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column label="流程状态" align="center" prop="status">
         <template slot-scope="scope">
           <div :title="scope.row.status">
@@ -232,6 +239,11 @@
           </div>
         </template>
       </el-table-column>
+      <el-table-column label="操作" align="center" width="150" fixed="right" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button type="text" size="mini" @click="handleDetailProcess(scope.row)">详情</el-button>
+        </template>
+      </el-table-column>
     </el-table>
 
     <pagination
@@ -250,13 +262,17 @@
     ></meetingList>
     <!-- 设置项目状态对话框 -->
     <businessUpdate @getList="getList" ref="businessUpdate"></businessUpdate>
+    <!-- Flowable 流程图弹窗 -->
+    <el-dialog :title="readImage.title" :visible.sync="readImage.open" width="70%"  append-to-body>
+      <flow :flowData="flowData"/>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { listApprovalList, delPool, } from "@/api/invest/pool";
 import { getAllApprovalList } from "@/api/project/approval/pool";
 import { listChannel } from "@/api/invest/channel";
+import { flowXmlAndNode } from "@/api/flowable/definition";
 import meetingList from "../meetingList";
 import businessUpdate from "../../invest/components/businessUpdate";
 import { mapGetters } from "vuex";
@@ -319,8 +335,14 @@ export default {
         createTime: null,
       },
       channelList: [],
-
       projectId: "",
+      //流程图信息
+      readImage:{
+        open: false,
+        src: "",
+      },
+      // xml
+      flowData: {},
     };
   },
   computed: {
@@ -508,13 +530,29 @@ export default {
     /** 导出按钮操作 */
     handleExport() {
       this.download(
-        "invest/pool/export",
+        "project/approval/export",
         {
           ...this.queryParams,
         },
-        `pool_${new Date().getTime()}.xlsx`
+        `approval_${new Date().getTime()}.xlsx`
       );
     },
+    /** 流程图查看 */
+    handleReadImage(row){
+      this.readImage.title = "流程图";
+      this.readImage.open = true;
+      // this.readImage.src = process.env.VUE_APP_BASE_API + "/flowable/definition/readImage/" + deploymentId;
+      flowXmlAndNode({procInsId: row.procInstId,deployId:row.deployId}).then(res => {
+        this.flowData = res.data;
+      })
+    },
+    /*流程详情*/
+    handleDetailProcess(row) {
+      const id = row.id || this.ids;
+      const poolId=row.projectPoolId;
+      const pInstId=row.procInstId;
+      this.$router.push({ path: "/project/approval/detail", query: { id: poolId , pInstId: pInstId } });
+    },
   },
 };
 </script>

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

@@ -18,59 +18,25 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="项目负责人" prop="investHead">
+      <el-form-item label="股权/其他合作商务条款" prop="provision">
         <el-input
-          v-model.trim="queryParams.investHead"
-          placeholder="请输入项目负责人"
+          v-model.trim="queryParams.provision"
+          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-form-item label="流程状态" prop="status">
+        <!-- el-select 绑定表单字段 -->
+        <el-select v-model="queryParams.status" placeholder="请选择" clearable>
+          <!-- 静态选项 -->
+          <el-option label="暂存" value="0"></el-option>
+          <el-option label="已提交" value="1"></el-option>
+          <el-option label="审批中" value="2"></el-option>
+          <el-option label="审核完成" value="3"></el-option>
+          <el-option label="关闭" value="4"></el-option>
         </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"
@@ -86,7 +52,7 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
+<!--      <el-col :span="1.5">
         <el-button
           plain
           type="warning"
@@ -95,6 +61,15 @@
           @click="handleAdd"
           >投决申请</el-button
         >
+      </el-col>-->
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
       </el-col>
       <right-toolbar
         :showSearch.sync="showSearch"
@@ -118,7 +93,7 @@
         align="center"
       ></el-table-column>
       <!-- <el-table-column label="主键id" align="center" prop="id" /> -->
-      <el-table-column label="项目名称" align="center" prop="projectName">
+<!--      <el-table-column label="项目名称" align="center" prop="projectName">
         <template slot-scope="scope">
           <div
             :title="scope.row.projectName"
@@ -128,6 +103,13 @@
             {{ scope.row.projectName }}
           </div>
         </template>
+      </el-table-column>-->
+      <el-table-column label="项目名称" align="center" prop="projectName">
+        <template slot-scope="scope">
+          <div :title="scope.row.projectName">
+            {{ scope.row.projectName }}
+          </div>
+        </template>
       </el-table-column>
       <el-table-column label="所属行业" align="center" prop="industry"
         ><template slot-scope="scope">
@@ -227,6 +209,20 @@
           <span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span>
         </template>
       </el-table-column>
+      <el-table-column label="当前节点" align="center" prop="taskName">
+        <template slot-scope="scope">
+          <div :title="scope.row.taskName" class="public-text-blue public-cursor" @click="handleReadImage(scope.row)">
+            {{ scope.row.taskName}}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="当前处理人" align="center" prop="assigneeName">
+        <template slot-scope="scope">
+          <div :title="scope.row.assigneeName">
+            {{ scope.row.assigneeName}}
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column label="流程状态" align="center" prop="status">
         <template slot-scope="scope">
           <div :title="scope.row.status">
@@ -238,6 +234,11 @@
           </div>
         </template>
       </el-table-column>
+      <el-table-column label="操作" align="center" width="150" fixed="right" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button type="text" size="mini" @click="handleDetailProcess(scope.row)">详情</el-button>
+        </template>
+      </el-table-column>
     </el-table>
 
     <pagination
@@ -256,16 +257,18 @@
     ></meetingList>
     <!-- 设置项目状态对话框 -->
     <businessUpdate @getList="getList" ref="businessUpdate"></businessUpdate>
+    <!-- Flowable 流程图弹窗 -->
+    <el-dialog :title="readImage.title" :visible.sync="readImage.open" width="70%"  append-to-body>
+      <!-- <el-image :src="readImage.src"></el-image> -->
+      <flow :flowData="flowData"/>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import {
-  listDecisionList,
-  delPool,
-} from "@/api/invest/pool";
 import { getAllDecisionList } from "@/api/project/decision/pool";
 import { listChannel } from "@/api/invest/channel";
+import { flowXmlAndNode } from "@/api/flowable/definition";
 import meetingList from "../meetingList.vue";
 import businessUpdate from "../../invest/components/businessUpdate";
 import { mapGetters } from "vuex";
@@ -329,6 +332,13 @@ export default {
       },
       channelList: [],
       projectId: "",
+      //流程图信息
+      readImage:{
+        open: false,
+        src: "",
+      },
+      // xml
+      flowData: {},
     };
   },
   computed: {
@@ -507,13 +517,29 @@ export default {
     /** 导出按钮操作 */
     handleExport() {
       this.download(
-        "invest/pool/export",
+        "project/decision/export",
         {
           ...this.queryParams,
         },
-        `pool_${new Date().getTime()}.xlsx`
+        `decision_${new Date().getTime()}.xlsx`
       );
     },
+    /** 流程图查看 */
+    handleReadImage(row){
+      this.readImage.title = "流程图";
+      this.readImage.open = true;
+      // this.readImage.src = process.env.VUE_APP_BASE_API + "/flowable/definition/readImage/" + deploymentId;
+      flowXmlAndNode({procInsId: row.procInstId,deployId:row.deployId}).then(res => {
+        this.flowData = res.data;
+      })
+    },
+    /*流程详情*/
+    handleDetailProcess(row) {
+      const id = row.id || this.ids;
+      const poolId=row.projectPoolId;
+      const pInstId=row.procInstId;
+      this.$router.push({ path: "/project/decision/detail", query: { id: poolId , pInstId: pInstId } });
+    },
   },
 };
 </script>

+ 80 - 8
ruoyi-ui/src/views/project/investOpp/applyList.vue

@@ -71,6 +71,17 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
+      <el-form-item label="流程状态" prop="status">
+        <!-- el-select 绑定表单字段 -->
+        <el-select v-model="queryParams.status" placeholder="请选择" clearable>
+          <!-- 静态选项 -->
+          <el-option label="暂存" value="0"></el-option>
+          <el-option label="已提交" value="1"></el-option>
+          <el-option label="审批中" value="2"></el-option>
+          <el-option label="审核完成" value="3"></el-option>
+          <el-option label="关闭" value="4"></el-option>
+        </el-select>
+      </el-form-item>
       <el-form-item class="searchWrapper">
         <el-button
           type="primary"
@@ -86,15 +97,24 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
+<!--      <el-col :span="1.5">
         <el-button
           plain
           type="warning"
           size="mini"
           icon="el-icon-document"
           @click="handleAdd"
-          >投资机会申请</el-button
+          >项目机会申请</el-button
         >
+      </el-col>-->
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
       </el-col>
       <right-toolbar
         :showSearch.sync="showSearch"
@@ -118,7 +138,7 @@
         align="center"
       ></el-table-column>
       <!-- <el-table-column label="主键id" align="center" prop="id" /> -->
-      <el-table-column label="项目名称" align="center" prop="projectName">
+<!--      <el-table-column label="项目名称" align="center" prop="projectName">
         <template slot-scope="scope">
           <div
             :title="scope.row.projectName"
@@ -128,6 +148,13 @@
             {{ scope.row.projectName }}
           </div>
         </template>
+      </el-table-column>-->
+      <el-table-column label="项目名称" align="center" prop="projectName">
+        <template slot-scope="scope">
+          <div :title="scope.row.projectName">
+            {{ scope.row.projectName }}
+          </div>
+        </template>
       </el-table-column>
       <el-table-column
         label="公司名称"
@@ -257,6 +284,20 @@
           <span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span>
         </template>
       </el-table-column>
+      <el-table-column label="当前节点" align="center" prop="taskName">
+        <template slot-scope="scope">
+          <div :title="scope.row.taskName"  class="public-text-blue public-cursor" @click="handleReadImage(scope.row)">
+            {{ scope.row.taskName}}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="当前处理人" align="center" prop="assigneeName">
+        <template slot-scope="scope">
+          <div :title="scope.row.assigneeName">
+            {{ scope.row.assigneeName}}
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column label="流程状态" align="center" prop="status">
         <template slot-scope="scope">
           <div :title="scope.row.status">
@@ -268,6 +309,11 @@
           </div>
         </template>
       </el-table-column>
+      <el-table-column label="操作" align="center" width="150" fixed="right" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button type="text" size="mini" @click="handleDetailProcess(scope.row)">详情</el-button>
+        </template>
+      </el-table-column>
     </el-table>
 
     <pagination
@@ -286,13 +332,17 @@
     ></meetingList>
     <!-- 设置项目状态对话框 -->
     <businessUpdate @getList="getList" ref="businessUpdate"></businessUpdate>
+    <!-- Flowable 流程图弹窗 -->
+    <el-dialog :title="readImage.title" :visible.sync="readImage.open" width="70%"  append-to-body>
+      <flow :flowData="flowData"/>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { listApprovalList, delPool, } from "@/api/invest/pool";
 import { getAllInvestOppList } from "@/api/project/investOpp/pool";
 import { listChannel } from "@/api/invest/channel";
+import { flowXmlAndNode } from "@/api/flowable/definition";
 import meetingList from "../meetingList";
 import businessUpdate from "../../invest/components/businessUpdate";
 import { mapGetters } from "vuex";
@@ -353,10 +403,17 @@ export default {
         orderByColumn: "createTime",
         isAsc: "desc",
         createTime: null,
+        status:"",
       },
       channelList: [],
-
       projectId: "",
+      //流程图信息
+      readImage:{
+        open: false,
+        src: "",
+      },
+      // xml
+      flowData: {},
     };
   },
   computed: {
@@ -375,7 +432,7 @@ export default {
     });
   },
   methods: {
-    /** 查询所有投资机会流程列表 */
+    /** 查询所有项目机会流程列表 */
     getList() {
       this.loading = true;
       getAllInvestOppList(this.queryParams).then((response) => {
@@ -544,13 +601,28 @@ export default {
     /** 导出按钮操作 */
     handleExport() {
       this.download(
-        "invest/pool/export",
+        "project/investmentOpportunity/export",
         {
           ...this.queryParams,
         },
-        `pool_${new Date().getTime()}.xlsx`
+        `investOpp_${new Date().getTime()}.xlsx`
       );
     },
+    /** 流程图查看 */
+    handleReadImage(row){
+      this.readImage.title = "流程图";
+      this.readImage.open = true;
+      // this.readImage.src = process.env.VUE_APP_BASE_API + "/flowable/definition/readImage/" + deploymentId;
+      flowXmlAndNode({procInsId: row.procInstId,deployId:row.deployId}).then(res => {
+        this.flowData = res.data;
+      })
+    },
+    /*流程详情*/
+    handleDetailProcess(row) {
+      const id = row.id || this.ids;
+      const pInstId=row.procInstId;
+      this.$router.push({ path: "/project/investOpp/detail", query: { id: id , pInstId: pInstId } });
+    },
   },
 };
 </script>

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

@@ -18,59 +18,32 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="项目负责人" prop="investHead">
+      <el-form-item label="尽调名称" prop="investigateName">
         <el-input
-          v-model.trim="queryParams.investHead"
-          placeholder="请输入项目负责人"
-          clearable
+          v-model.trim="queryParams.investigateName"
+          placeholder="请输入尽调名称"
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="公司联系人" prop="projectContacts">
+      <el-form-item label="尽调地点" prop="investigatePlace">
         <el-input
-          v-model.trim="queryParams.projectContacts"
-          placeholder="请输入公司联系人"
+          v-model.trim="queryParams.investigatePlace"
+          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-form-item label="流程状态" prop="status">
+        <!-- el-select 绑定表单字段 -->
+        <el-select v-model="queryParams.status" placeholder="请选择" clearable>
+          <!-- 静态选项 -->
+          <el-option label="暂存" value="0"></el-option>
+          <el-option label="已提交" value="1"></el-option>
+          <el-option label="审批中" value="2"></el-option>
+          <el-option label="审核完成" value="3"></el-option>
+          <el-option label="关闭" value="4"></el-option>
         </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"
@@ -86,7 +59,7 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
+<!--      <el-col :span="1.5">
         <el-button
           plain
           type="warning"
@@ -96,6 +69,27 @@
           v-hasPermi="['invest:pool:due']"
           >尽调申请</el-button
         >
+      </el-col>-->
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          type="warning"
+          size="mini"
+          icon="el-icon-tickets"
+          @click="chooseApprove"
+          v-hasPermi="['invest:pool:due']"
+        >指定审批人</el-button
+        >
+<!--        <button @click="showDialog = true">指定审批人员</button>-->
       </el-col>
       <right-toolbar
         :showSearch.sync="showSearch"
@@ -119,7 +113,7 @@
         align="center"
       ></el-table-column>
       <!-- <el-table-column label="主键id" align="center" prop="id" /> -->
-      <el-table-column label="项目名称" align="center" prop="projectName">
+<!--      <el-table-column label="项目名称" align="center" prop="projectName">
         <template slot-scope="scope">
           <div
             :title="scope.row.projectName"
@@ -129,6 +123,13 @@
             {{ scope.row.projectName }}
           </div>
         </template>
+      </el-table-column>-->
+      <el-table-column label="项目名称" align="center" prop="projectName">
+        <template slot-scope="scope">
+          <div :title="scope.row.projectName">
+            {{ scope.row.projectName }}
+          </div>
+        </template>
       </el-table-column>
       <el-table-column label="所属行业" align="center" prop="industry"
         ><template slot-scope="scope">
@@ -228,6 +229,20 @@
           <span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span>
         </template>
       </el-table-column>
+      <el-table-column label="当前节点" align="center" prop="taskName">
+        <template slot-scope="scope">
+          <div :title="scope.row.taskName" class="public-text-blue public-cursor" @click="handleReadImage(scope.row)">
+            {{ scope.row.taskName}}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="当前处理人" align="center" prop="assigneeName">
+        <template slot-scope="scope">
+          <div :title="scope.row.assigneeName">
+            {{ scope.row.assigneeName}}
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column label="流程状态" align="center" prop="status">
         <template slot-scope="scope">
           <div :title="scope.row.status">
@@ -239,6 +254,11 @@
           </div>
         </template>
       </el-table-column>
+      <el-table-column label="操作" align="center" width="150" fixed="right" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button type="text" size="mini" @click="handleDetailProcess(scope.row)">详情</el-button>
+        </template>
+      </el-table-column>
     </el-table>
 
     <pagination
@@ -256,18 +276,23 @@
     ></dueDiligenceList>
     <!-- 设置项目状态对话框 -->
     <businessUpdate @getList="getList" ref="businessUpdate"></businessUpdate>
+    <!-- 指定审批人院   -->
+    <approveDialog @getList="getList" ref="setApproval"></approveDialog>
+    <!-- Flowable 流程图弹窗 -->
+    <el-dialog :title="readImage.title" :visible.sync="readImage.open" width="70%"  append-to-body>
+      <!-- <el-image :src="readImage.src"></el-image> -->
+      <flow :flowData="flowData"/>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import {
-  listInvestigateList,
-  delPool,
-} from "@/api/invest/pool";
 import { getAllInvestigateList } from "@/api/project/investigate/pool";
 import { listChannel } from "@/api/invest/channel";
+import { flowXmlAndNode } from "@/api/flowable/definition";
 import dueDiligenceList from "../investigate/dueDiligenceList";
 import businessUpdate from "../../invest/components/businessUpdate";
+import approveDialog from "../investigate/approveDialog";
 import { mapGetters } from "vuex";
 export default {
   name: "Pool4",
@@ -275,6 +300,7 @@ export default {
   components: {
     dueDiligenceList,
     businessUpdate,
+    approveDialog,
   },
   data() {
     return {
@@ -329,6 +355,13 @@ export default {
         createTime: null,
       },
       channelList: [],
+      //流程图信息
+      readImage:{
+        open: false,
+        src: "",
+      },
+      // xml
+      flowData: {},
     };
   },
   computed: {
@@ -513,13 +546,33 @@ export default {
     /** 导出按钮操作 */
     handleExport() {
       this.download(
-        "invest/pool/export",
+        "project/investigate/export",
         {
           ...this.queryParams,
         },
-        `pool_${new Date().getTime()}.xlsx`
+        `investigate_${new Date().getTime()}.xlsx`
       );
     },
+    /*指定审批人员*/
+    chooseApprove(){
+      this.$refs.setApproval.handleShowApplyPop();
+    },
+    /** 流程图查看 */
+    handleReadImage(row){
+      this.readImage.title = "流程图";
+      this.readImage.open = true;
+      // this.readImage.src = process.env.VUE_APP_BASE_API + "/flowable/definition/readImage/" + deploymentId;
+      flowXmlAndNode({procInsId: row.procInstId,deployId:row.deployId}).then(res => {
+        this.flowData = res.data;
+      })
+    },
+    /*流程详情*/
+    handleDetailProcess(row) {
+      const id = row.id || this.ids;
+      const poolId=row.projectPoolId;
+      const pInstId=row.procInstId;
+      this.$router.push({ path: "/project/investigate/detail", query: { id: poolId , pInstId: pInstId } });
+    },
   },
 };
 </script>

+ 683 - 0
ruoyi-ui/src/views/project/listStage/listApproval.vue

@@ -0,0 +1,683 @@
+<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
+          :disabled="multiple"
+          type="warning"
+          size="mini"
+          icon="el-icon-document"
+          @click="handleSelectData(6)"
+          v-hasPermi="['invest:pool:lx:apply']"
+          >立项申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          size="mini"
+          icon="el-icon-chat-line-round"
+          @click="handleSelectData(7, 'LX')"
+          v-hasPermi="['invest:pool:lx:meeting']"
+          >发起立项会议</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="primary"
+          size="mini"
+          icon="el-icon-document-checked"
+          @click="handleSelectData(8)"
+          >上传打分表</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          :disabled="multiple"
+          plain
+          type="success"
+          size="mini"
+          icon="el-icon-setting"
+          v-hasPermi="['invest:pool:stage']"
+          @click="handleSelectData(3)"
+          >设置项目阶段</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          @click="handleSelectData(4)"
+          type="danger"
+          plain
+          icon="el-icon-switch-button"
+          size="mini"
+          :disabled="multiple"
+          v-hasPermi="['invest:pool:remove']"
+          >终止</el-button
+        >
+      </el-col>-->
+      <el-col :span="1.5">
+        <el-button
+          plain
+          type="warning"
+          size="mini"
+          icon="el-icon-document"
+          @click="handleAdd"
+        >立项申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</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="tProjectCompany.companyName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectCompany.companyName">
+            {{ scope.row.tProjectCompany.companyName }}
+          </div>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column
+        label="项目所属城市"
+        align="center"
+        prop="tProjectCompany.registeredAddress"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectCompany.registeredAddress">
+            {{ scope.row.tProjectCompany.registeredAddress }}
+          </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="projectState"
+        width="120"
+      >
+        <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="tProjectCompany.filingTime"
+      >
+        <template slot-scope="scope">
+          <span>{{
+            parseTime(scope.row.tProjectCompany.filingTime, "{y}-{m}-{d}")
+          }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="立项通过日期" align="center" prop="projectDate">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.projectDate, "{y}-{m}-{d}") }}</span>
+        </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-column label="投决通过日期" align="center" prop="decisionDate">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.decisionDate, "{y}-{m}-{d}") }}</span>
+        </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="projectCode" /> -->
+      <el-table-column
+        label="渠道"
+        align="center"
+        prop="tProjectChannel.channelName"
+      >
+        <template slot-scope="scope">
+          <div
+            v-if="
+              scope.row.tProjectChannel && scope.row.tProjectChannel.channelName
+            "
+            :title="scope.row.tProjectChannel.channelName"
+          >
+            {{ scope.row.tProjectChannel.channelName }}
+          </div>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column
+        label="所属组别"
+        align="center"
+        prop="tProjectChannel.channelGroup"
+      >
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.project_group"
+            :value="scope.row.tProjectChannel.channelGroup"
+          />
+        </template>
+      </el-table-column> -->
+
+      <!-- <el-table-column
+        label="项目联系人"
+        align="center"
+        prop="tProjectContacts.name"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectContacts.name">
+            {{ scope.row.tProjectContacts.name }}
+          </div>
+        </template>
+      </el-table-column> -->
+
+      <!--<el-table-column
+        label="创建人"
+        width="120"
+        align="center"
+        prop="createBy"
+      />
+      <el-table-column
+        label="创建时间"
+        align="center"
+        prop="createTime"
+        width="160"
+      /> -->
+      <!-- delFlag -->
+      <el-table-column
+        label="状态"
+        align="center"
+        prop="investHead"
+        width="50px"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.delFlag === '1' ? '终止' : '正常'">
+            {{ scope.row.delFlag === "1" ? "终止" : "正常" }}
+          </div>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <!-- 会议管理组件 -->
+    <meetingList
+      :type="'3'"
+      ref="meetingList"
+      :projectId="projectId"
+      @getList="getList"
+    ></meetingList>
+    <!-- 设置项目状态对话框 -->
+    <businessUpdate @getList="getList" ref="businessUpdate"></businessUpdate>
+  </div>
+</template>
+
+<script>
+import { listApprovalStage, } from "@/api/project/pool";
+import { listChannel } from "@/api/invest/channel";
+import meetingList from "../meetingList";
+import businessUpdate from "../../invest/components/businessUpdate.vue";
+import { mapGetters } from "vuex";
+export default {
+  name: "Pool3",
+  dicts: ["project_group", "project_stage", "project_state", "CUSTOMER_TRADE"],
+  components: {
+    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;
+      listApprovalStage(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() {
+      // 立项申请
+      this.$refs.meetingList.showLXApplyPop();
+    },
+    handleSelectData(type, otherData) {
+      // type 1=修改 2=详情 3=设置项目阶段 4=终止 5=上传评估意见
+      // 6=立项申请 7=发起立项会议 8=上传打分表(立项)
+      // 9=尽调申请 10=上传尽调报告
+      // 11=投决申请 12=发起投决会议 13=上传打分表(投决)
+      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 === 8) {
+          // 有立项会议
+          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, "1", 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 === 6) {
+            if (row.approvalFlag === "0") {
+              // 立项申请
+              this.$refs.meetingList.showLXApplyPop(row);
+            } else {
+              this.$message({
+                message: "您已发起立项申请,无需重复操作",
+                duration: 1500,
+                type: "warning",
+              });
+            }
+          } else if (type === 7) {
+            if (row.approvalFlag === "1") {
+              // 发起立项会议
+              this.handleMeeting(row, otherData);
+            } else {
+              this.$message({
+                message: "请先立项申请",
+                duration: 1500,
+                type: "warning",
+              });
+            }
+          }
+        } else {
+          this.$message({
+            message: "无权限",
+            duration: 1500,
+            type: "error",
+          });
+        }
+      } else {
+        this.$message({
+          message: "只能选择一条数据",
+          duration: 1500,
+          type: "warning",
+        });
+      }
+    },
+    handleDetail(row) {
+      const id = row.id || this.ids;
+      this.$router.push({ path: "/project/poolDetail", query: { id: id } });
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      const id = row.id;
+      this.$router.push({ path: "/invest/pool/add", query: { id: id } });
+    },
+    // 发起会议
+    handleMeeting(row, meetingType) {
+      this.$store.commit("SET_PROJECTITEMMESSAGE", row);
+      this.$refs.meetingList.handleAdd(row.id, meetingType);
+    },
+    /**终止按钮操作 */
+    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(
+        "project/exportApprovalStage",
+        {
+          ...this.queryParams,
+        },
+        `approvalStage_${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>

+ 668 - 0
ruoyi-ui/src/views/project/listStage/listDecision.vue

@@ -0,0 +1,668 @@
+<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
+          :disabled="multiple"
+          type="warning"
+          size="mini"
+          icon="el-icon-document"
+          @click="handleSelectData(11)"
+          v-hasPermi="['invest:pool:tj:apply']"
+          >投决申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          size="mini"
+          icon="el-icon-chat-line-square"
+          @click="handleSelectData(12, 'TJ')"
+          v-hasPermi="['invest:pool:tj:meeting']"
+          >发起投决会议</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="primary"
+          size="mini"
+          icon="el-icon-document-checked"
+          @click="handleSelectData(13)"
+          >上传打分表</el-button
+        >
+      </el-col>
+
+      <el-col :span="1.5">
+        <el-button
+          :disabled="multiple"
+          plain
+          type="success"
+          size="mini"
+          icon="el-icon-setting"
+          v-hasPermi="['invest:pool:stage']"
+          @click="handleSelectData(3)"
+          >设置项目阶段</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          @click="handleSelectData(4)"
+          type="danger"
+          plain
+          icon="el-icon-switch-button"
+          size="mini"
+          :disabled="multiple"
+          v-hasPermi="['invest:pool:remove']"
+          >终止</el-button
+        >
+      </el-col>-->
+      <el-col :span="1.5">
+        <el-button
+          plain
+          type="warning"
+          size="mini"
+          icon="el-icon-document"
+          @click="handleAdd"
+        >投决申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</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="tProjectCompany.companyName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectCompany.companyName">
+            {{ scope.row.tProjectCompany.companyName }}
+          </div>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column
+        label="项目所属城市"
+        align="center"
+        prop="tProjectCompany.registeredAddress"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectCompany.registeredAddress">
+            {{ scope.row.tProjectCompany.registeredAddress }}
+          </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="projectState"
+        width="120"
+      >
+        <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="tProjectCompany.filingTime">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.tProjectCompany.filingTime, "{y}-{m}-{d}") }}</span>
+        </template>
+      </el-table-column> -->
+      <el-table-column label="立项通过日期" align="center" prop="projectDate">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.projectDate, "{y}-{m}-{d}") }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="投决通过日期" align="center" prop="decisionDate">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.decisionDate, "{y}-{m}-{d}") }}</span>
+        </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-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="projectCode" /> -->
+      <el-table-column
+        label="渠道"
+        align="center"
+        prop="tProjectChannel.channelName"
+      >
+        <template slot-scope="scope">
+          <div
+            v-if="
+              scope.row.tProjectChannel && scope.row.tProjectChannel.channelName
+            "
+            :title="scope.row.tProjectChannel.channelName"
+          >
+            {{ scope.row.tProjectChannel.channelName }}
+          </div>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column
+        label="所属组别"
+        align="center"
+        prop="tProjectChannel.channelGroup"
+      >
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.project_group"
+            :value="scope.row.tProjectChannel.channelGroup"
+          />
+        </template>
+      </el-table-column> -->
+
+      <!-- <el-table-column
+        label="项目联系人"
+        align="center"
+        prop="tProjectContacts.name"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectContacts.name">
+            {{ scope.row.tProjectContacts.name }}
+          </div>
+        </template>
+      </el-table-column> -->
+
+      <!--<el-table-column
+        label="创建人"
+        width="120"
+        align="center"
+        prop="createBy"
+      />
+      <el-table-column
+        label="创建时间"
+        align="center"
+        prop="createTime"
+        width="160"
+      /> -->
+      <!-- delFlag -->
+      <el-table-column
+        label="状态"
+        align="center"
+        prop="investHead"
+        width="50px"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.delFlag === '1' ? '终止' : '正常'">
+            {{ scope.row.delFlag === "1" ? "终止" : "正常" }}
+          </div>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <!-- 会议管理组件 -->
+    <meetingList
+      :type="'3'"
+      ref="meetingList"
+      :projectId="projectId"
+      @getList="getList"
+    ></meetingList>
+    <!-- 设置项目状态对话框 -->
+    <businessUpdate @getList="getList" ref="businessUpdate"></businessUpdate>
+  </div>
+</template>
+
+<script>
+import { listDecisionStage, } from "@/api/project/pool";
+import { listChannel } from "@/api/invest/channel";
+import meetingList from "../meetingList";
+import businessUpdate from "../../invest/components/businessUpdate.vue";
+import { mapGetters } from "vuex";
+export default {
+  name: "Pool5",
+  dicts: ["project_group", "project_stage", "project_state", "CUSTOMER_TRADE"],
+  components: {
+    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;
+      listDecisionStage(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() {
+      // 投决申请
+      this.$refs.meetingList.showTJApplyPop();
+    },
+    handleSelectData(type, otherData) {
+      // type 1=修改 2=详情 3=设置项目阶段 4=终止 5=上传评估意见
+      // 6=立项申请 7=发起立项会议 8=上传打分表(立项)
+      // 9=尽调申请 10=上传尽调报告
+      // 11=投决申请 12=发起投决会议 13=上传打分表(投决)
+      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 === 11) {
+            if (row.decisionFlag === "0") {
+              // 投决申请
+              this.$refs.meetingList.showTJApplyPop(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: "/project/poolDetail", 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(
+        "project/exportDecisionStage",
+        {
+          ...this.queryParams,
+        },
+        `decisionStage_${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>

+ 775 - 0
ruoyi-ui/src/views/project/listStage/listInvestOpp.vue

@@ -0,0 +1,775 @@
+<template>
+  <div class="app-container">
+    <el-form
+      v-if="type !== '2'"
+      :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"
+      v-if="type === '2' && stage == '4' ? false : true"
+    >
+<!--      <el-col :span="1.5">
+        <el-button
+          v-if="type === '1' && stage == '1'"
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['invest:pool:add']"
+        >新增</el-button
+        >
+      </el-col>
+
+      <el-col :span="1.5">
+        <el-button
+          :disabled="multiple"
+          plain
+          type="success"
+          v-if="stage === '1'"
+          size="mini"
+          icon="el-icon-edit"
+          @click="handleSelectData(1)"
+          v-hasPermi="['invest:pool:edit']"
+        >修改</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          :disabled="multiple"
+          plain
+          type="primary"
+          size="mini"
+          icon="el-icon-edit"
+          v-if="stage === '2'"
+          @click="handleSelectData(5)"
+          v-hasPermi="['invest:pool:assess']"
+        >上传评估意见</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '3'"
+          size="mini"
+          icon="el-icon-document"
+          @click="handleSelectData(6)"
+          v-hasPermi="['invest:pool:lx:apply']"
+        >立项申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '3'"
+          size="mini"
+          icon="el-icon-chat-line-round"
+          @click="handleSelectData(7, 'LX')"
+          v-hasPermi="['invest:pool:lx:meeting']"
+        >发起立项会议</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="primary"
+          v-if="stage == '3'"
+          size="mini"
+          icon="el-icon-document-checked"
+          @click="handleSelectData(8)"
+        >上传打分表</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '4'"
+          size="mini"
+          icon="el-icon-tickets"
+          @click="handleSelectData(9)"
+          v-hasPermi="['invest:pool:due']"
+        >尽调申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="primary"
+          v-if="stage == '4'"
+          size="mini"
+          icon="el-icon-document-checked"
+          @click="handleSelectData(10)"
+        >上传尽调报告</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '5'"
+          size="mini"
+          icon="el-icon-document"
+          @click="handleSelectData(11)"
+          v-hasPermi="['invest:pool:tj:apply']"
+        >投决申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '5'"
+          size="mini"
+          icon="el-icon-chat-line-square"
+          @click="handleSelectData(12, 'TJ')"
+          v-hasPermi="['invest:pool:tj:meeting']"
+        >发起投决会议</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="primary"
+          v-if="stage == '5'"
+          size="mini"
+          icon="el-icon-document-checked"
+          @click="handleSelectData(13)"
+        >上传打分表</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          :disabled="multiple"
+          plain
+          type="success"
+          v-if="stage !== '0'"
+          size="mini"
+          icon="el-icon-setting"
+          v-hasPermi="['invest:pool:stage']"
+          @click="handleSelectData(3)"
+        >设置项目阶段</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          @click="handleSelectData(4)"
+          v-if="type === '1' && stage !== '0'"
+          type="danger"
+          plain
+          icon="el-icon-switch-button"
+          size="mini"
+          :disabled="multiple"
+          v-hasPermi="['invest:pool:remove']"
+        >终止</el-button
+        >
+      </el-col>-->
+      <el-col :span="1.5">
+        <el-button
+          plain
+          type="warning"
+          size="mini"
+          icon="el-icon-document"
+          @click="handleAdd"
+        >项目机会申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-if="type === '1' && stage == '0'"
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['invest:pool:export']"
+        >导出</el-button
+        >
+      </el-col>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+    <el-table
+      ref="dataTable"
+      @row-click="clickRow"
+      class="tableWrapper"
+      :class="{ hideHeaderCheckBox: stage !== '0' }"
+      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="tProjectCompany.companyName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectCompany.companyName">
+            {{ scope.row.tProjectCompany.companyName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="项目所属城市"
+        align="center"
+        prop="tProjectCompany.registeredAddress"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectCompany.registeredAddress">
+            {{ scope.row.tProjectCompany.registeredAddress }}
+          </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="projectState"
+        width="120"
+      >
+        <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="tProjectCompany.filingTime"
+      >
+        <template slot-scope="scope">
+          <span>{{
+              parseTime(scope.row.tProjectCompany.filingTime, "{y}-{m}-{d}")
+            }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="立项通过日期"
+        align="center"
+        prop="projectDate"
+        v-if="stage !== '1'"
+      >
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.projectDate, "{y}-{m}-{d}") }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="投决通过日期"
+        align="center"
+        prop="decisionDate"
+        v-if="stage !== '1'"
+      >
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.decisionDate, "{y}-{m}-{d}") }}</span>
+        </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="projectCode" /> -->
+      <el-table-column
+        label="渠道"
+        align="center"
+        prop="tProjectChannel.channelName"
+      >
+        <template slot-scope="scope">
+          <div
+            v-if="
+              scope.row.tProjectChannel && scope.row.tProjectChannel.channelName
+            "
+            :title="scope.row.tProjectChannel.channelName"
+          >
+            {{ scope.row.tProjectChannel.channelName }}
+          </div>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column
+        label="所属组别"
+        align="center"
+        prop="tProjectChannel.channelGroup"
+      >
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.project_group"
+            :value="scope.row.tProjectChannel.channelGroup"
+          />
+        </template>
+      </el-table-column> -->
+
+      <!-- <el-table-column
+        label="项目联系人"
+        align="center"
+        prop="tProjectContacts.name"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectContacts.name">
+            {{ scope.row.tProjectContacts.name }}
+          </div>
+        </template>
+      </el-table-column> -->
+
+      <!--<el-table-column
+        label="创建人"
+        width="120"
+        align="center"
+        prop="createBy"
+      />
+      <el-table-column
+        label="创建时间"
+        align="center"
+        prop="createTime"
+        width="160"
+      /> -->
+      <!-- delFlag -->
+      <el-table-column label="状态" align="center" prop="investHead">
+        <template slot-scope="scope">
+          <div :title="scope.row.delFlag === '1' ? '终止' : '正常'">
+            {{ scope.row.delFlag === "1" ? "终止" : "正常" }}
+          </div>
+        </template>
+      </el-table-column>
+      <!-- fixed="right" -->
+      <el-table-column label="操作" align="center" v-if="false">
+        <template slot-scope="scope">
+          <!-- stage//0=全部 1=项目报备  2=评估考察 3=项目立项 4=尽职背调 5=项目投决 -->
+          <el-button
+            v-if="scope.row.delFlag !== '1' && stage !== '0'"
+            class="custom-red-color"
+            size="mini"
+            type="text"
+            icon="el-icon-switch-button"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['invest:pool:remove']"
+          >终止</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <!-- 设置项目状态对话框 -->
+    <businessUpdate @getList="getList" ref="businessUpdate"></businessUpdate>
+  </div>
+</template>
+
+<script>
+import { listInvestOppStage } from "@/api/project/pool";
+import { listChannel } from "@/api/invest/channel";
+import dueDiligenceList from "../../invest/components/dueDiligenceList";
+import followList from "../../invest/components/followList";
+import meetingList from "../../invest/components/meetingList";
+import businessUpdate from "../../invest/components/businessUpdate";
+
+import { mapGetters } from "vuex";
+export default {
+  props: {
+    type: {
+      type: String,
+      default: "1", //1=显示全部列表  2=显示某项目下的详情列表
+    },
+    stage: {
+      type: String,
+      default: "0", //0=全部 1=项目报备  2=评估考察 3=项目立项 4=尽职背调 5=项目投决
+    },
+    projectId: {
+      type: String,
+    },
+  },
+  dicts: ["project_group", "project_stage", "project_state", "CUSTOMER_TRADE"],
+  components: {
+    dueDiligenceList,
+    followList,
+    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: [],
+    };
+  },
+  computed: {
+    ...mapGetters(["user"]),
+  },
+  created() {},
+  mounted() {
+    this.getList();
+    // 渠道
+    listChannel({
+      pageNum: 1,
+      pageSize: 100,
+    }).then((response) => {
+      this.channelList = response.rows;
+    });
+  },
+  methods: {
+    /** 查询项目机会阶段列表 */
+    getList() {
+      this.loading = true;
+      listInvestOppStage(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) {
+      if (this.stage !== "0") {
+        if (selection.length > 1) {
+          //移除上一次选中行数据
+          selection.shift();
+          //修改选中图标为未选中状态
+          this.$refs.dataTable.clearSelection();
+          //将当前选中行改为选中状态
+          this.$refs.dataTable.toggleRowSelection(selection[0]);
+        }
+      }
+      this.ids = selection.map((item) => item.id);
+      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() {
+      //项目机会申请
+      this.$router.push({ path: "/project/investOpp/apply" });
+    },
+    handleSelectData(type, otherData) {
+      // type 1=修改 2=详情 3=设置项目阶段 4=终止 5=上传评估意见
+      // 6=立项申请 7=发起立项会议 8=上传打分表(立项)
+      // 9=尽调申请 10=上传尽调报告
+      // 11=投决申请 12=发起投决会议 13=上传打分表(投决)
+      if (this.selectRowList.length == 1) {
+        const row = this.selectRowList[0];
+        if (row.delFlag === "1") {
+          this.$message({
+            message: "项目已终止",
+            duration: 1500,
+            type: "error",
+          });
+        } else if (row.investHead === this.user.nickName) {
+          // 项目负责人
+          if (type === 1) {
+            // 修改
+            this.handleUpdate(row);
+          } else if (type === 2) {
+            // 详情
+            this.handleDetail(row);
+          } else if (type === 3) {
+            if (row.projectState !== "1") {
+              // 设置项目阶段
+              this.$refs.businessUpdate.handleBusinessUpdate(row);
+            } else {
+              this.$message({
+                message: "暂存时不能设置项目阶段",
+                duration: 1500,
+                type: "warning",
+              });
+            }
+          } else if (type === 4) {
+            // 终止
+            this.handleDelete(row);
+          }
+        } else {
+          this.$message({
+            message: "无权限",
+            duration: 1500,
+            type: "error",
+          });
+        }
+      } else {
+        this.$message({
+          message: "只能选择一条数据",
+          duration: 1500,
+          type: "warning",
+        });
+      }
+    },
+    handleDetail(row) {
+      const id = row.id || this.ids;
+      this.$router.push({ path: "/project/poolDetail", query: { id: id } });
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      const id = row.id;
+      this.$router.push({ path: "/invest/pool/add", 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(
+        "project/exportInvestOppStage",
+        {
+          ...this.queryParams,
+        },
+        `investOppStage_${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;
+  }
+}
+/**找到表头那一行,然后把里面的复选框隐藏掉**/
+.hideHeaderCheckBox
+::v-deep
+.el-table__header-wrapper
+.el-table__header
+.el-checkbox {
+  display: none;
+}
+</style>
+

+ 663 - 0
ruoyi-ui/src/views/project/listStage/listInvestigate.vue

@@ -0,0 +1,663 @@
+<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
+          :disabled="multiple"
+          type="warning"
+          size="mini"
+          icon="el-icon-tickets"
+          @click="handleSelectData(9)"
+          v-hasPermi="['invest:pool:due']"
+          >尽调申请</el-button
+        >
+      </el-col>-->
+      <!--      <el-col :span="1.5">-->
+<!--        <el-button-->
+<!--          plain-->
+<!--          :disabled="multiple"-->
+<!--          type="primary"-->
+<!--          size="mini"-->
+<!--          icon="el-icon-document-checked"-->
+<!--          @click="handleSelectData(10)"-->
+<!--          >上传尽调报告</el-button-->
+<!--        >-->
+<!--      </el-col>-->
+
+<!--      <el-col :span="1.5">-->
+<!--        <el-button-->
+<!--          :disabled="multiple"-->
+<!--          plain-->
+<!--          type="success"-->
+<!--          size="mini"-->
+<!--          icon="el-icon-setting"-->
+<!--          v-hasPermi="['invest:pool:stage']"-->
+<!--          @click="handleSelectData(3)"-->
+<!--          >设置项目阶段</el-button-->
+<!--        >-->
+<!--      </el-col>-->
+<!--      <el-col :span="1.5">
+        <el-button
+          @click="handleSelectData(4)"
+          type="danger"
+          plain
+          icon="el-icon-switch-button"
+          size="mini"
+          :disabled="multiple"
+          v-hasPermi="['invest:pool:remove']"
+          >终止</el-button
+        >
+      </el-col>-->
+      <el-col :span="1.5">
+        <el-button
+          plain
+          type="warning"
+          size="mini"
+          icon="el-icon-tickets"
+          @click="handleAdd"
+          v-hasPermi="['invest:pool:due']"
+        >尽调申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</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="tProjectCompany.companyName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectCompany.companyName">
+            {{ scope.row.tProjectCompany.companyName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="项目所属城市"
+        align="center"
+        prop="tProjectCompany.registeredAddress"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectCompany.registeredAddress">
+            {{ scope.row.tProjectCompany.registeredAddress }}
+          </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="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="tProjectCompany.filingTime"
+      >
+        <template slot-scope="scope">
+          <span>{{
+            parseTime(scope.row.tProjectCompany.filingTime, "{y}-{m}-{d}")
+          }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="立项通过日期" align="center" prop="projectDate">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.projectDate, "{y}-{m}-{d}") }}</span>
+        </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-column label="投决通过日期" align="center" prop="decisionDate">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.decisionDate, "{y}-{m}-{d}") }}</span>
+        </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="projectCode" /> -->
+      <el-table-column
+        label="渠道"
+        align="center"
+        prop="tProjectChannel.channelName"
+      >
+        <template slot-scope="scope">
+          <div
+            v-if="
+              scope.row.tProjectChannel && scope.row.tProjectChannel.channelName
+            "
+            :title="scope.row.tProjectChannel.channelName"
+          >
+            {{ scope.row.tProjectChannel.channelName }}
+          </div>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column
+        label="所属组别"
+        align="center"
+        prop="tProjectChannel.channelGroup"
+      >
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.project_group"
+            :value="scope.row.tProjectChannel.channelGroup"
+          />
+        </template>
+      </el-table-column> -->
+
+      <!-- <el-table-column
+        label="项目联系人"
+        align="center"
+        prop="tProjectContacts.name"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectContacts.name">
+            {{ scope.row.tProjectContacts.name }}
+          </div>
+        </template>
+      </el-table-column> -->
+
+      <!--<el-table-column
+        label="创建人"
+        width="120"
+        align="center"
+        prop="createBy"
+      />
+      <el-table-column
+        label="创建时间"
+        align="center"
+        prop="createTime"
+        width="160"
+      /> -->
+      <!-- delFlag -->
+      <el-table-column
+        label="状态"
+        align="center"
+        prop="investHead"
+        width="50px"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.delFlag === '1' ? '终止' : '正常'">
+            {{ scope.row.delFlag === "1" ? "终止" : "正常" }}
+          </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>
+    <!-- 设置项目状态对话框 -->
+    <businessUpdate @getList="getList" ref="businessUpdate"></businessUpdate>
+  </div>
+</template>
+
+<script>
+import { listInvestigateStage, } from "@/api/project/pool";
+import { listChannel } from "@/api/invest/channel";
+import dueDiligenceList from "../investigate/dueDiligenceList.vue";
+import businessUpdate from "../../invest/components/businessUpdate.vue";
+import { mapGetters } from "vuex";
+export default {
+  name: "Pool4",
+  dicts: ["project_group", "project_stage", "project_state", "CUSTOMER_TRADE"],
+  components: {
+    dueDiligenceList,
+    businessUpdate,
+  },
+  data() {
+    return {
+      projectId: "",
+      // 遮罩层
+      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: [],
+    };
+  },
+  computed: {
+    ...mapGetters(["user"]),
+  },
+  created() {},
+  mounted() {
+    this.getList();
+    // 渠道
+    listChannel({
+      pageNum: 1,
+      pageSize: 100,
+    }).then((response) => {
+      this.channelList = response.rows;
+    });
+  },
+  methods: {
+    /** 查询项目背调阶段列表 */
+    getList() {
+      this.loading = true;
+      listInvestigateStage(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() {
+      // 尽调申请
+      this.$refs.dueDiligenceLists.handleShowApplyPop();
+    },
+    handleSelectData(type, otherData) {
+      // type 1=修改 2=详情 3=设置项目阶段 4=终止 5=上传评估意见
+      // 6=立项申请 7=发起立项会议 8=上传打分表(立项)
+      // 9=尽调申请 10=上传尽调报告
+      // 11=投决申请 12=发起投决会议 13=上传打分表(投决)
+      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 === 10) {
+          // 是否有尽调申请
+          if (row.investigateFlag === "1") {
+            // 是否被选为参与人
+            if (
+              row.tProjectInvestigate &&
+              row.tProjectInvestigate.investigatePerson.indexOf(
+                this.user.nickName
+              ) > -1
+            ) {
+              //是否上传了尽调报告
+              if (!row.tProjectInvestigatePerson) {
+                // 上传尽调报告
+                this.$refs.dueDiligenceLists.handleShowReportPop(row);
+              } else {
+                this.$message({
+                  message: "您已上传尽调报告,无需重复操作",
+                  duration: 1500,
+                  type: "warning",
+                });
+              }
+            } else {
+              this.$message({
+                message: "无权限",
+                duration: 1500,
+                type: "error",
+              });
+            }
+          } 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 === 9) {
+            // 是否有尽调申请
+            if (row.investigateFlag === "0") {
+              // 尽调申请
+              this.$refs.dueDiligenceLists.handleShowApplyPop(row);
+            } else {
+              this.$message({
+                message: "您已发起尽调申请,无需重复操作",
+                duration: 1500,
+                type: "warning",
+              });
+            }
+          }
+        } else {
+          this.$message({
+            message: "无权限",
+            duration: 1500,
+            type: "error",
+          });
+        }
+      } else {
+        this.$message({
+          message: "只能选择一条数据",
+          duration: 1500,
+          type: "warning",
+        });
+      }
+    },
+    handleDetail(row) {
+      const id = row.id || this.ids;
+      this.$router.push({ path: "/project/poolDetail", query: { id: id } });
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      const id = row.id;
+      this.$router.push({ path: "/invest/pool/add", 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(
+        "project/exportInvestigateStage",
+        {
+          ...this.queryParams,
+        },
+        `investigateStage_${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>

+ 774 - 0
ruoyi-ui/src/views/project/listStage/listPool.vue

@@ -0,0 +1,774 @@
+<template>
+  <div class="app-container">
+    <el-form
+      v-if="type !== '2'"
+      :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 label="项目机会状态" prop="projectStatus">
+        <!-- el-select 绑定表单字段 -->
+        <el-select v-model="queryParams.projectStatus" placeholder="请选择" clearable>
+          <!-- 静态选项 -->
+          <el-option label="正常" value="0"></el-option>
+          <el-option label="终止" value="1"></el-option>
+          <el-option label="观望" value="2"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-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"
+      v-if="type === '2' && stage == '4' ? false : true"
+    >
+      <el-col :span="1.5">
+        <el-button
+          v-if="type === '1' && stage == '1'"
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['invest:pool:add']"
+        >新增</el-button
+        >
+      </el-col>
+
+      <el-col :span="1.5">
+        <el-button
+          :disabled="multiple"
+          plain
+          type="success"
+          v-if="stage === '1'"
+          size="mini"
+          icon="el-icon-edit"
+          @click="handleSelectData(1)"
+          v-hasPermi="['invest:pool:edit']"
+        >修改</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          :disabled="multiple"
+          plain
+          type="primary"
+          size="mini"
+          icon="el-icon-edit"
+          v-if="stage === '2'"
+          @click="handleSelectData(5)"
+          v-hasPermi="['invest:pool:assess']"
+        >上传评估意见</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '3'"
+          size="mini"
+          icon="el-icon-document"
+          @click="handleSelectData(6)"
+          v-hasPermi="['invest:pool:lx:apply']"
+        >立项申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '3'"
+          size="mini"
+          icon="el-icon-chat-line-round"
+          @click="handleSelectData(7, 'LX')"
+          v-hasPermi="['invest:pool:lx:meeting']"
+        >发起立项会议</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="primary"
+          v-if="stage == '3'"
+          size="mini"
+          icon="el-icon-document-checked"
+          @click="handleSelectData(8)"
+        >上传打分表</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '4'"
+          size="mini"
+          icon="el-icon-tickets"
+          @click="handleSelectData(9)"
+          v-hasPermi="['invest:pool:due']"
+        >尽调申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="primary"
+          v-if="stage == '4'"
+          size="mini"
+          icon="el-icon-document-checked"
+          @click="handleSelectData(10)"
+        >上传尽调报告</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '5'"
+          size="mini"
+          icon="el-icon-document"
+          @click="handleSelectData(11)"
+          v-hasPermi="['invest:pool:tj:apply']"
+        >投决申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '5'"
+          size="mini"
+          icon="el-icon-chat-line-square"
+          @click="handleSelectData(12, 'TJ')"
+          v-hasPermi="['invest:pool:tj:meeting']"
+        >发起投决会议</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="primary"
+          v-if="stage == '5'"
+          size="mini"
+          icon="el-icon-document-checked"
+          @click="handleSelectData(13)"
+        >上传打分表</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          :disabled="multiple"
+          plain
+          type="success"
+          v-if="stage !== '0'"
+          size="mini"
+          icon="el-icon-setting"
+          v-hasPermi="['invest:pool:stage']"
+          @click="handleSelectData(3)"
+        >设置项目阶段</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          @click="handleSelectData(4)"
+          v-if="type === '1' && stage !== '0'"
+          type="danger"
+          plain
+          icon="el-icon-switch-button"
+          size="mini"
+          :disabled="multiple"
+          v-hasPermi="['invest:pool:remove']"
+        >终止</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-if="type === '1' && stage == '0'"
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['invest:pool:export']"
+        >导出</el-button
+        >
+      </el-col>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+    <el-table
+      ref="dataTable"
+      @row-click="clickRow"
+      class="tableWrapper"
+      :class="{ hideHeaderCheckBox: stage !== '0' }"
+      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="tProjectCompany.companyName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectCompany.companyName">
+            {{ scope.row.tProjectCompany.companyName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="项目所属城市"
+        align="center"
+        prop="tProjectCompany.registeredAddress"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectCompany.registeredAddress">
+            {{ scope.row.tProjectCompany.registeredAddress }}
+          </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="projectState"
+        width="120"
+      >
+        <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="tProjectCompany.filingTime"
+      >
+        <template slot-scope="scope">
+          <span>{{
+              parseTime(scope.row.tProjectCompany.filingTime, "{y}-{m}-{d}")
+            }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="立项通过日期"
+        align="center"
+        prop="projectDate"
+        v-if="stage !== '1'"
+      >
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.projectDate, "{y}-{m}-{d}") }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="投决通过日期"
+        align="center"
+        prop="decisionDate"
+        v-if="stage !== '1'"
+      >
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.decisionDate, "{y}-{m}-{d}") }}</span>
+        </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="projectCode" /> -->
+      <el-table-column
+        label="渠道"
+        align="center"
+        prop="tProjectChannel.channelName"
+      >
+        <template slot-scope="scope">
+          <div
+            v-if="
+              scope.row.tProjectChannel && scope.row.tProjectChannel.channelName
+            "
+            :title="scope.row.tProjectChannel.channelName"
+          >
+            {{ scope.row.tProjectChannel.channelName }}
+          </div>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column
+        label="所属组别"
+        align="center"
+        prop="tProjectChannel.channelGroup"
+      >
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.project_group"
+            :value="scope.row.tProjectChannel.channelGroup"
+          />
+        </template>
+      </el-table-column> -->
+
+      <!-- <el-table-column
+        label="项目联系人"
+        align="center"
+        prop="tProjectContacts.name"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectContacts.name">
+            {{ scope.row.tProjectContacts.name }}
+          </div>
+        </template>
+      </el-table-column> -->
+
+      <!--<el-table-column
+        label="创建人"
+        width="120"
+        align="center"
+        prop="createBy"
+      />
+      <el-table-column
+        label="创建时间"
+        align="center"
+        prop="createTime"
+        width="160"
+      /> -->
+      <!-- delFlag -->
+      <el-table-column label="状态" align="center" prop="investHead">
+        <template slot-scope="scope">
+          <div :title="scope.row.delFlag === '1' ? '终止' : '正常'">
+            {{ scope.row.delFlag === "1" ? "终止" : "正常" }}
+          </div>
+        </template>
+      </el-table-column>
+      <!-- fixed="right" -->
+      <el-table-column label="操作" align="center" v-if="false">
+        <template slot-scope="scope">
+          <!-- stage//0=全部 1=项目报备  2=评估考察 3=项目立项 4=尽职背调 5=项目投决 -->
+          <el-button
+            v-if="scope.row.delFlag !== '1' && stage !== '0'"
+            class="custom-red-color"
+            size="mini"
+            type="text"
+            icon="el-icon-switch-button"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['invest:pool:remove']"
+          >终止</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <!-- 设置项目状态对话框 -->
+    <businessUpdate @getList="getList" ref="businessUpdate"></businessUpdate>
+
+  </div>
+</template>
+
+<script>
+import { listPool, } from "@/api/project/pool";
+import { listChannel } from "@/api/invest/channel";
+import dueDiligenceList from "../../invest/components/dueDiligenceList";
+import followList from "../../invest/components/followList";
+import meetingList from "../../invest/components/meetingList";
+import businessUpdate from "../../invest/components/businessUpdate";
+
+import { mapGetters } from "vuex";
+export default {
+  props: {
+    type: {
+      type: String,
+      default: "1", //1=显示全部列表  2=显示某项目下的详情列表
+    },
+    stage: {
+      type: String,
+      default: "0", //0=全部 1=项目报备  2=评估考察 3=项目立项 4=尽职背调 5=项目投决
+    },
+    projectId: {
+      type: String,
+    },
+  },
+  dicts: ["project_group", "project_stage", "project_state", "CUSTOMER_TRADE"],
+  components: {
+    dueDiligenceList,
+    followList,
+    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,
+        projectStatus:null
+      },
+      channelList: [],
+    };
+  },
+  computed: {
+    ...mapGetters(["user"]),
+  },
+  created() {},
+  mounted() {
+    this.getList();
+    // 渠道
+    listChannel({
+      pageNum: 1,
+      pageSize: 100,
+    }).then((response) => {
+      this.channelList = response.rows;
+    });
+  },
+  methods: {
+    /** 查询项目池列表 */
+    getList() {
+      this.loading = true;
+      listPool(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) {
+      if (this.stage !== "0") {
+        if (selection.length > 1) {
+          //移除上一次选中行数据
+          selection.shift();
+          //修改选中图标为未选中状态
+          this.$refs.dataTable.clearSelection();
+          //将当前选中行改为选中状态
+          this.$refs.dataTable.toggleRowSelection(selection[0]);
+        }
+      }
+      this.ids = selection.map((item) => item.id);
+      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() {
+      this.$router.push({ path: "/invest/pool/add" });
+    },
+    handleSelectData(type, otherData) {
+      // type 1=修改 2=详情 3=设置项目阶段 4=终止 5=上传评估意见
+      // 6=立项申请 7=发起立项会议 8=上传打分表(立项)
+      // 9=尽调申请 10=上传尽调报告
+      // 11=投决申请 12=发起投决会议 13=上传打分表(投决)
+      if (this.selectRowList.length == 1) {
+        const row = this.selectRowList[0];
+        if (row.delFlag === "1") {
+          this.$message({
+            message: "项目已终止",
+            duration: 1500,
+            type: "error",
+          });
+        } else if (row.investHead === this.user.nickName) {
+          // 项目负责人
+          if (type === 1) {
+            // 修改
+            this.handleUpdate(row);
+          } else if (type === 2) {
+            // 详情
+            this.handleDetail(row);
+          } else if (type === 3) {
+            if (row.projectState !== "1") {
+              // 设置项目阶段
+              this.$refs.businessUpdate.handleBusinessUpdate(row);
+            } else {
+              this.$message({
+                message: "暂存时不能设置项目阶段",
+                duration: 1500,
+                type: "warning",
+              });
+            }
+          } else if (type === 4) {
+            // 终止
+            this.handleDelete(row);
+          }
+        } else {
+          this.$message({
+            message: "无权限",
+            duration: 1500,
+            type: "error",
+          });
+        }
+      } else {
+        this.$message({
+          message: "只能选择一条数据",
+          duration: 1500,
+          type: "warning",
+        });
+      }
+    },
+    handleDetail(row) {
+      const id = row.id || this.ids;
+      this.$router.push({ path: "/project/poolDetail", query: { id: id } });
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      const id = row.id;
+      this.$router.push({ path: "/invest/pool/add", 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(
+        "project/exportList",
+        {
+          ...this.queryParams,
+        },
+        `poolList_${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;
+  }
+}
+/**找到表头那一行,然后把里面的复选框隐藏掉**/
+.hideHeaderCheckBox
+::v-deep
+.el-table__header-wrapper
+.el-table__header
+.el-checkbox {
+  display: none;
+}
+</style>
+

+ 764 - 0
ruoyi-ui/src/views/project/listStage/listSign.vue

@@ -0,0 +1,764 @@
+<template>
+  <div class="app-container">
+    <el-form
+      v-if="type !== '2'"
+      :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"
+      v-if="type === '2' && stage == '4' ? false : true"
+    >
+      <el-col :span="1.5">
+        <el-button
+          v-if="type === '1' && stage == '1'"
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['invest:pool:add']"
+        >新增</el-button
+        >
+      </el-col>
+
+      <el-col :span="1.5">
+        <el-button
+          :disabled="multiple"
+          plain
+          type="success"
+          v-if="stage === '1'"
+          size="mini"
+          icon="el-icon-edit"
+          @click="handleSelectData(1)"
+          v-hasPermi="['invest:pool:edit']"
+        >修改</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          :disabled="multiple"
+          plain
+          type="primary"
+          size="mini"
+          icon="el-icon-edit"
+          v-if="stage === '2'"
+          @click="handleSelectData(5)"
+          v-hasPermi="['invest:pool:assess']"
+        >上传评估意见</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '3'"
+          size="mini"
+          icon="el-icon-document"
+          @click="handleSelectData(6)"
+          v-hasPermi="['invest:pool:lx:apply']"
+        >立项申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '3'"
+          size="mini"
+          icon="el-icon-chat-line-round"
+          @click="handleSelectData(7, 'LX')"
+          v-hasPermi="['invest:pool:lx:meeting']"
+        >发起立项会议</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="primary"
+          v-if="stage == '3'"
+          size="mini"
+          icon="el-icon-document-checked"
+          @click="handleSelectData(8)"
+        >上传打分表</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '4'"
+          size="mini"
+          icon="el-icon-tickets"
+          @click="handleSelectData(9)"
+          v-hasPermi="['invest:pool:due']"
+        >尽调申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="primary"
+          v-if="stage == '4'"
+          size="mini"
+          icon="el-icon-document-checked"
+          @click="handleSelectData(10)"
+        >上传尽调报告</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '5'"
+          size="mini"
+          icon="el-icon-document"
+          @click="handleSelectData(11)"
+          v-hasPermi="['invest:pool:tj:apply']"
+        >投决申请</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="warning"
+          v-if="stage == '5'"
+          size="mini"
+          icon="el-icon-chat-line-square"
+          @click="handleSelectData(12, 'TJ')"
+          v-hasPermi="['invest:pool:tj:meeting']"
+        >发起投决会议</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          plain
+          :disabled="multiple"
+          type="primary"
+          v-if="stage == '5'"
+          size="mini"
+          icon="el-icon-document-checked"
+          @click="handleSelectData(13)"
+        >上传打分表</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          :disabled="multiple"
+          plain
+          type="success"
+          v-if="stage !== '0'"
+          size="mini"
+          icon="el-icon-setting"
+          v-hasPermi="['invest:pool:stage']"
+          @click="handleSelectData(3)"
+        >设置项目阶段</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          @click="handleSelectData(4)"
+          v-if="type === '1' && stage !== '0'"
+          type="danger"
+          plain
+          icon="el-icon-switch-button"
+          size="mini"
+          :disabled="multiple"
+          v-hasPermi="['invest:pool:remove']"
+        >终止</el-button
+        >
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-if="type === '1' && stage == '0'"
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['invest:pool:export']"
+        >导出</el-button
+        >
+      </el-col>
+      <right-toolbar
+        :showSearch.sync="showSearch"
+        @queryTable="getList"
+      ></right-toolbar>
+    </el-row>
+    <el-table
+      ref="dataTable"
+      @row-click="clickRow"
+      class="tableWrapper"
+      :class="{ hideHeaderCheckBox: stage !== '0' }"
+      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="tProjectCompany.companyName"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectCompany.companyName">
+            {{ scope.row.tProjectCompany.companyName }}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="项目所属城市"
+        align="center"
+        prop="tProjectCompany.registeredAddress"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectCompany.registeredAddress">
+            {{ scope.row.tProjectCompany.registeredAddress }}
+          </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="projectState"
+        width="120"
+      >
+        <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="tProjectCompany.filingTime"
+      >
+        <template slot-scope="scope">
+          <span>{{
+              parseTime(scope.row.tProjectCompany.filingTime, "{y}-{m}-{d}")
+            }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="立项通过日期"
+        align="center"
+        prop="projectDate"
+        v-if="stage !== '1'"
+      >
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.projectDate, "{y}-{m}-{d}") }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="投决通过日期"
+        align="center"
+        prop="decisionDate"
+        v-if="stage !== '1'"
+      >
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.decisionDate, "{y}-{m}-{d}") }}</span>
+        </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="projectCode" /> -->
+      <el-table-column
+        label="渠道"
+        align="center"
+        prop="tProjectChannel.channelName"
+      >
+        <template slot-scope="scope">
+          <div
+            v-if="
+              scope.row.tProjectChannel && scope.row.tProjectChannel.channelName
+            "
+            :title="scope.row.tProjectChannel.channelName"
+          >
+            {{ scope.row.tProjectChannel.channelName }}
+          </div>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column
+        label="所属组别"
+        align="center"
+        prop="tProjectChannel.channelGroup"
+      >
+        <template slot-scope="scope">
+          <dict-tag
+            :options="dict.type.project_group"
+            :value="scope.row.tProjectChannel.channelGroup"
+          />
+        </template>
+      </el-table-column> -->
+
+      <!-- <el-table-column
+        label="项目联系人"
+        align="center"
+        prop="tProjectContacts.name"
+      >
+        <template slot-scope="scope">
+          <div :title="scope.row.tProjectContacts.name">
+            {{ scope.row.tProjectContacts.name }}
+          </div>
+        </template>
+      </el-table-column> -->
+
+      <!--<el-table-column
+        label="创建人"
+        width="120"
+        align="center"
+        prop="createBy"
+      />
+      <el-table-column
+        label="创建时间"
+        align="center"
+        prop="createTime"
+        width="160"
+      /> -->
+      <!-- delFlag -->
+      <el-table-column label="状态" align="center" prop="investHead">
+        <template slot-scope="scope">
+          <div :title="scope.row.delFlag === '1' ? '终止' : '正常'">
+            {{ scope.row.delFlag === "1" ? "终止" : "正常" }}
+          </div>
+        </template>
+      </el-table-column>
+      <!-- fixed="right" -->
+      <el-table-column label="操作" align="center" v-if="false">
+        <template slot-scope="scope">
+          <!-- stage//0=全部 1=项目报备  2=评估考察 3=项目立项 4=尽职背调 5=项目投决 -->
+
+          <el-button
+            v-if="scope.row.delFlag !== '1' && stage !== '0'"
+            class="custom-red-color"
+            size="mini"
+            type="text"
+            icon="el-icon-switch-button"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['invest:pool:remove']"
+          >终止</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <!-- 设置项目状态对话框 -->
+    <businessUpdate @getList="getList" ref="businessUpdate"></businessUpdate>
+  </div>
+</template>
+
+<script>
+import { listSignStage } from "@/api/project/pool";
+import { listChannel } from "@/api/invest/channel";
+import dueDiligenceList from "../../invest/components/dueDiligenceList";
+import followList from "../../invest/components/followList";
+import meetingList from "../../invest/components/meetingList";
+import businessUpdate from "../../invest/components/businessUpdate";
+
+import { mapGetters } from "vuex";
+export default {
+  props: {
+    type: {
+      type: String,
+      default: "1", //1=显示全部列表  2=显示某项目下的详情列表
+    },
+    stage: {
+      type: String,
+      default: "0", //0=全部 1=项目报备  2=评估考察 3=项目立项 4=尽职背调 5=项目投决
+    },
+    projectId: {
+      type: String,
+    },
+  },
+  dicts: ["project_group", "project_stage", "project_state", "CUSTOMER_TRADE"],
+  components: {
+    dueDiligenceList,
+    followList,
+    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: [],
+    };
+  },
+  computed: {
+    ...mapGetters(["user"]),
+  },
+  created() {},
+  mounted() {
+    this.getList();
+    // 渠道
+    listChannel({
+      pageNum: 1,
+      pageSize: 100,
+    }).then((response) => {
+      this.channelList = response.rows;
+    });
+  },
+  methods: {
+    /** 查询项目签约阶段列表 */
+    getList() {
+      this.loading = true;
+      listSignStage(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) {
+      if (this.stage !== "0") {
+        if (selection.length > 1) {
+          //移除上一次选中行数据
+          selection.shift();
+          //修改选中图标为未选中状态
+          this.$refs.dataTable.clearSelection();
+          //将当前选中行改为选中状态
+          this.$refs.dataTable.toggleRowSelection(selection[0]);
+        }
+      }
+      this.ids = selection.map((item) => item.id);
+      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() {
+      this.$router.push({ path: "/invest/pool/add" });
+    },
+    handleSelectData(type, otherData) {
+      // type 1=修改 2=详情 3=设置项目阶段 4=终止 5=上传评估意见
+      // 6=立项申请 7=发起立项会议 8=上传打分表(立项)
+      // 9=尽调申请 10=上传尽调报告
+      // 11=投决申请 12=发起投决会议 13=上传打分表(投决)
+      if (this.selectRowList.length == 1) {
+        const row = this.selectRowList[0];
+        if (row.delFlag === "1") {
+          this.$message({
+            message: "项目已终止",
+            duration: 1500,
+            type: "error",
+          });
+        } else if (row.investHead === this.user.nickName) {
+          // 项目负责人
+          if (type === 1) {
+            // 修改
+            this.handleUpdate(row);
+          } else if (type === 2) {
+            // 详情
+            this.handleDetail(row);
+          } else if (type === 3) {
+            if (row.projectState !== "1") {
+              // 设置项目阶段
+              this.$refs.businessUpdate.handleBusinessUpdate(row);
+            } else {
+              this.$message({
+                message: "暂存时不能设置项目阶段",
+                duration: 1500,
+                type: "warning",
+              });
+            }
+          } else if (type === 4) {
+            // 终止
+            this.handleDelete(row);
+          }
+        } else {
+          this.$message({
+            message: "无权限",
+            duration: 1500,
+            type: "error",
+          });
+        }
+      } else {
+        this.$message({
+          message: "只能选择一条数据",
+          duration: 1500,
+          type: "warning",
+        });
+      }
+    },
+    handleDetail(row) {
+      const id = row.id || this.ids;
+      this.$router.push({ path: "/project/poolDetail", query: { id: id } });
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      const id = row.id;
+      this.$router.push({ path: "/invest/pool/add", 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(
+        "project/exportSignStage",
+        {
+          ...this.queryParams,
+        },
+        `signStage_${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;
+  }
+}
+/**找到表头那一行,然后把里面的复选框隐藏掉**/
+.hideHeaderCheckBox
+::v-deep
+.el-table__header-wrapper
+.el-table__header
+.el-checkbox {
+  display: none;
+}
+</style>

+ 83 - 61
ruoyi-ui/src/views/project/termination/applyList.vue

@@ -18,59 +18,25 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="项目负责人" prop="investHead">
+      <el-form-item label="终止原因" prop="reason">
         <el-input
-          v-model.trim="queryParams.investHead"
-          placeholder="请输入项目负责人"
+          v-model.trim="queryParams.reason"
+          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-form-item label="流程状态" prop="status">
+        <!-- el-select 绑定表单字段 -->
+        <el-select v-model="queryParams.status" placeholder="请选择" clearable>
+          <!-- 静态选项 -->
+          <el-option label="暂存" value="0"></el-option>
+          <el-option label="已提交" value="1"></el-option>
+          <el-option label="审批中" value="2"></el-option>
+          <el-option label="审核完成" value="3"></el-option>
+          <el-option label="关闭" value="4"></el-option>
         </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"
@@ -86,7 +52,7 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
+<!--      <el-col :span="1.5">
         <el-button
           plain
           type="warning"
@@ -94,6 +60,15 @@
           icon="el-icon-document"
           @click="handleAdd"
         >终止申请</el-button>
+      </el-col>-->
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >导出</el-button>
       </el-col>
       <right-toolbar
         :showSearch.sync="showSearch"
@@ -117,7 +92,7 @@
         align="center"
       ></el-table-column>
       <!-- <el-table-column label="主键id" align="center" prop="id" /> -->
-      <el-table-column label="项目名称" align="center" prop="projectName">
+<!--      <el-table-column label="项目名称" align="center" prop="projectName">
         <template slot-scope="scope">
           <div
             :title="scope.row.projectName"
@@ -127,6 +102,13 @@
             {{ scope.row.projectName }}
           </div>
         </template>
+      </el-table-column>-->
+      <el-table-column label="项目名称" align="center" prop="projectName">
+        <template slot-scope="scope">
+          <div :title="scope.row.projectName">
+            {{ scope.row.projectName }}
+          </div>
+        </template>
       </el-table-column>
       <el-table-column label="所属行业" align="center" prop="industry"
         ><template slot-scope="scope">
@@ -144,7 +126,7 @@
           />
         </template>
       </el-table-column>
-      <el-table-column label=项目机会状态" align="center" prop="projectStatus">
+      <el-table-column label="项目机会状态" align="center" prop="projectStatus">
         <template slot-scope="scope">
           <!-- 定义状态文本映射对象 -->
           <el-tag
@@ -201,6 +183,20 @@
           <span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span>
         </template>
       </el-table-column>
+      <el-table-column label="当前节点" align="center" prop="taskName">
+        <template slot-scope="scope">
+          <div :title="scope.row.taskName"  class="public-text-blue public-cursor" @click="handleReadImage(scope.row)">
+            {{ scope.row.taskName}}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column label="当前处理人" align="center" prop="assigneeName">
+        <template slot-scope="scope">
+          <div :title="scope.row.assigneeName">
+            {{ scope.row.assigneeName}}
+          </div>
+        </template>
+      </el-table-column>
       <el-table-column label="流程状态" align="center" prop="status">
         <template slot-scope="scope">
           <div :title="scope.row.status">
@@ -212,6 +208,11 @@
           </div>
         </template>
       </el-table-column>
+      <el-table-column label="操作" align="center" width="150" fixed="right" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button type="text" size="mini" @click="handleDetailProcess(scope.row)">详情</el-button>
+        </template>
+      </el-table-column>
     </el-table>
 
     <pagination
@@ -230,23 +231,21 @@
     ></meetingList>
     <!-- 设置项目状态对话框 -->
     <businessUpdate @getList="getList" ref="businessUpdate"></businessUpdate>
+    <!-- Flowable 流程图弹窗 -->
+    <el-dialog :title="readImage.title" :visible.sync="readImage.open" width="70%"  append-to-body>
+      <!-- <el-image :src="readImage.src"></el-image> -->
+      <flow :flowData="flowData"/>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import {
-  listDecisionList,
-  delPool,
-  editStage,
-  addDecision,
-} from "@/api/invest/pool";
-import {
-  getAllTerminationList,
-  listTerminationList,
-} from "@/api/project/termination/pool";
+import { getAllTerminationList } from "@/api/project/termination/pool";
 import { listChannel } from "@/api/invest/channel";
+import { flowXmlAndNode } from "@/api/flowable/definition";
 import meetingList from "../meetingList.vue";
 import businessUpdate from "../../invest/components/businessUpdate";
+
 import { mapGetters } from "vuex";
 export default {
   name: "Pool5",
@@ -308,6 +307,13 @@ export default {
       },
       channelList: [],
       projectId: "",
+      //流程图信息
+      readImage:{
+        open: false,
+        src: "",
+      },
+      // xml
+      flowData: {},
     };
   },
   computed: {
@@ -486,13 +492,29 @@ export default {
     /** 导出按钮操作 */
     handleExport() {
       this.download(
-        "invest/pool/export",
+        "project/termination/export",
         {
           ...this.queryParams,
         },
-        `pool_${new Date().getTime()}.xlsx`
+        `termination_${new Date().getTime()}.xlsx`
       );
     },
+    /** 流程图查看 */
+    handleReadImage(row){
+      this.readImage.title = "流程图";
+      this.readImage.open = true;
+      // this.readImage.src = process.env.VUE_APP_BASE_API + "/flowable/definition/readImage/" + deploymentId;
+      flowXmlAndNode({procInsId: row.procInstId,deployId:row.deployId}).then(res => {
+        this.flowData = res.data;
+      })
+    },
+    /*流程详情*/
+    handleDetailProcess(row) {
+      const id = row.id || this.ids;
+      const poolId=row.projectPoolId;
+      const pInstId=row.procInstId;
+      this.$router.push({ path: "/project/termination/detail", query: { id: poolId , pInstId: pInstId } });
+    },
   },
 };
 </script>