maintain_course.vue 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. <template>
  2. <view :class="{ popupShow: popupShow }">
  3. <!-- 步骤条 -->
  4. <Step>
  5. <StepItem v-for="(item, index) in repairInfoLogList" :key="index" :active="index == 0"
  6. :hideContent="Boolean(item.content)">
  7. <template v-slot:header>
  8. <view class="step-title">
  9. <view class="s1">{{ typeOptions[item.type] }}</view>
  10. <view class="s2">
  11. {{ item.createTime }}
  12. </view>
  13. </view>
  14. </template>
  15. <template v-slot:content v-if="item.content">
  16. <view class="list-xs" v-if="item.type == 'CREATE'">
  17. <view class="list-xs-item">
  18. <view class="label">报修人</view>
  19. <view class="value">
  20. {{ logs[item.id] ? logs[item.id].content.requestUserName : '' }}
  21. </view>
  22. </view>
  23. <view class="list-xs-item">
  24. <view class="label">故障描述</view>
  25. <view class="value">
  26. {{ logs[item.id] ? logs[item.id].content.remark : '' }}
  27. </view>
  28. </view>
  29. </view>
  30. <view class="list-xs" v-else-if="item.type == 'SPARE_PARTS_APPLY'">
  31. <view class="list-xs-item">
  32. <view class="label">申领清单</view>
  33. <view class="value bjsymx" @click="handlbjsymx('备件明细', item.content.infoList)">备件使用明细</view>
  34. </view>
  35. </view>
  36. <view class="list-xs" v-else-if="item.type == 'ACCEPTANCE_CHEK'">
  37. <view class="list-xs-item">
  38. <view class="label">验收人</view>
  39. <view class="value">
  40. {{ logs[item.id] ? logs[item.id].content.userName : '' }}
  41. </view>
  42. </view>
  43. <view class="list-xs-item">
  44. <view class="label">验收结果</view>
  45. <view class="value">
  46. {{ logs[item.id] ? (logs[item.id].content.orderStatus == 4 ? '通过' : '驳回') : '' }}
  47. </view>
  48. </view>
  49. </view>
  50. <view class="list-xs" v-else-if="item.type == 'WORK_REPORT'">
  51. <view class="list-xs-item">
  52. <view class="label">报工人</view>
  53. <view class="value">
  54. {{logs[item.id] ? logs[item.id].content.rawUserName:'' }}
  55. </view>
  56. </view>
  57. <view class="list-xs-item">
  58. <view class="label">辅助人</view>
  59. <view class="value">
  60. {{logs[item.id].content.assists ?logs[item.id].content.assists.map((item) => item.name).toString():''}}
  61. </view>
  62. </view>
  63. <view class="list-xs-item">
  64. <view class="label">处理说明</view>
  65. <view class="value">
  66. {{ logs[item.id] ? logs[item.id].content.reason : '' }}
  67. </view>
  68. </view>
  69. <view class="list-xs-item">
  70. <view class="label">附件</view>
  71. <view class="value">
  72. <fileMain type="view" v-model="logs[item.id].content.attachments"></fileMain>
  73. </view>
  74. </view>
  75. </view>
  76. <!-- 转派 -->
  77. <!-- <view class="list-xs" v-if="item.type.desc == '转派'">
  78. <view class="list-xs-item">
  79. <view class="label">转派人</view>
  80. <view class="value">
  81. {{ item.content.reassignName }}
  82. </view>
  83. </view>
  84. <view class="list-xs-item">
  85. <view class="label">接收人</view>
  86. <view class="value">
  87. {{ item.content.executorName }}
  88. </view>
  89. </view>
  90. <view class="list-xs-item">
  91. <view class="label">转派原因</view>
  92. <view class="value">
  93. {{ item.content.reassignExplain }}
  94. </view>
  95. </view>
  96. </view> -->
  97. <!-- 默认 -->
  98. <!-- <view class="list-xs" v-else>
  99. <template v-for="(itm, index1) in Object.entries(item.content)">
  100. <view class="img-wrap" v-if="itm[0] == 'workOrderImgList' && itm[1]">
  101. <image class="img" @click="clickImg(itm[1].split(','), el)" :src="apiUrl + el" v-for="(el, index2) in itm[1].split(',')" :key="index2"></image>
  102. </view>
  103. <view class="list-xs-item" v-else-if="itm[0] == 'workOrderId'">
  104. <view class="label"></view>
  105. <view class="value bj" @click="handlbjsymx('备件使用明细')">
  106. {{ dictProcess[itm[0]] }}
  107. </view>
  108. </view>
  109. <view class="list-xs-item" v-else-if="['examineResult', 'acceptanceResult', 'approvalResult'].includes(itm[0])">
  110. <view class="label">
  111. {{ dictProcess[itm[0]] }}
  112. </view>
  113. <view class="value">
  114. {{ itm[1] ? '通过' : '未通过' }}
  115. </view>
  116. </view>
  117. <view class="list-xs-item" v-else-if="itm[0] == 'sparePartsCode'">
  118. <view class="label">
  119. {{ dictProcess[itm[0]] }}
  120. </view>
  121. <view class="value">
  122. {{ itm[1] }}
  123. <span class="list-xs-item-btn" @click="handlbjsymx('备件明细', itm[1])">备件明细</span>
  124. </view>
  125. </view>
  126. <view
  127. class="list-xs-item"
  128. v-else-if="
  129. [
  130. 'approvalUserName',
  131. 'applyUserName',
  132. 'stockOutCode',
  133. 'executorName',
  134. 'repairReportExplain',
  135. 'userName',
  136. 'acceptanceInstructions',
  137. 'createUserName',
  138. 'planCode',
  139. 'planName',
  140. 'examinePlanUserName',
  141. 'examineExplain',
  142. 'workOrderCode',
  143. 'maintenanceContent',
  144. 'plannedTime',
  145. 'workOrderExecutorName'
  146. ].includes(itm[0])
  147. ">
  148. <view class="label">
  149. {{ dictProcess[itm[0]] }}
  150. </view>
  151. <view class="value">
  152. {{ itm[1] }}
  153. </view>
  154. </view>
  155. </template>
  156. </view> -->
  157. </template>
  158. </StepItem>
  159. </Step>
  160. <PopSparePart ref="PopSparePart" :workOrderCode="workOrderCode" :sparePartsJson="sparePartsJson"
  161. :noRequest="true"></PopSparePart>
  162. </view>
  163. </template>
  164. <script>
  165. import Step from '@/components/Step/Step.vue'
  166. import StepItem from '@/components/Step/StepItem.vue'
  167. import PopSparePart from '../components/PopSparePart.vue'
  168. import fileMain from "@/pages/doc/index.vue"
  169. export default {
  170. props: {
  171. repairInfoLogList: {
  172. type: Array,
  173. default () {
  174. return [{
  175. content: {}
  176. }]
  177. }
  178. },
  179. planEquiList: {
  180. type: Array,
  181. default () {
  182. return []
  183. }
  184. },
  185. workOrderCode: {
  186. type: String,
  187. default () {
  188. return ''
  189. }
  190. }
  191. },
  192. components: {
  193. Step,
  194. StepItem,
  195. PopSparePart,
  196. fileMain
  197. },
  198. computed: {
  199. // 报工备品备件
  200. sparePartsJson() {
  201. if (this.planEquiList && this.planEquiList.length > 0) {
  202. return JSON.parse(this.planEquiList[0].sparePartsJson || '[]')
  203. } else {
  204. return []
  205. }
  206. }
  207. },
  208. data() {
  209. return {
  210. popupShow: false,
  211. typeOptions: {
  212. CREATE: '生成工单',
  213. SPARE_PARTS_APPLY: '备品备件申请',
  214. ACCEPTANCE_CHEK: '验收',
  215. WORK_REPORT: '报工'
  216. },
  217. logs: {},
  218. logsKeys: [],
  219. lastStepName: '',
  220. // 维修历程映射
  221. dictProcess: {
  222. executorName: '执行人',
  223. repairReportExplain: '处理说明',
  224. workOrderId: '备件使用明细',
  225. userName: '验收人',
  226. acceptanceResult: '验收结果',
  227. acceptanceInstructions: '验收说明',
  228. createUserName: '创建人',
  229. planCode: '计划单号',
  230. planName: '计划名称',
  231. examinePlanUserName: '审核人',
  232. examineResult: '审核结果',
  233. examineExplain: '审核说明',
  234. workOrderCode: '工单编号',
  235. maintenanceContent: '维修方案',
  236. plannedTime: '执行完成时间',
  237. workOrderExecutorName: '执行人',
  238. reassignName: '转派人',
  239. reassignExplain: '转派原因',
  240. stockOutCode: '出库单号',
  241. approvalUserName: '审核人',
  242. approvalResult: '审核结果',
  243. applyUserName: '申请人',
  244. sparePartsCode: '申领单号'
  245. }
  246. }
  247. },
  248. // mounted() {
  249. // },
  250. created() {
  251. this.repairInfoLogList.forEach(item => {
  252. this.logs[item.id] = {
  253. id: item.id,
  254. content: item.content ? item.content : {},
  255. createTime: item.createTime,
  256. type: item.type,
  257. remark: item.remark,
  258. requestUserName: item.requestUserName
  259. }
  260. if (item.type === 'SPARE_PARTS_APPLY') {
  261. this.logs[item.id].content.infoList =
  262. this.logs[item.id].content.infoList && this.logs[item.id].content.infoList.length > 0 ?
  263. this.logs[item.id].content.infoList.map(item => {
  264. return {
  265. ...JSON.parse(item.sparePartsList),
  266. sparePartsId: item.sparePartsId
  267. }
  268. }) : []
  269. }
  270. })
  271. console.log('this.logs-------------------')
  272. console.log(this.logs)
  273. this.logsKeys = Object.keys(this.logs)
  274. this.lastStepName = this.logsKeys[0]
  275. console.log(this.repairInfoLogList, 'repairInfoLogList')
  276. },
  277. methods: {
  278. close() {
  279. this.popupShow = false
  280. },
  281. // 备件使用明细
  282. handlbjsymx(title, list) {
  283. // if(value==='使用'){
  284. // }
  285. this.popupShow = true
  286. this.$refs.PopSparePart.open(title, list)
  287. },
  288. // 查看图片
  289. clickImg(urls, indexUrl) {
  290. urls = urls.map(n => {
  291. return this.apiUrl + n
  292. })
  293. wx.previewImage({
  294. urls: urls, //需要预览的图片http链接列表,多张的时候,url直接写在后面就行了
  295. current: this.apiUrl + indexUrl, // 当前显示图片的http链接,默认是第一个
  296. success: function(res) {},
  297. fail: function(res) {},
  298. complete: function(res) {}
  299. })
  300. }
  301. }
  302. }
  303. </script>
  304. <style lang="scss" scoped>
  305. .popupShow {
  306. overflow: hidden;
  307. position: fixed;
  308. width: 100%;
  309. }
  310. .step-title {
  311. display: flex;
  312. justify-content: space-between;
  313. }
  314. .bjsymx {
  315. color: #4f7f00;
  316. }
  317. .list-xs {
  318. .list-xs-item {
  319. color: #7f7f7f;
  320. display: flex;
  321. .label {
  322. font-size: 28rpx;
  323. width: 20%;
  324. text-align: right;
  325. margin-right: 20rpx;
  326. }
  327. .value {
  328. font-size: 28rpx;
  329. white-space: nowrap;
  330. overflow: hidden;
  331. text-overflow: ellipsis;
  332. max-width: 70%;
  333. &.bj {
  334. padding: 10rpx 0;
  335. color: #4f7f00;
  336. }
  337. }
  338. &+.list-xs-item {
  339. margin-top: 10rpx;
  340. .list-xs-item-btn {
  341. color: #47975a;
  342. margin-left: 30rpx;
  343. }
  344. }
  345. }
  346. .img-wrap {
  347. padding-left: 140rpx;
  348. margin-top: 20rpx;
  349. display: flex;
  350. flex-wrap: wrap;
  351. margin-left: -20rpx;
  352. .img {
  353. width: 160rpx;
  354. height: 120rpx;
  355. margin-left: 20rpx;
  356. margin-bottom: 20rpx;
  357. }
  358. }
  359. }
  360. </style>