projectList.vue 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173
  1. <template>
  2. <div class="app-container">
  3. <el-form
  4. v-if="type !== '2'"
  5. :model="queryParams"
  6. ref="queryForm"
  7. size="small"
  8. :inline="true"
  9. v-show="showSearch"
  10. label-width="90px"
  11. style="margin-left: -22px"
  12. >
  13. <el-form-item label="项目名称" prop="projectName">
  14. <el-input
  15. v-model.trim="queryParams.projectName"
  16. placeholder="请输入项目名称"
  17. clearable
  18. @keyup.enter.native="handleQuery"
  19. />
  20. </el-form-item>
  21. <el-form-item label="项目负责人" prop="investHead">
  22. <el-input
  23. v-model.trim="queryParams.investHead"
  24. placeholder="请输入项目负责人"
  25. clearable
  26. @keyup.enter.native="handleQuery"
  27. />
  28. </el-form-item>
  29. <el-form-item label="公司联系人" prop="projectContacts">
  30. <el-input
  31. v-model.trim="queryParams.projectContacts"
  32. placeholder="请输入公司联系人"
  33. clearable
  34. @keyup.enter.native="handleQuery"
  35. />
  36. </el-form-item>
  37. <el-form-item label="渠道" prop="channel">
  38. <el-select v-model="queryParams.channel" placeholder="全部" clearable>
  39. <el-option
  40. v-for="item in channelList"
  41. :key="item.id"
  42. :label="item.channelName"
  43. :value="item.id"
  44. />
  45. </el-select>
  46. </el-form-item>
  47. <el-form-item label="所属组别" prop="projectGroup">
  48. <el-select
  49. v-model="queryParams.projectGroup"
  50. placeholder="全部"
  51. clearable
  52. >
  53. <el-option
  54. v-for="dict in dict.type.project_group"
  55. :key="dict.value"
  56. :label="dict.label"
  57. :value="dict.value"
  58. />
  59. </el-select>
  60. </el-form-item>
  61. <el-form-item label="项目公司" prop="company">
  62. <el-input
  63. v-model.trim="queryParams.company"
  64. placeholder="请输入项目所属公司"
  65. clearable
  66. @keyup.enter.native="handleQuery"
  67. />
  68. </el-form-item>
  69. <el-form-item class="searchWrapper">
  70. <el-button
  71. type="primary"
  72. icon="el-icon-search"
  73. size="mini"
  74. @click="handleQuery"
  75. >搜索</el-button
  76. >
  77. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
  78. >重置</el-button
  79. >
  80. </el-form-item>
  81. </el-form>
  82. <el-row
  83. :gutter="10"
  84. class="mb8"
  85. v-if="type === '2' && stage == '4' ? false : true"
  86. >
  87. <el-col :span="1.5">
  88. <el-button
  89. v-if="type === '1' && stage == '1'"
  90. type="primary"
  91. plain
  92. icon="el-icon-plus"
  93. size="mini"
  94. @click="handleAdd"
  95. v-hasPermi="['invest:pool:add']"
  96. >新增</el-button
  97. >
  98. </el-col>
  99. <el-col :span="1.5">
  100. <el-button
  101. :disabled="multiple"
  102. plain
  103. type="success"
  104. v-if="stage === '1'"
  105. size="mini"
  106. icon="el-icon-edit"
  107. @click="handleSelectData(1)"
  108. v-hasPermi="['invest:pool:edit']"
  109. >修改</el-button
  110. >
  111. </el-col>
  112. <el-col :span="1.5">
  113. <el-button
  114. :disabled="multiple"
  115. plain
  116. type="primary"
  117. size="mini"
  118. icon="el-icon-edit"
  119. v-if="stage === '2'"
  120. @click="handleSelectData(5)"
  121. v-hasPermi="['invest:pool:assess']"
  122. >上传评估意见</el-button
  123. >
  124. </el-col>
  125. <el-col :span="1.5">
  126. <el-button
  127. plain
  128. :disabled="multiple"
  129. type="warning"
  130. v-if="stage == '3'"
  131. size="mini"
  132. icon="el-icon-document"
  133. @click="handleSelectData(6)"
  134. v-hasPermi="['invest:pool:lx:apply']"
  135. >立项申请</el-button
  136. >
  137. </el-col>
  138. <el-col :span="1.5">
  139. <el-button
  140. plain
  141. :disabled="multiple"
  142. type="warning"
  143. v-if="stage == '3'"
  144. size="mini"
  145. icon="el-icon-chat-line-round"
  146. @click="handleSelectData(7, 'LX')"
  147. v-hasPermi="['invest:pool:lx:meeting']"
  148. >发起立项会议</el-button
  149. >
  150. </el-col>
  151. <el-col :span="1.5">
  152. <el-button
  153. plain
  154. :disabled="multiple"
  155. type="primary"
  156. v-if="stage == '3'"
  157. size="mini"
  158. icon="el-icon-document-checked"
  159. @click="handleSelectData(8)"
  160. >上传打分表</el-button
  161. >
  162. </el-col>
  163. <el-col :span="1.5">
  164. <el-button
  165. plain
  166. :disabled="multiple"
  167. type="warning"
  168. v-if="stage == '4'"
  169. size="mini"
  170. icon="el-icon-tickets"
  171. @click="handleSelectData(9)"
  172. v-hasPermi="['invest:pool:due']"
  173. >尽调申请</el-button
  174. >
  175. </el-col>
  176. <el-col :span="1.5">
  177. <el-button
  178. plain
  179. :disabled="multiple"
  180. type="primary"
  181. v-if="stage == '4'"
  182. size="mini"
  183. icon="el-icon-document-checked"
  184. @click="handleSelectData(10)"
  185. >上传尽调报告</el-button
  186. >
  187. </el-col>
  188. <el-col :span="1.5">
  189. <el-button
  190. plain
  191. :disabled="multiple"
  192. type="warning"
  193. v-if="stage == '5'"
  194. size="mini"
  195. icon="el-icon-document"
  196. @click="handleSelectData(11)"
  197. v-hasPermi="['invest:pool:tj:apply']"
  198. >投决申请</el-button
  199. >
  200. </el-col>
  201. <el-col :span="1.5">
  202. <el-button
  203. plain
  204. :disabled="multiple"
  205. type="warning"
  206. v-if="stage == '5'"
  207. size="mini"
  208. icon="el-icon-chat-line-square"
  209. @click="handleSelectData(12, 'TJ')"
  210. v-hasPermi="['invest:pool:tj:meeting']"
  211. >发起投决会议</el-button
  212. >
  213. </el-col>
  214. <el-col :span="1.5">
  215. <el-button
  216. plain
  217. :disabled="multiple"
  218. type="primary"
  219. v-if="stage == '5'"
  220. size="mini"
  221. icon="el-icon-document-checked"
  222. @click="handleSelectData(13)"
  223. >上传打分表</el-button
  224. >
  225. </el-col>
  226. <el-col :span="1.5">
  227. <el-button
  228. :disabled="multiple"
  229. plain
  230. type="success"
  231. v-if="stage !== '0'"
  232. size="mini"
  233. icon="el-icon-setting"
  234. v-hasPermi="['invest:pool:stage']"
  235. @click="handleSelectData(3)"
  236. >设置项目阶段</el-button
  237. >
  238. </el-col>
  239. <el-col :span="1.5">
  240. <el-button
  241. @click="handleSelectData(4)"
  242. v-if="type === '1' && stage !== '0'"
  243. type="danger"
  244. plain
  245. icon="el-icon-switch-button"
  246. size="mini"
  247. :disabled="multiple"
  248. v-hasPermi="['invest:pool:remove']"
  249. >终止</el-button
  250. >
  251. </el-col>
  252. <el-col :span="1.5">
  253. <el-button
  254. v-if="type === '1' && stage == '0'"
  255. type="warning"
  256. plain
  257. icon="el-icon-download"
  258. size="mini"
  259. @click="handleExport"
  260. v-hasPermi="['invest:pool:export']"
  261. >导出</el-button
  262. >
  263. </el-col>
  264. <right-toolbar
  265. :showSearch.sync="showSearch"
  266. @queryTable="getList"
  267. ></right-toolbar>
  268. </el-row>
  269. <el-table
  270. ref="dataTable"
  271. @row-click="clickRow"
  272. class="tableWrapper"
  273. v-loading="loading"
  274. border
  275. :data="poolList"
  276. @selection-change="handleSelectionChange"
  277. >
  278. <el-table-column type="selection" width="40" align="center" />
  279. <el-table-column
  280. type="index"
  281. label="序号"
  282. width="50"
  283. align="center"
  284. ></el-table-column>
  285. <!-- <el-table-column label="主键id" align="center" prop="id" /> -->
  286. <el-table-column label="项目名称" align="center" prop="projectName">
  287. <template slot-scope="scope">
  288. <div
  289. :title="scope.row.projectName"
  290. class="public-text-blue public-cursor"
  291. @click="handleDetail(scope.row)"
  292. >
  293. {{ scope.row.projectName }}
  294. </div>
  295. </template>
  296. </el-table-column>
  297. <el-table-column
  298. label="公司名称"
  299. align="center"
  300. prop="tProjectCompany.companyName"
  301. >
  302. <template slot-scope="scope">
  303. <div :title="scope.row.tProjectCompany.companyName">
  304. {{ scope.row.tProjectCompany.companyName }}
  305. </div>
  306. </template>
  307. </el-table-column>
  308. <el-table-column
  309. label="注册地址"
  310. align="center"
  311. prop="tProjectCompany.registeredAddress"
  312. >
  313. <template slot-scope="scope">
  314. <div :title="scope.row.tProjectCompany.registeredAddress">
  315. {{ scope.row.tProjectCompany.registeredAddress }}
  316. </div>
  317. </template>
  318. </el-table-column>
  319. <el-table-column label="项目所属行业" align="center" prop="industry"
  320. ><template slot-scope="scope">
  321. <dict-tag
  322. :options="dict.type.CUSTOMER_TRADE"
  323. :value="scope.row.industry"
  324. />
  325. </template>
  326. </el-table-column>
  327. <el-table-column label="项目阶段" align="center" prop="projectStage">
  328. <template slot-scope="scope">
  329. <dict-tag
  330. :options="dict.type.project_stage"
  331. :value="scope.row.projectStage"
  332. />
  333. </template>
  334. </el-table-column>
  335. <el-table-column label="项目状态" align="center" prop="projectState">
  336. <template slot-scope="scope">
  337. <dict-tag
  338. :options="dict.type.project_state"
  339. :value="scope.row.projectState"
  340. />
  341. </template>
  342. </el-table-column>
  343. <el-table-column label="立项通过日期" align="center" prop="projectDate">
  344. <template slot-scope="scope">
  345. <span>{{ parseTime(scope.row.projectDate, "{y}-{m}-{d}") }}</span>
  346. </template>
  347. </el-table-column>
  348. <el-table-column label="投决通过日期" align="center" prop="decisionDate">
  349. <template slot-scope="scope">
  350. <span>{{ parseTime(scope.row.decisionDate, "{y}-{m}-{d}") }}</span>
  351. </template>
  352. </el-table-column>
  353. <el-table-column label="项目负责人" align="center" prop="investHead">
  354. <template slot-scope="scope">
  355. <div :title="scope.row.investHead">
  356. {{ scope.row.investHead }}
  357. </div>
  358. </template>
  359. </el-table-column>
  360. <!-- <el-table-column label="项目编号" align="center" prop="projectCode" /> -->
  361. <el-table-column
  362. label="渠道"
  363. align="center"
  364. prop="tProjectChannel.channelName"
  365. >
  366. <template slot-scope="scope">
  367. <div v-if="scope.row.tProjectChannel && scope.row.tProjectChannel.channelName" :title="scope.row.tProjectChannel.channelName">
  368. {{ scope.row.tProjectChannel.channelName }}
  369. </div>
  370. </template>
  371. </el-table-column>
  372. <!-- <el-table-column
  373. label="所属组别"
  374. align="center"
  375. prop="tProjectChannel.channelGroup"
  376. >
  377. <template slot-scope="scope">
  378. <dict-tag
  379. :options="dict.type.project_group"
  380. :value="scope.row.tProjectChannel.channelGroup"
  381. />
  382. </template>
  383. </el-table-column> -->
  384. <!-- <el-table-column
  385. label="项目联系人"
  386. align="center"
  387. prop="tProjectContacts.name"
  388. >
  389. <template slot-scope="scope">
  390. <div :title="scope.row.tProjectContacts.name">
  391. {{ scope.row.tProjectContacts.name }}
  392. </div>
  393. </template>
  394. </el-table-column> -->
  395. <!--<el-table-column
  396. label="创建人"
  397. width="120"
  398. align="center"
  399. prop="createBy"
  400. />
  401. <el-table-column
  402. label="创建时间"
  403. align="center"
  404. prop="createTime"
  405. width="160"
  406. /> -->
  407. <!-- delFlag -->
  408. <el-table-column
  409. label="状态"
  410. align="center"
  411. prop="investHead"
  412. width="50px"
  413. >
  414. <template slot-scope="scope">
  415. <div :title="scope.row.delFlag === '1' ? '终止' : '正常'">
  416. {{ scope.row.delFlag === "1" ? "终止" : "正常" }}
  417. </div>
  418. </template>
  419. </el-table-column>
  420. <!-- fixed="right" -->
  421. <el-table-column label="操作" align="center" v-if="false">
  422. <template slot-scope="scope">
  423. <!-- stage//0=全部 1=项目报备 2=评估考察 3=项目立项 4=尽职背调 5=项目投决 -->
  424. <!-- <el-button
  425. class="custom-orange-color"
  426. v-if="stage == '1'"
  427. size="mini"
  428. type="text"
  429. icon="el-icon-thumb"
  430. @click="handlefollowRecord(scope.row)"
  431. >上传跟进记录</el-button> -->
  432. <!-- <el-button
  433. class="custom-orange-color"
  434. v-if="stage == '3' && scope.row.delFlag !== '1'"
  435. size="mini"
  436. type="text"
  437. icon="el-icon-chat-line-round"
  438. @click="handleMeeting(scope.row, 'LX')"
  439. >发起立项会议</el-button
  440. >
  441. <el-button
  442. class="custom-orange-color"
  443. v-if="stage == '5' && scope.row.delFlag !== '1'"
  444. size="mini"
  445. type="text"
  446. icon="el-icon-chat-line-square"
  447. @click="handleMeeting(scope.row, 'TJ')"
  448. >发起投决会议</el-button
  449. >
  450. <el-button
  451. class="custom-orange-color"
  452. v-if="stage == '4' && scope.row.delFlag !== '1'"
  453. size="mini"
  454. type="text"
  455. icon="el-icon-tickets"
  456. @click="handleDropdown($event, scope.row)"
  457. >尽职背调</el-button
  458. >
  459. <el-button
  460. v-if="scope.row.delFlag !== '1' && stage !== '0'"
  461. size="mini"
  462. type="text"
  463. icon="el-icon-setting"
  464. @click="handleBusinessUpdate(scope.row)"
  465. >设置项目阶段</el-button
  466. >
  467. <el-button
  468. v-if="scope.row.delFlag !== '1' && stage !== '0'"
  469. size="mini"
  470. type="text"
  471. icon="el-icon-edit"
  472. @click="handleUpdate(scope.row)"
  473. v-hasPermi="['invest:pool:edit']"
  474. >修改</el-button
  475. >
  476. <el-button
  477. class="custom-blue-color"
  478. size="mini"
  479. type="text"
  480. icon="el-icon-search"
  481. @click="handleDetail(scope.row)"
  482. v-hasPermi="['invest:pool:query']"
  483. >详情</el-button
  484. > -->
  485. <el-button
  486. v-if="scope.row.delFlag !== '1' && stage !== '0'"
  487. class="custom-red-color"
  488. size="mini"
  489. type="text"
  490. icon="el-icon-switch-button"
  491. @click="handleDelete(scope.row)"
  492. v-hasPermi="['invest:pool:remove']"
  493. >终止</el-button
  494. >
  495. </template>
  496. </el-table-column>
  497. </el-table>
  498. <pagination
  499. v-show="total > 0"
  500. :total="total"
  501. :page.sync="queryParams.pageNum"
  502. :limit.sync="queryParams.pageSize"
  503. @pagination="getList"
  504. />
  505. <!-- 设置项目状态对话框 -->
  506. <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
  507. <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  508. <el-form-item label="项目阶段" prop="projectStage">
  509. <el-select
  510. v-model="form.projectStage"
  511. ref="selectLable"
  512. placeholder="请选择项目阶段"
  513. >
  514. <el-option
  515. @click.native="handleProjectSelect(index, dict)"
  516. v-for="(dict, index) in dict.type.project_stage"
  517. :key="dict.value"
  518. :label="dict.label"
  519. :value="dict.value"
  520. />
  521. </el-select>
  522. </el-form-item>
  523. <el-form-item label="项目状态" prop="projectState">
  524. <el-select
  525. ref="selectState"
  526. v-model="form.projectState"
  527. placeholder="请选择项目状态"
  528. >
  529. <el-option
  530. @click.native="handleProjectStateSelect(dict)"
  531. v-for="dict in project_state"
  532. :key="dict.dictValue"
  533. :label="dict.dictLabel"
  534. :value="dict.dictValue"
  535. />
  536. </el-select>
  537. </el-form-item>
  538. <el-form-item
  539. v-if="form.projectState == 'e'"
  540. label="立项通过日期"
  541. prop="projectDate"
  542. :rules="[
  543. { required: verifyProjectDate, trigger: 'blur', message: '请选择' },
  544. ]"
  545. >
  546. <el-date-picker
  547. clearable
  548. v-model="form.projectDate"
  549. type="date"
  550. value-format="yyyy-MM-dd"
  551. placeholder="请选择立项通过日期"
  552. >
  553. </el-date-picker>
  554. </el-form-item>
  555. <el-form-item
  556. v-if="form.projectState == 'i'"
  557. label="投决通过日期"
  558. prop="decisionDate"
  559. :rules="[
  560. {
  561. required: verifyDecisionDate,
  562. trigger: 'blur',
  563. message: '请选择',
  564. },
  565. ]"
  566. >
  567. <el-date-picker
  568. clearable
  569. v-model="form.decisionDate"
  570. type="date"
  571. value-format="yyyy-MM-dd"
  572. placeholder="请选择投决通过日期"
  573. >
  574. </el-date-picker>
  575. </el-form-item>
  576. </el-form>
  577. <div slot="footer" class="dialog-footer">
  578. <el-button type="primary" @click="submitForm" v-preventReClick
  579. >确 定</el-button
  580. >
  581. <el-button @click="cancel">取 消</el-button>
  582. </div>
  583. </el-dialog>
  584. <!-- 上传评估意见对话框 -->
  585. <el-dialog
  586. :title="titleAssess"
  587. :visible.sync="openAssess"
  588. width="800px"
  589. append-to-body
  590. >
  591. <el-form
  592. ref="formAssess"
  593. :model="formAssess"
  594. :rules="rulesAssess"
  595. label-width="120px"
  596. >
  597. <el-form-item label="评估意见" prop="assess">
  598. <el-input
  599. maxlength="200"
  600. rows="4"
  601. type="textarea"
  602. v-model="formAssess.assess"
  603. placeholder="请填写评估意见"
  604. >
  605. </el-input>
  606. </el-form-item>
  607. </el-form>
  608. <div slot="footer" class="dialog-footer">
  609. <el-button type="primary" @click="submitAssessForm" v-preventReClick
  610. >确 定</el-button
  611. >
  612. <el-button @click="openAssess = false">取 消</el-button>
  613. </div>
  614. </el-dialog>
  615. <!-- 尽调组件 -->
  616. <dueDiligenceList
  617. :type="2"
  618. ref="dueDiligenceLists"
  619. :projectId="projectId"
  620. :projectName="form.projectName"
  621. ></dueDiligenceList>
  622. <!-- 跟进记录组件 -->
  623. <followList
  624. :type="'3'"
  625. ref="followList"
  626. :projectId="projectId"
  627. ></followList>
  628. <!-- 会议管理组件 -->
  629. <meetingList
  630. :type="'3'"
  631. ref="meetingList"
  632. :projectId="projectId"
  633. ></meetingList>
  634. </div>
  635. </template>
  636. <script>
  637. import {
  638. listPool,
  639. delPool,
  640. editStage
  641. } from "@/api/invest/pool";
  642. import { selectByFlowKey } from "@/api/flowable/definition";
  643. import { listChannel } from "@/api/invest/channel";
  644. import dueDiligenceList from "./dueDiligenceList";
  645. import followList from "./followList";
  646. import meetingList from "./meetingList";
  647. import { mapGetters } from "vuex";
  648. export default {
  649. props: {
  650. type: {
  651. type: String,
  652. default: "1", //1=显示全部列表 2=显示某项目下的详情列表
  653. },
  654. stage: {
  655. type: String,
  656. default: "0", //0=全部 1=项目报备 2=评估考察 3=项目立项 4=尽职背调 5=项目投决
  657. },
  658. projectId: {
  659. type: String,
  660. },
  661. },
  662. dicts: [
  663. "project_group",
  664. "project_stage",
  665. "project_state",
  666. "CUSTOMER_TRADE",
  667. ],
  668. components: {
  669. dueDiligenceList,
  670. followList,
  671. meetingList,
  672. },
  673. data() {
  674. return {
  675. project_state: [],
  676. rules: {
  677. projectStage: [
  678. { required: true, trigger: "change", message: "请选择项目阶段" },
  679. ],
  680. projectState: [
  681. { required: true, trigger: "change", message: "请选择项目状态" },
  682. ],
  683. },
  684. // 遮罩层
  685. loading: false,
  686. // 选中id数组
  687. ids: [],
  688. idsName: [],
  689. // 非单个禁用
  690. single: true,
  691. // 非多个禁用
  692. multiple: true,
  693. // 选中数组
  694. selectRowList: [],
  695. // 显示搜索条件
  696. showSearch: false,
  697. // 总条数
  698. total: 0,
  699. // 项目池表格数据
  700. poolList: [],
  701. // 弹出层标题
  702. title: "",
  703. // 是否显示弹出层
  704. open: false,
  705. // 查询参数
  706. queryParams: {
  707. id: null,
  708. pageNum: 1,
  709. pageSize: 10,
  710. projectName: null,
  711. projectGroup: null,
  712. projectCode: null,
  713. channel: null,
  714. contactDate: null,
  715. projectDate: null,
  716. decisionDate: null,
  717. industry: null,
  718. company: null,
  719. projectContacts: null,
  720. investHead: null,
  721. previousFinancing: null,
  722. financingStage: null,
  723. financingMoney: null,
  724. financingDate: null,
  725. investValuation: null,
  726. investMoney: null,
  727. investType: null,
  728. investPloy: null,
  729. investWorth: null,
  730. projectStage: null,
  731. projectState: null,
  732. orderByColumn: "createTime",
  733. isAsc: "desc",
  734. createTime: null,
  735. },
  736. form: {
  737. id: null,
  738. projectStage: "",
  739. projectState: "",
  740. stageName: "",
  741. stateName: "",
  742. },
  743. channelList: [],
  744. // 尽职调查表单
  745. surveyForm: {
  746. deploymentId: null,
  747. id: null,
  748. },
  749. isInitiator: false, //是否是发起人
  750. needInitiate: false, //需要发起申请
  751. needUpload: false, //需要上传
  752. dueForm: {
  753. id: null,
  754. investigateName: null,
  755. investigateCode: null,
  756. projectPoolId: null,
  757. investigatePerson: null,
  758. investigatePersonId: null,
  759. investigateCost: null,
  760. describe: null,
  761. remark: null,
  762. delFlag: null,
  763. createBy: null,
  764. createTime: null,
  765. updateBy: null,
  766. updateTime: null,
  767. projectPoolId: null,
  768. projectName: null,
  769. },
  770. verifyProjectDate: false,
  771. verifyDecisionDate: false,
  772. // 上传评估意见
  773. formAssess: {
  774. id: null,
  775. assess: null,
  776. projectPoolId: null,
  777. },
  778. openAssess: false,
  779. titleAssess: "",
  780. rulesAssess: {
  781. assess: [{ required: true, trigger: "blur", message: "请输入" }],
  782. },
  783. };
  784. },
  785. computed: {
  786. ...mapGetters(["user","projectState"]),
  787. },
  788. watch: {
  789. "form.projectState": function (newValue, oldValue) {
  790. // 项目立项通过
  791. if (newValue == "e") {
  792. this.verifyProjectDate = true;
  793. } else {
  794. this.verifyProjectDate = false;
  795. }
  796. // 项目投决通过
  797. if (newValue == "i") {
  798. this.verifyDecisionDate = true;
  799. } else {
  800. this.verifyDecisionDate = false;
  801. }
  802. },
  803. },
  804. created() {},
  805. mounted() {
  806. // 项目阶段
  807. if (this.stage != "0") {
  808. this.queryParams.projectStage = this.stage;
  809. }
  810. // 背调
  811. if (this.stage == "4") {
  812. selectByFlowKey("flow_4aimqsfe").then((response) => {
  813. this.surveyForm = response.data;
  814. });
  815. }
  816. if (this.projectId) {
  817. this.queryParams.id = this.projectId;
  818. }
  819. this.getList();
  820. // 渠道
  821. listChannel({
  822. pageNum: 1,
  823. pageSize: 100,
  824. }).then((response) => {
  825. this.channelList = response.rows;
  826. });
  827. },
  828. activated() {
  829. // 项目阶段
  830. if (this.stage != "0") {
  831. this.queryParams.projectStage = this.stage;
  832. }
  833. this.getList();
  834. },
  835. methods: {
  836. // 下拉框改变
  837. handleProjectSelect(index, dict) {
  838. this.form.projectState = null;
  839. this.project_state = this.projectState[index];
  840. // 给个默认值
  841. this.form.projectState = this.project_state[0].dictValue;
  842. this.form.stateName = this.project_state[0].dictLabel;
  843. if (dict && dict.label) {
  844. this.form.stageName = dict.label;
  845. }
  846. },
  847. handleProjectStateSelect(dict) {
  848. if (dict && dict.dictLabel) {
  849. this.form.stateName = dict.dictLabel;
  850. }
  851. },
  852. /** 查询项目池列表 */
  853. getList() {
  854. this.loading = true;
  855. listPool(this.queryParams).then((response) => {
  856. this.poolList = response.rows;
  857. this.total = response.total;
  858. this.loading = false;
  859. });
  860. },
  861. /** 搜索按钮操作 */
  862. handleQuery() {
  863. this.queryParams.pageNum = 1;
  864. this.getList();
  865. },
  866. /** 重置按钮操作 */
  867. resetQuery() {
  868. this.resetForm("queryForm");
  869. this.queryParams.orderByColumn = "createTime";
  870. this.queryParams.isAsc = "desc";
  871. this.handleQuery();
  872. },
  873. // 多选框选中数据
  874. handleSelectionChange(selection) {
  875. this.ids = selection.map((item) => item.id);
  876. this.idsName = selection.map((item) => item.projectName);
  877. this.single = selection.length !== 1;
  878. this.multiple = !selection.length;
  879. this.selectRowList = selection;
  880. },
  881. clickRow(row) {
  882. this.$refs.dataTable.toggleRowSelection(row);
  883. },
  884. /** 新增按钮操作 */
  885. handleAdd() {
  886. this.$router.push({ path: "/invest/pool/add" });
  887. },
  888. // 上传评估意见
  889. handleAssessPop(row) {
  890. this.resetAssess();
  891. this.openAssess = true;
  892. this.titleAssess = "上传评估意见";
  893. },
  894. handleSelectData(type, otherData) {
  895. // type 1=修改 2=详情 3=设置项目阶段 4=终止 5=上传评估意见
  896. // 6=立项申请 7=发起立项会议 8=上传打分表(立项)
  897. // 9=尽调申请 10=上传尽调报告
  898. // 11=投决申请 12=发起投决会议 13=上传打分表(投决)
  899. if (this.selectRowList.length == 1) {
  900. const row = this.selectRowList[0];
  901. // 项目负责人
  902. if (row.investHead === this.user.nickName) {
  903. if (type === 4) {
  904. if (row.delFlag === "1") {
  905. this.$message({
  906. message: "项目已终止",
  907. duration: 1200,
  908. type: "error",
  909. });
  910. } else {
  911. this.handleDelete(row);
  912. }
  913. } else if (row.delFlag !== "1") {
  914. // 未终止
  915. if (type === 1) {
  916. // 修改
  917. this.handleUpdate(row);
  918. } else if (type === 2) {
  919. // 详情
  920. this.handleDetail(row);
  921. } else if (type === 3) {
  922. // 设置项目阶段
  923. this.handleBusinessUpdate(row);
  924. } else if (type === 5) {
  925. // 上传评估意见
  926. this.handleAssessPop(row);
  927. } else if (type === 6) {
  928. // 立项申请
  929. this.$refs.meetingList.showLXApplyPop(row);
  930. } else if (type === 7) {
  931. // 发起立项会议
  932. this.handleMeeting(row, otherData);
  933. } else if (type === 8) {
  934. // 立项-去打分
  935. this.$refs.meetingList.handleMark(row, "1", false);
  936. } else if (type === 9) {
  937. // 尽调申请
  938. this.handleDropdown("1", row);
  939. } else if (type === 10) {
  940. // 上传尽调报告
  941. this.handleDropdown("3", row);
  942. } else if (type === 11) {
  943. // 投决申请
  944. this.$refs.meetingList.showTJApplyPop(row);
  945. }else if (type === 12) {
  946. // 发起投决会议
  947. this.handleMeeting(row, otherData);
  948. }else if (type === 13) {
  949. // 投决-去打分
  950. this.$refs.meetingList.handleMark(row, "3", false);
  951. }
  952. } else {
  953. this.$message({
  954. message: "无权限",
  955. duration: 1200,
  956. type: "error",
  957. });
  958. }
  959. } else {
  960. this.$message({
  961. message: "无权限",
  962. duration: 1200,
  963. type: "error",
  964. });
  965. }
  966. } else {
  967. this.$message({
  968. message: "只能选择一条数据",
  969. duration: 1200,
  970. type: "warning",
  971. });
  972. }
  973. },
  974. handleDetail(row) {
  975. const id = row.id || this.ids;
  976. this.$router.push({ path: "/invest/pool/detail", query: { id: id } });
  977. },
  978. /** 修改按钮操作 */
  979. handleUpdate(row) {
  980. const id = row.id;
  981. this.$router.push({ path: "/invest/pool/add", query: { id: id } });
  982. },
  983. // 修改业务节点
  984. handleBusinessUpdate(row) {
  985. this.reset();
  986. let index = parseInt(row.projectStage) - 1;
  987. this.handleProjectSelect(index, row);
  988. this.form = row;
  989. this.open = true;
  990. this.title = "设置项目阶段";
  991. setTimeout(() => {
  992. this.form.stageName = this.$refs.selectLable.selected.label;
  993. this.form.stateName = this.$refs.selectState.selected.label;
  994. }, 300);
  995. },
  996. // 发起会议
  997. handleMeeting(row, meetingType) {
  998. this.$store.commit("SET_PROJECTITEMMESSAGE", row);
  999. this.$refs.meetingList.handleAdd(row.id, meetingType);
  1000. },
  1001. // getButtonItem(row) {
  1002. // let that = this;
  1003. // this.needUpload = false;
  1004. // // 是否是发起人
  1005. // this.isInitiator = row.investHead == this.user.nickName;
  1006. // getlistProjectPoolId(row.id).then((response) => {
  1007. // // 是否有尽调报告
  1008. // if (response.tProjectInvestigate) {
  1009. // // 修改尽调申请
  1010. // this.needInitiate = false;
  1011. // this.dueForm = response.tProjectInvestigate;
  1012. // // 如果上传人有 this.user.userId 那么 needUpload=true
  1013. // // 需要上传的人数组
  1014. // let investigatePersonIdList =
  1015. // response.tProjectInvestigate.investigatePersonId.split(",");
  1016. // if (investigatePersonIdList.indexOf(this.user.userId) > -1) {
  1017. // this.needUpload = true;
  1018. // }
  1019. // if (!this.needUpload && !this.isInitiator) {
  1020. // this.$message({
  1021. // message: "暂无更多操作权限",
  1022. // duration: 1200,
  1023. // type: "warning",
  1024. // });
  1025. // }
  1026. // } else {
  1027. // // 发起尽调申请
  1028. // this.needInitiate = true;
  1029. // if (!this.isInitiator) {
  1030. // this.$message({
  1031. // message: "暂无更多操作权限",
  1032. // duration: 1200,
  1033. // type: "warning",
  1034. // });
  1035. // }
  1036. // }
  1037. // });
  1038. // },
  1039. // 发起尽调申请
  1040. handleDropdown(type, row) {
  1041. const id = row.id || this.ids;
  1042. // this.$router.push({
  1043. // path: "/invest/pool/detail",
  1044. // query: { id: id, activeName: "4" },
  1045. // });
  1046. // this.$refs.dueDiligenceLists.getProjectName(row.projectName);
  1047. this.$refs.dueDiligenceLists.handleSurvey(type, row, this.dueForm);
  1048. },
  1049. // 上传跟进记录
  1050. handlefollowRecord(row) {
  1051. this.$store.commit("SET_PROJECTITEMMESSAGE", row);
  1052. // this.$router.push({
  1053. // path: "/resource/record",
  1054. // query: { id: row.id, type: "1" },
  1055. // });
  1056. this.$refs.followList.handleAdd(row.id);
  1057. },
  1058. // 设置项目状态表单重置
  1059. reset() {
  1060. this.form = {
  1061. id: null,
  1062. projectStage: null,
  1063. projectState: null,
  1064. stageName: null,
  1065. stateName: null,
  1066. };
  1067. this.resetForm("form");
  1068. },
  1069. // 设置上传评估意见表单重置
  1070. resetAssess() {
  1071. this.formAssess = {
  1072. id: null,
  1073. assess: null,
  1074. projectPoolId: this.selectRowList[0].id,
  1075. };
  1076. this.resetForm("formAssess");
  1077. },
  1078. /**终止按钮操作 */
  1079. handleDelete(row) {
  1080. const ids = row.id || this.ids;
  1081. const idsName = row.projectName ? row.projectName : this.idsName;
  1082. this.$modal
  1083. .confirm('是否终止"' + idsName + '"项目?')
  1084. .then(function () {
  1085. return delPool(ids);
  1086. })
  1087. .then(() => {
  1088. this.getList();
  1089. this.$modal.msgSuccess("已终止");
  1090. })
  1091. .catch(() => {});
  1092. },
  1093. /** 导出按钮操作 */
  1094. handleExport() {
  1095. this.download(
  1096. "invest/pool/export",
  1097. {
  1098. ...this.queryParams,
  1099. },
  1100. `pool_${new Date().getTime()}.xlsx`
  1101. );
  1102. },
  1103. /** 修改项目状态提交按钮 */
  1104. submitForm() {
  1105. let that = this;
  1106. this.$refs["form"].validate((valid) => {
  1107. if (valid) {
  1108. editStage(this.form).then((response) => {
  1109. that.$modal.msgSuccess("修改成功");
  1110. that.open = false;
  1111. that.getList();
  1112. });
  1113. }
  1114. });
  1115. },
  1116. // 上传评估意见提交
  1117. submitAssessForm() {
  1118. let that = this;
  1119. this.$refs["formAssess"].validate((valid) => {
  1120. if (valid) {
  1121. // editStage(this.formAssess).then((response) => {
  1122. // that.$modal.msgSuccess("提交成功");
  1123. // that.openAssess = false;
  1124. // });
  1125. }
  1126. });
  1127. },
  1128. // 取消按钮
  1129. cancel() {
  1130. this.open = false;
  1131. this.reset();
  1132. },
  1133. },
  1134. };
  1135. </script>
  1136. <style lang="scss" scoped>
  1137. .tableWrapper {
  1138. font-size: 12px;
  1139. color: #000;
  1140. ::v-deep .el-table__header-wrapper th {
  1141. font-size: 12px;
  1142. font-weight: bolder;
  1143. color: #000;
  1144. }
  1145. ::v-deep td.el-table__cell:not(:last-child) div {
  1146. text-overflow: -o-ellipsis-lastline;
  1147. overflow: hidden;
  1148. text-overflow: ellipsis;
  1149. display: -webkit-box;
  1150. -webkit-line-clamp: 1;
  1151. line-clamp: 1;
  1152. -webkit-box-orient: vertical;
  1153. }
  1154. }
  1155. </style>