Browse Source

11482-【CR】【投资系统】增加审批流程-投资机会和项目立项前端代码

hxy 3 months ago
parent
commit
08a2d39034

+ 199 - 0
ruoyi-system/src/main/java/com/ruoyi/invest/domain/vo/ProjectApprovalVo.java

@@ -0,0 +1,199 @@
+package com.ruoyi.invest.domain.vo;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import com.ruoyi.tool.domain.TUnifyFile;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.List;
+
+/**
+ * 立项申请对象 t_project_approval
+ * 
+ * @author zjc
+ * @date 2024-04-02
+ */
+@Data
+public class ProjectApprovalVo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    private String id;
+
+    /** 项目ID */
+    @Excel(name = "项目ID")
+    private String projectPoolId;
+
+
+    /** 项目概况 */
+    @Excel(name = "项目概况")
+    private String projectOverview;
+
+    /** 项目亮点 */
+    @Excel(name = "项目亮点")
+    private String projectSparkle;
+
+    /** 参与人 */
+    private String participants;
+
+    /** 参与人ID */
+    private String participantsId;
+
+    /** 状态 */
+    private String delFlag;
+
+    /**
+     * 附件信息
+     */
+    private List<TUnifyFile> listFile;
+
+    //投资机会信息
+    /** 项目名称 */
+    @Excel(name = "项目名称")
+    private String projectName;
+    /** 项目所属行业 */
+    @Excel(name = "项目所属行业")
+    private String industry;
+    /** 项目阶段 */
+    @Excel(name = "项目阶段")
+    private String projectStage;
+    /** 项目状态 */
+    @Excel(name = "项目状态")
+    private String projectState;
+    /** 投资负责人 */
+    @Excel(name = "投资负责人")
+    private String investHead;
+
+
+    //流程信息
+    @ApiModelProperty("流程实例ID")
+    private String procInstId;
+    @ApiModelProperty("流程ID")
+    private String procDefId;
+    //private String processDefName;
+    @ApiModelProperty("流程部署编号")
+    private String deployId;
+    //流程任务信息
+    @ApiModelProperty("任务编号")
+    private String taskId;
+    @ApiModelProperty("任务执行编号")
+    private String executionId;// 运行id
+    @ApiModelProperty("任务名称")
+    private String taskName;
+    @ApiModelProperty("任务Key")
+    private String taskDefKey;
+    private String taskCreateTiem; // 当前节点创建时间
+    //private String taskUserId; // 当前处理人
+    //private String status; // 流程状态
+    @ApiModelProperty("任务执行人Id")
+    private String assignee; // 该值未空表示 可签收,不未空表示 可处理
+    @ApiModelProperty("任务执行人名称")
+    private String assigneeName;
+    //流程发起人信息
+    @ApiModelProperty("流程发起人Id")
+    private String startUserId;
+    @ApiModelProperty("流程发起人名称")
+    private String startUserName;
+    @ApiModelProperty("流程发起人部门名称")
+    private String startDeptName;
+
+    private boolean flag; // true - 同意; false - 驳回
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setProjectPoolId(String projectPoolId) 
+    {
+        this.projectPoolId = projectPoolId;
+    }
+
+    public String getProjectPoolId() 
+    {
+        return projectPoolId;
+    }
+    public void setProjectOverview(String projectOverview) 
+    {
+        this.projectOverview = projectOverview;
+    }
+
+    public String getProjectOverview() 
+    {
+        return projectOverview;
+    }
+    public void setProjectSparkle(String projectSparkle) 
+    {
+        this.projectSparkle = projectSparkle;
+    }
+
+    public String getProjectSparkle() 
+    {
+        return projectSparkle;
+    }
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+
+    public List<TUnifyFile> getListFile() {
+        return listFile;
+    }
+
+    public void setListFile(List<TUnifyFile> listFile) {
+        this.listFile = listFile;
+    }
+
+    public String getParticipants() {
+        return participants;
+    }
+
+    public void setParticipants(String participants) {
+        this.participants = participants;
+    }
+
+    public String getParticipantsId() {
+        return participantsId;
+    }
+
+    public void setParticipantsId(String participantsId) {
+        this.participantsId = participantsId;
+    }
+
+    public String getProjectName() {
+        return projectName;
+    }
+
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("projectPoolId", getProjectPoolId())
+            .append("projectOverview", getProjectOverview())
+            .append("projectSparkle", getProjectSparkle())
+            .append("remark", getRemark())
+            .append("delFlag", getDelFlag())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .toString();
+    }
+}

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

@@ -0,0 +1,81 @@
+import request from '@/utils/request'
+// 我的待办任务列表
+export function getMyTaskList(query) {
+  return request({
+    url: '/project/approval/getMyTaskList',
+    method: 'get',
+    params: query
+  })
+}
+//我的已办任务列表
+export function getMyDoneTaskList(query) {
+  return request({
+    url: '/project/approval/getMyDoneTaskList',
+    method: 'get',
+    params: query
+  })
+}
+//我的单据列表
+export function getMyList(query) {
+  return request({
+    url: '/project/approval/getMyList',
+    method: 'get',
+    params: query
+  })
+}
+//启动流程
+export function approvalStart(data) {
+  return request({
+    //url: '/invest/pool',
+    url:'/project/approval/start',
+    method: 'post',
+    data: data
+  })
+}
+//审批流程
+export function approvalComplete(data) {
+  return request({
+    url:'/project/approval/complete',
+    method: 'put',
+    data: data,
+  })
+}
+// 查询项目池详细
+export function getPool(id) {
+  return request({
+    url: '/invest/pool/' + id,
+    method: 'get'
+  })
+}
+/*export function getInvestInfo(pInstId) {
+  return request({
+    url: '/project/approval/' + pInstId,
+    method: 'get'
+  })
+}*/
+export function getApprovalInfo(pInstId) {
+  return request({
+    url: '/project/approval/' + pInstId,
+    method: 'get'
+  })
+}
+// 新增项目池
+
+
+// 修改项目池
+/*export function updatePool(data) {
+  return request({
+    url: '/invest/pool',
+    method: 'put',
+    data: data
+  })
+}*/
+
+// 删除项目池
+/*export function delPool(id) {
+  return request({
+    url: '/invest/pool/' + id,
+    method: 'delete'
+  })
+}*/
+

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

@@ -0,0 +1,76 @@
+import request from '@/utils/request'
+// 我的待办任务列表
+export function getMyTaskList(query) {
+  return request({
+    url: '/project/investmentOpportunity/getMyTaskList',
+    method: 'get',
+    params: query
+  })
+}
+//我的已办任务列表
+export function getMyDoneTaskList(query) {
+  return request({
+    url: '/project/investmentOpportunity/getMyDoneTaskList',
+    method: 'get',
+    params: query
+  })
+}
+//我的单据列表
+export function getMyList(query) {
+  return request({
+    url: '/project/investmentOpportunity/getMyList',
+    method: 'get',
+    params: query
+  })
+}
+//启动流程
+export function investmentOpportunityStart(data) {
+  return request({
+    //url: '/invest/pool',
+    url:'/project/investmentOpportunity/start',
+    method: 'post',
+    data: data
+  })
+}
+//审批流程
+export function investmentOpportunityComplete(data) {
+  return request({
+    url:'/project/investmentOpportunity/complete',
+    method: 'put',
+    data: data,
+  })
+}
+// 查询项目池详细
+export function getPool(id) {
+  return request({
+    url: '/invest/pool/' + id,
+    method: 'get'
+  })
+}
+export function getInvestInfo(pInstId) {
+  return request({
+    url: '/project/investmentOpportunity/' + pInstId,
+    method: 'get'
+  })
+}
+
+// 新增项目池
+
+
+// 修改项目池
+/*export function updatePool(data) {
+  return request({
+    url: '/invest/pool',
+    method: 'put',
+    data: data
+  })
+}*/
+
+// 删除项目池
+/*export function delPool(id) {
+  return request({
+    url: '/invest/pool/' + id,
+    method: 'delete'
+  })
+}*/
+

File diff suppressed because it is too large
+ 2112 - 0
ruoyi-ui/src/views/project/approval/audit.vue


+ 384 - 0
ruoyi-ui/src/views/project/approval/detail.vue

