poolDetail.vue 19 KB

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