WorkOrderTab.vue 21 KB

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