@@ -0,0 +1,384 @@
+<template>
+  <div class="detailWrapper">
+    <section class="section1 public-flex">
+      <div class="public-margin-r-20">
+        <h4>
+          投资项目
+          <span class="alreadyStop" v-if="detailInfo.delFlag === '1'"
+            >已终止</span
+          >
+        </h4>
+        <p class="projectNameTit">{{ detailInfo.projectName }}</p>
+      </div>
+    </section>
+    <el-divider></el-divider>
+    <section>
+      <el-divider></el-divider>
+      <div
+        class="public-flex-between basicsInfo"
+        v-if="detailInfo.projectState != '1'"
+      >
+        <div class="public-flex-center-column">
+          <div>项目公司名称</div>
+          <p
+            style="width: 250px; text-align: center"
+            class="yichu1"
+            v-if="
+              detailInfo.tProjectCompany &&
+              detailInfo.tProjectCompany.companyName
+            "
+          >
+            {{ detailInfo.tProjectCompany.companyName }}
+          </p>
+        </div>
+        <div class="public-flex-center-column">
+          <div>渠道</div>
+          <p
+            v-if="
+              detailInfo.tProjectChannel &&
+              detailInfo.tProjectChannel.channelName
+            "
+          >
+            {{ detailInfo.tProjectChannel.channelName }}
+          </p>
+          <p v-else>无</p>
+        </div>
+        <div class="public-flex-center-column">
+          <div>项目负责人</div>
+          <p>{{ detailInfo.investHead }}</p>
+        </div>
+        <div class="public-flex-center-column" v-if="detailInfo.projectDate">
+          <div>立项通过日期</div>
+          <p>{{ detailInfo.projectDate }}</p>
+        </div>
+        <div class="public-flex-center-column" v-if="detailInfo.decisionDate">
+          <div>投决通过日期</div>
+          <p>{{ detailInfo.decisionDate }}</p>
+        </div>
+        <div class="public-flex-center-column">
+          <div>投前估值(万元)</div>
+          <p>{{ detailInfo.investValuation }}</p>
+        </div>
+        <div class="public-flex-center-column">
+          <div>预计投资金额(万元)</div>
+          <p>{{ detailInfo.investMoney }}</p>
+        </div>
+      </div>
+    </section>
+    <section class="section3">
+      <el-tabs v-model="activeName" @tab-click="handleClick">
+        <el-tab-pane label="立项信息" name="0"></el-tab-pane>
+        <el-tab-pane label="项目基本信息" name="1"></el-tab-pane>
+      </el-tabs>
+      <section>
+        <div v-if="activeName === '0'" class="public-padded-20 detail-meeting">
+          <el-tabs type="border-card">
+            <el-tab-pane label="项目立项申请表">
+              <el-form
+                v-if="formLXApply.id"
+                class="special-el-form public-padded-t-20"
+                ref="formLXApply"
+                :model="formLXApply"
+                label-width="120px"
+              >
+                <el-form-item
+                  label="项目概况"
+                  prop="projectOverview"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    rows="4"
+                    type="textarea"
+                    maxlength="200"
+                    v-model="formLXApply.projectOverview"
+                    disabled
+                  />
+                </el-form-item>
+                <el-form-item
+                  label="项目亮点"
+                  prop="projectSparkle"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    rows="4"
+                    type="textarea"
+                    maxlength="200"
+                    v-model="formLXApply.projectSparkle"
+                    disabled
+                  />
+                </el-form-item>
+                <el-form-item
+                  label="立项资料"
+                  prop="listFile"
+                  class="special-el-form-item"
+                >
+                  <fileItem
+                    ref="fileItemLXApply"
+                    :id="formLXApply.id"
+                  ></fileItem>
+                </el-form-item>
+                <el-form-item
+                  label="通知名单"
+                  prop="participants"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    rows="4"
+                    type="textarea"
+                    v-model="formLXApply.participants"
+                    disabled
+                  />
+                </el-form-item>
+              </el-form>
+              <div
+                v-else
+                class="public-flex-center public-padded-20"
+                style="color: #909399"
+              >
+                暂无数据
+              </div>
+            </el-tab-pane>
+<!--            <el-tab-pane label="项目立项评估评审汇总表">
+              <tableForm
+                :formType="2"
+                ref="approvalTableForm"
+                :readonly="true"
+                :showBack="false"
+              ></tableForm>
+            </el-tab-pane>-->
+          </el-tabs>
+        </div>
+        <div v-show="activeName === '1'">
+          <poolForm :type="type" :id="id"></poolForm>
+        </div>
+        <div v-if="activeName === '3'" class="public-padded-20 detail-meeting">
+
+        </div>
+      </section>
+    </section>
+  </div>
+</template>
+<script>
+import poolForm from "../../invest/components/poolForm";
+import tableForm from "../../invest/components/tableForm";
+import fileItem from "../../invest/components/fileItem";
+
+import {
+  getPool,
+  listProjectPoolId,
+  getInvestigatelist,
+  getInvestReviewList,
+} from "@/api/invest/pool";
+import {
+  listMeeting,
+  listProjectPoolIdNewApproval,
+  listProjectPoolIdNewDecision,
+} from "@/api/invest/meeting";
+
+import { mapGetters } from "vuex";
+
+export default {
+  name: "approvalDetail",
+  components: {
+    poolForm,
+    tableForm,
+    fileItem,
+  },
+  data() {
+    return {
+      showDueApply: false,
+      meetingId: "0",
+      type: "2",
+      id: "",
+      active: 0,
+      detailInfo: {
+        projectName: "",
+      },
+      activeName: "0",
+      /*activities: [
+        {
+          content: "活动按期开始",
+          timestamp: "2018-04-15",
+        },
+        {
+          content: "通过审核",
+          timestamp: "2018-04-13",
+        },
+        {
+          content: "创建成功",
+          timestamp: "2018-04-11",
+        },
+      ],*/
+
+      formLXApply: {
+        id: null,
+        projectPoolId: null,
+        projectName: null,
+        projectOverview: null,
+        projectSparkle: null,
+        listFile: null,
+        participants: null,
+        participantsId: null,
+      },
+      /*formTJApply: {
+        id: null,
+        projectPoolId: null,
+        projectName: null,
+        provision: null,
+        listFile: null,
+        participants: null,
+        participantsId: null,
+      },*/
+    };
+  },
+  computed: {
+    ...mapGetters(["user"]),
+  },
+  created() {
+    this.id = this.$route.query.id;
+    this.getDetail();
+    this.getlistProjectPoolIdNewApproval();
+    //this.getListProjectPoolId();
+    //this.getDueList();
+    if (this.$route.query.activeName) {
+      this.activeName = this.$route.query.activeName;
+    }
+  },
+  methods: {
+    /** 查询列表 */
+   /* changeShowDueApply(showDueApply) {
+      this.showDueApply = showDueApply === "1";
+    },*/
+    /*getDueList() {
+      //   this.loading = true;
+      let queryParams = {
+        orderByColumn: "createTime",
+        isAsc: "desc",
+        projectPoolId: this.id,
+      };
+
+    },*/
+    getMettingId(type) {
+      let queryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        meetingType: type,
+        orderByColumn: "createTime",
+        isAsc: "desc",
+        projectPoolId: this.id,
+      };
+      listMeeting(queryParams).then((response) => {
+        let meetingList = response.rows;
+        if (meetingList.length > 0) {
+          let meetingId = meetingList[0].id;
+          if (type === "LX") {
+            this.$refs.approvalTableForm.initialize(meetingId);
+          } else if (type === "TJ") {
+            this.$refs.voteTableForm.initialize(meetingId);
+          }
+        } else {
+          if (type === "LX") {
+            this.$refs.approvalTableForm.showNodata();
+          } else if (type === "TJ") {
+            this.$refs.voteTableForm.showNodata();
+          }
+        }
+      });
+    },
+    handleClick(tab, event) {
+      let that = this;
+      if (this.activeName === "0") {
+        // 项目立项
+        this.getMettingId("LX");
+        this.getlistProjectPoolIdNewApproval();
+      } else if (this.activeName === "1") {
+        // 项目报备
+        this.getDetail();
+      }
+    },
+    // 获取立项申请
+    getlistProjectPoolIdNewApproval() {
+      let that = this;
+      listProjectPoolIdNewApproval(this.id).then((response) => {
+        if (response && response.data) {
+          that.formLXApply = response.data;
+          setTimeout(() => {
+            that.$refs.fileItemLXApply.handleButton();
+            that.$refs.fileItemLXApply.fileList = [];
+            that.$refs.fileItemLXApply.getListFileBusinessId(
+              that.formLXApply.id
+            );
+          }, 300);
+        }
+      });
+    },
+    //项目报备
+    getDetail() {
+      getPool(this.id).then((response) => {
+        this.detailInfo = response.data;
+        // 项目退出完成n
+        if (response.data.projectState === "n") {
+          this.active = parseInt(response.data.projectStage);
+        } else {
+          this.active = parseInt(response.data.projectStage) - 1;
+        }
+      });
+    },
+
+
+  },
+};
+</script>
+<style lang="scss" scoped>
+.detailWrapper {
+  padding: 20px 0;
+  width: 92%;
+  margin: 0 auto;
+  .section1 {
+    p {
+      font-size: 24px;
+      font-weight: bold;
+      margin: 0;
+    }
+    > div:first-child {
+      // width: calc(100% - 700px);
+      width: 100%;
+    }
+    .btnList {
+      width: 700px;
+      display: flex;
+      justify-content: flex-end;
+    }
+  }
+  .basicsInfo {
+    font-size: 14px;
+    background: #f1f1f1;
+    margin-top: -24px;
+    width: 100%;
+    padding: 30px 20px 10px;
+    div {
+      color: #7e7d7d;
+    }
+    p {
+      font-size: 16px;
+      color: #333;
+      font-weight: bold;
+    }
+  }
+  .section3 {
+    margin-top: 40px;
+  }
+}
+.projectNameTit {
+}
+.alreadyStop {
+  font-weight: normal;
+  font-size: 12px;
+  background: #ff0000;
+  color: #fff;
+  border-radius: 5px;
+  padding: 5px 10px;
+  margin-left: 10px;
+}
+
+</style>

+ 482 - 0
ruoyi-ui/src/views/project/approval/edit.vue

