poolDetail.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675
  1. <template>
  2. <div class="detailWrapper">
  3. <section class="section1 public-flex">
  4. <div class="public-margin-r-20">
  5. <h4>
  6. 投资项目
  7. <!-- <span class="alreadyStop" v-if="detailInfo.delFlag === '1'"
  8. >已终止</span
  9. >-->
  10. <span class="alreadyStop"
  11. v-if="detailInfo.terminationFlag === '1' && detailInfo.projectStatus !== '1'">
  12. 已发起终止申请
  13. </span>
  14. <span class="alreadyStop"
  15. v-if="detailInfo.projectStatus === '1'">
  16. 已终止
  17. </span>
  18. </h4>
  19. <p class="projectNameTit">{{ detailInfo.projectName }}</p>
  20. </div>
  21. <!-- <div class="btnList">
  22. <el-button
  23. type="primary"
  24. icon="el-icon-upload2"
  25. @click="handleTab('7', 'fileList')"
  26. >上传文件资料</el-button
  27. >
  28. <el-button
  29. type="primary"
  30. icon="el-icon-upload2"
  31. @click="handleTab('8', 'contractList')"
  32. >上传合同</el-button
  33. >
  34. <el-button
  35. v-if="
  36. user.nickName === detailInfo.investHead &&
  37. detailInfo.delFlag !== '1' &&
  38. showDueApply &&
  39. active == 3
  40. "
  41. type="primary"
  42. icon="el-icon-tickets"
  43. @click="handleTab('4', 'dueDiligenceList')"
  44. >发起尽调申请</el-button
  45. >
  46. <el-button
  47. type="primary"
  48. icon="el-icon-plus"
  49. @click="handleTab('2', 'followList')"
  50. >新增跟进记录</el-button
  51. >
  52. <el-button
  53. type="primary"
  54. icon="el-icon-plus"
  55. @click="handleTab('6', 'meetingList')"
  56. >新增会议</el-button
  57. >
  58. </div> -->
  59. </section>
  60. <el-divider></el-divider>
  61. <section>
  62. <!-- :space="200" -->
  63. <el-steps
  64. :active="active"
  65. finish-status="success"
  66. align-center
  67. style="margin-left: -60px"
  68. >
  69. <el-step title="项目机会"></el-step>
  70. <el-step title="评估考察"></el-step>
  71. <el-step title="项目立项"></el-step>
  72. <el-step title="尽职背调"></el-step>
  73. <el-step title="项目投决"></el-step>
  74. <el-step title="签约"></el-step>
  75. <el-step title="投后"></el-step>
  76. </el-steps>
  77. <el-divider></el-divider>
  78. <div
  79. class="public-flex-between basicsInfo"
  80. v-if="detailInfo.projectState != '1'"
  81. >
  82. <div class="public-flex-center-column">
  83. <div>项目公司名称</div>
  84. <p
  85. style="width: 250px; text-align: center"
  86. class="yichu1"
  87. v-if="
  88. detailInfo.tProjectCompany &&
  89. detailInfo.tProjectCompany.companyName
  90. "
  91. >
  92. {{ detailInfo.tProjectCompany.companyName }}
  93. </p>
  94. </div>
  95. <div class="public-flex-center-column">
  96. <div>渠道</div>
  97. <p
  98. v-if="
  99. detailInfo.tProjectChannel &&
  100. detailInfo.tProjectChannel.channelName
  101. "
  102. >
  103. {{ detailInfo.tProjectChannel.channelName }}
  104. </p>
  105. <p v-else>无</p>
  106. </div>
  107. <div class="public-flex-center-column">
  108. <div>项目负责人</div>
  109. <p>{{ detailInfo.investHead }}</p>
  110. </div>
  111. <div class="public-flex-center-column" v-if="detailInfo.projectDate">
  112. <div>立项通过日期</div>
  113. <p>{{ detailInfo.projectDate }}</p>
  114. </div>
  115. <div class="public-flex-center-column" v-if="detailInfo.decisionDate">
  116. <div>投决通过日期</div>
  117. <p>{{ detailInfo.decisionDate }}</p>
  118. </div>
  119. <div class="public-flex-center-column">
  120. <div>投后估值(万元)</div>
  121. <p>{{ detailInfo.investValuation }}</p>
  122. </div>
  123. <div class="public-flex-center-column">
  124. <div>预计投资金额(万元)</div>
  125. <p>{{ detailInfo.investMoney }}</p>
  126. </div>
  127. </div>
  128. </section>
  129. <section class="section3">
  130. <el-tabs v-model="activeName" @tab-click="handleClick">
  131. <el-tab-pane label="活动" name="0"></el-tab-pane>
  132. <el-tab-pane label="项目信息" name="1"></el-tab-pane>
  133. <!-- <el-tab-pane label="评估考察" name="9"></el-tab-pane> -->
  134. <el-tab-pane label="项目立项信息" name="3"></el-tab-pane>
  135. <el-tab-pane label="项目背调信息" name="4"></el-tab-pane>
  136. <el-tab-pane label="项目投决信息" name="5"></el-tab-pane>
  137. <el-tab-pane label="跟进记录" name="2"></el-tab-pane>
  138. <!-- <el-tab-pane label="会议" name="6"></el-tab-pane> -->
  139. <!-- <el-tab-pane label="文件资料" name="7"></el-tab-pane> -->
  140. <!-- <el-tab-pane label="合同" name="8"></el-tab-pane> -->
  141. <!-- <el-tab-pane label="附件" name="9"></el-tab-pane> -->
  142. </el-tabs>
  143. <section>
  144. <div v-if="activeName === '0'">
  145. <el-timeline :reverse="false" class="public-padded-20">
  146. <el-timeline-item
  147. v-for="(activity, index) in activeTimeList"
  148. :key="index"
  149. :timestamp="activity.createTime"
  150. >
  151. {{ activity.createBy }}:{{ activity.stageName }}
  152. </el-timeline-item>
  153. </el-timeline>
  154. </div>
  155. <div v-show="activeName === '1'">
  156. <poolForm :type="type" :id="id" :isShowFlow="true"></poolForm>
  157. </div>
  158. <div v-if="activeName === '2'">
  159. <followList :type="'2'" ref="followList" :projectId="id"></followList>
  160. </div>
  161. <div v-if="activeName === '3'" class="public-padded-20 detail-meeting">
  162. <el-tabs type="border-card">
  163. <el-tab-pane label="项目立项申请表">
  164. <el-form
  165. v-if="formLXApply.id"
  166. class="special-el-form public-padded-t-20"
  167. ref="formLXApply"
  168. :model="formLXApply"
  169. label-width="120px"
  170. >
  171. <el-form-item
  172. label="项目概况"
  173. prop="projectOverview"
  174. class="special-el-form-item"
  175. >
  176. <el-input
  177. rows="4"
  178. type="textarea"
  179. maxlength="200"
  180. v-model="formLXApply.projectOverview"
  181. disabled
  182. />
  183. </el-form-item>
  184. <el-form-item
  185. label="项目亮点"
  186. prop="projectSparkle"
  187. class="special-el-form-item"
  188. >
  189. <el-input
  190. rows="4"
  191. type="textarea"
  192. maxlength="200"
  193. v-model="formLXApply.projectSparkle"
  194. disabled
  195. />
  196. </el-form-item>
  197. <el-form-item label="立项申请报告" prop="listFile" class="special-el-form-item">
  198. <fileItem ref="fileItemLXApply" :id="formLXApply.id" :is-detail="true"></fileItem>
  199. </el-form-item>
  200. <el-form-item label="项目行研报告" prop="industryListFile" class="special-el-form-item">
  201. <fileItem ref="industryFileItem" :id="formLXApply.id" :is-detail="true"></fileItem>
  202. </el-form-item>
  203. <el-form-item label="项目技术报告" prop="technicalListFile" class="special-el-form-item">
  204. <fileItem ref="technicalFileItem" :id="formLXApply.id" :is-detail="true"></fileItem>
  205. </el-form-item>
  206. <el-form-item label="其他附件" prop="otherListFile" class="special-el-form-item">
  207. <fileItem ref="otherFileItem" :id="formLXApply.id" :is-detail="true"></fileItem>
  208. </el-form-item>
  209. </el-form>
  210. <div
  211. v-else
  212. class="public-flex-center public-padded-20"
  213. style="color: #909399"
  214. >
  215. 暂无数据
  216. </div>
  217. </el-tab-pane>
  218. <!-- <el-tab-pane label="项目立项评估评审汇总表">
  219. <tableForm
  220. :formType="2"
  221. ref="approvalTableForm"
  222. :readonly="true"
  223. :showBack="false"
  224. ></tableForm>
  225. </el-tab-pane>-->
  226. </el-tabs>
  227. <section>
  228. <flowBase :procInstId="formLXApply.procInstId" :id="formLXApply.projectPoolId" v-if="formLXApply.procInstId"></flowBase>
  229. </section>
  230. </div>
  231. <div v-if="activeName === '4'">
  232. <!-- 尽职调查 -->
  233. <dueDiligenceList
  234. ref="dueDiligenceLists"
  235. :projectName="detailInfo.projectName"
  236. :projectId="id"
  237. @changeShowDueApply="changeShowDueApply"
  238. ></dueDiligenceList>
  239. </div>
  240. <div v-if="activeName === '5'" class="public-padded-20 detail-meeting">
  241. <el-tabs type="border-card">
  242. <el-tab-pane label="项目投决申请表">
  243. <el-form
  244. v-if="formTJApply.id"
  245. class="special-el-form public-padded-t-20"
  246. ref="formTJApply"
  247. :model="formTJApply"
  248. label-width="120px"
  249. >
  250. <el-form-item
  251. label="股权/其他合作商务条款"
  252. prop="provision"
  253. class="special-el-form-item"
  254. >
  255. <el-input
  256. rows="4"
  257. type="textarea"
  258. maxlength="200"
  259. v-model="formTJApply.provision"
  260. disabled
  261. />
  262. </el-form-item>
  263. <el-form-item
  264. label="投决资料"
  265. prop="listFile"
  266. class="special-el-form-item"
  267. >
  268. <fileItem
  269. ref="fileItemTJApply"
  270. :id="formTJApply.id"
  271. :is-detail="true"
  272. ></fileItem>
  273. </el-form-item>
  274. <!--
  275. <el-form-item
  276. label="通知名单"
  277. prop="participants"
  278. class="special-el-form-item"
  279. >
  280. <el-input
  281. rows="4"
  282. type="textarea"
  283. v-model="formTJApply.participants"
  284. disabled
  285. />
  286. </el-form-item>-->
  287. <el-form-item label="其他附件" prop="otherListFile" class="special-el-form-item">
  288. <fileItem ref="otherFileItem" :id="formTJApply.id" :is-detail="true"></fileItem>
  289. </el-form-item>
  290. </el-form>
  291. <div
  292. v-else
  293. class="public-flex-center public-padded-20"
  294. style="color: #909399"
  295. >
  296. 暂无数据
  297. </div>
  298. </el-tab-pane>
  299. <el-tab-pane label="项目投决评估评审汇总表">
  300. <tableForm
  301. :formType="4"
  302. ref="voteTableForm"
  303. :readonly="true"
  304. :showBack="false"
  305. ></tableForm>
  306. </el-tab-pane>
  307. </el-tabs>
  308. <section>
  309. <flowBase :procInstId="formTJApply.procInstId" :id="formTJApply.projectPoolId" v-if="formTJApply.procInstId"></flowBase>
  310. </section>
  311. </div>
  312. <div v-if="activeName === '6'">
  313. <meetingList
  314. :type="'2'"
  315. ref="meetingList"
  316. :projectId="id"
  317. ></meetingList>
  318. </div>
  319. <!-- <div v-if="activeName === '7'">
  320. <fileList :type="'2'" ref="fileList" :projectId="id"></fileList>
  321. </div> -->
  322. <div v-if="activeName === '8'">
  323. <contractList
  324. :type="'2'"
  325. ref="contractList"
  326. :projectId="id"
  327. ></contractList>
  328. </div>
  329. <div v-if="activeName === '9'">
  330. <el-timeline
  331. :reverse="false"
  332. class="public-padded-20"
  333. v-if="investReviewTimeList.length > 0"
  334. >
  335. <el-timeline-item
  336. v-for="(item, index) in investReviewTimeList"
  337. :key="index"
  338. :timestamp="item.createTime + ' 发表评估考察意见'"
  339. >
  340. {{ item.reviewPerson }}:{{ item.context }}
  341. </el-timeline-item>
  342. </el-timeline>
  343. <div
  344. v-else
  345. class="public-flex-center public-padded-20"
  346. style="color: #909399"
  347. >
  348. 暂无数据
  349. </div>
  350. <!-- 附件 -->
  351. <!-- <listAllfile :projectId="id"></listAllfile> -->
  352. </div>
  353. </section>
  354. </section>
  355. </div>
  356. </template>
  357. <script>
  358. import poolForm from "./poolForm";
  359. import contractList from "../invest/components/contractList";
  360. import fileList from "../invest/components/fileList";
  361. import followList from "../invest/components/followList";
  362. import meetingList from "../invest/components/meetingList";
  363. import projectList from "../invest/components/projectList";
  364. import tableForm from "../invest/components/tableForm";
  365. import listAllfile from "../invest/components/listAllfile";
  366. import dueDiligenceList from "../project/investigate/dueDiligenceList";
  367. import fileItem from "../invest/components/fileItem";
  368. import {
  369. getPool,
  370. listProjectPoolId,
  371. getInvestigatelist,
  372. getInvestReviewList,
  373. } from "@/api/invest/pool";
  374. import {
  375. listMeeting,
  376. listProjectPoolIdNewApproval,
  377. listProjectPoolIdNewDecision,
  378. } from "@/api/invest/meeting";
  379. import { mapGetters } from "vuex";
  380. import flowBase from "./flowBase.vue";
  381. export default {
  382. name: "investPoolDetail",
  383. components: {
  384. flowBase,
  385. poolForm,
  386. contractList,
  387. fileList,
  388. followList,
  389. meetingList,
  390. projectList,
  391. tableForm,
  392. listAllfile,
  393. dueDiligenceList,
  394. fileItem,
  395. },
  396. data() {
  397. return {
  398. showDueApply: false,
  399. meetingId: "0",
  400. activeTimeList: [], //活动
  401. investReviewTimeList: [], //考察评估
  402. type: "2",
  403. id: "",
  404. active: 0,
  405. detailInfo: {
  406. projectName: "",
  407. },
  408. activeName: "0",
  409. activities: [
  410. {
  411. content: "活动按期开始",
  412. timestamp: "2018-04-15",
  413. },
  414. {
  415. content: "通过审核",
  416. timestamp: "2018-04-13",
  417. },
  418. {
  419. content: "创建成功",
  420. timestamp: "2018-04-11",
  421. },
  422. ],
  423. formLXApply: {
  424. id: null,
  425. projectPoolId: null,
  426. projectName: null,
  427. projectOverview: null,
  428. projectSparkle: null,
  429. listFile: null,
  430. participants: null,
  431. participantsId: null,
  432. procInstId:null,
  433. },
  434. formTJApply: {
  435. id: null,
  436. projectPoolId: null,
  437. projectName: null,
  438. provision: null,
  439. listFile: null,
  440. participants: null,
  441. participantsId: null,
  442. procInstId:null
  443. },
  444. isShowFlow: false // 父组件中的变量
  445. };
  446. },
  447. computed: {
  448. ...mapGetters(["user"]),
  449. },
  450. created() {
  451. this.id = this.$route.query.id;
  452. this.getDetail();
  453. this.getListProjectPoolId();
  454. this.getDueList();
  455. if (this.$route.query.activeName) {
  456. this.activeName = this.$route.query.activeName;
  457. }
  458. },
  459. methods: {
  460. /** 查询列表 */
  461. changeShowDueApply(showDueApply) {
  462. this.showDueApply = showDueApply === "1";
  463. },
  464. getDueList() {
  465. // this.loading = true;
  466. let queryParams = {
  467. orderByColumn: "createTime",
  468. isAsc: "desc",
  469. projectPoolId: this.id,
  470. };
  471. getInvestigatelist(queryParams).then((response) => {
  472. let list = response.rows,
  473. showDueApply;
  474. // 如果尽调全部完成,才能显示发起尽调;
  475. if (list && list.length > 0) {
  476. showDueApply = list.every(function (item) {
  477. return item.status === "1";
  478. });
  479. } else {
  480. showDueApply = true;
  481. }
  482. this.showDueApply = showDueApply;
  483. });
  484. },
  485. // 切换tab并且打开新增
  486. // handleTab(activeName, name) {
  487. // this.activeName = activeName.toString();
  488. // this.$store.commit("SET_PROJECTITEMMESSAGE", this.detailInfo);
  489. // setTimeout(() => {
  490. // this.$refs[name].handleAdd(this.id);
  491. // }, 300);
  492. // },
  493. getMettingId(type) {
  494. let queryParams = {
  495. pageNum: 1,
  496. pageSize: 10,
  497. meetingType: type,
  498. orderByColumn: "createTime",
  499. isAsc: "desc",
  500. projectPoolId: this.id,
  501. };
  502. listMeeting(queryParams).then((response) => {
  503. let meetingList = response.rows;
  504. if (meetingList.length > 0) {
  505. let meetingId = meetingList[0].id;
  506. if (type === "LX") {
  507. this.$refs.approvalTableForm.initialize(meetingId);
  508. } else if (type === "TJ") {
  509. this.$refs.voteTableForm.initialize(meetingId);
  510. }
  511. } else {
  512. if (type === "LX") {
  513. this.$refs.approvalTableForm.showNodata();
  514. } else if (type === "TJ") {
  515. this.$refs.voteTableForm.showNodata();
  516. }
  517. }
  518. });
  519. },
  520. handleClick(tab, event) {
  521. let that = this;
  522. if (this.activeName === "0") {
  523. // 活动
  524. this.getListProjectPoolId();
  525. } else if (this.activeName === "1") {
  526. // 项目报备
  527. this.getDetail();
  528. } else if (this.activeName === "9") {
  529. // 考察评估
  530. this.getListInvestReviewList();
  531. } else if (this.activeName === "3") {
  532. // 项目立项
  533. this.getMettingId("LX");
  534. this.getlistProjectPoolIdNewApproval();
  535. } else if (this.activeName === "4") {
  536. // 尽职背调
  537. setTimeout(() => {
  538. this.$refs.dueDiligenceLists.handleShowDetail(this.id);
  539. }, 300);
  540. } else if (this.activeName === "5") {
  541. // 项目投决
  542. this.getMettingId("TJ");
  543. this.getlistProjectPoolIdNewDecision();
  544. }
  545. },
  546. // 获取立项申请
  547. getlistProjectPoolIdNewApproval() {
  548. let that = this;
  549. listProjectPoolIdNewApproval(this.id).then((response) => {
  550. if (response && response.data) {
  551. that.formLXApply = response.data;
  552. setTimeout(() => {
  553. //立项申请报告
  554. this.$refs.fileItemLXApply.handleButton();
  555. this.$refs.fileItemLXApply.fileList = [];
  556. this.$refs.fileItemLXApply.getListFileBusinessId(that.formLXApply.id,"10");
  557. //项目行研报告
  558. this.$refs.industryFileItem.handleButton();
  559. this.$refs.industryFileItem.fileList = [];
  560. this.$refs.industryFileItem.getListFileBusinessId(that.formLXApply.id, "12");
  561. //项目技术报告
  562. this.$refs.technicalFileItem.handleButton();
  563. this.$refs.technicalFileItem.fileList = [];
  564. this.$refs.technicalFileItem.getListFileBusinessId(that.formLXApply.id, "13");
  565. //其他附件
  566. this.$refs.otherFileItem.handleButton();
  567. this.$refs.otherFileItem.fileList = [];
  568. this.$refs.otherFileItem.getListFileBusinessId(that.formLXApply.id, "0");
  569. }, 300);
  570. }
  571. });
  572. },
  573. // 获取投决申请
  574. getlistProjectPoolIdNewDecision() {
  575. let that = this;
  576. listProjectPoolIdNewDecision(this.id).then((response) => {
  577. if (response && response.data) {
  578. that.formTJApply = response.data;
  579. setTimeout(() => {
  580. this.$refs.fileItemTJApply.handleButton();
  581. this.$refs.fileItemTJApply.fileList = [];
  582. this.$refs.fileItemTJApply.getListFileBusinessId(that.formTJApply.id,"11");
  583. //其他附件
  584. this.$refs.otherFileItem.handleButton();
  585. this.$refs.otherFileItem.fileList = [];
  586. this.$refs.otherFileItem.getListFileBusinessId(that.formTJApply.id, "0");
  587. }, 300);
  588. }
  589. });
  590. },
  591. getDetail() {
  592. getPool(this.id).then((response) => {
  593. this.detailInfo = response.data;
  594. // 项目退出完成n
  595. if (response.data.projectState === "n") {
  596. this.active = parseInt(response.data.projectStage);
  597. } else {
  598. this.active = parseInt(response.data.projectStage) - 1;
  599. }
  600. });
  601. },
  602. // 根据项目ID获取项目流转记录---活动
  603. getListProjectPoolId() {
  604. listProjectPoolId(this.id).then((response) => {
  605. this.activeTimeList = response.data;
  606. });
  607. },
  608. // 查询评审记录列表
  609. getListInvestReviewList() {
  610. getInvestReviewList(this.id).then((response) => {
  611. this.investReviewTimeList = response.rows;
  612. });
  613. },
  614. },
  615. };
  616. </script>
  617. <style lang="scss" scoped>
  618. .detailWrapper {
  619. padding: 20px 0;
  620. width: 92%;
  621. margin: 0 auto;
  622. .section1 {
  623. p {
  624. font-size: 24px;
  625. font-weight: bold;
  626. margin: 0;
  627. }
  628. > div:first-child {
  629. // width: calc(100% - 700px);
  630. width: 100%;
  631. }
  632. .btnList {
  633. width: 700px;
  634. display: flex;
  635. justify-content: flex-end;
  636. }
  637. }
  638. .basicsInfo {
  639. font-size: 14px;
  640. background: #f1f1f1;
  641. margin-top: -24px;
  642. width: 100%;
  643. padding: 30px 20px 10px;
  644. div {
  645. color: #7e7d7d;
  646. }
  647. p {
  648. font-size: 16px;
  649. color: #333;
  650. font-weight: bold;
  651. }
  652. }
  653. .section3 {
  654. margin-top: 40px;
  655. }
  656. }
  657. .projectNameTit {
  658. }
  659. .alreadyStop {
  660. font-weight: normal;
  661. font-size: 12px;
  662. background: #ff0000;
  663. color: #fff;
  664. border-radius: 5px;
  665. padding: 5px 10px;
  666. margin-left: 10px;
  667. }
  668. </style>