BaseInfo.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. <template>
  2. <view class="detail-content">
  3. <view class="list-wrap-1">
  4. <view class="item">
  5. <view class="s1"> 类型标识 </view>
  6. <view class="s2">
  7. {{ baseInfo.assetCode }}
  8. </view>
  9. </view>
  10. <view class="item">
  11. <view class="s1"> 物品类型 </view>
  12. <view class="s2">
  13. {{ getDictValue('物品类型', baseInfo.assetType) }}
  14. </view>
  15. </view>
  16. <view class="item">
  17. <view class="s1"> 物品编码 </view>
  18. <view class="s2">
  19. {{ baseInfo.assetCode }}
  20. </view>
  21. </view>
  22. <view class="item">
  23. <view class="s1"> 物品名称 </view>
  24. <view class="s2">
  25. {{ baseInfo.assetName }}
  26. </view>
  27. </view>
  28. <view class="item" v-for="(item, index) in uniqueData" :key="index">
  29. <view class="s1"> {{ item.label }} </view>
  30. <view class="s2">
  31. {{ baseInfo[item.prop] }}
  32. </view>
  33. </view>
  34. <view class="item">
  35. <view class="s1"> 分类 </view>
  36. <view class="s2">
  37. {{ baseInfo.classificationUrl }}
  38. </view>
  39. </view>
  40. <view class="item">
  41. <view class="s1"> 计量单位 </view>
  42. <view class="s2">
  43. {{ baseInfo.unit }}
  44. </view>
  45. </view>
  46. <view class="item">
  47. <view class="s1"> 安全库存 </view>
  48. <view class="s2">
  49. {{ baseInfo.safeStock }}
  50. </view>
  51. </view>
  52. <view class="item">
  53. <view class="s1"> 实时库存 </view>
  54. <view class="s2">
  55. {{ baseInfo.realInventoryNum }}
  56. </view>
  57. </view>
  58. <view class="item">
  59. <view class="s1"> 锁单数量 </view>
  60. <view class="s2"> </view>
  61. </view>
  62. <view class="item">
  63. <view class="s1"> 空闲数量 </view>
  64. <view class="s2"> </view>
  65. </view>
  66. <view class="item">
  67. <view class="s1"> 允许拆包 </view>
  68. <view class="s2">
  69. {{ baseInfo.isUnpack ? '是' : '否' }}
  70. </view>
  71. </view>
  72. <view class="item">
  73. <view class="s1"> 描述 </view>
  74. <view class="s2">
  75. {{ baseInfo.description }}
  76. </view>
  77. </view>
  78. </view>
  79. <uni-collapse accordion>
  80. <!-- 模具、物料 -->
  81. <uni-collapse-item
  82. :show-animation="true"
  83. :open="false"
  84. :typeOpen="1"
  85. title="匹配产品"
  86. v-if="[6, 3].includes(baseInfo.assetType)"
  87. >
  88. <view class="match-view">
  89. <view
  90. class="match-item"
  91. v-for="(item, index) in productData"
  92. :key="index"
  93. >
  94. <view>{{ item.informationCode }}</view>
  95. <view>{{ item.informationName }}</view>
  96. </view>
  97. </view>
  98. <u-empty v-if="!productData.length" class="emptyPadding"> </u-empty>
  99. </uni-collapse-item>
  100. <!-- 生产设备、产品 -->
  101. <uni-collapse-item
  102. :show-animation="true"
  103. :open="false"
  104. :typeOpen="1"
  105. title="匹配模具"
  106. v-if="[1, 4].includes(baseInfo.assetType)"
  107. >
  108. <view class="match-view">
  109. <view
  110. class="match-item"
  111. v-for="(item, index) in mouldData"
  112. :key="index"
  113. >
  114. <view class="label">{{ item.informationCode }}</view>
  115. <view>{{ item.informationName }}</view>
  116. </view>
  117. </view>
  118. <u-empty v-if="!mouldData.length" class="emptyPadding"> </u-empty>
  119. </uni-collapse-item>
  120. <!-- 生产设备 -->
  121. <uni-collapse-item
  122. :show-animation="true"
  123. :open="false"
  124. :typeOpen="1"
  125. title="匹配备品备件"
  126. v-if="[1].includes(baseInfo.assetType)"
  127. >
  128. <view class="match-view">
  129. <view
  130. class="match-item"
  131. v-for="(item, index) in partData"
  132. :key="index"
  133. >
  134. <view class="label">{{ item.informationCode }}</view>
  135. <view>{{ item.informationName }}</view>
  136. </view>
  137. </view>
  138. <u-empty v-if="!partData.length" class="emptyPadding"> </u-empty>
  139. </uni-collapse-item>
  140. <!-- 模具、备品备件 -->
  141. <uni-collapse-item
  142. :show-animation="true"
  143. :open="false"
  144. :typeOpen="1"
  145. title="匹配设备"
  146. v-if="[1].includes(baseInfo.assetType)"
  147. >
  148. <view class="match-view">
  149. <view
  150. class="match-item"
  151. v-for="(item, index) in facilityData"
  152. :key="index"
  153. >
  154. <view class="label">{{ item.informationCode }}</view>
  155. <view>{{ item.informationName }}</view>
  156. </view>
  157. </view>
  158. <u-empty v-if="!facilityData.length" class="emptyPadding"> </u-empty>
  159. </uni-collapse-item>
  160. </uni-collapse>
  161. </view>
  162. </template>
  163. <script>
  164. import { mapGetters, mapActions } from 'vuex'
  165. import { get } from '@/utils/api.js'
  166. // import { getDetails as getMatchData } from '@/api/stockManagement/itemInformation'
  167. export default {
  168. data () {
  169. return {
  170. productData: [],
  171. mouldData: [],
  172. partData: [],
  173. bomData: [],
  174. facilityData: []
  175. }
  176. },
  177. props: {
  178. baseInfo: {
  179. type: Object,
  180. default: () => ({})
  181. }
  182. },
  183. computed: {
  184. ...mapGetters(['getDictValue']),
  185. uniqueData () {
  186. switch (+this.baseInfo.assetType) {
  187. case 3: //物料
  188. return [{ label: '牌号', prop: 'brandNum' }]
  189. case 8: //耗材
  190. return [
  191. { label: '型号', prop: 'modelType' },
  192. { label: '规格', prop: 'specification' }
  193. ]
  194. case 4: //产品
  195. return [
  196. { label: '牌号', prop: 'brandNum' },
  197. { label: '型号', prop: 'modelType' },
  198. {
  199. label: '标准单重',
  200. prop: 'modelType',
  201. formatter (row) {
  202. if (!row?.extendField) return ''
  203. const extendField = JSON.parse(row.extendField)
  204. return `${extendField.unqualifiedRate || '-'}KG`
  205. }
  206. },
  207. {
  208. label: '不良品率',
  209. prop: 'modelType',
  210. formatter (row) {
  211. if (!row?.extendField) return ''
  212. const extendField = JSON.parse(row.extendField)
  213. return `${extendField.unqualifiedRate || '-'}%`
  214. }
  215. }
  216. ]
  217. case 5: //'周转车'
  218. return [
  219. { label: '规格', prop: 'specification' },
  220. {
  221. label: '材质',
  222. prop: 'texture',
  223. formatter (row) {
  224. if (!row?.extendField) return ''
  225. const extendField = JSON.parse(row.extendField)
  226. return extendField.texture
  227. }
  228. },
  229. {
  230. label: '长宽高',
  231. prop: '',
  232. formatter (row) {
  233. if (!row?.extendField) return ''
  234. const extendField = JSON.parse(row.extendField)
  235. return `${extendField.length || '-'}/${
  236. extendField.width || '-'
  237. }/${extendField.high || '-'}`
  238. }
  239. }
  240. ]
  241. case 2: //'舟皿'
  242. return [
  243. { label: '规格', prop: 'specification' },
  244. { label: '型号', prop: 'modelType' },
  245. {
  246. label: '角度',
  247. prop: '',
  248. formatter (row) {
  249. if (!row?.extendField) return ''
  250. const extendField = JSON.parse(row.extendField)
  251. return extendField.angle
  252. }
  253. },
  254. {
  255. label: '长宽高',
  256. prop: '',
  257. formatter (row) {
  258. if (!row?.extendField) return ''
  259. const extendField = JSON.parse(row.extendField)
  260. return `${extendField.length || '-'}*${
  261. extendField.width || '-'
  262. }*${extendField.high || '-'}`
  263. }
  264. }
  265. ]
  266. case 1: //'设备'
  267. return [
  268. { label: '型号', prop: 'modelType' },
  269. { label: '规格', prop: 'specification' }
  270. ]
  271. case 6: //'模具'
  272. return [
  273. { label: '牌号', prop: 'brandNum' },
  274. { label: '型号', prop: 'modelType' },
  275. {
  276. label: '收缩系数',
  277. prop: '',
  278. formatter (row) {
  279. if (!row?.extendField) return ''
  280. const extendField = JSON.parse(row.extendField)
  281. return extendField.shrinkageCoefficient
  282. }
  283. },
  284. {
  285. label: '芯杆数量',
  286. prop: '',
  287. formatter (row) {
  288. if (!row?.extendField) return ''
  289. const extendField = JSON.parse(row.extendField)
  290. return extendField.mandrelNum
  291. }
  292. },
  293. {
  294. label: '模孔数量',
  295. prop: '',
  296. formatter (row) {
  297. if (!row?.extendField) return ''
  298. const extendField = JSON.parse(row.extendField)
  299. return extendField.dieHoleNum
  300. }
  301. },
  302. {
  303. label: '上冲头数量',
  304. prop: '',
  305. formatter (row) {
  306. if (!row?.extendField) return ''
  307. const extendField = JSON.parse(row.extendField)
  308. return extendField.upperPunchNum
  309. }
  310. },
  311. {
  312. label: '下冲头数量',
  313. prop: '',
  314. formatter (row) {
  315. if (!row?.extendField) return ''
  316. const extendField = JSON.parse(row.extendField)
  317. return extendField.lowerPunchNum
  318. }
  319. }
  320. ]
  321. case 7: //'备品备件'
  322. return [
  323. { label: '规格', prop: 'specification' },
  324. { label: '型号', prop: 'modelType' }
  325. ]
  326. }
  327. return []
  328. }
  329. },
  330. created () {
  331. this.requestDict('物品类型')
  332. this._getMatchData()
  333. },
  334. methods: {
  335. ...mapActions('dict', ['requestDict']),
  336. async _getMatchData () {
  337. const res = await get(
  338. this.apiUrl + `/information/info/${this.baseInfo.materialId}`
  339. )
  340. if (res?.success) {
  341. for (const key in res.data.informationRelationMap) {
  342. this.matchList(key, res.data.informationRelationMap)
  343. }
  344. }
  345. },
  346. matchList (key, data) {
  347. switch (key) {
  348. case 'w01': {
  349. this.facilityData = data[key]
  350. break
  351. }
  352. case 'w04': {
  353. this.mouldData = data[key]
  354. break
  355. }
  356. case 'w05': {
  357. this.partData = data[key]
  358. break
  359. }
  360. case 'w07': {
  361. this.productData = data[key]
  362. break
  363. }
  364. default:
  365. break
  366. }
  367. }
  368. }
  369. }
  370. </script>
  371. <style lang="scss" scoped>
  372. .list-wrap-1 {
  373. padding: 30rpx;
  374. .item {
  375. color: #000000;
  376. font-size: 28rpx;
  377. padding: 10rpx 0;
  378. display: flex;
  379. justify-content: space-between;
  380. }
  381. .item + .item {
  382. border-top: 1px dashed #555;
  383. }
  384. }
  385. .emptyPadding {
  386. padding: 20rpx 0;
  387. }
  388. .match-view {
  389. display: flex;
  390. flex-wrap: wrap;
  391. justify-content: space-between;
  392. padding: 20rpx;
  393. .match-item {
  394. width: 49%;
  395. display: flex;
  396. justify-content: space-between;
  397. border: 1px solid #ccc;
  398. padding: 0rpx 10rpx;
  399. box-sizing: border-box;
  400. & + .match-item {
  401. margin-left: 2%;
  402. }
  403. > view {
  404. padding: 15rpx 0;
  405. }
  406. .label {
  407. border-right: 1rpx solid #ccc;
  408. padding-right: 5rpx;
  409. }
  410. }
  411. }
  412. </style>