maintain_course.vue 9.0 KB

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