WorkOrderTab.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654
  1. <!-- 工单信息 -->
  2. <template>
  3. <div class="repairinfoLogs repair_infoLogs">
  4. <div>
  5. <el-row class="repair_row">
  6. <el-col :span="8" class="repair_column">
  7. <span>工单编号:</span>
  8. <span>{{ workOrderInfo ? workOrderInfo.code : '' }}</span>
  9. </el-col>
  10. <el-col :span="8" class="repair_column">
  11. <span>执行部门:</span>
  12. <span>{{ workOrderInfo ? workOrderInfo.executeGroupName : '' }}</span>
  13. </el-col>
  14. <el-col :span="8" class="repair_column">
  15. <span>执行人:</span>
  16. <span>{{ workOrderInfo ? workOrderInfo.executeUserName : '' }}</span>
  17. </el-col>
  18. </el-row>
  19. <el-row class="repair_row">
  20. <el-col :span="8" class="repair_column">
  21. <span>计划单号:</span>
  22. <span>{{ workOrderInfo ? workOrderInfo.planCode : '' }}</span>
  23. </el-col>
  24. <el-col :span="8" class="repair_column">
  25. <span>计划名称:</span>
  26. <span>{{ workOrderInfo ? workOrderInfo.planName : '' }}</span>
  27. </el-col>
  28. <el-col :span="8" class="repair_column">
  29. <span>计划完成时间:</span>
  30. <span>{{ workOrderInfo ? workOrderInfo.planFinishTime : '' }}</span>
  31. </el-col>
  32. </el-row>
  33. <el-row class="repair_row">
  34. <el-col :span="24" class="repair_column">
  35. <span>维修方案:</span>
  36. <span>{{ workOrderInfo ? workOrderInfo.repairPrograms : '' }}</span>
  37. </el-col>
  38. </el-row>
  39. </div>
  40. <el-steps
  41. direction="vertical"
  42. :active="0"
  43. :space="100"
  44. v-for="(item, index) in repairInfoLogList"
  45. :key="index"
  46. >
  47. <el-step v-if="item.type == 'CREATE'">
  48. <span
  49. slot="icon"
  50. :class="
  51. lastStepName == 'CREATE' ? 'step_icon step_active' : 'step_icon'
  52. "
  53. ></span>
  54. <div slot="title" class="step_title">
  55. <span>生成工单</span>
  56. <span>{{ logs['CREATE'].createTime }}</span>
  57. </div>
  58. <div slot="description" class="create_workerOrder_desc">
  59. <div> 报修人:{{ logs['CREATE'].requestUserName }} </div>
  60. <div> 故障描述:{{ logs['CREATE'].remark }} </div>
  61. </div>
  62. </el-step>
  63. <el-step v-if="item.type == 'SPARE_PARTS_APPLY'">
  64. <span
  65. slot="icon"
  66. :class="
  67. lastStepName == 'SPARE_PARTS_APPLY'
  68. ? 'step_icon step_active'
  69. : 'step_icon'
  70. "
  71. ></span>
  72. <div slot="title" class="step_title">
  73. <span>备品备件申请</span>
  74. <span>{{ logs['SPARE_PARTS_APPLY'].createTime }}</span>
  75. </div>
  76. <div slot="description" class="work_report_desc">
  77. <!-- <div slot="description" class="step_description">
  78. <span
  79. >申领单号:{{
  80. logs['SPARE_PARTS_APPLY'].content.sparePartsCode
  81. }}</span
  82. >
  83. </div> -->
  84. <div>
  85. <div>申领清单:</div>
  86. <el-table :data="item.content.infoList" border>
  87. <el-table-column
  88. label="备件物品编码"
  89. align="center"
  90. prop="code"
  91. />
  92. <el-table-column label="备件名称" align="center" prop="name" />
  93. <el-table-column label="所属分类" prop="typeName" align="center">
  94. <template slot-scope="{ row }">
  95. <div>备品备件</div>
  96. </template>
  97. </el-table-column>
  98. <el-table-column label="型号" align="center" prop="modelType" />
  99. <el-table-column
  100. label="使用数量"
  101. prop="packingCountBase"
  102. align="center"
  103. />
  104. </el-table>
  105. </div>
  106. </div>
  107. </el-step>
  108. <el-step v-if="item.type == 'ACCEPTANCE_CHEK'">
  109. <span
  110. slot="icon"
  111. :class="
  112. lastStepName == 'ACCEPTANCE_CHEK'
  113. ? 'step_icon step_active'
  114. : 'step_icon'
  115. "
  116. ></span>
  117. <div slot="title" class="step_title">
  118. <span>验收</span>
  119. <span>{{ logs['ACCEPTANCE_CHEK'].createTime }}</span>
  120. </div>
  121. <div slot="description" class="step_description">
  122. <span>验收人:{{ logs['ACCEPTANCE_CHEK'].content.userName }}</span>
  123. <span
  124. >验收结果:{{
  125. logs['ACCEPTANCE_CHEK'].content.orderStatus == 4 ? '通过' : '驳回'
  126. }}</span
  127. >
  128. <span>验收说明:{{ logs['ACCEPTANCE_CHEK'].content.remark }}</span>
  129. </div>
  130. </el-step>
  131. <el-step v-if="item.type == 'WORK_REPORT'">
  132. <span
  133. slot="icon"
  134. :class="
  135. lastStepName == 'WORK_REPORT'
  136. ? 'step_icon step_active'
  137. : 'step_icon'
  138. "
  139. ></span>
  140. <div slot="title" class="step_title">
  141. <span>报工</span>
  142. <span>{{ logs['WORK_REPORT'].createTime }}</span>
  143. </div>
  144. <div slot="description" class="work_report_desc">
  145. <div> 处理说明:{{ logs['WORK_REPORT'].content.reason }} </div>
  146. <div class="work_report_imgs" style="width: 50px; height: 50px">
  147. <img
  148. v-for="(item, index) in logs['WORK_REPORT'].content
  149. .workOrderImgList"
  150. :key="index"
  151. :src="item"
  152. alt=""
  153. style="width: 40%"
  154. />
  155. </div>
  156. <!-- <div>
  157. <div>备品备件使用情况:</div>
  158. <el-table :data="useData" border>
  159. <el-table-column
  160. label="备件编码"
  161. prop="assetCode"
  162. align="center"
  163. />
  164. <el-table-column
  165. label="备件名称"
  166. align="center"
  167. prop="informationName"
  168. />
  169. <el-table-column label="所属分类" prop="typeName" align="center">
  170. <template slot-scope="{ row }">
  171. <div>备品备件</div>
  172. </template>
  173. </el-table-column>
  174. <el-table-column label="型号" align="center" prop="modelType" />
  175. <el-table-column label="使用数量" prop="typeName" align="center">
  176. <template slot-scope="{ row }">
  177. <div>1</div>
  178. </template>
  179. </el-table-column>
  180. </el-table>
  181. </div> -->
  182. </div>
  183. </el-step>
  184. </el-steps>
  185. <!-- <el-steps
  186. direction="vertical"
  187. :active="0"
  188. :space="100"
  189. v-for="(item, index) in repairInfoLogList"
  190. :key="index"
  191. >
  192. <el-step v-if="item.type.code == 'ACCEPTANCE_CHEK'">
  193. <span
  194. slot="icon"
  195. :class="
  196. lastStepName == 'ACCEPTANCE_CHEK'
  197. ? 'step_icon step_active'
  198. : 'step_icon'
  199. "
  200. ></span>
  201. <div slot="title" class="step_title">
  202. <span>验收</span>
  203. <span>{{ logs['ACCEPTANCE_CHEK'].createTime }}</span>
  204. </div>
  205. <div slot="description" class="step_description">
  206. <span>验收人:{{ logs['ACCEPTANCE_CHEK'].content.userName }}</span>
  207. <span
  208. >验收结果:{{
  209. logs['ACCEPTANCE_CHEK'].content.acceptanceResult ? '通过' : '驳回'
  210. }}</span
  211. >
  212. <span
  213. >验收说明:{{
  214. logs['ACCEPTANCE_CHEK'].content.acceptanceInstructions
  215. }}</span
  216. >
  217. </div>
  218. </el-step>
  219. <el-step v-if="item.type.code == 'WORK_REPORT'">
  220. <span
  221. slot="icon"
  222. :class="
  223. lastStepName == 'WORK_REPORT'
  224. ? 'step_icon step_active'
  225. : 'step_icon'
  226. "
  227. ></span>
  228. <div slot="title" class="step_title">
  229. <span>报工</span>
  230. <span>{{ logs['WORK_REPORT'].createTime }}</span>
  231. </div>
  232. <div slot="description" class="work_report_desc">
  233. <div>
  234. 处理说明:{{ logs['WORK_REPORT'].content.repairReportExplain }}
  235. </div>
  236. <div class="work_report_imgs" style="width: 50px; height: 50px">
  237. <img
  238. v-for="(item, index) in logs['WORK_REPORT'].content
  239. .workOrderImgList"
  240. :key="index"
  241. :src="item"
  242. alt=""
  243. style="width: 40%"
  244. />
  245. </div>
  246. <div>
  247. <div>备品备件使用情况:</div>
  248. <el-table :data="useData" border>
  249. <el-table-column
  250. label="备件编码"
  251. prop="assetCode"
  252. align="center"
  253. />
  254. <el-table-column
  255. label="备件名称"
  256. align="center"
  257. prop="informationName"
  258. />
  259. <el-table-column label="所属分类" prop="typeName" align="center">
  260. <template slot-scope="{ row }">
  261. <div>备品备件</div>
  262. </template>
  263. </el-table-column>
  264. <el-table-column label="型号" align="center" prop="modelType" />
  265. <el-table-column label="使用数量" prop="typeName" align="center">
  266. <template slot-scope="{ row }">
  267. <div>1</div>
  268. </template>
  269. </el-table-column>
  270. </el-table>
  271. </div>
  272. </div>
  273. </el-step>
  274. <el-step v-if="item.type.code == 'STOCK_OUT_APPROVAL'">
  275. <span
  276. slot="icon"
  277. :class="
  278. lastStepName == 'STOCK_OUT_APPROVAL'
  279. ? 'step_icon step_active'
  280. : 'step_icon'
  281. "
  282. ></span>
  283. <div slot="title" class="step_title">
  284. <span>备品备件出库审核</span>
  285. <span>{{ logs['STOCK_OUT_APPROVAL'].createTime }}</span>
  286. </div>
  287. <div slot="description" class="step_description">
  288. <span
  289. >出库单号:{{
  290. logs['STOCK_OUT_APPROVAL'].content.stockOutCode
  291. }}</span
  292. >
  293. <span
  294. >审核人:{{
  295. logs['STOCK_OUT_APPROVAL'].content.approvalUserName
  296. }}</span
  297. >
  298. <span
  299. >审核结果:{{
  300. logs['SPARE_PARTS_APPROVAL'].content.approvalResult
  301. ? '通过'
  302. : '驳回'
  303. }}</span
  304. >
  305. </div>
  306. </el-step>
  307. <el-step v-if="item.type.code == 'STOCK_OUT_APPLY'">
  308. <span
  309. slot="icon"
  310. :class="
  311. lastStepName == 'STOCK_OUT_APPLY'
  312. ? 'step_icon step_active'
  313. : 'step_icon'
  314. "
  315. ></span>
  316. <div slot="title" class="step_title">
  317. <span>备品备件出库申请</span>
  318. <span>{{ logs['STOCK_OUT_APPLY'].createTime }}</span>
  319. </div>
  320. <div slot="description" class="step_description">
  321. <span
  322. >出库单号:{{ logs['STOCK_OUT_APPLY'].content.stockOutCode }}</span
  323. >
  324. <span
  325. >申请人:{{ logs['STOCK_OUT_APPLY'].content.applyUserName }}</span
  326. >
  327. <span
  328. >审核人:{{
  329. logs['STOCK_OUT_APPLY'].content.approvalUserName
  330. }}</span
  331. >
  332. </div>
  333. </el-step>
  334. <el-step v-if="item.type.code == 'SPARE_PARTS_APPROVAL'">
  335. <span
  336. slot="icon"
  337. :class="
  338. lastStepName == 'SPARE_PARTS_APPROVAL'
  339. ? 'step_icon step_active'
  340. : 'step_icon'
  341. "
  342. ></span>
  343. <div slot="title" class="step_title">
  344. <span>备品备件申领审核</span>
  345. <span>{{ logs['SPARE_PARTS_APPROVAL'].createTime }}</span>
  346. </div>
  347. <div slot="description" class="step_description">
  348. <span
  349. >申领单号:{{
  350. logs['SPARE_PARTS_APPROVAL'].content.sparePartsCode
  351. }}</span
  352. >
  353. <span
  354. >审核人:{{
  355. logs['SPARE_PARTS_APPROVAL'].content.approvalUserName
  356. }}</span
  357. >
  358. <span
  359. >审核结果:{{
  360. logs['SPARE_PARTS_APPROVAL'].content.approvalResult
  361. ? '通过'
  362. : '驳回'
  363. }}</span
  364. >
  365. </div>
  366. </el-step>
  367. <el-step v-if="item.type.code == 'SPARE_PARTS_APPLY'">
  368. <span
  369. slot="icon"
  370. :class="
  371. lastStepName == 'SPARE_PARTS_APPLY'
  372. ? 'step_icon step_active'
  373. : 'step_icon'
  374. "
  375. ></span>
  376. <div slot="title" class="step_title">
  377. <span>备品备件申请</span>
  378. <span>{{ logs['SPARE_PARTS_APPLY'].createTime }}</span>
  379. </div>
  380. <div slot="description" class="work_report_desc">
  381. <div slot="description" class="step_description">
  382. <span
  383. >申领单号:{{
  384. logs['SPARE_PARTS_APPLY'].content.sparePartsCode
  385. }}</span
  386. >
  387. <span
  388. >申请人:{{
  389. logs['SPARE_PARTS_APPLY'].content.applyUserName
  390. }}</span
  391. >
  392. <span
  393. >审核人:{{
  394. logs['SPARE_PARTS_APPLY'].content.approvalUserName
  395. }}</span
  396. >
  397. </div>
  398. <div>
  399. <div>申领清单:</div>
  400. <el-table :data="item.applyList" border>
  401. <el-table-column
  402. label="备件物品编码"
  403. align="center"
  404. prop="informationCode"
  405. />
  406. <el-table-column
  407. label="备件名称"
  408. align="center"
  409. prop="informationName"
  410. />
  411. <el-table-column label="所属分类" prop="typeName" align="center">
  412. <template slot-scope="{ row }">
  413. <div>备品备件</div>
  414. </template>
  415. </el-table-column>
  416. <el-table-column label="型号" align="center" prop="modelType" />
  417. <el-table-column label="使用数量" prop="num" align="center" />
  418. </el-table>
  419. </div>
  420. </div>
  421. </el-step>
  422. <el-step v-if="item.type.code == 'START'">
  423. <span
  424. slot="icon"
  425. :class="
  426. lastStepName == 'START' ? 'step_icon step_active' : 'step_icon'
  427. "
  428. ></span>
  429. <div slot="title" class="step_title">
  430. <span>开始执行</span>
  431. <span>{{ logs['START'].createTime }}</span>
  432. </div>
  433. <div slot="description" class="step_description">
  434. <span>执行人:{{ logs['START'].content.executorName }}</span>
  435. </div>
  436. </el-step>
  437. <el-step v-if="item.type.code == 'CREATE_WORK_ORDER'">
  438. <span
  439. slot="icon"
  440. :class="
  441. lastStepName == 'CREATE_WORK_ORDER'
  442. ? 'step_icon step_active'
  443. : 'step_icon'
  444. "
  445. ></span>
  446. <div slot="title" class="step_title">
  447. <span>生成工单</span>
  448. <span>{{ logs['CREATE_WORK_ORDER'].createTime }}</span>
  449. </div>
  450. </el-step>
  451. </el-steps> -->
  452. </div>
  453. </template>
  454. <script>
  455. // import repair from '@/api/maintenance/repair/repair'
  456. // import { getSparePartDetail , getUseDetail } from '@/api/stockManagement/stocking'
  457. export default {
  458. props: {
  459. repairInfoLogList: {
  460. type: Array,
  461. default: () => {
  462. return [];
  463. }
  464. },
  465. workOrderInfo: {
  466. type: Object,
  467. default: () => {
  468. return {};
  469. }
  470. },
  471. planInfo: {
  472. type: Object,
  473. default: () => {
  474. return {};
  475. }
  476. }
  477. },
  478. watch: {
  479. repairInfoLogList(val) {
  480. console.log('接收的值', val);
  481. // val.forEach((item) => {
  482. // if (item.type !== 'SPARE_PARTS_APPLY') {
  483. // this.logs[item.type] = {
  484. // id: item.id,
  485. // content: item.content,
  486. // createTime: item.createTime,
  487. // remark: item.remark,
  488. // requestUserName: item.requestUserName
  489. // };
  490. // } else {
  491. // if (item.content.infoList && item.content.infoList.length > 0) {
  492. // item.content.infoList = item.content.infoList.map((item) => {
  493. // return {
  494. // ...JSON.parse(item.sparePartsList),
  495. // sparePartsId: item.sparePartsId
  496. // };
  497. // });
  498. // this.useData.push(item.content.infoList);
  499. // }
  500. // }
  501. // });
  502. val.forEach((item) => {
  503. this.logs[item.type] = {
  504. id: item.id,
  505. content: item.content,
  506. createTime: item.createTime,
  507. remark: item.remark,
  508. requestUserName: item.requestUserName
  509. };
  510. if (item.type === 'SPARE_PARTS_APPLY') {
  511. this.logs[item.type].content.infoList =
  512. this.logs[item.type].content.infoList &&
  513. this.logs[item.type].content.infoList.length > 0
  514. ? this.logs[item.type].content.infoList.map((item) => {
  515. return {
  516. ...JSON.parse(item.sparePartsList),
  517. sparePartsId: item.sparePartsId
  518. };
  519. })
  520. : [];
  521. }
  522. });
  523. console.log(this.logs);
  524. this.logsKeys = Object.keys(this.logs);
  525. this.lastStepName = this.logsKeys[0];
  526. // val.forEach((item) => {
  527. // this.logs[item.type.code] = {
  528. // id: item.id,
  529. // name: item.type.desc,
  530. // content: JSON.parse(item.content),
  531. // createTime: item.createTime
  532. // };
  533. // });
  534. // // console.log('this.logs',this.logs)
  535. // this.logsKeys = Object.keys(this.logs);
  536. // // this.lastStepName = this.logsKeys[this.logsKeys.length - 1]
  537. // this.lastStepName = this.logsKeys[0];
  538. // this.getUseList();
  539. // val.map((item) => {
  540. // if (item.type.code === 'SPARE_PARTS_APPLY') {
  541. // let code = JSON.parse(item.content).sparePartsCode;
  542. // getSparePartDetail(code).then((res) => {
  543. // if (res?.success) {
  544. // item.applyList = res.data.sparePartsApplyDetailList;
  545. // }
  546. // });
  547. // }
  548. // });
  549. // console.log('val', val);
  550. }
  551. },
  552. data() {
  553. return {
  554. logs: {},
  555. logsKeys: [],
  556. lastStepName: '',
  557. useData: [],
  558. workOrderCode: ''
  559. };
  560. },
  561. methods: {
  562. // 获取申请明细列表
  563. getApplyList() {
  564. getSparePartDetail().then((res) => {});
  565. },
  566. // 获取使用明细列表
  567. getUseList() {
  568. let params = {
  569. sourceCode: this.workOrderInfo.workOrderCode,
  570. status: true
  571. };
  572. getUseDetail(params).then((res) => {
  573. if (res?.success) {
  574. this.useData = res.data;
  575. }
  576. });
  577. }
  578. }
  579. };
  580. </script>
  581. <style lang="scss" scoped>
  582. .repair_row {
  583. margin-bottom: 15px;
  584. .repair_column {
  585. display: flex;
  586. > span {
  587. &:first-child {
  588. font-weight: 700;
  589. text-align: right;
  590. width: 120px;
  591. }
  592. }
  593. }
  594. }
  595. .repairinfoLogs {
  596. .step_icon {
  597. width: 22px;
  598. height: 22px;
  599. border: 1px solid #333;
  600. border-radius: 50%;
  601. box-sizing: border-box;
  602. }
  603. .step_active {
  604. border: 0;
  605. background-color: #4b7902;
  606. }
  607. .step_title {
  608. width: 400px;
  609. color: #000;
  610. display: flex;
  611. justify-content: space-between;
  612. }
  613. .step_description {
  614. display: flex;
  615. padding: 5px 0px;
  616. background-color: #f2f2f2;
  617. justify-content: space-between;
  618. color: #7f7f7f;
  619. }
  620. ::v-deep .create_workerOrder_desc {
  621. display: flex;
  622. > div {
  623. flex: 1;
  624. }
  625. }
  626. ::v-deep .work_report_desc {
  627. padding: 5px 10px;
  628. margin-bottom: 30px;
  629. background-color: #f2f2f2;
  630. color: #7f7f7f;
  631. .el-table th.el-table__cell {
  632. background-color: #d7d7d7;
  633. padding: 0;
  634. color: #000;
  635. font-weight: 400;
  636. }
  637. .el-table td.el-table__cell {
  638. background-color: #f2f2f2;
  639. padding: 0;
  640. }
  641. }
  642. }
  643. </style>