task-review.vue 72 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558
  1. <template>
  2. <hc-new-dialog
  3. v-model="isShow"
  4. is-table
  5. widths="96%"
  6. title="任务审核"
  7. @close="cancelClick"
  8. >
  9. <template #header="{ titleId, titleClass }">
  10. <div class="hc-card-header flex items-center">
  11. <div :id="titleId" :class="titleClass">
  12. 任务审核 【已开启电签】
  13. </div>
  14. </div>
  15. </template>
  16. <div v-loading="isLoading" class="relative h-full">
  17. <div class="hc-task-name relative">
  18. {{ rowInfo.taskName }} 审批信息
  19. </div>
  20. <div class="hc-task-body relative flex">
  21. <div class="hc-task-time">
  22. <hc-body class="hc-task-body-card" padding="10px" scrollbar>
  23. <el-timeline
  24. v-if="rowInfo.fixedFlowId == null"
  25. class="hc-time-line"
  26. >
  27. <template
  28. v-for="(item, index) in flowList"
  29. :key="index"
  30. >
  31. <el-timeline-item
  32. :class="
  33. item.status === '2'
  34. ? 'success'
  35. : 'primary'
  36. "
  37. size="large"
  38. >
  39. <div class="timeline-item-icon">
  40. <hc-icon
  41. v-if="item.status === '2'"
  42. class="check-icon"
  43. name="check"
  44. />
  45. </div>
  46. <div class="reply-name">
  47. {{ item.name }}
  48. </div>
  49. <div class="reply-time">
  50. {{ item.date }}
  51. </div>
  52. <div
  53. class="reply-content"
  54. v-html="item.flowValue"
  55. />
  56. </el-timeline-item>
  57. </template>
  58. </el-timeline>
  59. <el-timeline v-else class="hc-time-line">
  60. <template
  61. v-for="(item, index) in flowListTask"
  62. :key="index"
  63. >
  64. <el-timeline-item
  65. :class="
  66. item.status == '2'
  67. ? 'success'
  68. : 'primary'
  69. "
  70. size="large"
  71. >
  72. <div class="timeline-item-icon">
  73. <hc-icon
  74. v-if="item.status == '2'"
  75. class="check-icon"
  76. name="check"
  77. />
  78. </div>
  79. <div v-if="!item.isTask" class="reply-name">
  80. {{ item.name }}
  81. </div>
  82. <div v-if="item.isTask">
  83. <div class="reply-name">
  84. {{ item.name }}
  85. <hc-icon
  86. v-if="item.type == 2"
  87. name="links"
  88. class="ml-2"
  89. />
  90. <hc-icon
  91. v-if="item.type == 1"
  92. name="exchange-2"
  93. class="ml-2"
  94. />
  95. <br>
  96. <el-tooltip
  97. placement="right"
  98. effect="light"
  99. :visible="
  100. item.taskDetailvisible
  101. "
  102. >
  103. <template #content>
  104. <el-timeline
  105. class="hc-time-line"
  106. >
  107. <template
  108. v-for="(
  109. item1, index1
  110. ) in item.userList"
  111. :key="index1"
  112. >
  113. <el-timeline-item
  114. :class="
  115. item1.status
  116. === '2'
  117. ? 'success'
  118. : 'primary'
  119. "
  120. size="large"
  121. >
  122. <div
  123. class="timeline-item-icon"
  124. >
  125. <hc-icon
  126. v-if="
  127. item1.status
  128. === '2'
  129. "
  130. class="check-icon"
  131. name="check"
  132. />
  133. </div>
  134. <div
  135. class="reply-name"
  136. >
  137. {{
  138. item1.name
  139. }}
  140. </div>
  141. <div
  142. class="reply-time"
  143. >
  144. {{
  145. item1.date
  146. }}
  147. </div>
  148. <div
  149. class="reply-content"
  150. v-html="
  151. item1.flowValue
  152. "
  153. />
  154. </el-timeline-item>
  155. </template>
  156. </el-timeline>
  157. </template>
  158. <el-link
  159. @mouseenter="
  160. item.taskDetailvisible = true
  161. "
  162. @mouseleave="
  163. item.taskDetailvisible = false
  164. "
  165. >
  166. 点击查看详情
  167. </el-link>
  168. </el-tooltip>
  169. </div>
  170. </div>
  171. <div class="reply-time">
  172. {{ item.date }}
  173. </div>
  174. <div
  175. class="reply-content"
  176. v-html="item.flowValue"
  177. />
  178. </el-timeline-item>
  179. </template>
  180. </el-timeline>
  181. </hc-body>
  182. </div>
  183. <div :id="`hc_task_table_${uuid}`" class="hc-task-table">
  184. <hc-body class="hc-task-body-card" padding="10px">
  185. <div class="hc-task-body-table">
  186. <hc-tab-card
  187. :tabs="tabsData"
  188. :tab-key="tabKey"
  189. @change="tabsChange"
  190. >
  191. <hc-table
  192. v-if="tabKey === '1'"
  193. ref="tableRef"
  194. :column="tableColumn"
  195. :datas="tableData"
  196. :is-stripe="false"
  197. is-new
  198. :index-style="{ width: 60 }"
  199. is-current-row
  200. @row-click="tableRowClick"
  201. >
  202. <template #action="{ row }">
  203. <div
  204. class="hc-task-table-action"
  205. :class="
  206. row.isComment === 1
  207. ? 'is-cur'
  208. : ''
  209. "
  210. @click="rowRemarkClick(row)"
  211. >
  212. <i class="i-iconoir-star-solid" />
  213. </div>
  214. </template>
  215. <template #state="{ row }">
  216. <div class="hc-task-table-state">
  217. <i
  218. v-if="row.status === 1"
  219. class="is-success i-iconoir-check-circle-solid"
  220. />
  221. <i
  222. v-else-if="row.status === 2"
  223. class="is-danger i-iconoir-xmark-circle-solid"
  224. />
  225. <span v-else-if="row.status === 3">审批结束</span>
  226. <i
  227. v-else
  228. class="i-iconoir-help-circle-solid"
  229. />
  230. </div>
  231. </template>
  232. </hc-table>
  233. <div
  234. v-if="tabKey === '2'"
  235. class="hc-task-body-table-form"
  236. >
  237. <template
  238. v-if="
  239. rowInfo.meterType === 1
  240. || rowInfo.meterType === 3
  241. "
  242. >
  243. <div class="title-box">
  244. <div
  245. v-if="
  246. meterApproveOpinion1.projectName
  247. "
  248. class="title"
  249. >
  250. {{
  251. meterApproveOpinion1.projectName
  252. }}
  253. </div>
  254. <div class="text">审批意见</div>
  255. </div>
  256. <!--
  257. <div class="name">计量工程师意见:</div>
  258. <div v-if="meterApproveOpinion1.meterEngineer" class="text-box hc-bt-0">
  259. <div class="content">{{ meterApproveOpinion1.meterEngineer }}</div>
  260. <div v-if="meterApproveOpinion1.meterEngineerUserName" class="sign-name">
  261. <div class="user-name">工程部:{{ meterApproveOpinion1.meterEngineerUserName }}</div>
  262. <div class="user-time">{{ meterApproveOpinion1.meterEngineerTime }}</div>
  263. </div>
  264. </div>
  265. <div v-else class="input hc-bt-0">
  266. <el-input v-model="meterApproveOpinion2.meterEngineer" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" />
  267. </div>
  268. <div class="name hc-bt-0">项目经理意见:</div>
  269. <div v-if="meterApproveOpinion1.projectManager" class="text-box hc-bt-0">
  270. <div class="content">{{ meterApproveOpinion1.projectManager }}</div>
  271. <div v-if="meterApproveOpinion1.projectManagerUserName" class="sign-name">
  272. <div class="user-name">工程部:{{ meterApproveOpinion1.projectManagerUserName }}</div>
  273. <div class="user-time">{{ meterApproveOpinion1.projectManagerTime }}</div>
  274. </div>
  275. </div>
  276. <div v-else class="input hc-bt-0">
  277. <el-input v-model="meterApproveOpinion2.projectManager" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" />
  278. </div>
  279. <div class="name hc-bt-0">合同监理工程师意见:</div>
  280. <div v-if="meterApproveOpinion1.contractSupervisorEngineer" class="text-box hc-bt-0">
  281. <div class="content">{{ meterApproveOpinion1.contractSupervisorEngineer }}</div>
  282. <div v-if="meterApproveOpinion1.contractSupervisorEngineerUserName" class="sign-name">
  283. <div class="user-name">工程部:{{ meterApproveOpinion1.contractSupervisorEngineerUserName }}</div>
  284. <div class="user-time">{{ meterApproveOpinion1.contractSupervisorEngineerTime }}</div>
  285. </div>
  286. </div>
  287. <div v-else class="input hc-bt-0">
  288. <el-input v-model="meterApproveOpinion2.contractSupervisorEngineer" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" />
  289. </div>
  290. <div class="name hc-bt-0">业主代表意见:</div>
  291. <div v-if="meterApproveOpinion1.ownerDelegate" class="text-box hc-bt-0">
  292. <div class="content">{{ meterApproveOpinion1.ownerDelegate }}</div>
  293. <div v-if="meterApproveOpinion1.ownerDelegateUserName" class="sign-name">
  294. <div class="user-name">工程部:{{ meterApproveOpinion1.ownerDelegateUserName }}</div>
  295. <div class="user-time">{{ meterApproveOpinion1.ownerDelegateTime }}</div>
  296. </div>
  297. </div>
  298. <div v-else class="input hc-bt-0">
  299. <el-input v-model="meterApproveOpinion2.ownerDelegate" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" />
  300. </div>
  301. -->
  302. <div class="name">
  303. 总监理工程师意见:
  304. </div>
  305. <div
  306. v-if="
  307. meterApproveOpinion1.chiefSupervisor
  308. "
  309. class="hc-bt-0 text-box"
  310. >
  311. <div class="content">
  312. {{
  313. meterApproveOpinion1.chiefSupervisor
  314. }}
  315. </div>
  316. <div
  317. v-if="
  318. meterApproveOpinion1.chiefSupervisorUserName
  319. "
  320. class="sign-name"
  321. >
  322. <div class="user-name">
  323. {{
  324. meterApproveOpinion1.chiefSupervisorUserName
  325. }}
  326. </div>
  327. <div class="user-time">
  328. {{
  329. meterApproveOpinion1.chiefSupervisorTime
  330. }}
  331. </div>
  332. </div>
  333. </div>
  334. <div v-else class="hc-bt-0 input">
  335. <el-input
  336. v-model="
  337. meterApproveOpinion2.chiefSupervisor
  338. "
  339. :autosize="{
  340. minRows: 2,
  341. maxRows: 4,
  342. }"
  343. type="textarea"
  344. />
  345. </div>
  346. <template
  347. v-if="rowInfo.meterType === 3"
  348. >
  349. <div class="name hc-bt-0">
  350. 监理审核意见:
  351. </div>
  352. <div
  353. v-if="
  354. meterApproveOpinion1.supervisorAudit
  355. && !meterApproveOpinion1.supervisorAuditDefault
  356. "
  357. class="text-box hc-bt-0"
  358. >
  359. <div class="content">
  360. {{
  361. meterApproveOpinion1.supervisorAudit
  362. }}
  363. </div>
  364. <div
  365. v-if="
  366. meterApproveOpinion1.supervisorAuditUserName
  367. "
  368. class="sign-name"
  369. >
  370. <div class="user-name">
  371. {{
  372. meterApproveOpinion1.supervisorAuditUserName
  373. }}
  374. </div>
  375. <div class="user-time">
  376. {{
  377. meterApproveOpinion1.supervisorAuditTime
  378. }}
  379. </div>
  380. </div>
  381. </div>
  382. <div v-else class="input hc-bt-0 textarea-container">
  383. <el-input
  384. v-model="
  385. meterApproveOpinion2.supervisorAudit
  386. "
  387. :autosize="{
  388. minRows: 2,
  389. maxRows: 4,
  390. }"
  391. type="textarea"
  392. />
  393. <div v-if="!meterApproveOpinion1.supervisorAuditDefault" class="suffix-icon">
  394. <span>(不填写默认为拟同意)</span>
  395. </div>
  396. </div>
  397. </template>
  398. <div class="input-box">
  399. <div class="box">
  400. <div class="name hc-bt-0">
  401. 工程建设部意见:
  402. </div>
  403. <div
  404. v-if="
  405. meterApproveOpinion1.projectBuild
  406. && !meterApproveOpinion1.projectBuildDefault
  407. "
  408. class="text-box hc-bt-0"
  409. >
  410. <div class="content">
  411. {{
  412. meterApproveOpinion1.projectBuild
  413. }}
  414. </div>
  415. <div
  416. v-if="
  417. meterApproveOpinion1.projectBuildUserName
  418. "
  419. class="sign-name"
  420. >
  421. <div class="user-name">
  422. {{
  423. meterApproveOpinion1.projectBuildUserName
  424. }}
  425. </div>
  426. <div class="user-time">
  427. {{
  428. meterApproveOpinion1.projectBuildTime
  429. }}
  430. </div>
  431. </div>
  432. </div>
  433. <div
  434. v-else
  435. class="input hc-bt-0 textarea-container"
  436. >
  437. <el-input
  438. v-model="
  439. meterApproveOpinion2.projectBuild
  440. "
  441. :autosize="{
  442. minRows: 2,
  443. maxRows: 4,
  444. }"
  445. type="textarea"
  446. />
  447. <div v-if="!meterApproveOpinion1.projectBuildDefault" class="suffix-icon">
  448. <span>(不填写默认为拟同意)</span>
  449. </div>
  450. </div>
  451. </div>
  452. <div class="box">
  453. <div class="name hc-bt-0 no-b">
  454. 分管领导意见:
  455. </div>
  456. <div
  457. v-if="
  458. meterApproveOpinion1.projectBuildLeader
  459. && !meterApproveOpinion1.projectBuildLeaderDefault
  460. "
  461. class="text-box no-b hc-bt-0"
  462. >
  463. <div class="content">
  464. {{
  465. meterApproveOpinion1.projectBuildLeader
  466. }}
  467. </div>
  468. <div
  469. v-if="
  470. meterApproveOpinion1.projectBuildLeaderUserName
  471. "
  472. class="sign-name"
  473. >
  474. <div class="user-name">
  475. {{
  476. meterApproveOpinion1.projectBuildLeaderUserName
  477. }}
  478. </div>
  479. <div class="user-time">
  480. {{
  481. meterApproveOpinion1.projectBuildLeaderTime
  482. }}
  483. </div>
  484. </div>
  485. </div>
  486. <div
  487. v-else
  488. class="input no-b hc-bt-0 textarea-container"
  489. >
  490. <el-input
  491. v-model="
  492. meterApproveOpinion2.projectBuildLeader
  493. "
  494. :autosize="{
  495. minRows: 2,
  496. maxRows: 4,
  497. }"
  498. type="textarea"
  499. />
  500. <div v-if="!meterApproveOpinion1.projectBuildLeaderDefault" class="suffix-icon">
  501. <span>(不填写默认为拟同意)</span>
  502. </div>
  503. </div>
  504. </div>
  505. </div>
  506. <div
  507. v-if="rowInfo.meterType === 1"
  508. class="input-box"
  509. >
  510. <div class="box">
  511. <div class="name hc-bt-0">
  512. 安全管理部意见:
  513. </div>
  514. <div
  515. v-if="
  516. meterApproveOpinion1.safetyManager
  517. && !meterApproveOpinion1.safetyManagerDefault
  518. "
  519. class="text-box hc-bt-0"
  520. >
  521. <div class="content">
  522. {{
  523. meterApproveOpinion1.safetyManager
  524. }}
  525. </div>
  526. <div
  527. v-if="
  528. meterApproveOpinion1.safetyManagerUserName
  529. "
  530. class="sign-name"
  531. >
  532. <div class="user-name">
  533. {{
  534. meterApproveOpinion1.safetyManagerUserName
  535. }}
  536. </div>
  537. <div class="user-time">
  538. {{
  539. meterApproveOpinion1.safetyManagerTime
  540. }}
  541. </div>
  542. </div>
  543. </div>
  544. <div
  545. v-else
  546. class="input hc-bt-0 textarea-container"
  547. >
  548. <el-input
  549. v-model="
  550. meterApproveOpinion2.safetyManager
  551. "
  552. :autosize="{
  553. minRows: 2,
  554. maxRows: 4,
  555. }"
  556. type="textarea"
  557. />
  558. <div v-if="!meterApproveOpinion1.safetyManagerDefault" class="suffix-icon">
  559. <span>(不填写默认为拟同意)</span>
  560. </div>
  561. </div>
  562. </div>
  563. <div class="box">
  564. <div class="name no-b hc-bt-0">
  565. 分管领导意见:
  566. </div>
  567. <div
  568. v-if="
  569. meterApproveOpinion1.safetyManagerLeader
  570. && !meterApproveOpinion1.safetyManagerLeaderDefault
  571. "
  572. class="text-box no-b hc-bt-0"
  573. >
  574. <div class="content">
  575. {{
  576. meterApproveOpinion1.safetyManagerLeader
  577. }}
  578. </div>
  579. <div
  580. v-if="
  581. meterApproveOpinion1.safetyManagerLeaderUserName
  582. "
  583. class="sign-name"
  584. >
  585. <div class="user-name">
  586. {{
  587. meterApproveOpinion1.safetyManagerLeaderUserName
  588. }}
  589. </div>
  590. <div class="user-time">
  591. {{
  592. meterApproveOpinion1.safetyManagerLeaderTime
  593. }}
  594. </div>
  595. </div>
  596. </div>
  597. <div
  598. v-else
  599. class="input no-b hc-bt-0 textarea-container"
  600. >
  601. <el-input
  602. v-model="
  603. meterApproveOpinion2.safetyManagerLeader
  604. "
  605. :autosize="{
  606. minRows: 2,
  607. maxRows: 4,
  608. }"
  609. type="textarea"
  610. />
  611. <div v-if="!meterApproveOpinion1.safetyManagerLeaderDefault" class="suffix-icon">
  612. <span>(不填写默认为拟同意)</span>
  613. </div>
  614. </div>
  615. </div>
  616. </div>
  617. <div class="input-box">
  618. <div class="box">
  619. <div class="name hc-bt-0">
  620. 合同部意见:
  621. </div>
  622. <div
  623. v-if="
  624. meterApproveOpinion1.contractDept
  625. && !meterApproveOpinion1.contractDeptDefault
  626. "
  627. class="text-box hc-bt-0"
  628. >
  629. <div class="content">
  630. {{
  631. meterApproveOpinion1.contractDept
  632. }}
  633. </div>
  634. <div
  635. v-if="
  636. meterApproveOpinion1.contractDeptUserName
  637. "
  638. class="sign-name"
  639. >
  640. <div class="user-name">
  641. {{
  642. meterApproveOpinion1.contractDeptUserName
  643. }}
  644. </div>
  645. <div class="user-time">
  646. {{
  647. meterApproveOpinion1.contractDeptTime
  648. }}
  649. </div>
  650. </div>
  651. </div>
  652. <div
  653. v-else
  654. class="input hc-bt-0 textarea-container"
  655. >
  656. <el-input
  657. v-model="
  658. meterApproveOpinion2.contractDept
  659. "
  660. :autosize="{
  661. minRows: 2,
  662. maxRows: 4,
  663. }"
  664. type="textarea"
  665. />
  666. <div v-if="!meterApproveOpinion1.contractDeptDefault" class="suffix-icon">
  667. <span>(不填写默认为拟同意)</span>
  668. </div>
  669. </div>
  670. </div>
  671. <div class="box">
  672. <div class="name no-b hc-bt-0">
  673. 分管领导意见:
  674. </div>
  675. <div
  676. v-if="
  677. meterApproveOpinion1.contractDeptLeader
  678. && !meterApproveOpinion1.contractDeptLeaderDefault
  679. "
  680. class="text-box no-b hc-bt-0"
  681. >
  682. <div class="content">
  683. {{
  684. meterApproveOpinion1.contractDeptLeader
  685. }}
  686. </div>
  687. <div
  688. v-if="
  689. meterApproveOpinion1.contractDeptLeaderUserName
  690. "
  691. class="sign-name"
  692. >
  693. <div class="user-name">
  694. {{
  695. meterApproveOpinion1.contractDeptLeaderUserName
  696. }}
  697. </div>
  698. <div class="user-time">
  699. {{
  700. meterApproveOpinion1.contractDeptLeaderTime
  701. }}
  702. </div>
  703. </div>
  704. </div>
  705. <div
  706. v-else
  707. class="input no-b hc-bt-0 textarea-container"
  708. >
  709. <el-input
  710. v-model="
  711. meterApproveOpinion2.contractDeptLeader
  712. "
  713. :autosize="{
  714. minRows: 2,
  715. maxRows: 4,
  716. }"
  717. type="textarea"
  718. />
  719. <div v-if="!meterApproveOpinion1.contractDeptLeaderDefault" class="suffix-icon">
  720. <span>(不填写默认为拟同意)</span>
  721. </div>
  722. </div>
  723. </div>
  724. </div>
  725. <div class="name hc-bt-0">
  726. 总经理意见:
  727. </div>
  728. <div
  729. v-if="
  730. meterApproveOpinion1.generalManager
  731. && !meterApproveOpinion1.generalManagerDefault
  732. "
  733. class="text-box no-b hc-bt-0"
  734. >
  735. <div class="content">
  736. {{
  737. meterApproveOpinion1.generalManager
  738. }}
  739. </div>
  740. <div
  741. v-if="
  742. meterApproveOpinion1.generalManagerUserName
  743. "
  744. class="sign-name"
  745. >
  746. <div class="user-name">
  747. {{
  748. meterApproveOpinion1.generalManagerUserName
  749. }}
  750. </div>
  751. <div class="user-time">
  752. {{
  753. meterApproveOpinion1.generalManagerTime
  754. }}
  755. </div>
  756. </div>
  757. </div>
  758. <div v-else class="input hc-bt-0 textarea-container">
  759. <el-input
  760. v-model="
  761. meterApproveOpinion2.generalManager
  762. "
  763. :autosize="{
  764. minRows: 2,
  765. maxRows: 4,
  766. }"
  767. type="textarea"
  768. />
  769. <div v-if="!meterApproveOpinion1.generalManagerDefault" class="suffix-icon">
  770. <span>(不填写默认为拟同意)</span>
  771. </div>
  772. </div>
  773. <div class="name no-b hc-bt-0">
  774. 董事长意见:
  775. </div>
  776. <div
  777. v-if="
  778. meterApproveOpinion1.chiefExecutive
  779. && !meterApproveOpinion1.chiefExecutiveDefault
  780. "
  781. class="text-box no-b hc-bt-0"
  782. >
  783. <div class="content">
  784. {{
  785. meterApproveOpinion1.chiefExecutive
  786. }}
  787. </div>
  788. <div
  789. v-if="
  790. meterApproveOpinion1.chiefExecutiveUserName
  791. "
  792. class="sign-name"
  793. >
  794. <div class="user-name">
  795. {{
  796. meterApproveOpinion1.chiefExecutiveUserName
  797. }}
  798. </div>
  799. <div class="user-time">
  800. {{
  801. meterApproveOpinion1.chiefExecutiveTime
  802. }}
  803. </div>
  804. </div>
  805. </div>
  806. <div v-else class="input no-b hc-bt-0 textarea-container">
  807. <el-input
  808. v-model="
  809. meterApproveOpinion2.chiefExecutive
  810. "
  811. :autosize="{
  812. minRows: 2,
  813. maxRows: 4,
  814. }"
  815. type="textarea"
  816. />
  817. <div v-if="!meterApproveOpinion1.chiefExecutiveDefault" class="suffix-icon">
  818. <span>(不填写默认为同意)</span>
  819. </div>
  820. </div>
  821. </template>
  822. <template v-else>
  823. <hc-empty />
  824. </template>
  825. </div>
  826. </hc-tab-card>
  827. </div>
  828. <div
  829. v-if="!isNullES(detailInfo.opinionType)"
  830. class="hc-task-body-tip hc-flex h-30px"
  831. >
  832. <span class="mr-14px">施工单位送审金额: {{ submitApprovalMoney }}元</span>
  833. <!-- 183系统显示施工单位送审金额: -->
  834. <span v-if="website.localModel" class="mr-14px">报表实际支付金额:{{ reportAllMoney }}元</span>
  835. <span v-else class="mr-14px">实际支付总金额:{{ reportAllMoney }}元</span>
  836. <span v-if="detailInfo.opinionType != 4">本期审计审核进度款:{{ progressMoney }}元</span>
  837. </div>
  838. </hc-body>
  839. </div>
  840. <div
  841. :id="`hc_task_form_${uuid}`"
  842. class="hc-task-form"
  843. :class="`is-tab-${taskTabsKey}`"
  844. >
  845. <hc-body class="hc-task-body-card" padding="10px" scrollbar>
  846. <HcTaskForm
  847. ref="htmlFormRef"
  848. :table="tableInfo"
  849. :info="rowInfo"
  850. :detail="detailInfo"
  851. :is-edit="tabsKey === 1"
  852. @finish="taskFormFinish"
  853. @tab-tap="taskTabsClick"
  854. />
  855. </hc-body>
  856. </div>
  857. </div>
  858. </div>
  859. <template #footer>
  860. <div class="hc-task-dialog-footer">
  861. <el-button :disabled="tabsKey !== 1" @click="rejectionClick">
  862. 驳回审批
  863. </el-button>
  864. <el-button
  865. v-if="rowInfo.meterType > 0 && rowInfo.meterType <= 3"
  866. type="warning"
  867. :loading="rowViewLoading"
  868. @click="rowViewPdf"
  869. >
  870. 查看报表
  871. </el-button>
  872. <el-button
  873. type="primary"
  874. :loading="confirmLoading"
  875. :disabled="tabsKey !== 1"
  876. @click="confirmClick"
  877. >
  878. 同意审批
  879. </el-button>
  880. </div>
  881. </template>
  882. </hc-new-dialog>
  883. <!-- 批注 -->
  884. <HcTaskNotes
  885. v-model="isNotesShow"
  886. :table="tableNoteInfo"
  887. :info="rowInfo"
  888. :is-edit="tabsKey === 1"
  889. @finish="taskNotesFinish"
  890. />
  891. <!-- 驳回 -->
  892. <HcRepealForm
  893. v-model="isRepealShow"
  894. :info="rowInfo"
  895. @finish="taskRepealFinish"
  896. />
  897. <!-- 短信认证 -->
  898. <HcSmsAuth
  899. :loading="SMSAuthLoading"
  900. :show="SMSAuthShow"
  901. @cancel="SMSAuthCancel"
  902. @confirm="SMSAuthConfirm"
  903. />
  904. </template>
  905. <script setup>
  906. import { nextTick, ref, watch } from 'vue'
  907. import { useAppStore } from '~src/store'
  908. import { toPdfPage } from '~uti/btn-auth'
  909. import HcTaskForm from './task-form.vue'
  910. import HcTaskNotes from './task-notes.vue'
  911. import HcRepealForm from './repeal-form.vue'
  912. import {
  913. arrUnion,
  914. deepClone,
  915. getArrValue,
  916. getObjValue,
  917. getRandom,
  918. isNullES,
  919. } from 'js-fast-way'
  920. import mainApi from '~api/tasks/hc-data'
  921. import dayjs from 'dayjs'
  922. import website from '~src/config'
  923. const props = defineProps({
  924. tabs: {
  925. type: [String, Number],
  926. default: '',
  927. },
  928. row: {
  929. type: Object,
  930. default: () => ({}),
  931. },
  932. })
  933. //事件
  934. const emit = defineEmits(['finish', 'close'])
  935. const uuid = getRandom(4)
  936. const useAppState = useAppStore()
  937. const projectId = ref(useAppState.getProjectId || '')
  938. const contractId = ref(useAppState.getContractId || '')
  939. //双向绑定
  940. // eslint-disable-next-line no-undef
  941. const isShow = defineModel('modelValue', {
  942. default: false,
  943. })
  944. //监听
  945. const tableRef = ref(null)
  946. const tabsKey = ref(Number(props.tabs))
  947. const rowInfo = ref(props.row)
  948. const isOverTask = ref(false)//是否结束任务
  949. watch(
  950. () => [props.tabs, props.row],
  951. ([key, row]) => {
  952. tabsKey.value = Number(key)
  953. rowInfo.value = row
  954. const { taskStatusName } = rowInfo.value
  955. isOverTask.value = taskStatusName === '已审批'
  956. },
  957. {
  958. immediate: true,
  959. deep: true,
  960. },
  961. )
  962. //监听显示
  963. watch(isShow, (val) => {
  964. if (val) {
  965. checkSmsCode()
  966. setTaskInfo()
  967. setSplitRef()
  968. }
  969. })
  970. //初始化设置拖动分割线
  971. const setSplitRef = () => {
  972. //配置参考: https://split.js.org/#/?direction=vertical&snapOffset=0
  973. nextTick(() => {
  974. window.$split(['#hc_task_table_' + uuid, '#hc_task_form_' + uuid], {
  975. sizes: [50, 50],
  976. snapOffset: 0,
  977. minSize: [50, 500],
  978. })
  979. })
  980. }
  981. //设置任务信息
  982. const setTaskInfo = () => {
  983. //meterType:1中间,2材料,3开工,4变更令
  984. const { meterType } = rowInfo.value
  985. if (meterType === 1) {
  986. tableColumn.value = middlepayTableColumn.value
  987. } else if (meterType === 2) {
  988. tableColumn.value = materialTableColumn.value
  989. } else if (meterType === 3) {
  990. tableColumn.value = startWorkTableColumn.value
  991. } else if (meterType === 4) {
  992. tableColumn.value = alterTableColumn.value
  993. } else {
  994. tableColumn.value = []
  995. }
  996. getTableDetail()
  997. }
  998. //获取数据详情
  999. const detailInfo = ref({})
  1000. const reportAllMoney = ref('0')
  1001. const progressMoney = ref('0')
  1002. const meterApproveOpinion1 = ref({})
  1003. const meterApproveOpinion2 = ref({})
  1004. const isLoading = ref(false)
  1005. const submitApprovalMoney = ref('')
  1006. const getTableDetail = async () => {
  1007. isLoading.value = true
  1008. confirmLoading.value = true
  1009. //获取数据
  1010. const { data } = await mainApi.getDetail(rowInfo.value.id)
  1011. const infoData = getObjValue(data)
  1012. const { taskProcessInfo, taskCenterDataInfo } = infoData
  1013. tableData.value = getArrValue(taskCenterDataInfo)
  1014. flowList.value = getArrValue(taskProcessInfo)
  1015. reportAllMoney.value = infoData.reportAllMoney
  1016. progressMoney.value = infoData.progressMoney
  1017. submitApprovalMoney.value = infoData?.submitApprovalMoney
  1018. detailInfo.value = infoData
  1019. if (rowInfo.value?.fixedFlowId) {
  1020. const list = [...flowList.value]
  1021. let firstarr = list.slice(0, 1)
  1022. let taskList = list.slice(1, list.length)
  1023. taskList.forEach((ele) => {
  1024. ele.name = ele.taskBranchName
  1025. ele.status = ele.taskBranchStatus
  1026. ele.type = ele.taskBranchType
  1027. ele.isTask = true
  1028. })
  1029. flowListTask.value = arrUnion(firstarr, taskList)
  1030. }
  1031. //意见信息
  1032. const meterRes = getObjValue(data.meterApproveOpinion)
  1033. meterApproveOpinion2.value = deepClone(meterRes)
  1034. meterApproveOpinion1.value = meterRes
  1035. // if (isOverTask.value) {
  1036. //设置默认值
  1037. // setDefaultOpinion()
  1038. //}
  1039. //默认选中第一行
  1040. let info = {}
  1041. if (tableData.value.length > 0) {
  1042. info = tableData.value[0]
  1043. }
  1044. await nextTick(() => {
  1045. tableInfo.value = info
  1046. tableRef.value?.tableRef?.setCurrentRow(info)
  1047. })
  1048. //关闭加载状态
  1049. isLoading.value = false
  1050. confirmLoading.value = false
  1051. }
  1052. const setDefaultValue = (field, defaultOpinion) => {
  1053. if (isNullES(meterApproveOpinion1.value[field])) {
  1054. meterApproveOpinion2.value[field] = defaultOpinion
  1055. meterApproveOpinion1.value[`${field}Default`] = true
  1056. } else if (meterApproveOpinion1.value[field] === defaultOpinion) {
  1057. meterApproveOpinion1.value[`${field}Default`] = true
  1058. } else {
  1059. meterApproveOpinion1.value[`${field}Default`] = false
  1060. }
  1061. }
  1062. const setDefaultOpinion = () => {
  1063. const defaultOpinion = '拟同意'
  1064. //setDefaultValue('chiefSupervisor', defaultOpinion)
  1065. setDefaultValue('supervisorAudit', defaultOpinion)
  1066. setDefaultValue('projectBuild', defaultOpinion)
  1067. setDefaultValue('projectBuildLeader', defaultOpinion)
  1068. setDefaultValue('safetyManager', defaultOpinion)
  1069. setDefaultValue('safetyManagerLeader', defaultOpinion)
  1070. setDefaultValue('contractDept', defaultOpinion)
  1071. setDefaultValue('contractDeptLeader', defaultOpinion)
  1072. setDefaultValue('generalManager', defaultOpinion)
  1073. // 注意:这里修改为了与其他默认意见一致
  1074. setDefaultValue('chiefExecutive', '同意')
  1075. }
  1076. //流程信息,1待审批,2已审批
  1077. const flowList = ref([])
  1078. //type为1流程审批,type为2是平行审批
  1079. const flowListTask = ref([
  1080. {
  1081. name: 'PCT',
  1082. date: '2024-03-01 09:27:17',
  1083. status: '2',
  1084. flowValue: '上报',
  1085. isTask: false,
  1086. },
  1087. {
  1088. name: '"222"',
  1089. date: '',
  1090. status: '2',
  1091. flowValue: '',
  1092. type: 1,
  1093. isTask: true,
  1094. },
  1095. {
  1096. name: '"111"',
  1097. date: '',
  1098. status: '1',
  1099. flowValue: '',
  1100. type: 2,
  1101. isTask: true,
  1102. },
  1103. ])
  1104. const taskDetailList = ref([])
  1105. //中间计量单的表格数据
  1106. const middlepayTableColumn = ref([
  1107. { key: 'action', name: '批注', width: 45, align: 'center' },
  1108. { key: 'meterNumber', name: '计量单编号' },
  1109. { key: 'meterMoney', name: '计量金额', width: 100 },
  1110. { key: 'engineerDivide', name: '工程划分' },
  1111. {
  1112. key: 'state',
  1113. name: '审批状态',
  1114. fixed: 'right',
  1115. width: 70,
  1116. align: 'center',
  1117. },
  1118. ])
  1119. //开工预付款计量单的表格数据
  1120. const startWorkTableColumn = ref([
  1121. { key: 'action', name: '批注', width: 45, align: 'center' },
  1122. { key: 'periodName', name: '计量期', minWidth: 100, align: 'center' },
  1123. { key: 'businessDate', name: '业务日期', width: 160, align: 'center' },
  1124. { key: 'meterMoney', name: '计量金额', width: 100, align: 'center' },
  1125. {
  1126. key: 'state',
  1127. name: '审批状态',
  1128. fixed: 'right',
  1129. width: 70,
  1130. align: 'center',
  1131. },
  1132. ])
  1133. //变更令的表格数据
  1134. const alterTableColumn = ref([
  1135. { key: 'action', name: '批注', width: 45, align: 'center' },
  1136. { key: 'changeNumber', name: '变更编号', minWidth: 120, align: 'center' },
  1137. { key: 'changeName', name: '变更名称', minWidth: 120, align: 'center' },
  1138. { key: 'changeMoney', name: '变更金额', width: 100, align: 'center' },
  1139. {
  1140. key: 'changeApprovalDate',
  1141. name: '变更批复日期',
  1142. width: 160,
  1143. align: 'center',
  1144. },
  1145. {
  1146. key: 'state',
  1147. name: '审批状态',
  1148. fixed: 'right',
  1149. width: 70,
  1150. align: 'center',
  1151. },
  1152. ])
  1153. //材料计量单的表格数据
  1154. const materialTableColumn = ref([
  1155. { key: 'action', name: '批注', width: 45, align: 'center' },
  1156. { key: 'periodName', name: '计量期', minWidth: 100, align: 'center' },
  1157. {
  1158. key: 'contractMaterialName',
  1159. name: '合同材料',
  1160. minWidth: 120,
  1161. align: 'center',
  1162. },
  1163. {
  1164. key: 'materialArriveNumber',
  1165. name: '材料到场编号',
  1166. width: 120,
  1167. align: 'center',
  1168. },
  1169. { key: 'meterMoney', name: '计量金额', width: 100, align: 'center' },
  1170. {
  1171. key: 'state',
  1172. name: '审批状态',
  1173. fixed: 'right',
  1174. width: 70,
  1175. align: 'center',
  1176. },
  1177. ])
  1178. //表格数据
  1179. const tableColumn = ref([])
  1180. const tableData = ref([])
  1181. //表格行被点击
  1182. const tableInfo = ref({})
  1183. const tableRowClick = ({ row }) => {
  1184. tableInfo.value = row
  1185. }
  1186. //批注, isComment 是否已批注,1=是,0=否
  1187. const isNotesShow = ref(false)
  1188. const tableNoteInfo = ref({})
  1189. const rowRemarkClick = (row) => {
  1190. tableNoteInfo.value = row
  1191. nextTick(() => {
  1192. isNotesShow.value = true
  1193. })
  1194. }
  1195. //批注完成
  1196. const taskNotesFinish = () => {
  1197. getTableDetail()
  1198. }
  1199. //单条审批
  1200. const taskFormFinish = () => {
  1201. getTableDetail()
  1202. }
  1203. //确认审批
  1204. const confirmLoading = ref(false)
  1205. const confirmClick = () => {
  1206. const ShowAuth = isCheckSmsCodeTime()
  1207. SMSAuthShow.value = ShowAuth
  1208. //免短信验证
  1209. if (!ShowAuth) SMSAuthConfirm()
  1210. }
  1211. //驳回审批
  1212. const isRepealShow = ref(false)
  1213. const rejectionClick = async () => {
  1214. isRepealShow.value = true
  1215. }
  1216. //驳回完成
  1217. const taskRepealFinish = () => {
  1218. emit('finish')
  1219. cancelClick()
  1220. }
  1221. //取消审批
  1222. const cancelClick = () => {
  1223. isShow.value = false
  1224. isLoading.value = false
  1225. confirmLoading.value = false
  1226. tableColumn.value = []
  1227. tableData.value = []
  1228. tableInfo.value = {}
  1229. emit('close')
  1230. }
  1231. //短信验证有效期
  1232. const smsCodeTime = ref('')
  1233. const checkSmsCode = async () => {
  1234. const { data } = await mainApi.checkSmsCode()
  1235. smsCodeTime.value = data ? data : ''
  1236. }
  1237. //验证短信有效期
  1238. const isCheckSmsCodeTime = () => {
  1239. const smsTime = smsCodeTime.value
  1240. if (isNullES(smsTime)) {
  1241. return true
  1242. } else {
  1243. const toDayTime = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss')
  1244. return dayjs(smsTime).isBefore(toDayTime)
  1245. }
  1246. }
  1247. //短信验证
  1248. const SMSAuthLoading = ref(false)
  1249. const SMSAuthShow = ref(false)
  1250. const htmlFormRef = ref(null)
  1251. const SMSAuthConfirm = async () => {
  1252. confirmLoading.value = true
  1253. const tableData = htmlFormRef.value?.getTableForm()
  1254. const { error, code, msg } = await mainApi.taskApprove({
  1255. tableData: tableData,
  1256. taskId: rowInfo.value.id,
  1257. projectId: projectId.value,
  1258. contractId: contractId.value,
  1259. meterApproveOpinion: meterApproveOpinion2.value,
  1260. })
  1261. if (!error && code === 200) {
  1262. window.$message.success('审批成功')
  1263. await checkSmsCode()
  1264. confirmLoading.value = false
  1265. emit('finish')
  1266. SMSAuthCancel()
  1267. cancelClick()
  1268. } else {
  1269. confirmLoading.value = false
  1270. window.$message.error(msg ?? '审批失败')
  1271. }
  1272. }
  1273. const SMSAuthCancel = () => {
  1274. SMSAuthShow.value = false
  1275. }
  1276. //选项卡被切换
  1277. const taskTabsKey = ref('key1')
  1278. const taskTabsClick = (key) => {
  1279. taskTabsKey.value = key
  1280. }
  1281. //查看报表
  1282. const rowViewLoading = ref(false)
  1283. const rowViewPdf = async () => {
  1284. const { type, reportId } = detailInfo.value
  1285. if (isNullES(reportId)) {
  1286. window.$message.warning('参数异常')
  1287. return
  1288. }
  1289. rowViewLoading.value = true
  1290. const { code, msg, data } = await mainApi.taskMeterPdfInfo({
  1291. reportId: reportId,
  1292. type: type,
  1293. taskType: 10,
  1294. taskId: rowInfo.value.id,
  1295. })
  1296. rowViewLoading.value = false
  1297. if (code === 200 && !isNullES(data)) {
  1298. window.$message.success('操作成功')
  1299. toPdfPage(data)
  1300. } else {
  1301. window.$message.error(msg ?? '操作失败')
  1302. }
  1303. }
  1304. //选项卡
  1305. const tabKey = ref('1')
  1306. const tabsData = [
  1307. { key: '2', name: '意见信息' },
  1308. { key: '1', name: '计量单信息' },
  1309. ]
  1310. const tabsChange = ({ key }) => {
  1311. tabKey.value = key
  1312. }
  1313. </script>
  1314. <style lang="scss" scoped>
  1315. .textarea-container {
  1316. position: relative;
  1317. }
  1318. .suffix-icon {
  1319. position: absolute;
  1320. bottom: 8px;
  1321. right: 10px;
  1322. font-size: 14px;
  1323. color: #888;
  1324. }
  1325. .hc-task-name {
  1326. font-weight: bold;
  1327. color: #1a1a1a;
  1328. padding-bottom: 10px;
  1329. border-bottom: 1px solid #f5f5f5;
  1330. }
  1331. .hc-task-body {
  1332. height: calc(100% - 27px);
  1333. .hc-task-time {
  1334. position: relative;
  1335. height: 100%;
  1336. flex-shrink: 0;
  1337. width: 170px;
  1338. }
  1339. .hc-task-table,
  1340. .hc-task-form {
  1341. position: relative;
  1342. height: 100%;
  1343. flex: 1;
  1344. flex-basis: auto;
  1345. }
  1346. .hc-task-table {
  1347. border-left: 1px solid #e5e5e5;
  1348. }
  1349. }
  1350. //表格图标
  1351. .hc-task-table-action,
  1352. .hc-task-table-state {
  1353. position: relative;
  1354. display: flex;
  1355. justify-content: center;
  1356. align-items: center;
  1357. cursor: pointer;
  1358. font-size: 20px;
  1359. color: #929293;
  1360. i {
  1361. display: inline-flex;
  1362. }
  1363. }
  1364. //表格批注
  1365. .hc-task-table-action.is-cur {
  1366. color: #f2b90b;
  1367. }
  1368. //表格状态
  1369. .hc-task-table-state {
  1370. .is-success {
  1371. color: #25a62d;
  1372. }
  1373. .is-danger {
  1374. color: #f5221d;
  1375. }
  1376. span {
  1377. color: #1a1a1a;
  1378. }
  1379. }
  1380. //弹窗底部
  1381. .hc-task-dialog-footer {
  1382. position: relative;
  1383. text-align: center;
  1384. }
  1385. </style>
  1386. <style lang="scss">
  1387. .hc-task-body-card {
  1388. background: #f7f7f7;
  1389. .el-scrollbar__bar.is-vertical {
  1390. right: -8px;
  1391. }
  1392. .hc-task-body-table {
  1393. position: relative;
  1394. height: calc(100% - 30px);
  1395. .hc-task-body-table-form {
  1396. position: relative;
  1397. height: 100%;
  1398. overflow: auto;
  1399. .title-box {
  1400. position: relative;
  1401. text-align: center;
  1402. margin-bottom: 10px;
  1403. .title {
  1404. font-size: 18px;
  1405. margin-bottom: 20px;
  1406. }
  1407. .text {
  1408. font-size: 15px;
  1409. }
  1410. }
  1411. .text-box {
  1412. position: relative;
  1413. border: 1px solid #4b4b4b;
  1414. padding: 8px 3px;
  1415. display: flex;
  1416. align-items: center;
  1417. font-size: 12px;
  1418. .content {
  1419. position: relative;
  1420. flex: 1;
  1421. padding-right: 20px;
  1422. }
  1423. .sign-name {
  1424. position: relative;
  1425. .user-time {
  1426. margin-top: 10px;
  1427. }
  1428. }
  1429. }
  1430. .name {
  1431. position: relative;
  1432. display: flex;
  1433. align-items: center;
  1434. font-size: 13px;
  1435. border: 1px solid #4b4b4b;
  1436. background: #eef3f7;
  1437. padding: 8px 3px;
  1438. }
  1439. .input {
  1440. position: relative;
  1441. border: 1px solid #4b4b4b;
  1442. padding: 2px;
  1443. }
  1444. .input-box {
  1445. position: relative;
  1446. display: flex;
  1447. .box {
  1448. position: relative;
  1449. flex: 1;
  1450. display: flex;
  1451. flex-direction: column;
  1452. .name {
  1453. flex-shrink: 0;
  1454. }
  1455. .text-box {
  1456. flex: 1;
  1457. flex-basis: auto;
  1458. }
  1459. }
  1460. .no-b {
  1461. border-left: 0;
  1462. }
  1463. }
  1464. .hc-bt-0 {
  1465. border-top: 0;
  1466. }
  1467. .hc-bb-0 {
  1468. border-bottom: 0;
  1469. }
  1470. }
  1471. }
  1472. .hc-task-body-tip {
  1473. color: red;
  1474. }
  1475. }
  1476. //html表单模式
  1477. .hc-task-body .hc-task-form.is-tab-key3 .hc-task-body-card {
  1478. .el-scrollbar__view {
  1479. height: 100%;
  1480. }
  1481. .hc-task-form-body {
  1482. height: 100%;
  1483. .el-tabs {
  1484. height: 100%;
  1485. .el-tabs__content {
  1486. height: calc(100% - 39px);
  1487. #pane-key3 {
  1488. height: 100%;
  1489. }
  1490. }
  1491. }
  1492. }
  1493. .hc-task-html-form-body {
  1494. height: 100%;
  1495. .hc-table-form-data-item .el-scrollbar__view {
  1496. height: auto;
  1497. }
  1498. }
  1499. }
  1500. </style>