myTask.vue 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102
  1. <template>
  2. <!-- <div class="app-container">-->
  3. <div>
  4. <el-card shadow="hover">
  5. <!-- 查询表单区域 -->
  6. <el-form :model="queryParams" ref="queryForm" inline>
  7. <el-form-item label="项目名称" prop="projectName">
  8. <el-input
  9. v-model.trim="queryParams.projectName"
  10. placeholder="请输入项目名称"
  11. clearable
  12. @keyup.enter.native="handleQuery"
  13. />
  14. </el-form-item>
  15. <el-form-item label="项目负责人" prop="investHead">
  16. <el-input
  17. v-model.trim="queryParams.investHead"
  18. placeholder="请输入项目负责人"
  19. clearable
  20. @keyup.enter.native="handleQuery"
  21. />
  22. </el-form-item>
  23. <el-form-item label="公司联系人" prop="projectContacts">
  24. <el-input
  25. v-model.trim="queryParams.projectContacts"
  26. placeholder="请输入公司联系人"
  27. clearable
  28. @keyup.enter.native="handleQuery"
  29. />
  30. </el-form-item>
  31. <el-form-item label="渠道" prop="channel">
  32. <el-select v-model="queryParams.channel" placeholder="全部" clearable>
  33. <el-option
  34. v-for="item in channelList"
  35. :key="item.id"
  36. :label="item.channelName"
  37. :value="item.id"
  38. />
  39. <el-option label="无" value="-1" />
  40. </el-select>
  41. </el-form-item>
  42. <el-form-item label="所属组别" prop="projectGroup">
  43. <el-select
  44. v-model="queryParams.projectGroup"
  45. placeholder="全部"
  46. clearable
  47. >
  48. <el-option
  49. v-for="dict in dict.type.project_group"
  50. :key="dict.value"
  51. :label="dict.label"
  52. :value="dict.value"
  53. />
  54. </el-select>
  55. </el-form-item>
  56. <el-form-item label="项目公司" prop="company">
  57. <el-input
  58. v-model.trim="queryParams.company"
  59. placeholder="请输入项目所属公司"
  60. clearable
  61. @keyup.enter.native="handleQuery"
  62. />
  63. </el-form-item>
  64. <!-- 可继续扩展其他查询表单项目,比如项目编号、负责人等 -->
  65. <el-form-item>
  66. <!-- <el-button type="primary" @click="handleQuery">查询</el-button>
  67. <el-button @click="handleReset">重置</el-button>-->
  68. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  69. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  70. </el-form-item>
  71. </el-form>
  72. <!-- Tab 切换区域 -->
  73. <el-tabs v-model="activeTab" type="card" @tab-click="handleTabClick">
  74. <el-tab-pane label="待办任务" name="list1">
  75. <!-- 列表一内容 -->
  76. <el-table
  77. ref="dataTable"
  78. @row-click="clickRow"
  79. class="tableWrapper"
  80. v-loading="loading"
  81. border
  82. :data="myTaskList"
  83. >
  84. <el-table-column type="selection" width="40" align="center" />
  85. <el-table-column
  86. type="index"
  87. label="序号"
  88. width="50"
  89. align="center"
  90. ></el-table-column>
  91. <!-- <el-table-column label="主键id" align="center" prop="id" /> -->
  92. <el-table-column label="项目名称" align="center" prop="projectName">
  93. <template slot-scope="scope">
  94. <div
  95. :title="scope.row.projectName"
  96. class="public-text-blue public-cursor"
  97. @click.stop="handleDetail(scope.row)"
  98. >
  99. {{ scope.row.projectName }}
  100. </div>
  101. </template>
  102. </el-table-column>
  103. <!-- <el-table-column
  104. label="公司名称"
  105. align="center"
  106. prop="tProjectCompany.companyName"
  107. >
  108. <template slot-scope="scope">
  109. <div :title="scope.row.tProjectCompany.companyName">
  110. {{ scope.row.tProjectCompany.companyName }}
  111. </div>
  112. </template>
  113. </el-table-column>
  114. <el-table-column
  115. label="项目所属城市"
  116. align="center"
  117. prop="tProjectCompany.registeredAddress"
  118. >
  119. <template slot-scope="scope">
  120. <div :title="scope.row.tProjectCompany.registeredAddress">
  121. {{ scope.row.tProjectCompany.registeredAddress }}
  122. </div>
  123. </template>
  124. </el-table-column>
  125. -->
  126. <el-table-column label="所属行业" align="center" prop="industry"
  127. ><template slot-scope="scope">
  128. <dict-tag
  129. :options="dict.type.CUSTOMER_TRADE"
  130. :value="scope.row.industry"
  131. />
  132. </template>
  133. </el-table-column>
  134. <el-table-column label="项目阶段" align="center" prop="projectStage">
  135. <template slot-scope="scope">
  136. <dict-tag
  137. :options="dict.type.project_stage"
  138. :value="scope.row.projectStage"
  139. />
  140. </template>
  141. </el-table-column>
  142. <el-table-column
  143. label="项目状态"
  144. align="center"
  145. prop="projectState"
  146. width="120"
  147. >
  148. <template slot-scope="scope">
  149. <dict-tag
  150. :options="dict.type.project_state"
  151. :value="scope.row.projectState"
  152. />
  153. </template>
  154. </el-table-column>
  155. <!--<el-table-column
  156. label="备案时间"
  157. align="center"
  158. prop="tProjectCompany.filingTime"
  159. >
  160. <template slot-scope="scope">
  161. <span>{{
  162. parseTime(scope.row.tProjectCompany.filingTime, "{y}-{m}-{d}")
  163. }}</span>
  164. </template>
  165. </el-table-column>
  166. <el-table-column
  167. label="立项通过日期"
  168. align="center"
  169. prop="projectDate"
  170. >
  171. <template slot-scope="scope">
  172. <span>{{ parseTime(scope.row.projectDate, "{y}-{m}-{d}") }}</span>
  173. </template>
  174. </el-table-column>
  175. <el-table-column
  176. label="投决通过日期"
  177. align="center"
  178. prop="decisionDate"
  179. >
  180. <template slot-scope="scope">
  181. <span>{{ parseTime(scope.row.decisionDate, "{y}-{m}-{d}") }}</span>
  182. </template>
  183. </el-table-column>-->
  184. <el-table-column label="项目负责人" align="center" prop="investHead">
  185. <template slot-scope="scope">
  186. <div :title="scope.row.investHead">
  187. {{ scope.row.investHead }}
  188. </div>
  189. </template>
  190. </el-table-column>
  191. <!-- <el-table-column label="项目编号" align="center" prop="projectCode" /> -->
  192. <!-- <el-table-column
  193. label="渠道"
  194. align="center"
  195. prop="tProjectChannel.channelName"
  196. >
  197. <template slot-scope="scope">
  198. <div
  199. v-if="
  200. scope.row.tProjectChannel && scope.row.tProjectChannel.channelName
  201. "
  202. :title="scope.row.tProjectChannel.channelName"
  203. >
  204. {{ scope.row.tProjectChannel.channelName }}
  205. </div>
  206. </template>
  207. </el-table-column>-->
  208. <!-- <el-table-column
  209. label="所属组别"
  210. align="center"
  211. prop="tProjectChannel.channelGroup"
  212. >
  213. <template slot-scope="scope">
  214. <dict-tag
  215. :options="dict.type.project_group"
  216. :value="scope.row.tProjectChannel.channelGroup"
  217. />
  218. </template>
  219. </el-table-column> -->
  220. <!-- <el-table-column
  221. label="项目联系人"
  222. align="center"
  223. prop="tProjectContacts.name"
  224. >
  225. <template slot-scope="scope">
  226. <div :title="scope.row.tProjectContacts.name">
  227. {{ scope.row.tProjectContacts.name }}
  228. </div>
  229. </template>
  230. </el-table-column> -->
  231. <!--<el-table-column
  232. label="创建人"
  233. width="120"
  234. align="center"
  235. prop="createBy"
  236. />
  237. <el-table-column
  238. label="创建时间"
  239. align="center"
  240. prop="createTime"
  241. width="160"
  242. /> -->
  243. <el-table-column label="项目概况" align="center" prop="projectOverview">
  244. <template slot-scope="scope">
  245. <div :title="scope.row.projectOverview">
  246. {{ scope.row.projectOverview }}
  247. </div>
  248. </template>
  249. </el-table-column>
  250. <el-table-column label="项目亮点" align="center" prop="projectSparkle">
  251. <template slot-scope="scope">
  252. <div :title="scope.row.projectSparkle">
  253. {{ scope.row.projectSparkle }}
  254. </div>
  255. </template>
  256. </el-table-column>
  257. <!-- delFlag -->
  258. <el-table-column label="状态" align="center" prop="delFlag">
  259. <template slot-scope="scope">
  260. <div :title="scope.row.delFlag === '1' ? '终止' : '正常'">
  261. {{ scope.row.delFlag === "1" ? "终止" : "正常" }}
  262. </div>
  263. </template>
  264. </el-table-column>
  265. <el-table-column label="当前节点" align="center" prop="taskName">
  266. <template slot-scope="scope">
  267. <div :title="scope.row.taskName" class="public-text-blue public-cursor" @click="handleReadImage(scope.row)">
  268. {{ scope.row.taskName}}
  269. </div>
  270. </template>
  271. </el-table-column>
  272. <el-table-column label="当前处理人" align="center" prop="assigneeName">
  273. <template slot-scope="scope">
  274. <div :title="scope.row.assigneeName">
  275. {{ scope.row.assigneeName}}
  276. </div>
  277. </template>
  278. </el-table-column>
  279. <!-- fixed="right" -->
  280. <el-table-column label="操作" align="center" width="150" fixed="right" class-name="small-padding fixed-width">
  281. <template slot-scope="scope">
  282. <!-- <el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleDelegate">签收</el-button>&ndash;&gt;
  283. <el-button size="mini" type="text" icon="el-icon-edit-outline" @click="handleProcess(scope.row)">处理</el-button>
  284. <el-button type="text" size="small" @click="handleFlowRecord(scope.row)">详情</el-button>-->
  285. <el-button v-if="scope.row.taskDefKey=='modifyApply'" type="text" @click="handleEdit(scope.row)">处理</el-button>
  286. <template v-else>
  287. <!-- 1. 签收按钮:无签收人时显示 -->
  288. <el-button v-if="!scope.row.assignee" type="primary" size="mini" @click="handleSign(scope.row)">签收</el-button>
  289. <!-- 2. 处理按钮:有签收人时显示 -->
  290. <el-button v-else size="mini" type="text" @click="handleProcess(scope.row)">处理</el-button>
  291. <!-- 3. 撤回按钮:需补充逻辑(比如仅未签收可撤回,可结合 signPerson 判断) -->
  292. <!-- <el-button v-if="!scope.row.assignee" size="mini" type="text" icon="el-icon-refresh-right" @click="handleWithdraw(scope.row)">撤回</el-button>-->
  293. <!-- 4. 详情按钮:一直显示 -->
  294. </template>
  295. <el-button type="text" size="small" @click="handleDetail(scope.row)">详情</el-button>
  296. </template>
  297. </el-table-column>
  298. </el-table>
  299. <!-- 分页 -->
  300. <pagination
  301. v-show="myTaskTotal > 0"
  302. :total="myTaskTotal"
  303. :page.sync="queryParams.pageNum"
  304. :limit.sync="queryParams.pageSize"
  305. @pagination="getMyTaskList"
  306. />
  307. </el-tab-pane>
  308. <el-tab-pane label="已办任务" name="list2">
  309. <!-- 我的单据表格 -->
  310. <!-- 列表一内容 -->
  311. <el-table
  312. ref="dataTable"
  313. @row-click="clickRow"
  314. class="tableWrapper"
  315. v-loading="loading"
  316. border
  317. :data="myDoneTaskList"
  318. >
  319. <el-table-column type="selection" width="40" align="center" />
  320. <el-table-column
  321. type="index"
  322. label="序号"
  323. width="50"
  324. align="center"
  325. ></el-table-column>
  326. <!-- <el-table-column label="主键id" align="center" prop="id" /> -->
  327. <el-table-column label="项目名称" align="center" prop="projectName">
  328. <template slot-scope="scope">
  329. <div
  330. :title="scope.row.projectName"
  331. class="public-text-blue public-cursor"
  332. @click.stop="handleDetail(scope.row)"
  333. >
  334. {{ scope.row.projectName }}
  335. </div>
  336. </template>
  337. </el-table-column>
  338. <!-- <el-table-column
  339. label="公司名称"
  340. align="center"
  341. prop="tProjectCompany.companyName"
  342. >
  343. <template slot-scope="scope">
  344. <div :title="scope.row.tProjectCompany.companyName">
  345. {{ scope.row.tProjectCompany.companyName }}
  346. </div>
  347. </template>
  348. </el-table-column>
  349. <el-table-column
  350. label="项目所属城市"
  351. align="center"
  352. prop="tProjectCompany.registeredAddress"
  353. >
  354. <template slot-scope="scope">
  355. <div :title="scope.row.tProjectCompany.registeredAddress">
  356. {{ scope.row.tProjectCompany.registeredAddress }}
  357. </div>
  358. </template>
  359. </el-table-column>-->
  360. <el-table-column label="所属行业" align="center" prop="industry"
  361. ><template slot-scope="scope">
  362. <dict-tag
  363. :options="dict.type.CUSTOMER_TRADE"
  364. :value="scope.row.industry"
  365. />
  366. </template>
  367. </el-table-column>
  368. <el-table-column label="项目阶段" align="center" prop="projectStage">
  369. <template slot-scope="scope">
  370. <dict-tag
  371. :options="dict.type.project_stage"
  372. :value="scope.row.projectStage"
  373. />
  374. </template>
  375. </el-table-column>
  376. <el-table-column
  377. label="项目状态"
  378. align="center"
  379. prop="projectState"
  380. width="120"
  381. >
  382. <template slot-scope="scope">
  383. <dict-tag
  384. :options="dict.type.project_state"
  385. :value="scope.row.projectState"
  386. />
  387. </template>
  388. </el-table-column>
  389. <!-- <el-table-column
  390. label="备案时间"
  391. align="center"
  392. prop="tProjectCompany.filingTime"
  393. >
  394. <template slot-scope="scope">
  395. <span>{{
  396. parseTime(scope.row.tProjectCompany.filingTime, "{y}-{m}-{d}")
  397. }}</span>
  398. </template>
  399. </el-table-column>
  400. <el-table-column
  401. label="立项通过日期"
  402. align="center"
  403. prop="projectDate"
  404. >
  405. <template slot-scope="scope">
  406. <span>{{ parseTime(scope.row.projectDate, "{y}-{m}-{d}") }}</span>
  407. </template>
  408. </el-table-column>
  409. <el-table-column
  410. label="投决通过日期"
  411. align="center"
  412. prop="decisionDate"
  413. >
  414. <template slot-scope="scope">
  415. <span>{{ parseTime(scope.row.decisionDate, "{y}-{m}-{d}") }}</span>
  416. </template>
  417. </el-table-column>-->
  418. <el-table-column label="项目负责人" align="center" prop="investHead">
  419. <template slot-scope="scope">
  420. <div :title="scope.row.investHead">
  421. {{ scope.row.investHead }}
  422. </div>
  423. </template>
  424. </el-table-column>
  425. <!-- <el-table-column label="项目编号" align="center" prop="projectCode" /> -->
  426. <!-- <el-table-column
  427. label="渠道"
  428. align="center"
  429. prop="tProjectChannel.channelName"
  430. >
  431. <template slot-scope="scope">
  432. <div
  433. v-if="
  434. scope.row.tProjectChannel && scope.row.tProjectChannel.channelName
  435. "
  436. :title="scope.row.tProjectChannel.channelName"
  437. >
  438. {{ scope.row.tProjectChannel.channelName }}
  439. </div>
  440. </template>
  441. </el-table-column>-->
  442. <!-- <el-table-column
  443. label="所属组别"
  444. align="center"
  445. prop="tProjectChannel.channelGroup"
  446. >
  447. <template slot-scope="scope">
  448. <dict-tag
  449. :options="dict.type.project_group"
  450. :value="scope.row.tProjectChannel.channelGroup"
  451. />
  452. </template>
  453. </el-table-column> -->
  454. <!-- <el-table-column
  455. label="项目联系人"
  456. align="center"
  457. prop="tProjectContacts.name"
  458. >
  459. <template slot-scope="scope">
  460. <div :title="scope.row.tProjectContacts.name">
  461. {{ scope.row.tProjectContacts.name }}
  462. </div>
  463. </template>
  464. </el-table-column> -->
  465. <!--<el-table-column
  466. label="创建人"
  467. width="120"
  468. align="center"
  469. prop="createBy"
  470. />
  471. <el-table-column
  472. label="创建时间"
  473. align="center"
  474. prop="createTime"
  475. width="160"
  476. /> -->
  477. <el-table-column label="项目概况" align="center" prop="projectOverview">
  478. <template slot-scope="scope">
  479. <div :title="scope.row.projectOverview">
  480. {{ scope.row.projectOverview }}
  481. </div>
  482. </template>
  483. </el-table-column>
  484. <el-table-column label="项目亮点" align="center" prop="projectSparkle">
  485. <template slot-scope="scope">
  486. <div :title="scope.row.projectSparkle">
  487. {{ scope.row.projectSparkle }}
  488. </div>
  489. </template>
  490. </el-table-column>
  491. <!-- delFlag -->
  492. <el-table-column label="状态" align="center" prop="delFlag">
  493. <template slot-scope="scope">
  494. <div :title="scope.row.delFlag === '1' ? '终止' : '正常'">
  495. {{ scope.row.delFlag === "1" ? "终止" : "正常" }}
  496. </div>
  497. </template>
  498. </el-table-column>
  499. <el-table-column label="当前节点" align="center" prop="taskName">
  500. <template slot-scope="scope">
  501. <div :title="scope.row.taskName" class="public-text-blue public-cursor" @click="handleReadImage(scope.row)">
  502. {{ scope.row.taskName}}
  503. </div>
  504. </template>
  505. </el-table-column>
  506. <el-table-column label="当前处理人" align="center" prop="assigneeName">
  507. <template slot-scope="scope">
  508. <div :title="scope.row.assigneeName">
  509. {{ scope.row.assigneeName}}
  510. </div>
  511. </template>
  512. </el-table-column>
  513. <!-- fixed="right" -->
  514. <el-table-column label="操作" align="center" width="150" fixed="right" class-name="small-padding fixed-width">
  515. <template slot-scope="scope">
  516. <!-- <el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleDelegate">签收</el-button>&ndash;&gt;
  517. <el-button size="mini" type="text" icon="el-icon-edit-outline" @click="handleProcess(scope.row)">处理</el-button>
  518. <el-button type="text" size="small" @click="handleFlowRecord(scope.row)">详情</el-button>-->
  519. <!-- 1. 签收按钮:无签收人时显示 -->
  520. <!-- <el-button v-if="!scope.row.assignee" icon="el-icon-edit-outline" type="primary" size="mini" @click="handleSign(scope.row)">签收</el-button>
  521. &lt;!&ndash; 2. 处理按钮:有签收人时显示 &ndash;&gt;
  522. <el-button v-else size="mini" type="text" icon="el-icon-edit-outline" @click="handleProcess(scope.row)">处理</el-button>
  523. &lt;!&ndash; 3. 撤回按钮:需补充逻辑(比如仅未签收可撤回,可结合 signPerson 判断) &ndash;&gt;
  524. <el-button v-if="!scope.row.assignee" size="mini" type="text" icon="el-icon-refresh-right" @click="handleWithdraw(scope.row)">撤回</el-button>-->
  525. <!-- 4. 详情按钮:一直显示 -->
  526. <el-button type="text" size="small" @click="handleDetail(scope.row)">详情</el-button>
  527. </template>
  528. </el-table-column>
  529. </el-table>
  530. <!-- 分页 -->
  531. <pagination
  532. v-show="myTotal > 0"
  533. :total="myTotal"
  534. :page.sync="queryParams.pageNum"
  535. :limit.sync="queryParams.pageSize"
  536. @pagination="getMyDoneTaskList"
  537. />
  538. </el-tab-pane>
  539. <el-tab-pane label="我的单据" name="list3">
  540. <!-- 我的单据表格 -->
  541. <!-- 列表一内容 -->
  542. <el-table
  543. ref="dataTable"
  544. @row-click="clickRow"
  545. class="tableWrapper"
  546. v-loading="loading"
  547. border
  548. :data="myList"
  549. >
  550. <el-table-column type="selection" width="40" align="center" />
  551. <el-table-column
  552. type="index"
  553. label="序号"
  554. width="50"
  555. align="center"
  556. ></el-table-column>
  557. <!-- <el-table-column label="主键id" align="center" prop="id" /> -->
  558. <el-table-column label="项目名称" align="center" prop="projectName">
  559. <template slot-scope="scope">
  560. <div
  561. :title="scope.row.projectName"
  562. class="public-text-blue public-cursor"
  563. @click.stop="handleDetail(scope.row)"
  564. >
  565. {{ scope.row.projectName }}
  566. </div>
  567. </template>
  568. </el-table-column>
  569. <!-- <el-table-column
  570. label="公司名称"
  571. align="center"
  572. prop="tProjectCompany.companyName"
  573. >
  574. <template slot-scope="scope">
  575. <div :title="scope.row.tProjectCompany.companyName">
  576. {{ scope.row.tProjectCompany.companyName }}
  577. </div>
  578. </template>
  579. </el-table-column>
  580. <el-table-column
  581. label="项目所属城市"
  582. align="center"
  583. prop="tProjectCompany.registeredAddress"
  584. >
  585. <template slot-scope="scope">
  586. <div :title="scope.row.tProjectCompany.registeredAddress">
  587. {{ scope.row.tProjectCompany.registeredAddress }}
  588. </div>
  589. </template>
  590. </el-table-column>-->
  591. <el-table-column label="所属行业" align="center" prop="industry"
  592. ><template slot-scope="scope">
  593. <dict-tag
  594. :options="dict.type.CUSTOMER_TRADE"
  595. :value="scope.row.industry"
  596. />
  597. </template>
  598. </el-table-column>
  599. <el-table-column label="项目阶段" align="center" prop="projectStage">
  600. <template slot-scope="scope">
  601. <dict-tag
  602. :options="dict.type.project_stage"
  603. :value="scope.row.projectStage"
  604. />
  605. </template>
  606. </el-table-column>
  607. <el-table-column
  608. label="项目状态"
  609. align="center"
  610. prop="projectState"
  611. width="120"
  612. >
  613. <template slot-scope="scope">
  614. <dict-tag
  615. :options="dict.type.project_state"
  616. :value="scope.row.projectState"
  617. />
  618. </template>
  619. </el-table-column>
  620. <!-- <el-table-column
  621. label="备案时间"
  622. align="center"
  623. prop="tProjectCompany.filingTime"
  624. >
  625. <template slot-scope="scope">
  626. <span>{{
  627. parseTime(scope.row.tProjectCompany.filingTime, "{y}-{m}-{d}")
  628. }}</span>
  629. </template>
  630. </el-table-column>
  631. <el-table-column
  632. label="立项通过日期"
  633. align="center"
  634. prop="projectDate"
  635. >
  636. <template slot-scope="scope">
  637. <span>{{ parseTime(scope.row.projectDate, "{y}-{m}-{d}") }}</span>
  638. </template>
  639. </el-table-column>
  640. <el-table-column
  641. label="投决通过日期"
  642. align="center"
  643. prop="decisionDate"
  644. >
  645. <template slot-scope="scope">
  646. <span>{{ parseTime(scope.row.decisionDate, "{y}-{m}-{d}") }}</span>
  647. </template>
  648. </el-table-column>-->
  649. <el-table-column label="项目负责人" align="center" prop="investHead">
  650. <template slot-scope="scope">
  651. <div :title="scope.row.investHead">
  652. {{ scope.row.investHead }}
  653. </div>
  654. </template>
  655. </el-table-column>
  656. <!-- <el-table-column label="项目编号" align="center" prop="projectCode" /> -->
  657. <!-- <el-table-column
  658. label="渠道"
  659. align="center"
  660. prop="tProjectChannel.channelName"
  661. >
  662. <template slot-scope="scope">
  663. <div
  664. v-if="
  665. scope.row.tProjectChannel && scope.row.tProjectChannel.channelName
  666. "
  667. :title="scope.row.tProjectChannel.channelName"
  668. >
  669. {{ scope.row.tProjectChannel.channelName }}
  670. </div>
  671. </template>
  672. </el-table-column>-->
  673. <!-- <el-table-column
  674. label="所属组别"
  675. align="center"
  676. prop="tProjectChannel.channelGroup"
  677. >
  678. <template slot-scope="scope">
  679. <dict-tag
  680. :options="dict.type.project_group"
  681. :value="scope.row.tProjectChannel.channelGroup"
  682. />
  683. </template>
  684. </el-table-column> -->
  685. <!-- <el-table-column
  686. label="项目联系人"
  687. align="center"
  688. prop="tProjectContacts.name"
  689. >
  690. <template slot-scope="scope">
  691. <div :title="scope.row.tProjectContacts.name">
  692. {{ scope.row.tProjectContacts.name }}
  693. </div>
  694. </template>
  695. </el-table-column> -->
  696. <!--<el-table-column
  697. label="创建人"
  698. width="120"
  699. align="center"
  700. prop="createBy"
  701. />
  702. <el-table-column
  703. label="创建时间"
  704. align="center"
  705. prop="createTime"
  706. width="160"
  707. /> -->
  708. <el-table-column label="项目概况" align="center" prop="projectOverview">
  709. <template slot-scope="scope">
  710. <div :title="scope.row.projectOverview">
  711. {{ scope.row.projectOverview }}
  712. </div>
  713. </template>
  714. </el-table-column>
  715. <el-table-column label="项目亮点" align="center" prop="projectSparkle">
  716. <template slot-scope="scope">
  717. <div :title="scope.row.projectSparkle">
  718. {{ scope.row.projectSparkle }}
  719. </div>
  720. </template>
  721. </el-table-column>
  722. <!-- delFlag -->
  723. <el-table-column label="状态" align="center" prop="investHead">
  724. <template slot-scope="scope">
  725. <div :title="scope.row.delFlag === '1' ? '终止' : '正常'">
  726. {{ scope.row.delFlag === "1" ? "终止" : "正常" }}
  727. </div>
  728. </template>
  729. </el-table-column>
  730. <el-table-column label="当前节点" align="center" prop="taskName">
  731. <template slot-scope="scope">
  732. <div :title="scope.row.taskName" class="public-text-blue public-cursor" @click="handleReadImage(scope.row)">
  733. {{ scope.row.taskName}}
  734. </div>
  735. </template>
  736. </el-table-column>
  737. <el-table-column label="当前处理人" align="center" prop="assigneeName">
  738. <template slot-scope="scope">
  739. <div :title="scope.row.assigneeName">
  740. {{ scope.row.assigneeName}}
  741. </div>
  742. </template>
  743. </el-table-column>
  744. <!-- fixed="right" -->
  745. <el-table-column label="操作" align="center" width="150" fixed="right" class-name="small-padding fixed-width">
  746. <template slot-scope="scope">
  747. <!-- <el-button icon="el-icon-edit-outline" type="primary" size="mini" @click="handleDelegate">签收</el-button>&ndash;&gt;
  748. <el-button size="mini" type="text" icon="el-icon-edit-outline" @click="handleProcess(scope.row)">处理</el-button>
  749. <el-button type="text" size="small" @click="handleFlowRecord(scope.row)">详情</el-button>-->
  750. <!-- 1. 签收按钮:无签收人时显示 -->
  751. <!-- <el-button v-if="!scope.row.assignee" icon="el-icon-edit-outline" type="primary" size="mini" @click="handleSign(scope.row)">签收</el-button>
  752. &lt;!&ndash; 2. 处理按钮:有签收人时显示 &ndash;&gt;
  753. <el-button v-else size="mini" type="text" icon="el-icon-edit-outline" @click="handleProcess(scope.row)">处理</el-button>
  754. &lt;!&ndash; 3. 撤回按钮:需补充逻辑(比如仅未签收可撤回,可结合 signPerson 判断) &ndash;&gt;
  755. <el-button v-if="!scope.row.assignee" size="mini" type="text" icon="el-icon-refresh-right" @click="handleWithdraw(scope.row)">撤回</el-button>-->
  756. <!-- 4. 详情按钮:一直显示 -->
  757. <el-button type="text" size="small" @click="handleDetail(scope.row)">详情</el-button>
  758. </template>
  759. </el-table-column>
  760. </el-table>
  761. <!-- 分页 -->
  762. <pagination
  763. v-show="myTotal > 0"
  764. :total="myTotal"
  765. :page.sync="queryParams.pageNum"
  766. :limit.sync="queryParams.pageSize"
  767. @pagination="getMyList"
  768. />
  769. </el-tab-pane>
  770. </el-tabs>
  771. </el-card>
  772. <!-- Flowable 流程图弹窗 -->
  773. <!-- 流程图 -->
  774. <el-dialog :title="readImage.title" :visible.sync="readImage.open" width="70%" append-to-body>
  775. <!-- <el-image :src="readImage.src"></el-image> -->
  776. <flow :flowData="flowData"/>
  777. </el-dialog>
  778. </div>
  779. </template>
  780. <script>
  781. import { getMyTaskList,getMyDoneTaskList,getMyList } from "@/api/project/approval/pool";
  782. import { selectByFlowKey,flowXmlAndNode } from "@/api/flowable/definition";
  783. import { listChannel } from "@/api/invest/channel";
  784. import dueDiligenceList from "../../invest/components/dueDiligenceList.vue";
  785. import followList from "../../invest/components/followList.vue";
  786. import meetingList from "../../invest/components/meetingList.vue";
  787. import businessUpdate from "../../invest/components/businessUpdate.vue";
  788. import flow from '@/views/flowable/task/todo/detail/flow';
  789. import { mapGetters } from "vuex";
  790. import pool from "../../invest/pool/index.vue";
  791. export default {
  792. dicts: ["project_group", "project_stage", "project_state", "CUSTOMER_TRADE"],
  793. components: {
  794. dueDiligenceList,
  795. followList,
  796. meetingList,
  797. businessUpdate,
  798. flow
  799. },
  800. data() {
  801. return {
  802. // 当前激活的 Tab
  803. activeTab:"list1",
  804. // 遮罩层
  805. loading: false,
  806. // 查询参数
  807. queryParams: {
  808. id: null,
  809. pageNum: 1,
  810. pageSize: 10,
  811. projectName: null,
  812. projectGroup: "",
  813. projectCode: null,
  814. channel: null,
  815. contactDate: null,
  816. projectDate: null,
  817. decisionDate: null,
  818. industry: null,
  819. company: null,
  820. projectContacts: null,
  821. investHead: null,
  822. previousFinancing: null,
  823. financingStage: null,
  824. financingMoney: null,
  825. financingDate: null,
  826. investValuation: null,
  827. investMoney: null,
  828. investType: null,
  829. investPloy: null,
  830. investWorth: null,
  831. projectStage: null,
  832. projectState: null,
  833. orderByColumn: "createTime",
  834. isAsc: "desc",
  835. createTime: null,
  836. },
  837. // 数据列表(分开存储不同Tab的数据)
  838. myTaskList: [], // 待办任务数据
  839. // 待办任务总条数,用于分页
  840. myTaskTotal: 0,
  841. myDoneTaskList: [], // 已办任务数据
  842. // 已办任务总条数,用于分页
  843. myDoneTaskTotal: 0,
  844. myList: [], // 我的单据数据
  845. // 我的单据总条数,用于分页
  846. myTotal: 0,
  847. channelList: [], //渠道
  848. //流程图信息
  849. readImage:{
  850. open: false,
  851. src: "",
  852. },
  853. // xml
  854. flowData: {},
  855. };
  856. },
  857. computed: {
  858. ...mapGetters(["user"]),
  859. },
  860. created() {
  861. // 页面初始化时,加载当前激活Tab的数据
  862. this.initTabData();
  863. },
  864. mounted() {
  865. // 渠道
  866. listChannel({
  867. pageNum: 1,
  868. pageSize: 100,
  869. }).then((response) => {
  870. this.channelList = response.rows;
  871. });
  872. },
  873. methods: {
  874. // Tab切换事件处理
  875. handleTabClick(tab) {
  876. // tab为当前点击的Tab对象,tab.name即标识(list1/list2)
  877. this.activeTab = tab.name;
  878. // 根据Tab标识加载对应数据
  879. this.initTabData();
  880. },
  881. // 初始化当前Tab数据(支持传入Tab名,默认用activeTab)
  882. initTabData() {
  883. switch (this.activeTab) {
  884. case "list1":
  885. // 待办任务:调用待办查询方法
  886. this.getMyTaskList();
  887. break;
  888. case "list2":
  889. // 已办任务:调用已办查询方法
  890. this.getMyDoneTaskList();
  891. break;
  892. case "list3":
  893. // 我的单据:调用单据查询方法
  894. this.getMyList();
  895. break;
  896. default:
  897. break;
  898. }
  899. },
  900. // 1. 查询“我的待办任务”数据
  901. getMyTaskList() {
  902. this.loading = true;
  903. // 调用待办任务接口(示例)
  904. getMyTaskList(this.queryParams).then((response) => {
  905. console.log( response.rows);
  906. this.myTaskList = response.rows; // 表格数据
  907. this.myTaskTotal = response.total; // 分页总条数
  908. this.loading = false;
  909. }).catch(() => {
  910. this.loading = false;
  911. });
  912. },
  913. // 2. 查询“我的已办任务”数据
  914. getMyDoneTaskList() {
  915. this.loading = true;
  916. // 调用待办任务接口(示例)
  917. getMyDoneTaskList(this.queryParams).then((response) => {
  918. this.myDoneTaskList = response.rows; // 表格数据
  919. this.myDoneTaskTotal = response.total; // 分页总条数
  920. this.loading = false;
  921. }).catch(() => {
  922. this.loading = false;
  923. });
  924. },
  925. // 3. 查询“我的单据”数据
  926. getMyList() {
  927. this.loading = true;
  928. // 调用我的单据接口(示例)
  929. getMyList(this.queryParams).then((response) => {
  930. this.myList = response.rows;
  931. this.myTotal = response.total;
  932. this.loading = false;
  933. }).catch(() => {
  934. this.loading = false;
  935. });
  936. },
  937. /** 搜索按钮操作 */
  938. handleQuery() {
  939. this.queryParams.pageNum = 1;
  940. this.initTabData();
  941. },
  942. /** 重置按钮操作 */
  943. resetQuery() {
  944. this.resetForm("queryForm");
  945. this.queryParams.orderByColumn = "createTime";
  946. this.queryParams.isAsc = "desc";
  947. this.queryParams.pageNum = 1;
  948. this.queryParams.pageSize = 10;
  949. this.handleQuery();
  950. },
  951. clickRow(row) {
  952. this.$refs.dataTable.toggleRowSelection(row);
  953. },
  954. // 跳转到处理页面(暂存节点页面)
  955. handleEdit(row){
  956. const id = row.id || this.ids;
  957. const poolId=row.projectPoolId;
  958. const pInstId=row.procInstId;
  959. const taskId=row.taskId;
  960. this.$router.push({ path: "/project/approval/edit", query: { id: poolId , pInstId: pInstId , taskId:taskId} });
  961. },
  962. // 签收操作
  963. handleSign(row) {
  964. // 标记签收人、更新状态等逻辑
  965. row.signPerson = '当前用户';
  966. this.$message.success('签收成功');
  967. },
  968. // 跳转到处理页面
  969. handleProcess(row){
  970. /*this.$router.push({ path: '/flowable/task/todo/detail/index',
  971. query: {
  972. procInsId: row.procInsId,
  973. executionId: row.executionId,
  974. deployId: row.deployId,
  975. taskId: row.taskId,
  976. taskName: row.taskName,
  977. startUser: row.startUserName + '-' + row.startDeptName,
  978. }})*/
  979. const id = row.id || this.ids;
  980. const poolId=row.projectPoolId;
  981. const pInstId=row.procInstId;
  982. const taskId=row.taskId;
  983. this.$store.commit("SET_PROJECTITEMMESSAGE", row);
  984. this.$router.push({ path: "/project/approval/audit", query: { id:poolId , pInstId: pInstId ,taskId:taskId} });
  985. },
  986. // 撤回操作
  987. handleWithdraw(row) {
  988. // 撤回逻辑(比如清空签收人)
  989. row.signPerson = '';
  990. this.$message.success('已撤回');
  991. },
  992. // 详情操作
  993. /*handleFlowRecord(row) {
  994. // 查看流程详情逻辑
  995. console.log('流程详情:', row);
  996. }*/
  997. /*详情*/
  998. handleDetail(row) {
  999. const id = row.id || this.ids;
  1000. const poolId=row.projectPoolId;
  1001. const pInstId=row.procInstId;
  1002. this.$router.push({ path: "/project/approval/detail", query: { id: poolId , pInstId: pInstId } });
  1003. },
  1004. /** 修改按钮操作 */
  1005. handleUpdate(row) {
  1006. const id = row.id;
  1007. this.$router.push({ path: "/invest/pool/add", query: { id: id } });
  1008. },
  1009. /**终止按钮操作 */
  1010. handleDelete(row) {
  1011. const ids = row.id || this.ids;
  1012. const idsName = row.projectName ? row.projectName : this.idsName;
  1013. this.$modal
  1014. .confirm('是否终止"' + idsName + '"项目?')
  1015. .then(function () {
  1016. return delPool(ids);
  1017. })
  1018. .then(() => {
  1019. this.getList();
  1020. this.$modal.msgSuccess("已终止");
  1021. })
  1022. .catch(() => {});
  1023. },
  1024. /** 导出按钮操作 */
  1025. handleExport() {
  1026. this.download(
  1027. "invest/pool/export",
  1028. {
  1029. ...this.queryParams,
  1030. },
  1031. `pool_${new Date().getTime()}.xlsx`
  1032. );
  1033. },
  1034. /** 流程图查看 */
  1035. handleReadImage(row){
  1036. this.readImage.title = "流程图";
  1037. this.readImage.open = true;
  1038. console.log(row)
  1039. // this.readImage.src = process.env.VUE_APP_BASE_API + "/flowable/definition/readImage/" + deploymentId;
  1040. flowXmlAndNode({procInsId: row.procInstId,deployId:row.deployId}).then(res => {
  1041. this.flowData = res.data;
  1042. })
  1043. },
  1044. },
  1045. };
  1046. </script>
  1047. <style lang="scss" scoped>
  1048. .tableWrapper {
  1049. font-size: 12px;
  1050. color: #000;
  1051. ::v-deep .el-table__header-wrapper th {
  1052. font-size: 12px;
  1053. font-weight: bolder;
  1054. color: #000;
  1055. }
  1056. ::v-deep td.el-table__cell:not(:last-child) div {
  1057. text-overflow: -o-ellipsis-lastline;
  1058. overflow: hidden;
  1059. text-overflow: ellipsis;
  1060. display: -webkit-box;
  1061. -webkit-line-clamp: 1;
  1062. line-clamp: 1;
  1063. -webkit-box-orient: vertical;
  1064. }
  1065. }
  1066. /**找到表头那一行,然后把里面的复选框隐藏掉**/
  1067. .hideHeaderCheckBox
  1068. ::v-deep
  1069. .el-table__header-wrapper
  1070. .el-table__header
  1071. .el-checkbox {
  1072. display: none;
  1073. }
  1074. </style>