@@ -0,0 +1,482 @@
+<template>
+  <div class="detailWrapper">
+    <section class="section1 public-flex">
+      <div class="public-margin-r-20">
+        <h4>
+          投资项目
+          <span class="alreadyStop" v-if="detailInfo.delFlag === '1'"
+          >已终止</span
+          >
+        </h4>
+        <p class="projectNameTit">{{ detailInfo.projectName }}</p>
+      </div>
+    </section>
+    <el-divider></el-divider>
+    <section>
+      <el-divider></el-divider>
+      <div class="public-flex-between basicsInfo" v-if="detailInfo.projectState != '1'">
+        <div class="public-flex-center-column">
+          <div>项目公司名称</div>
+          <p style="width: 250px; text-align: center" class="yichu1"
+             v-if="
+              detailInfo.tProjectCompany &&
+              detailInfo.tProjectCompany.companyName
+            ">
+            {{ detailInfo.tProjectCompany.companyName }}
+          </p>
+        </div>
+        <div class="public-flex-center-column">
+          <div>渠道</div>
+          <p
+            v-if="
+              detailInfo.tProjectChannel &&
+              detailInfo.tProjectChannel.channelName
+            "
+          >
+            {{ detailInfo.tProjectChannel.channelName }}
+          </p>
+          <p v-else>无</p>
+        </div>
+        <div class="public-flex-center-column">
+          <div>项目负责人</div>
+          <p>{{ detailInfo.investHead }}</p>
+        </div>
+        <div class="public-flex-center-column" v-if="detailInfo.projectDate">
+          <div>立项通过日期</div>
+          <p>{{ detailInfo.projectDate }}</p>
+        </div>
+        <div class="public-flex-center-column" v-if="detailInfo.decisionDate">
+          <div>投决通过日期</div>
+          <p>{{ detailInfo.decisionDate }}</p>
+        </div>
+        <div class="public-flex-center-column">
+          <div>投前估值(万元)</div>
+          <p>{{ detailInfo.investValuation }}</p>
+        </div>
+        <div class="public-flex-center-column">
+          <div>预计投资金额(万元)</div>
+          <p>{{ detailInfo.investMoney }}</p>
+        </div>
+      </div>
+    </section>
+    <section class="section3">
+      <el-tabs v-model="activeName" @tab-click="handleClick">
+        <el-tab-pane label="立项信息" name="0"></el-tab-pane>
+        <el-tab-pane label="项目基本信息" name="1"></el-tab-pane>
+      </el-tabs>
+      <section>
+        <div v-if="activeName === '0'" >
+          <el-tabs type="border-card">
+            <el-tab-pane label="项目立项申请表">
+              <el-form
+                v-if="formLXApply.id"
+                class="special-el-form public-padded-t-20"
+                ref="formLXApply"
+                :model="formLXApply"
+                label-width="120px"
+              >
+                <el-form-item
+                  label="项目概况"
+                  prop="projectOverview"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    rows="4"
+                    type="textarea"
+                    maxlength="200"
+                    v-model="formLXApply.projectOverview"
+                  />
+                </el-form-item>
+                <el-form-item
+                  label="项目亮点"
+                  prop="projectSparkle"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    rows="4"
+                    type="textarea"
+                    maxlength="200"
+                    v-model="formLXApply.projectSparkle"
+                  />
+                </el-form-item>
+                <el-form-item
+                  label="立项资料"
+                  prop="listFile"
+                  class="special-el-form-item"
+                >
+                  <fileItem
+                    ref="fileItemLXApply"
+                    :id="formLXApply.id"
+                    @getFileList="getFileListLXApply"
+                  ></fileItem>
+                </el-form-item>
+<!--                <el-form-item
+                  label="立项资料"
+                  prop="listFile"
+                  class="special-el-form-item"
+                >
+                  <fileItem
+                    ref="fileItemLXApply"
+                    :id="formLXApply.id"
+                  ></fileItem>
+                </el-form-item>-->
+<!--                <el-form-item
+                  label="通知名单"
+                  prop="participants"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    rows="4"
+                    type="textarea"
+                    v-model="formLXApply.participants"
+                  />
+                </el-form-item>-->
+              </el-form>
+              <div
+                v-else
+                class="public-flex-center public-padded-20"
+                style="color: #909399"
+              >
+                暂无数据
+              </div>
+            </el-tab-pane>
+<!--            <el-tab-pane label="项目立项评估评审汇总表">
+              <tableForm
+                :formType="2"
+                ref="approvalTableForm"
+                :readonly="true"
+                :showBack="false"
+              ></tableForm>
+            </el-tab-pane>-->
+          </el-tabs>
+        </div>
+        <div v-show="activeName === '1'">
+          <poolForm :type="type" :id="id"></poolForm>
+        </div>
+      </section>
+    </section>
+
+    <section class="approveBtn">
+      <el-form
+        ref="flowBaseInfo"
+        :model="flowBaseInfo"
+        :rules="rulesFlow"
+        label-width="120px"
+      >
+        <el-form-item class="btnList">
+          <el-button @click="goBack">返 回</el-button>
+          <el-button type="primary" @click="handleComplete(true)">提交</el-button>
+          <el-button type="warning" @click="handleComplete(false)">关闭</el-button>
+        </el-form-item>
+      </el-form>
+    </section>
+  </div>
+</template>
+<script>
+import poolForm from "../../invest/components/poolForm";
+/*import poolForm from "../components/poolForm";
+import contractList from "../components/contractList";
+import fileList from "../components/fileList";
+import followList from "../components/followList";
+import meetingList from "../components/meetingList";
+import projectList from "../components/projectList";
+import tableForm from "../components/tableForm";
+import listAllfile from "../components/listAllfile";
+import dueDiligenceList from "../components/dueDiligenceList";*/
+import fileItem from "../../invest/components/fileItem";
+
+import {
+  getPool
+} from "@/api/invest/pool";
+import {
+  listMeeting,
+  listProjectPoolIdNewApproval
+} from "@/api/invest/meeting";
+import{
+  approvalComplete
+} from "@/api/project/approval/pool"
+
+import { mapGetters } from "vuex";
+
+export default {
+  name: "approvalEdit",
+  components: {
+    poolForm,
+    /*  contractList,
+      fileList,
+      followList,
+      meetingList,
+      projectList,
+      tableForm,
+      listAllfile,
+      dueDiligenceList,
+      fileItem,*/
+    fileItem
+  },
+  data() {
+    return {
+      showDueApply: false,
+      meetingId: "0",
+      type: "2",
+      id: "",
+      active: 0,
+      detailInfo: {
+        projectName: "",
+      },
+      activeName: "0",
+      /*activities: [
+        {
+          content: "活动按期开始",
+          timestamp: "2018-04-15",
+        },
+        {
+          content: "通过审核",
+          timestamp: "2018-04-13",
+        },
+        {
+          content: "创建成功",
+          timestamp: "2018-04-11",
+        },
+      ],*/
+      formLXApply: {
+        id: null,
+        procInstId:null,
+        projectPoolId: null,
+        projectName: null,
+        projectOverview: null,
+        projectSparkle: null,
+        listFile: null,
+        participants: null,
+        participantsId: null,
+      },
+      flowBaseInfo:{
+        comment:null,
+        taskId:null
+      },
+      rulesFlow:{
+        comment: [{ required: true, trigger: "blur", message: "请输入" }],
+      }
+    };
+  },
+  computed: {
+    ...mapGetters(["user"]),
+  },
+  created() {
+    this.id = this.$route.query.id;
+    this.getlistProjectPoolIdNewApproval();
+    this.getDetail();
+    this.flowBaseInfo.taskId=this.$route.query.taskId;
+    //this.getListProjectPoolId();
+    //this.getDueList();
+    if (this.$route.query.activeName) {
+      this.activeName = this.$route.query.activeName;
+    }
+  },
+  methods: {
+    /** 查询列表 */
+    /*changeShowDueApply(showDueApply) {
+      this.showDueApply = showDueApply === "1";
+    },*/
+    /*getDueList() {
+      //   this.loading = true;
+      let queryParams = {
+        orderByColumn: "createTime",
+        isAsc: "desc",
+        projectPoolId: this.id,
+      };
+      getInvestigatelist(queryParams).then((response) => {
+        let list = response.rows,
+          showDueApply;
+        // 如果尽调全部完成,才能显示发起尽调;
+        if (list && list.length > 0) {
+          showDueApply = list.every(function (item) {
+            return item.status === "1";
+          });
+        } else {
+          showDueApply = true;
+        }
+        this.showDueApply = showDueApply;
+      });
+    },*/
+    getMettingId(type) {
+      let queryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        meetingType: type,
+        orderByColumn: "createTime",
+        isAsc: "desc",
+        projectPoolId: this.id,
+      };
+      listMeeting(queryParams).then((response) => {
+        let meetingList = response.rows;
+        if (meetingList.length > 0) {
+          let meetingId = meetingList[0].id;
+          if (type === "LX") {
+            this.$refs.approvalTableForm.initialize(meetingId);
+          } else if (type === "TJ") {
+            this.$refs.voteTableForm.initialize(meetingId);
+          }
+        } else {
+          if (type === "LX") {
+            this.$refs.approvalTableForm.showNodata();
+          } else if (type === "TJ") {
+            this.$refs.voteTableForm.showNodata();
+          }
+        }
+      });
+    },
+    handleClick(tab, event) {
+      let that = this;
+      if (this.activeName === "0") {
+        // 项目立项
+        this.getMettingId("LX");
+        this.getlistProjectPoolIdNewApproval();
+      } else if (this.activeName === "1") {
+        // 项目报备
+        this.getDetail();
+      }
+    },
+    // 获取立项申请
+    getlistProjectPoolIdNewApproval() {
+      let that = this;
+      listProjectPoolIdNewApproval(this.id).then((response) => {
+        if (response && response.data) {
+          that.formLXApply = response.data;
+          setTimeout(() => {
+            //that.$refs.fileItemLXApply.handleButton();
+            that.$refs.fileItemLXApply.fileList = [];
+            that.$refs.fileItemLXApply.getListFileBusinessId(
+              that.formLXApply.id
+            );
+          }, 300);
+        }
+      });
+    },
+    // 立项申请附件回显
+    getFileListLXApply(fileList) {
+      this.fileListLXApply = fileList;
+      if (fileList && fileList.length > 0) {
+        this.$refs.formLXApply.clearValidate(["listFile"]);
+      } else {
+        this.fileListLXApply = [];
+      }
+    },
+    //项目报备
+    getDetail() {
+      getPool(this.id).then((response) => {
+        this.detailInfo = response.data;
+        // 项目退出完成n
+        if (response.data.projectState === "n") {
+          this.active = parseInt(response.data.projectStage);
+        } else {
+          this.active = parseInt(response.data.projectStage) - 1;
+        }
+      });
+    },
+
+    /** 加载审批任务弹框 */
+    handleComplete(flag) {
+      /*this.completeOpen = true;
+      this.completeTitle = "流程审批";*/
+      ///his.submitForm(flag);
+
+      this.taskComplete(flag);
+    },
+    /** 用户审批任务 */
+    taskComplete(flag) {
+      /*if (!this.flowBaseInfo.comment) {
+        this.$modal.msgError("请输入审批意见!");
+        return;
+      }
+      if (this.form.taskDefKey=='softwareDept'&&!this.formAssess.context) {
+        this.$modal.msgError("请输入评估意见!");
+        return;
+      }*/
+      this.formLXApply.flag=flag;
+      const params={
+        /*projectPool: this.form,  // 拆分明确字段
+        projectReview: this.formAssess,
+        flowBaseInfo: this.flowBaseInfo*/
+        projectApproval:this.formLXApply,
+        flowBaseInfo: this.flowBaseInfo
+      }
+
+      approvalComplete(params).then(response => {
+        this.$modal.msgSuccess(response.msg);
+        this.goMyTask();
+      });
+    },
+    /*返回*/
+    goBack() {
+      this.$router.go(-1);
+    },
+    //跳转到我的任务-投资机会
+    goMyTask(){
+      this.$router.push({ path: "/myTask/project/approval/myTask"});
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.detailWrapper {
+  padding: 20px 0;
+  width: 92%;
+  margin: 0 auto;
+  .section1 {
+    p {
+      font-size: 24px;
+      font-weight: bold;
+      margin: 0;
+    }
+    > div:first-child {
+      // width: calc(100% - 700px);
+      width: 100%;
+    }
+    .btnList {
+      width: 700px;
+      display: flex;
+      justify-content: flex-end;
+    }
+  }
+  .basicsInfo {
+    font-size: 14px;
+    background: #f1f1f1;
+    margin-top: -24px;
+    width: 100%;
+    padding: 30px 20px 10px;
+    div {
+      color: #7e7d7d;
+    }
+    p {
+      font-size: 16px;
+      color: #333;
+      font-weight: bold;
+    }
+  }
+  .section3 {
+    margin-top: 40px;
+  }
+  .approveBtn {
+    margin-top: 30px;
+    .btnList {
+      display: flex;
+      justify-content: flex-end;
+      /* 让内部元素(按钮)整体靠右 */
+      gap: 10px; /* 替代 margin,给按钮之间加间距,可选 */
+      padding-right: 50px;
+    }
+  }
+}
+.projectNameTit {
+}
+.alreadyStop {
+  font-weight: normal;
+  font-size: 12px;
+  background: #ff0000;
+  color: #fff;
+  border-radius: 5px;
+  padding: 5px 10px;
+  margin-left: 10px;
+}
+
+</style>

+ 646 - 0
ruoyi-ui/src/views/project/approval/list.vue

@@ -0,0 +1,646 @@
+<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>-->
+      <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="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 { listApprovalList, delPool, editStage } from "@/api/invest/pool";
+import { listChannel } from "@/api/invest/channel";
+import meetingList from "./meetingList";
+import businessUpdate from "../../invest/components/businessUpdate";
+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;
+      listApprovalList(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.$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];
+        // 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: "/invest/pool/detail", 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(
+        "invest/pool/export",
+        {
+          ...this.queryParams,
+        },
+        `pool_${new Date().getTime()}.xlsx`
+      );
+    },
+  },
+};
+</script>
+<style lang="scss" scoped>
+.tableWrapper {
+  font-size: 12px;
+  color: #000;
+  ::v-deep .el-table__header-wrapper th {
+    font-size: 12px;
+    font-weight: bolder;
+    color: #000;
+  }
+
+  ::v-deep td.el-table__cell:not(:last-child) div {
+    text-overflow: -o-ellipsis-lastline;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: -webkit-box;
+    -webkit-line-clamp: 1;
+    line-clamp: 1;
+    -webkit-box-orient: vertical;
+  }
+}
+/**找到表头那一行,然后把里面的复选框隐藏掉**/
+.tableWrapper::v-deep .el-table__header-wrapper .el-table__header .el-checkbox {
+  display: none;
+}
+</style>

