WorkOrderTab.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  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="8" class="repair_column">
  35. <span>设备名称:</span>
  36. <span>{{ equipmentInfo ? equipmentInfo.name : '' }}</span>
  37. </el-col>
  38. <el-col :span="8" class="repair_column">
  39. <span>编号:</span>
  40. <span>{{ equipmentInfo ? equipmentInfo.codeNumber : '' }}</span>
  41. </el-col>
  42. <el-col :span="8" class="repair_column">
  43. <span>固定资产编码:</span>
  44. <span>{{ equipmentInfo ? equipmentInfo.fixCode : '' }}</span>
  45. </el-col>
  46. </el-row>
  47. <el-row
  48. class="repair_row"
  49. v-if="workOrderInfo.finishTime && workOrderInfo.acceptTime"
  50. >
  51. <el-col :span="12" class="repair_column">
  52. <span>实际工时(分钟):</span>
  53. <span>{{
  54. parseInt(
  55. (new Date(workOrderInfo.finishTime).getTime() -
  56. new Date(workOrderInfo.acceptTime).getTime()) /
  57. 60000
  58. )
  59. }}</span>
  60. </el-col>
  61. </el-row>
  62. </div>
  63. <el-steps
  64. direction="vertical"
  65. :active="0"
  66. :space="100"
  67. v-for="(item, index) in repairInfoLogList"
  68. :key="index"
  69. >
  70. <el-step v-if="item.type == 'CREATE'">
  71. <span
  72. slot="icon"
  73. :class="index == 0 ? 'step_icon step_active' : 'step_icon'"
  74. ></span>
  75. <div slot="title" class="step_title">
  76. <span>生成工单</span>
  77. <span>{{ logs[item.id].createTime }}</span>
  78. </div>
  79. <div slot="description" class="create_workerOrder_desc">
  80. <div> 报修人:{{ logs[item.id].requestUserName }} </div>
  81. <div> 故障描述:{{ logs[item.id].remark }} </div>
  82. <div class="work_report_imgs">
  83. <el-image
  84. v-for="(item, index) in logs[item.id]?.content?.images"
  85. :key="index"
  86. style="width: 100px; height: 100px; margin-right: 5px"
  87. :src="item"
  88. :preview-src-list="[item]"
  89. />
  90. </div>
  91. </div>
  92. </el-step>
  93. <el-step v-if="item.type == 'SPARE_PARTS_APPLY'">
  94. <span
  95. slot="icon"
  96. :class="index == 0 ? 'step_icon step_active' : 'step_icon'"
  97. ></span>
  98. <div slot="title" class="step_title">
  99. <span>备品备件申请</span>
  100. <span>{{ logs[item.id].createTime }}</span>
  101. </div>
  102. <div slot="description" class="work_report_desc">
  103. <div>
  104. <div>申领清单:</div>
  105. <el-table :data="item.content.infoList" border>
  106. <el-table-column
  107. label="备件物品编码"
  108. align="center"
  109. prop="code"
  110. />
  111. <el-table-column label="备件名称" align="center" prop="name" />
  112. <el-table-column label="所属分类" prop="typeName" align="center">
  113. <template slot-scope="{ row }">
  114. <div>备品备件</div>
  115. </template>
  116. </el-table-column>
  117. <el-table-column label="型号" align="center" prop="modelType" />
  118. <el-table-column
  119. label="使用数量"
  120. prop="packingCountBase"
  121. align="center"
  122. />
  123. </el-table>
  124. </div>
  125. </div>
  126. </el-step>
  127. <el-step v-if="item.type == 'ACCEPTANCE_CHEK'">
  128. <span
  129. slot="icon"
  130. :class="index == 0 ? 'step_icon step_active' : 'step_icon'"
  131. ></span>
  132. <div slot="title" class="step_title">
  133. <span>验收</span>
  134. <span>{{ logs[item.id].createTime }}</span>
  135. </div>
  136. <div slot="description" class="step_description">
  137. <span>验收人:{{ logs[item.id].content.userName }}</span>
  138. <span
  139. >验收结果:{{
  140. logs[item.id].content.orderStatus == 4 ? '通过' : '驳回'
  141. }}</span
  142. >
  143. <span>验收说明:{{ logs[item.id].content.remark }}</span>
  144. </div>
  145. </el-step>
  146. <el-step v-if="item.type == 'WORK_REPORT'">
  147. <span
  148. slot="icon"
  149. :class="index == 0 ? 'step_icon step_active' : 'step_icon'"
  150. ></span>
  151. <div slot="title" class="step_title">
  152. <span>报工</span>
  153. <span>{{ logs[item.id].createTime }}</span>
  154. </div>
  155. <div slot="description" class="work_report_desc">
  156. <div> 报工人:{{ logs[item.id].content?.rawUserName }} </div>
  157. <div>
  158. 辅助人:{{
  159. logs[item.id].content.assists?.length > 0
  160. ? logs[item.id].content.assists
  161. .map((item) => item.name)
  162. .toString()
  163. : ''
  164. }}
  165. </div>
  166. <div> 处理说明:{{ logs[item.id].content.reason }} </div>
  167. <div style="display: flex">
  168. 附件:
  169. <fileMain
  170. v-model="logs[item.id].content.attachments"
  171. type="view"
  172. ></fileMain>
  173. </div>
  174. <div class="work_report_imgs">
  175. <el-image
  176. v-for="(item, index) in logs[item.id].content?.images"
  177. :key="index"
  178. style="width: 100px; height: 100px; margin-right: 5px"
  179. :src="item"
  180. :preview-src-list="logs[item.id].content?.images"
  181. />
  182. </div>
  183. </div>
  184. </el-step>
  185. </el-steps>
  186. </div>
  187. </template>
  188. <script>
  189. export default {
  190. components: {},
  191. props: {
  192. equipmentInfo: {
  193. type: Object,
  194. default: () => {
  195. return {};
  196. }
  197. },
  198. repairInfoLogList: {
  199. type: Array,
  200. default: () => {
  201. return [];
  202. }
  203. },
  204. workOrderInfo: {
  205. type: Object,
  206. default: () => {
  207. return {};
  208. }
  209. },
  210. planInfo: {
  211. type: Object,
  212. default: () => {
  213. return {};
  214. }
  215. }
  216. },
  217. watch: {
  218. repairInfoLogList(val) {
  219. console.log('接收的值', val);
  220. // val.forEach((item) => {
  221. // if (item.type !== 'SPARE_PARTS_APPLY') {
  222. // this.logs[item.type] = {
  223. // id: item.id,
  224. // content: item.content,
  225. // createTime: item.createTime,
  226. // remark: item.remark,
  227. // requestUserName: item.requestUserName
  228. // };
  229. // } else {
  230. // if (item.content.infoList && item.content.infoList.length > 0) {
  231. // item.content.infoList = item.content.infoList.map((item) => {
  232. // return {
  233. // ...JSON.parse(item.sparePartsList),
  234. // sparePartsId: item.sparePartsId
  235. // };
  236. // });
  237. // this.useData.push(item.content.infoList);
  238. // }
  239. // }
  240. // });
  241. val.forEach((item) => {
  242. this.logs[item.id] = {
  243. id: item.id,
  244. content: item.content,
  245. createTime: item.createTime,
  246. type: item.type,
  247. remark: item.remark,
  248. requestUserName: item.requestUserName
  249. };
  250. if (item.type === 'SPARE_PARTS_APPLY') {
  251. this.logs[item.id].content.infoList =
  252. this.logs[item.id].content.infoList &&
  253. this.logs[item.id].content.infoList.length > 0
  254. ? this.logs[item.id].content.infoList.map((item) => {
  255. return {
  256. ...JSON.parse(item.sparePartsList),
  257. sparePartsId: item.sparePartsId
  258. };
  259. })
  260. : [];
  261. }
  262. });
  263. console.log(this.logs);
  264. this.logsKeys = Object.keys(this.logs);
  265. this.lastStepName = this.logsKeys[0];
  266. // val.forEach((item) => {
  267. // this.logs[item.type.code] = {
  268. // id: item.id,
  269. // name: item.type.desc,
  270. // content: JSON.parse(item.content),
  271. // createTime: item.createTime
  272. // };
  273. // });
  274. // // console.log('this.logs',this.logs)
  275. // this.logsKeys = Object.keys(this.logs);
  276. // // this.lastStepName = this.logsKeys[this.logsKeys.length - 1]
  277. // this.lastStepName = this.logsKeys[0];
  278. // this.getUseList();
  279. // val.map((item) => {
  280. // if (item.type.code === 'SPARE_PARTS_APPLY') {
  281. // let code = JSON.parse(item.content).sparePartsCode;
  282. // getSparePartDetail(code).then((res) => {
  283. // if (res?.success) {
  284. // item.applyList = res.data.sparePartsApplyDetailList;
  285. // }
  286. // });
  287. // }
  288. // });
  289. // console.log('val', val);
  290. }
  291. },
  292. data() {
  293. return {
  294. logs: {},
  295. logsKeys: [],
  296. lastStepName: '',
  297. useData: [],
  298. workOrderCode: ''
  299. };
  300. },
  301. methods: {
  302. // 获取申请明细列表
  303. getApplyList() {
  304. getSparePartDetail().then((res) => {});
  305. },
  306. // 获取使用明细列表
  307. getUseList() {
  308. let params = {
  309. sourceCode: this.workOrderInfo.workOrderCode,
  310. status: true
  311. };
  312. getUseDetail(params).then((res) => {
  313. if (res?.success) {
  314. this.useData = res.data;
  315. }
  316. });
  317. }
  318. }
  319. };
  320. </script>
  321. <style lang="scss" scoped>
  322. .repair_row {
  323. margin-bottom: 15px;
  324. .repair_column {
  325. display: flex;
  326. > span {
  327. &:first-child {
  328. font-weight: 700;
  329. text-align: right;
  330. width: 120px;
  331. }
  332. }
  333. }
  334. }
  335. .repairinfoLogs {
  336. .step_icon {
  337. width: 22px;
  338. height: 22px;
  339. border: 1px solid #333;
  340. border-radius: 50%;
  341. box-sizing: border-box;
  342. background-color: #fff;
  343. }
  344. .step_active {
  345. border: 0;
  346. background-color: #4b7902;
  347. }
  348. .step_title {
  349. width: 400px;
  350. color: #000;
  351. display: flex;
  352. justify-content: space-between;
  353. }
  354. .step_description {
  355. display: flex;
  356. padding: 5px 0px;
  357. background-color: #f2f2f2;
  358. justify-content: space-between;
  359. color: #7f7f7f;
  360. }
  361. ::v-deep .create_workerOrder_desc {
  362. display: flex;
  363. > div {
  364. flex: 1;
  365. }
  366. }
  367. ::v-deep .work_report_desc {
  368. padding: 5px 10px;
  369. margin-bottom: 30px;
  370. background-color: #f2f2f2;
  371. color: #7f7f7f;
  372. .el-table th.el-table__cell {
  373. background-color: #d7d7d7;
  374. padding: 0;
  375. color: #000;
  376. font-weight: 400;
  377. }
  378. .el-table td.el-table__cell {
  379. background-color: #f2f2f2;
  380. padding: 0;
  381. }
  382. }
  383. }
  384. </style>