BaseInfo.vue 12 KB

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