File diff suppressed because it is too large
+ 1547 - 0
ruoyi-ui/src/views/project/approval/meetingList.vue


File diff suppressed because it is too large
+ 1100 - 0
ruoyi-ui/src/views/project/approval/myTask.vue


File diff suppressed because it is too large
+ 1026 - 0
ruoyi-ui/src/views/project/investOpp/apply.vue


+ 974 - 0
ruoyi-ui/src/views/project/investOpp/audit.vue

@@ -0,0 +1,974 @@
+<template>
+  <div class="auditWrapper">
+    <section class="section1 public-flex">
+      <div class="public-margin-r-20">
+        <h4>投资项目</h4>
+        <p class="projectNameTit">{{ detailInfo.projectName }}</p>
+      </div>
+    </section>
+    <el-divider></el-divider>
+    <section class="section3">
+
+      <el-tabs v-model="activeName" @tab-click="handleClick">
+        <el-tab-pane label="项目基本信息" name="0"></el-tab-pane>
+        <el-tab-pane label="项目公司信息" name="1"></el-tab-pane>
+        <el-tab-pane label="项目联系人信息" name="2"></el-tab-pane>
+        <el-tab-pane label="项目融资信息" name="3"></el-tab-pane>
+        <el-tab-pane label="商业计划书及其他" name="4"></el-tab-pane>
+      </el-tabs>
+      <section>
+        <el-form ref="form" :model="form" label-width="160px" class="special-el-form">
+        <div v-if="activeName === '0'" >
+          <el-row :gutter="20" style="margin-left: 0px;margin-right: 0px;">
+            <el-col :span="12">
+              <el-form-item label="项目名称" prop="projectName">
+                <el-input maxlength="100" v-model="form.projectName" placeholder="请输入项目名称" :disabled="type === '2'"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="渠道" prop="tProjectChannel.channelName">
+                <el-select :disabled="type === '2'" v-model="form.tProjectChannel.channelName" 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-col>
+            <el-col :span="12">
+              <el-form-item label="初次接触日期" prop="contactDate">
+                <el-date-picker
+                  :disabled="type === '2'"
+                  clearable
+                  v-model="form.contactDate"
+                  type="date"
+                  value-format="yyyy-MM-dd"
+                  placeholder="请选择初次接触日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="所属组别">
+                <el-select
+                  v-model="form.tProjectChannel.channelGroup"
+                  disabled
+                  placeholder="请选择所属组别"
+                >
+                  <el-option
+                    v-for="dict in dict.type.project_group"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="所属行业" prop="industry">
+                <el-select
+                  v-model="form.industry"
+                  placeholder="请选择所属行业"
+                  :disabled="type === '2'"
+                >
+                  <el-option
+                    v-for="dict in dict.type.CUSTOMER_TRADE"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="项目负责人" prop="investHead">
+                <el-input
+                  v-if="type === '2'"
+                  maxlength="30"
+                  v-model="form.investHead"
+                  :disabled="type === '2'"
+                />
+                <div
+                  class="el-input__inner inputSimulation"
+                  v-else
+                >
+                  {{ form.investHead ? form.investHead : "请选择项目负责人" }}
+                </div>
+<!--                <selecDept
+                  ref="selecDepts"
+                  @getDeptUserInfo="getDeptUserInfo"
+                  :deptId="deptId"
+                ></selecDept>-->
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item
+                label="项目情况描述"
+                prop="description"
+                class="special-el-form-item"
+              >
+                <el-input
+                  :disabled="type === '2'"
+                  maxlength="200"
+                  rows="4"
+                  type="textarea"
+                  v-model="form.description"
+                  placeholder="请输入项目情况描述"
+                />
+              </el-form-item>
+            </el-col>
+            </el-row>
+          </div>
+          <div v-if="activeName === '1'">
+            <el-row :gutter="20">
+              <el-col :span="12">
+                <el-form-item label="公司名称" prop="tProjectCompany.companyName">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="100"
+                    v-model="form.tProjectCompany.companyName"
+                    placeholder="请输入公司名称"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="统一社会信用代码" prop="tProjectCompany.companyCode">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="35"
+                    v-model="form.tProjectCompany.companyCode"
+                    placeholder="请输入企业统一社会信用代码"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="营业开始时间" prop="tProjectCompany.startTime">
+                  <el-date-picker
+                    :disabled="type === '2'"
+                    clearable
+                    v-model="form.tProjectCompany.startTime"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="请选择营业开始时间"
+                  >
+                  </el-date-picker>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="营业结束时间" prop="tProjectCompany.endTime">
+                  <el-date-picker
+                    :disabled="type === '2'"
+                    clearable
+                    v-model="form.tProjectCompany.endTime"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="请选择营业结束时间"
+                  >
+                  </el-date-picker>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item
+                  label="注册资本(万元)"
+                  prop="tProjectCompany.registeredCapital"
+                >
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="20"
+                    v-model="form.tProjectCompany.registeredCapital"
+                    @input="
+                  (value) =>
+                    (form.tProjectCompany.registeredCapital = value
+                      .replace(/[^0-9.]/g, '')
+                      .replace(/^(\-)*(\d+)\.(\d\d\d\d).*$/, '$1$2.$3')
+                      .replace(/-/g, ''))
+                "
+                    placeholder="请输入注册资本"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="实缴资本(万元)" prop="tProjectCompany.paidCapital">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="20"
+                    v-model="form.tProjectCompany.paidCapital"
+                    @input="
+                  (value) =>
+                    (form.tProjectCompany.paidCapital = value
+                      .replace(/[^0-9.]/g, '')
+                      .replace(/^(\-)*(\d+)\.(\d\d\d\d).*$/, '$1$2.$3')
+                      .replace(/-/g, ''))
+                "
+                    placeholder="请输入实缴资本"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="实控人" prop="tProjectCompany.actualBod">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="25"
+                    v-model="form.tProjectCompany.actualBod"
+                    placeholder="请输入实控人"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="联系电话" prop="tProjectCompany.phone">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="20"
+                    v-model="form.tProjectCompany.phone"
+                    placeholder="请输入联系电话"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="所属类型" prop="tProjectCompany.type">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="25"
+                    v-model="form.tProjectCompany.type"
+                    placeholder="请输入所属类型"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="备案时间" prop="tProjectCompany.filingTime">
+                  <el-date-picker
+                    :disabled="type === '2'"
+                    clearable
+                    v-model="form.tProjectCompany.filingTime"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="请选择备案时间"
+                  >
+                  </el-date-picker>
+                </el-form-item>
+              </el-col>
+              <el-col>
+                <el-form-item
+                  label="注册地址"
+                  prop="tProjectCompany.registeredAddress"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    :disabled="type === '2'"
+                    type="textarea"
+                    rows="4"
+                    maxlength="100"
+                    v-model="form.tProjectCompany.registeredAddress"
+                    placeholder="请输入注册地址"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col>
+                <el-form-item
+                  label="办公地址"
+                  prop="tProjectCompany.businessAddress"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    :disabled="type === '2'"
+                    type="textarea"
+                    rows="4"
+                    maxlength="100"
+                    v-model="form.tProjectCompany.businessAddress"
+                    placeholder="请输入办公地址"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col>
+                <el-form-item
+                  label="公司附件"
+                  prop="listFile"
+                  class="special-el-form-item"
+                >
+                  <fileItem
+                    ref="fileItem"
+                    :id="form.id"
+                    @getFileList="getFileList"
+                  ></fileItem>
+                </el-form-item>
+              </el-col>
+            </el-row>
+<!--            </el-form>-->
+          </div>
+          <div v-if="activeName === '2'">
+            <el-row :gutter="20">
+              <el-col :span="12">
+                <el-form-item label="联系人姓名" prop="tProjectContacts.name">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="25"
+                    v-model="form.tProjectContacts.name"
+                    placeholder="请输入联系人姓名"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="职位" prop="tProjectContacts.position">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="25"
+                    v-model="form.tProjectContacts.position"
+                    placeholder="请输入职位"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="联系电话/微信" prop="tProjectContacts.contact">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="25"
+                    v-model="form.tProjectContacts.contact"
+                    placeholder="请输入联系电话/微信"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </div>
+          <div v-if="activeName === '3'" class="public-padded-20 detail-meeting">
+<!--            <el-form :model="form" label-width="120px">-->
+            <el-row :gutter="20">
+              <el-col :span="12">
+                <el-form-item label="项目融资阶段" prop="financingStage">
+                  <el-select
+                    :disabled="type === '2'"
+                    v-model="form.financingStage"
+                    placeholder="请选择项目融资阶段"
+                  >
+                    <el-option
+                      v-for="dict in dict.type.financing_stage"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="预期融资金额(万元)" prop="financingMoney">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="20"
+                    v-model="form.financingMoney"
+                    @input="
+                  (value) =>
+                    (form.financingMoney = value.replace(/\D/g, '').replace(/-/g, ''))
+                "
+                    placeholder="请输入预期融资金额"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="投前估值(万元)" prop="investValuation">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="20"
+                    v-model="form.investValuation"
+                    @input="
+                  (value) =>
+                    (form.investValuation = value
+                      .replace(/[^0-9.]/g, '')
+                      .replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
+                      .replace(/-/g, ''))
+                "
+                    placeholder="请输入投前估值"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="预计投资金额(万元)" prop="investMoney">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="20"
+                    v-model="form.investMoney"
+                    @input="
+                  (value) =>
+                    (form.investMoney = value.replace(/\D/g, '').replace(/-/g, ''))
+                "
+                    placeholder="请输入预计投资金额"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="投资类型" prop="investType">
+                  <el-select
+                    v-model="form.investType"
+                    placeholder="请选择投资类型"
+                    :disabled="type === '2'"
+                  >
+                    <el-option
+                      v-for="dict in dict.type.invest_type"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="投资策略" prop="investPloy">
+                  <el-select
+                    v-model="form.investPloy"
+                    placeholder="请选择投资策略"
+                    :disabled="type === '2'"
+                  >
+                    <el-option
+                      v-for="dict in dict.type.invest_ploy"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="投资价值" prop="investWorth">
+                  <el-select
+                    v-model="form.investWorth"
+                    placeholder="请选择投资价值"
+                    :disabled="type === '2'"
+                  >
+                    <el-option
+                      v-for="dict in dict.type.invest_worth"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col >
+                <el-form-item
+                  label="历次融资"
+                  prop="previousFinancing"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="200"
+                    rows="4"
+                    type="textarea"
+                    v-model="form.previousFinancing"
+                    placeholder="请输入历次融资"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col >
+                <el-form-item
+                  label="融资条件"
+                  prop="financingCondition"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="200"
+                    rows="4"
+                    type="textarea"
+                    v-model="form.financingCondition"
+                    placeholder="请输入融资条件"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col >
+                <el-form-item
+                  label="投资亮点"
+                  prop="investSparkle"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="200"
+                    rows="4"
+                    type="textarea"
+                    v-model="form.investSparkle"
+                    placeholder="请输入投资亮点"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col >
+                <el-form-item
+                  label="股权架构"
+                  prop="shareholding"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="200"
+                    rows="4"
+                    type="textarea"
+                    v-model="form.shareholding"
+                    placeholder="请输入股权架构"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+<!--            </el-form>-->
+          </div>
+          <div v-if="activeName === '4'">
+<!--            <el-form :model="tProjectCompany" label-width="120px">-->
+            <el-row :gutter="20">
+              <el-col>
+                <el-form-item label="BP" prop="bpFile" class="special-el-form-item">
+                  <fileItem ref="bpFileItem" :id="form.id" @getFileList="getBPFileList" ></fileItem>
+                </el-form-item>
+              </el-col>
+              <el-col>
+                <el-form-item label="其他附件" prop="otherFile" class="special-el-form-item">
+                  <fileItem ref="otherFileItem" :id="form.id" @getFileList="getOtherFileList"></fileItem>
+                </el-form-item>
+              </el-col>
+              <el-col>
+                <el-form-item label="备注" prop="mark" class="special-el-form-item">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="200"
+                    :readonly="type === '2' ? true : false"
+                    rows="4"
+                    type="textarea"
+                    v-model="form.mark"
+                    placeholder="请输入备注"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </div>
+        </el-form>
+      </section>
+    </section>
+    <section v-if="form.taskDefKey=='softwareDept'">
+      <el-form
+        ref="formAssess"
+        :model="formAssess"
+        :rules="rulesAssess"
+        label-width="120px"
+      >
+        <el-form-item label="评估意见" prop="context">
+          <el-input
+            maxlength="200"
+            rows="4"
+            type="textarea"
+            v-model="formAssess.context"
+            placeholder="请填写评估意见"
+          >
+          </el-input>
+        </el-form-item>
+      </el-form>
+    </section>
+    <section>
+      <flowBase :procInstId="form.procInstId" v-if="form.procInstId"></flowBase>
+    </section>
+    <section>
+      <el-form
+        ref="flowBaseInfo"
+        :model="flowBaseInfo"
+        :rules="rulesFlow"
+        label-width="120px"
+      >
+        <el-form-item label="审批意见" prop="comment">
+          <el-input
+            maxlength="200"
+            rows="4"
+            type="textarea"
+            v-model="flowBaseInfo.comment"
+            placeholder="请填写审批意见"
+          >
+          </el-input>
+        </el-form-item>
+        <el-form-item class="btnList">
+<!--          <div class="btn-group">-->
+            <el-button @click="goBack">返 回</el-button>
+            <el-button type="success" @click="handleComplete(true)">同意</el-button>
+            <el-button type="warning" @click="handleComplete(false)">驳回</el-button>
+<!--          </div>-->
+        </el-form-item>
+      </el-form>
+    </section>
+  </div>
+</template>
+<script>
+import {getPool,getInvestInfo, investmentOpportunityComplete} from "@/api/project/investOpp/pool";
+import { listChannel } from "@/api/invest/channel";
+import fileItem from "../../invest/components/fileItem";
+import flowBase from "../flowBase.vue";
+import { mapGetters } from "vuex";
+import channelItem from "../../invest/components/channelItem.vue";
+import selecDept from "../../invest/components/selecDept.vue";
+
+export default {
+  props: {
+    type: {
+      type: String,
+      default: "2", //1可编辑  2不可编辑
+    }
+  },
+  components: { fileItem ,flowBase},
+  dicts: [
+    "CUSTOMER_TRADE",
+    "project_group",
+    "invest_type",
+    "invest_ploy",
+    "invest_worth",
+    "financing_stage",
+  ],
+  data() {
+    return {
+      active: 0,
+      detailInfo: {
+        projectName: "",
+      },
+      activeName: "0",
+      id: "",
+      pInstId:null,
+      rules1: {},
+      channelList: [],
+      fileList: [],
+      fileListBP: [],
+      fileListOther: [],
+      // 表单参数
+      form: {
+        id: null,
+        procInstId:null,
+        taskDefKey:null,
+        projectName: null,
+        projectGroup: "",
+        industry: null,
+        recordDate: null,
+        projectCode: null,
+        channel: "",
+        contactDate: null,
+        projectDate: null,
+        decisionDate: null,
+        tProjectCompany: {
+          companyName: null,
+          companyCode: null,
+          startTime: null,
+          endTime: null,
+          registeredCapital: null,
+          registeredAddress: null,
+          paidCapital: null,
+          businessAddress: null,
+          actualBod: null,
+          phone: null,
+          filingTime: null,
+          type: null,
+        },
+        tProjectContacts: {
+          name: null,
+          position: null,
+          contact: null,
+        },
+        tProjectChannel: {
+          channelName: "",
+          channelGroup: "",
+        },
+
+        description: null,
+        projectContacts: null,
+        investHead: null,
+        previousFinancing: null,
+        financingStage: null,
+        financingCondition: null,
+        financingMoney: null,
+        financingDate: null,
+        investSparkle: null,
+        investValuation: null,
+        investMoney: null,
+        investType: null,
+        investPloy: null,
+        investWorth: null,
+        shareholding: null,
+        projectStage: null,
+        projectState: null,
+        mark: null,
+        delFlag: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+        bpFile: null,
+        otherFile: null,
+      },
+      // 上传评估意见
+      formAssess: {
+        id: null,
+        context: null,
+        projectPoolId: null,
+      },
+      rulesAssess: {
+        context: [{ required: true, trigger: "blur", message: "请输入" }],
+      },
+      flowBaseInfo:{
+        comment:null
+      },
+      rulesFlow:{
+        comment: [{ required: true, trigger: "blur", message: "请输入" }],
+      }
+    };
+  },
+  computed: {
+    ...mapGetters(["user"]),
+  },
+  mounted() {
+    new Promise((resolve, reject) => {
+      listChannel({
+        pageNum: 1,
+        pageSize: 100,
+      }).then((response) => {
+        this.channelList = response.rows;
+        resolve();
+      });
+    }).then(() => {
+      if (this.id) {
+        this.getPoolDetail(this.id,this.pInstId);
+      } else {
+        //this.reset();
+      }
+    });
+  },
+  created() {
+    this.id = this.$route.query.id;
+    this.pInstId = this.$route.query.pInstId;
+    /*this.getDetail();
+    this.getListProjectPoolId();
+    this.getDueList();
+    if (this.$route.query.activeName) {
+      this.activeName = this.$route.query.activeName;
+    }*/
+
+    this.getPoolDetail(this.id,this.pInstId);
+  },
+  methods: {
+    handleClick(tab, event) {
+      let that = this;
+    },
+    getPoolDetail(id,pInstId) {
+      getInvestInfo(pInstId).then((response) => {
+        this.form = response.data;
+        this.detailInfo = response.data;
+        let channeItem = this.channelList.find((item) => {
+          if (this.form.channel == item.id) {
+            return item;
+          }
+        });
+        if (channeItem && channeItem.channelName) {
+          this.form.tProjectChannel.channelName = channeItem.channelName;
+          this.form.tProjectChannel.channelGroup = channeItem.channelGroup;
+        } else {
+          this.form.tProjectChannel = {
+            channelName: "无",
+            channelGroup: "",
+          };
+        }
+        setTimeout(() => {
+          if (this.type == "2") {
+            console.log(this.$refs);
+            this.$refs.fileItem?.handleButton();
+            this.$refs.bpFileItem.handleButton();
+            this.$refs.otherFileItem.handleButton();
+          }
+          this.$refs.fileItem.fileList = [];
+          this.$refs.fileItem.getListFileBusinessId(
+            this.form.tProjectCompany.companyId
+          );
+          this.$refs.bpFileItem.fileList = [];
+          this.$refs.bpFileItem.getListFileBusinessId(this.form.id, "9");
+          this.$refs.otherFileItem.fileList = [];
+          this.$refs.otherFileItem.getListFileBusinessId(this.form.id, "0");
+        }, 300);
+      });
+    },
+    // 获取fileList
+    getFileList(fileList) {
+      if (fileList && fileList.length > 0) {
+        this.fileList = fileList;
+      } else {
+        this.fileList = [];
+      }
+    },
+    getBPFileList(fileList) {
+      if (fileList && fileList.length > 0) {
+        this.fileListBP = fileList;
+        this.$refs.form.clearValidate(["bpFile"]);
+      } else {
+        this.fileList = [];
+      }
+    },
+    getOtherFileList(fileList) {
+      if (fileList && fileList.length > 0) {
+        this.fileListOther = fileList;
+      } else {
+        this.fileList = [];
+      }
+    },
+    /*返回*/
+    goBack() {
+      this.$router.go(-1);
+    },
+    //跳转到我的任务-投资机会
+    goMyTask(){
+      this.$router.push({ path: "/myTask/project/investOpp/myTask"});
+    },
+    /** 加载审批任务弹框 */
+    handleComplete(flag) {
+      this.completeOpen = true;
+      this.completeTitle = "流程审批";
+      ///his.submitForm(flag);
+
+      this.taskComplete(flag);
+    },
+    /** 用户审批任务 */
+    taskComplete(flag) {
+      if (!this.flowBaseInfo.comment) {
+        this.$modal.msgError("请输入审批意见!");
+        return;
+      }
+      if (this.form.taskDefKey=='softwareDept'&&!this.formAssess.context) {
+          this.$modal.msgError("请输入评估意见!");
+          return;
+      }
+      this.form.flag=flag;
+      const params={
+        projectPool: this.form,  // 拆分明确字段
+        projectReview: this.formAssess,
+        flowBaseInfo: this.flowBaseInfo
+      }
+      investmentOpportunityComplete(params).then(response => {
+        this.$modal.msgSuccess(response.msg);
+        this.goMyTask();
+      });
+      /*if (this.taskForm && this.formKeyExist) {
+        // 表单是否禁用
+        this.taskForm.formData.formData.disabled = true;
+        // 是否显示按钮
+        this.taskForm.formData.formData.formBtns = false;
+        this.taskForm.variables = Object.assign({}, this.taskForm.variables, this.taskForm.formData.valData);
+        this.taskForm.variables.variables = this.taskForm.formData.formData;
+        investmentOpportunityComplete(this.taskForm).then(response => {
+          this.$modal.msgSuccess(response.msg);
+          this.goBack();
+        });
+      } else {
+        // 流程设计人员类型配置为固定人员接收任务时,直接提交任务到下一步
+
+      }*/
+    },
+    /** 申请流程表单数据提交 */
+    submitForm(flag) {
+      // 根据当前任务或者流程设计配置的下一步节点 todo 暂时未涉及到考虑网关、表达式和多节点情况
+      const params = {taskId: this.taskForm.taskId}
+      getNextFlowNode(params).then(res => {
+        /*const data = res.data;
+        this.taskForm.formData = formData;
+        if (data) {
+          if (data.dataType === 'dynamic') {
+            if (data.type === 'assignee') { // 指定人员
+              this.checkSendUser = true;
+              this.checkType = "single";
+            } else if (data.type === 'candidateUsers') {  // 候选人员(多个)
+              this.checkSendUser = true;
+              this.checkType = "multiple";
+            } else if (data.type === 'candidateGroups') { // 指定组(所属角色接收任务)
+              this.checkSendRole = true;
+            } else { // 会签
+              // 流程设计指定的 elementVariable 作为会签人员列表
+              this.multiInstanceVars = data.vars;
+              this.checkSendUser = true;
+              this.checkType = "multiple";
+            }
+          }
+        }
+        this.completeOpen = true;
+        this.completeTitle = "流程审批";*/
+        this.$refs.vFormRef.getFormData().then(formData => {
+          formData.auditPass=flag;
+          Object.assign(this.taskForm.variables, formData);
+          this.taskForm.variables.formJson = this.formJson;
+          console.log(this.taskForm, "流程审批提交表单数据1")
+        }).catch(error => {
+          // this.$modal.msgError(error)
+        })
+        const data = res.data;
+        if (data) {
+          if (data.dataType === 'dynamic') {
+            if (data.type === 'assignee') { // 指定人员
+              this.checkSendUser = true;
+              this.checkType = "single";
+            } else if (data.type === 'candidateUsers') {  // 候选人员(多个)
+              this.checkSendUser = true;
+              this.checkType = "multiple";
+            } else if (data.type === 'candidateGroups') { // 指定组(所属角色接收任务)
+              this.checkSendRole = true;
+            } else { // 会签
+              // 流程设计指定的 elementVariable 作为会签人员列表
+              this.multiInstanceVars = data.vars;
+              this.checkSendUser = true;
+              this.checkType = "multiple";
+            }
+          }
+        }
+      })
+    },
+
+  },
+};
+</script>
+<style lang="scss" scoped>
+.auditWrapper {
+  padding: 20px 0;
+  width: 92%;
+  margin: 0 auto;
+  .section1 {
+    p {
+      font-size: 24px;
+      font-weight: bold;
+      margin: 0;
+    }
+    > div:first-child {
+      // width: calc(100% - 700px);
+      width: 100%;
+    }
+    .btnList {
+      width: 700px;
+      display: flex;
+      justify-content: flex-end;
+    }
+  }
+  .basicsInfo {
+    font-size: 14px;
+    background: #f1f1f1;
+    margin-top: -24px;
+    width: 100%;
+    padding: 30px 20px 10px;
+    div {
+      color: #7e7d7d;
+    }
+    p {
+      font-size: 16px;
+      color: #333;
+      font-weight: bold;
+    }
+  }
+  .section3 {
+    margin-top: 40px;
+    .el-form-item {
+      width: 100%; /* 让表单占满父容器 */
+      min-width: 600px; /* 防止过小(可选) */
+    }
+    .special-el-form {
+      margin-left: 0px;
+      width: 100%;
+    }
+
+  }
+  .btnList {
+    display: flex;
+    justify-content: flex-end;
+    /* 让内部元素(按钮)整体靠右 */
+    gap: 10px; /* 替代 margin,给按钮之间加间距,可选 */
+  }
+
+}
+
+</style>

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

@@ -0,0 +1,962 @@
+<template>
+  <div class="auditWrapper">
+    <section class="section1 public-flex">
+      <div class="public-margin-r-20">
+        <h4>投资项目</h4>
+        <p class="projectNameTit">{{ detailInfo.projectName }}</p>
+      </div>
+    </section>
+    <el-divider></el-divider>
+    <section class="section3">
+
+      <el-tabs v-model="activeName" @tab-click="handleClick">
+        <el-tab-pane label="项目基本信息" name="0"></el-tab-pane>
+        <el-tab-pane label="项目公司信息" name="1"></el-tab-pane>
+        <el-tab-pane label="项目联系人信息" name="2"></el-tab-pane>
+        <el-tab-pane label="项目融资信息" name="3"></el-tab-pane>
+        <el-tab-pane label="商业计划书及其他" name="4"></el-tab-pane>
+        <el-tab-pane label="评估意见" name="5"></el-tab-pane>
+      </el-tabs>
+      <section>
+        <el-form ref="form" :model="form" label-width="160px" class="special-el-form">
+        <div v-if="activeName === '0'" >
+          <el-row :gutter="20" style="margin-left: 0px;margin-right: 0px;">
+            <el-col :span="12">
+              <el-form-item label="项目名称" prop="projectName">
+                <el-input maxlength="100" v-model="form.projectName" placeholder="请输入项目名称" :disabled="type === '2'"/>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="渠道" prop="tProjectChannel.channelName">
+                <el-select :disabled="type === '2'" v-model="form.tProjectChannel.channelName" 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-col>
+            <el-col :span="12">
+              <el-form-item label="初次接触日期" prop="contactDate">
+                <el-date-picker
+                  :disabled="type === '2'"
+                  clearable
+                  v-model="form.contactDate"
+                  type="date"
+                  value-format="yyyy-MM-dd"
+                  placeholder="请选择初次接触日期">
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="所属组别">
+                <el-select
+                  v-model="form.tProjectChannel.channelGroup"
+                  disabled
+                  placeholder="请选择所属组别"
+                >
+                  <el-option
+                    v-for="dict in dict.type.project_group"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="所属行业" prop="industry">
+                <el-select
+                  v-model="form.industry"
+                  placeholder="请选择所属行业"
+                  :disabled="type === '2'"
+                >
+                  <el-option
+                    v-for="dict in dict.type.CUSTOMER_TRADE"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="项目负责人" prop="investHead">
+                <el-input
+                  v-if="type === '2'"
+                  maxlength="30"
+                  v-model="form.investHead"
+                  :disabled="type === '2'"
+                />
+                <div
+                  class="el-input__inner inputSimulation"
+                  v-else
+                >
+                  {{ form.investHead ? form.investHead : "请选择项目负责人" }}
+                </div>
+<!--                <selecDept
+                  ref="selecDepts"
+                  @getDeptUserInfo="getDeptUserInfo"
+                  :deptId="deptId"
+                ></selecDept>-->
+              </el-form-item>
+            </el-col>
+            <el-col :span="24">
+              <el-form-item
+                label="项目情况描述"
+                prop="description"
+                class="special-el-form-item"
+              >
+                <el-input
+                  :disabled="type === '2'"
+                  maxlength="200"
+                  rows="4"
+                  type="textarea"
+                  v-model="form.description"
+                  placeholder="请输入项目情况描述"
+                />
+              </el-form-item>
+            </el-col>
+            </el-row>
+          </div>
+          <div v-if="activeName === '1'">
+            <el-row :gutter="20">
+              <el-col :span="12">
+                <el-form-item label="公司名称" prop="tProjectCompany.companyName">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="100"
+                    v-model="form.tProjectCompany.companyName"
+                    placeholder="请输入公司名称"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="统一社会信用代码" prop="tProjectCompany.companyCode">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="35"
+                    v-model="form.tProjectCompany.companyCode"
+                    placeholder="请输入企业统一社会信用代码"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="营业开始时间" prop="tProjectCompany.startTime">
+                  <el-date-picker
+                    :disabled="type === '2'"
+                    clearable
+                    v-model="form.tProjectCompany.startTime"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="请选择营业开始时间"
+                  >
+                  </el-date-picker>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="营业结束时间" prop="tProjectCompany.endTime">
+                  <el-date-picker
+                    :disabled="type === '2'"
+                    clearable
+                    v-model="form.tProjectCompany.endTime"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="请选择营业结束时间"
+                  >
+                  </el-date-picker>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item
+                  label="注册资本(万元)"
+                  prop="tProjectCompany.registeredCapital"
+                >
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="20"
+                    v-model="form.tProjectCompany.registeredCapital"
+                    @input="
+                  (value) =>
+                    (form.tProjectCompany.registeredCapital = value
+                      .replace(/[^0-9.]/g, '')
+                      .replace(/^(\-)*(\d+)\.(\d\d\d\d).*$/, '$1$2.$3')
+                      .replace(/-/g, ''))
+                "
+                    placeholder="请输入注册资本"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="实缴资本(万元)" prop="tProjectCompany.paidCapital">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="20"
+                    v-model="form.tProjectCompany.paidCapital"
+                    @input="
+                  (value) =>
+                    (form.tProjectCompany.paidCapital = value
+                      .replace(/[^0-9.]/g, '')
+                      .replace(/^(\-)*(\d+)\.(\d\d\d\d).*$/, '$1$2.$3')
+                      .replace(/-/g, ''))
+                "
+                    placeholder="请输入实缴资本"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="实控人" prop="tProjectCompany.actualBod">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="25"
+                    v-model="form.tProjectCompany.actualBod"
+                    placeholder="请输入实控人"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="联系电话" prop="tProjectCompany.phone">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="20"
+                    v-model="form.tProjectCompany.phone"
+                    placeholder="请输入联系电话"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="所属类型" prop="tProjectCompany.type">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="25"
+                    v-model="form.tProjectCompany.type"
+                    placeholder="请输入所属类型"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="备案时间" prop="tProjectCompany.filingTime">
+                  <el-date-picker
+                    :disabled="type === '2'"
+                    clearable
+                    v-model="form.tProjectCompany.filingTime"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="请选择备案时间"
+                  >
+                  </el-date-picker>
+                </el-form-item>
+              </el-col>
+              <el-col>
+                <el-form-item
+                  label="注册地址"
+                  prop="tProjectCompany.registeredAddress"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    :disabled="type === '2'"
+                    type="textarea"
+                    rows="4"
+                    maxlength="100"
+                    v-model="form.tProjectCompany.registeredAddress"
+                    placeholder="请输入注册地址"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col>
+                <el-form-item
+                  label="办公地址"
+                  prop="tProjectCompany.businessAddress"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    :disabled="type === '2'"
+                    type="textarea"
+                    rows="4"
+                    maxlength="100"
+                    v-model="form.tProjectCompany.businessAddress"
+                    placeholder="请输入办公地址"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col>
+                <el-form-item
+                  label="公司附件"
+                  prop="listFile"
+                  class="special-el-form-item"
+                >
+                  <fileItem
+                    ref="fileItem"
+                    :id="form.id"
+                    @getFileList="getFileList"
+                  ></fileItem>
+                </el-form-item>
+              </el-col>
+            </el-row>
+<!--            </el-form>-->
+          </div>
+          <div v-if="activeName === '2'">
+            <el-row :gutter="20">
+              <el-col :span="12">
+                <el-form-item label="联系人姓名" prop="tProjectContacts.name">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="25"
+                    v-model="form.tProjectContacts.name"
+                    placeholder="请输入联系人姓名"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="职位" prop="tProjectContacts.position">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="25"
+                    v-model="form.tProjectContacts.position"
+                    placeholder="请输入职位"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="联系电话/微信" prop="tProjectContacts.contact">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="25"
+                    v-model="form.tProjectContacts.contact"
+                    placeholder="请输入联系电话/微信"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </div>
+          <div v-if="activeName === '3'" class="public-padded-20 detail-meeting">
+<!--            <el-form :model="form" label-width="120px">-->
+            <el-row :gutter="20">
+              <el-col :span="12">
+                <el-form-item label="项目融资阶段" prop="financingStage">
+                  <el-select
+                    :disabled="type === '2'"
+                    v-model="form.financingStage"
+                    placeholder="请选择项目融资阶段"
+                  >
+                    <el-option
+                      v-for="dict in dict.type.financing_stage"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="预期融资金额(万元)" prop="financingMoney">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="20"
+                    v-model="form.financingMoney"
+                    @input="
+                  (value) =>
+                    (form.financingMoney = value.replace(/\D/g, '').replace(/-/g, ''))
+                "
+                    placeholder="请输入预期融资金额"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="投前估值(万元)" prop="investValuation">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="20"
+                    v-model="form.investValuation"
+                    @input="
+                  (value) =>
+                    (form.investValuation = value
+                      .replace(/[^0-9.]/g, '')
+                      .replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
+                      .replace(/-/g, ''))
+                "
+                    placeholder="请输入投前估值"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="预计投资金额(万元)" prop="investMoney">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="20"
+                    v-model="form.investMoney"
+                    @input="
+                  (value) =>
+                    (form.investMoney = value.replace(/\D/g, '').replace(/-/g, ''))
+                "
+                    placeholder="请输入预计投资金额"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="投资类型" prop="investType">
+                  <el-select
+                    v-model="form.investType"
+                    placeholder="请选择投资类型"
+                    :disabled="type === '2'"
+                  >
+                    <el-option
+                      v-for="dict in dict.type.invest_type"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="投资策略" prop="investPloy">
+                  <el-select
+                    v-model="form.investPloy"
+                    placeholder="请选择投资策略"
+                    :disabled="type === '2'"
+                  >
+                    <el-option
+                      v-for="dict in dict.type.invest_ploy"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="投资价值" prop="investWorth">
+                  <el-select
+                    v-model="form.investWorth"
+                    placeholder="请选择投资价值"
+                    :disabled="type === '2'"
+                  >
+                    <el-option
+                      v-for="dict in dict.type.invest_worth"
+                      :key="dict.value"
+                      :label="dict.label"
+                      :value="dict.value"
+                    ></el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col >
+                <el-form-item
+                  label="历次融资"
+                  prop="previousFinancing"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="200"
+                    rows="4"
+                    type="textarea"
+                    v-model="form.previousFinancing"
+                    placeholder="请输入历次融资"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col >
+                <el-form-item
+                  label="融资条件"
+                  prop="financingCondition"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="200"
+                    rows="4"
+                    type="textarea"
+                    v-model="form.financingCondition"
+                    placeholder="请输入融资条件"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col >
+                <el-form-item
+                  label="投资亮点"
+                  prop="investSparkle"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="200"
+                    rows="4"
+                    type="textarea"
+                    v-model="form.investSparkle"
+                    placeholder="请输入投资亮点"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col >
+                <el-form-item
+                  label="股权架构"
+                  prop="shareholding"
+                  class="special-el-form-item"
+                >
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="200"
+                    rows="4"
+                    type="textarea"
+                    v-model="form.shareholding"
+                    placeholder="请输入股权架构"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+<!--            </el-form>-->
+          </div>
+          <div v-if="activeName === '4'">
+<!--            <el-form :model="tProjectCompany" label-width="120px">-->
+            <el-row :gutter="20">
+              <el-col>
+                <el-form-item label="BP" prop="bpFile" class="special-el-form-item">
+                  <fileItem ref="bpFileItem" :id="form.id" @getFileList="getBPFileList" ></fileItem>
+                </el-form-item>
+              </el-col>
+              <el-col>
+                <el-form-item label="其他附件" prop="otherFile" class="special-el-form-item">
+                  <fileItem ref="otherFileItem" :id="form.id" @getFileList="getOtherFileList"></fileItem>
+                </el-form-item>
+              </el-col>
+              <el-col>
+                <el-form-item label="备注" prop="mark" class="special-el-form-item">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="200"
+                    :readonly="type === '2' ? true : false"
+                    rows="4"
+                    type="textarea"
+                    v-model="form.mark"
+                    placeholder="请输入备注"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </div>
+        </el-form>
+        <el-form ref="formAssess" :model="formAssess" label-width="160px" class="special-el-form">
+          <div v-if="activeName === '5'">
+            <el-row :gutter="20">
+              <el-col>
+                <el-form-item label="评估意见" prop="context" class="special-el-form-item">
+                  <el-input
+                    :disabled="type === '2'"
+                    maxlength="200"
+                    :readonly="type === '2' ? true : false"
+                    rows="4"
+                    type="textarea"
+                    v-model="formAssess.context"
+                    placeholder="请输入评估意见"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </div>
+        </el-form>
+      </section>
+    </section>
+<!--    <section v-if="form.taskDefKey=='softwareDept'">
+      <el-form
+        ref="formAssess"
+        :model="formAssess"
+        :rules="rulesAssess"
+        label-width="120px"
+      >
+        <el-form-item label="评估意见" prop="context">
+          <el-input
+            maxlength="200"
+            rows="4"
+            type="textarea"
+            v-model="formAssess.context"
+            placeholder="请填写评估意见"
+          >
+          </el-input>
+        </el-form-item>
+      </el-form>
+    </section>-->
+    <section>
+      <flowBase :procInstId="form.procInstId" v-if="form.procInstId"></flowBase>
+    </section>
+  </div>
+</template>
+<script>
+import {getPool,getInvestInfo, investmentOpportunityComplete} from "@/api/project/investOpp/pool";
+import { listChannel } from "@/api/invest/channel";
+import fileItem from "../../invest/components/fileItem";
+import flowBase from "../flowBase.vue";
+import { mapGetters } from "vuex";
+import channelItem from "../../invest/components/channelItem.vue";
+import selecDept from "../../invest/components/selecDept.vue";
+
+export default {
+  props: {
+    type: {
+      type: String,
+      default: "2", //1可编辑  2不可编辑
+    }
+  },
+  components: { fileItem ,flowBase},
+  dicts: [
+    "CUSTOMER_TRADE",
+    "project_group",
+    "invest_type",
+    "invest_ploy",
+    "invest_worth",
+    "financing_stage",
+  ],
+  data() {
+    return {
+      active: 0,
+      detailInfo: {
+        projectName: "",
+      },
+      activeName: "0",
+      id: "",
+      pInstId:null,
+      rules1: {},
+      channelList: [],
+      fileList: [],
+      fileListBP: [],
+      fileListOther: [],
+      // 表单参数
+      form: {
+        id: null,
+        procInstId:null,
+        taskDefKey:null,
+        projectName: null,
+        projectGroup: "",
+        industry: null,
+        recordDate: null,
+        projectCode: null,
+        channel: "",
+        contactDate: null,
+        projectDate: null,
+        decisionDate: null,
+        tProjectCompany: {
+          companyName: null,
+          companyCode: null,
+          startTime: null,
+          endTime: null,
+          registeredCapital: null,
+          registeredAddress: null,
+          paidCapital: null,
+          businessAddress: null,
+          actualBod: null,
+          phone: null,
+          filingTime: null,
+          type: null,
+        },
+        tProjectContacts: {
+          name: null,
+          position: null,
+          contact: null,
+        },
+        tProjectChannel: {
+          channelName: "",
+          channelGroup: "",
+        },
+
+        description: null,
+        projectContacts: null,
+        investHead: null,
+        previousFinancing: null,
+        financingStage: null,
+        financingCondition: null,
+        financingMoney: null,
+        financingDate: null,
+        investSparkle: null,
+        investValuation: null,
+        investMoney: null,
+        investType: null,
+        investPloy: null,
+        investWorth: null,
+        shareholding: null,
+        projectStage: null,
+        projectState: null,
+        mark: null,
+        delFlag: null,
+        createBy: null,
+        createTime: null,
+        updateBy: null,
+        updateTime: null,
+        listFile: null,
+        bpFile: null,
+        otherFile: null,
+      },
+      // 上传评估意见
+      formAssess: {
+        id: null,
+        context: null,
+        projectPoolId: null,
+      },
+      rulesAssess: {
+        context: [{ required: true, trigger: "blur", message: "请输入" }],
+      },
+      flowBaseInfo:{
+        comment:null
+      },
+      rulesFlow:{
+        comment: [{ required: true, trigger: "blur", message: "请输入" }],
+      }
+    };
+  },
+  computed: {
+    ...mapGetters(["user"]),
+  },
+  mounted() {
+    new Promise((resolve, reject) => {
+      listChannel({
+        pageNum: 1,
+        pageSize: 100,
+      }).then((response) => {
+        this.channelList = response.rows;
+        resolve();
+      });
+    }).then(() => {
+      if (this.id) {
+        this.getPoolDetail(this.id,this.pInstId);
+      } else {
+        //this.reset();
+      }
+    });
+  },
+  created() {
+    this.id = this.$route.query.id;
+    this.pInstId = this.$route.query.pInstId;
+    /*this.getDetail();
+    this.getListProjectPoolId();
+    this.getDueList();
+    if (this.$route.query.activeName) {
+      this.activeName = this.$route.query.activeName;
+    }*/
+
+    this.getPoolDetail(this.id,this.pInstId);
+  },
+  methods: {
+    handleClick(tab, event) {
+      let that = this;
+    },
+    getPoolDetail(id,pInstId) {
+      getInvestInfo(pInstId).then((response) => {
+        this.form = response.data;
+        this.detailInfo = response.data;
+        let channeItem = this.channelList.find((item) => {
+          if (this.form.channel == item.id) {
+            return item;
+          }
+        });
+        if (channeItem && channeItem.channelName) {
+          this.form.tProjectChannel.channelName = channeItem.channelName;
+          this.form.tProjectChannel.channelGroup = channeItem.channelGroup;
+        } else {
+          this.form.tProjectChannel = {
+            channelName: "无",
+            channelGroup: "",
+          };
+        }
+        setTimeout(() => {
+          if (this.type == "2") {
+            console.log(this.$refs);
+            this.$refs.fileItem?.handleButton();
+            this.$refs.bpFileItem.handleButton();
+            this.$refs.otherFileItem.handleButton();
+          }
+          this.$refs.fileItem.fileList = [];
+          this.$refs.fileItem.getListFileBusinessId(
+            this.form.tProjectCompany.companyId
+          );
+          this.$refs.bpFileItem.fileList = [];
+          this.$refs.bpFileItem.getListFileBusinessId(this.form.id, "9");
+          this.$refs.otherFileItem.fileList = [];
+          this.$refs.otherFileItem.getListFileBusinessId(this.form.id, "0");
+        }, 300);
+      });
+    },
+    // 获取fileList
+    getFileList(fileList) {
+      if (fileList && fileList.length > 0) {
+        this.fileList = fileList;
+      } else {
+        this.fileList = [];
+      }
+    },
+    getBPFileList(fileList) {
+      if (fileList && fileList.length > 0) {
+        this.fileListBP = fileList;
+        this.$refs.form.clearValidate(["bpFile"]);
+      } else {
+        this.fileList = [];
+      }
+    },
+    getOtherFileList(fileList) {
+      if (fileList && fileList.length > 0) {
+        this.fileListOther = fileList;
+      } else {
+        this.fileList = [];
+      }
+    },
+    /*返回*/
+    goBack() {
+      this.$router.go(-1);
+    },
+    //跳转到我的任务-投资机会
+    goMyTask(){
+      this.$router.push({ path: "/myTask/project/investOpp/myTask"});
+    },
+    /** 加载审批任务弹框 */
+    handleComplete(flag) {
+      this.completeOpen = true;
+      this.completeTitle = "流程审批";
+      ///his.submitForm(flag);
+
+      this.taskComplete(flag);
+    },
+    /** 用户审批任务 */
+    taskComplete(flag) {
+      if (!this.flowBaseInfo.comment) {
+        this.$modal.msgError("请输入审批意见!");
+        return;
+      }
+      if (this.form.taskDefKey=='softwareDept'&&!this.formAssess.context) {
+          this.$modal.msgError("请输入评估意见!");
+          return;
+      }
+      this.form.flag=flag;
+      const params={
+        projectPool: this.form,  // 拆分明确字段
+        projectReview: this.formAssess,
+        flowBaseInfo: this.flowBaseInfo
+      }
+      investmentOpportunityComplete(params).then(response => {
+        this.$modal.msgSuccess(response.msg);
+        this.goMyTask();
+      });
+      /*if (this.taskForm && this.formKeyExist) {
+        // 表单是否禁用
+        this.taskForm.formData.formData.disabled = true;
+        // 是否显示按钮
+        this.taskForm.formData.formData.formBtns = false;
+        this.taskForm.variables = Object.assign({}, this.taskForm.variables, this.taskForm.formData.valData);
+        this.taskForm.variables.variables = this.taskForm.formData.formData;
+        investmentOpportunityComplete(this.taskForm).then(response => {
+          this.$modal.msgSuccess(response.msg);
+          this.goBack();
+        });
+      } else {
+        // 流程设计人员类型配置为固定人员接收任务时,直接提交任务到下一步
+
+      }*/
+    },
+    /** 申请流程表单数据提交 */
+    submitForm(flag) {
+      // 根据当前任务或者流程设计配置的下一步节点 todo 暂时未涉及到考虑网关、表达式和多节点情况
+      const params = {taskId: this.taskForm.taskId}
+      getNextFlowNode(params).then(res => {
+        /*const data = res.data;
+        this.taskForm.formData = formData;
+        if (data) {
+          if (data.dataType === 'dynamic') {
+            if (data.type === 'assignee') { // 指定人员
+              this.checkSendUser = true;
+              this.checkType = "single";
+            } else if (data.type === 'candidateUsers') {  // 候选人员(多个)
+              this.checkSendUser = true;
+              this.checkType = "multiple";
+            } else if (data.type === 'candidateGroups') { // 指定组(所属角色接收任务)
+              this.checkSendRole = true;
+            } else { // 会签
+              // 流程设计指定的 elementVariable 作为会签人员列表
+              this.multiInstanceVars = data.vars;
+              this.checkSendUser = true;
+              this.checkType = "multiple";
+            }
+          }
+        }
+        this.completeOpen = true;
+        this.completeTitle = "流程审批";*/
+        this.$refs.vFormRef.getFormData().then(formData => {
+          formData.auditPass=flag;
+          Object.assign(this.taskForm.variables, formData);
+          this.taskForm.variables.formJson = this.formJson;
+          console.log(this.taskForm, "流程审批提交表单数据1")
+        }).catch(error => {
+          // this.$modal.msgError(error)
+        })
+        const data = res.data;
+        if (data) {
+          if (data.dataType === 'dynamic') {
+            if (data.type === 'assignee') { // 指定人员
+              this.checkSendUser = true;
+              this.checkType = "single";
+            } else if (data.type === 'candidateUsers') {  // 候选人员(多个)
+              this.checkSendUser = true;
+              this.checkType = "multiple";
+            } else if (data.type === 'candidateGroups') { // 指定组(所属角色接收任务)
+              this.checkSendRole = true;
+            } else { // 会签
+              // 流程设计指定的 elementVariable 作为会签人员列表
+              this.multiInstanceVars = data.vars;
+              this.checkSendUser = true;
+              this.checkType = "multiple";
+            }
+          }
+        }
+      })
+    },
+
+  },
+};
+</script>
+<style lang="scss" scoped>
+.auditWrapper {
+  padding: 20px 0;
+  width: 92%;
+  margin: 0 auto;
+  .section1 {
+    p {
+      font-size: 24px;
+      font-weight: bold;
+      margin: 0;
+    }
+    > div:first-child {
+      // width: calc(100% - 700px);
+      width: 100%;
+    }
+    .btnList {
+      width: 700px;
+      display: flex;
+      justify-content: flex-end;
+    }
+  }
+  .basicsInfo {
+    font-size: 14px;
+    background: #f1f1f1;
+    margin-top: -24px;
+    width: 100%;
+    padding: 30px 20px 10px;
+    div {
+      color: #7e7d7d;
+    }
+    p {
+      font-size: 16px;
+      color: #333;
+      font-weight: bold;
+    }
+  }
+  .section3 {
+    margin-top: 40px;
+    .el-form-item {
+      width: 100%; /* 让表单占满父容器 */
+      min-width: 600px; /* 防止过小(可选) */
+    }
+    .special-el-form {
+      margin-left: 0px;
+      width: 100%;
+    }
+
+  }
+
+}
+
+</style>

File diff suppressed because it is too large
+ 1031 - 0
ruoyi-ui/src/views/project/investOpp/edit.vue


File diff suppressed because it is too large
+ 1050 - 0
ruoyi-ui/src/views/project/investOpp/myTask.vue


File diff suppressed because it is too large
+ 1029 - 0
ruoyi-ui/src/views/project/poolForm.vue