details.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <div class="page-title">
  5. <el-page-header @back="goBack">
  6. <div slot="content" class="pageContent">
  7. <div>物品详情</div>
  8. <el-form class="topform">
  9. <el-form-item label="物品类型" label-width="70px">
  10. <span>{{ itemValue }}</span>
  11. </el-form-item>
  12. </el-form>
  13. </div>
  14. </el-page-header>
  15. </div>
  16. <div class="table-container">
  17. <div class="tree-col">
  18. <ItemDetail ref="itemDetailRef" :customForm="customForm" />
  19. </div>
  20. <div class="attribute-row">
  21. <RowDetail
  22. ref="rowDetailRef"
  23. :customForm="customForm"
  24. :defaultNum="defaultNum"
  25. />
  26. <div
  27. class="row-table"
  28. v-if="defaultNum != '8' && defaultNum != '2' && defaultNum != '5'"
  29. >
  30. <el-tabs v-model="activeName" type="card">
  31. <el-tab-pane
  32. label="匹配产品"
  33. name="product"
  34. v-if="defaultNum == '3' || defaultNum == '6'"
  35. >
  36. <!-- 数据表格 -->
  37. <ele-pro-table
  38. ref="table"
  39. :columns="columns_product"
  40. :datasource="productData"
  41. :needPage="false"
  42. height="calc(100vh - 265px)"
  43. full-height="calc(100vh - 116px)"
  44. tool-class="ele-toolbar-form"
  45. cache-key="systemOrgUserTable"
  46. >
  47. </ele-pro-table>
  48. </el-tab-pane>
  49. <el-tab-pane
  50. label="匹配模具"
  51. name="mould"
  52. v-if="defaultNum == '1' || defaultNum == '4'"
  53. >
  54. <!-- 数据表格 -->
  55. <ele-pro-table
  56. ref="table"
  57. :columns="columns_mould"
  58. :datasource="mouldData"
  59. :needPage="false"
  60. height="calc(100vh - 265px)"
  61. full-height="calc(100vh - 116px)"
  62. tool-class="ele-toolbar-form"
  63. cache-key="systemOrgUserTable"
  64. >
  65. </ele-pro-table>
  66. </el-tab-pane>
  67. <el-tab-pane
  68. label="匹配备品备件"
  69. name="part"
  70. v-if="defaultNum == '1'"
  71. >
  72. <!-- 数据表格 -->
  73. <ele-pro-table
  74. ref="table"
  75. :columns="columns_part"
  76. :datasource="partData"
  77. :needPage="false"
  78. height="calc(100vh - 265px)"
  79. full-height="calc(100vh - 116px)"
  80. tool-class="ele-toolbar-form"
  81. cache-key="systemOrgUserTable"
  82. >
  83. </ele-pro-table>
  84. </el-tab-pane>
  85. <el-tab-pane label="BOM表" name="bom" v-if="defaultNum == '4'">
  86. <!-- 数据表格 -->
  87. <ele-pro-table
  88. ref="table"
  89. :columns="columns_bom"
  90. :datasource="bomData"
  91. :needPage="false"
  92. height="calc(100vh - 265px)"
  93. full-height="calc(100vh - 116px)"
  94. tool-class="ele-toolbar-form"
  95. cache-key="systemOrgUserTable"
  96. >
  97. <!-- 表头工具栏 -->
  98. <template v-slot:toolbar>
  99. <div class="bom-top">
  100. <div class="top-input">
  101. <span>基本数量</span>
  102. <div class="input-box">{{ customForm.basicNum }}</div>
  103. <span>{{ customForm.measuringUnit }}</span>
  104. </div>
  105. </div>
  106. </template>
  107. <!-- 操作列 -->
  108. <template v-slot:num="{ row, $index }">
  109. {{ row.num }}
  110. </template>
  111. </ele-pro-table>
  112. </el-tab-pane>
  113. <el-tab-pane
  114. label="匹配设备"
  115. name="facility"
  116. v-if="defaultNum == '6' || defaultNum == '7'"
  117. >
  118. <!-- 数据表格 -->
  119. <ele-pro-table
  120. ref="table"
  121. :columns="columns_facility"
  122. :datasource="facilityData"
  123. :needPage="false"
  124. height="calc(100vh - 265px)"
  125. full-height="calc(100vh - 116px)"
  126. tool-class="ele-toolbar-form"
  127. cache-key="systemOrgUserTable"
  128. >
  129. </ele-pro-table>
  130. </el-tab-pane>
  131. </el-tabs>
  132. </div>
  133. </div>
  134. </div>
  135. </el-card>
  136. </div>
  137. </template>
  138. <script>
  139. import matchMixins from './components/match-mixins';
  140. import ItemDetail from './components/ItemDetail';
  141. import RowDetail from './components/RowDetail';
  142. import dictMixins from '@/mixins/dictMixins';
  143. import { getDetails } from '@/api/classifyManage/itemInformation';
  144. export default {
  145. components: { ItemDetail, RowDetail },
  146. mixins: [dictMixins, matchMixins],
  147. data () {
  148. return {
  149. // typeList: [
  150. // { id: 1, value: '1 生产设备', prefix: '1', code: 1 },
  151. // { id: 2, value: '2 舟皿', prefix: '2', code: 2 },
  152. // { id: 3, value: '5 周转车', prefix: '5', code: 5 },
  153. // { id: 4, value: '6 模具', prefix: '6', code: 6 },
  154. // { id: 5, value: '7 备品备件', prefix: '7', code: 7 },
  155. // { id: 6, value: '3 物料', prefix: '3', code: 3 },
  156. // { id: 7, value: '4 产品', prefix: '4', code: 4 },
  157. // { id: 8, value: '8 耗材', prefix: '8', code: 8 }
  158. // ],
  159. defaultNum: '1',
  160. // itemForm:{
  161. // priceType:0, dateType:0,
  162. // },
  163. customForm: {
  164. addList: []
  165. },
  166. activeName: 'product',
  167. productData: [],
  168. mouldData: [],
  169. partData: [],
  170. bomData: [],
  171. facilityData: [],
  172. pagination: {
  173. page: 1,
  174. size: 10,
  175. total: 0
  176. },
  177. itemValue: ''
  178. };
  179. },
  180. computed: {
  181. prefix () {
  182. const obj =
  183. (this.dict[this.dictEnum['分类编号']] || []).find(
  184. (itm) => itm.dictCode === this.defaultNum
  185. ) || {};
  186. return obj && obj.dictValue;
  187. },
  188. typeList () {
  189. const noList = this.dict[this.dictEnum['分类编号']] || [];
  190. return (this.dict[this.dictEnum['类型用途']] || []).map((item) => {
  191. const obj =
  192. noList.find((itm) => itm.dictCode === item.dictCode) || {};
  193. return {
  194. ...item,
  195. value: `${obj.dictValue} ${item.dictValue}`,
  196. name: item.dictValue,
  197. prefix: obj.dictValue,
  198. code: item.dictCode
  199. };
  200. });
  201. }
  202. },
  203. async created () {
  204. await this.requestDict('分类编号');
  205. await this.requestDict('类型用途');
  206. this.getDetilInfo(this.$route.query.id);
  207. },
  208. methods: {
  209. async getDetilInfo (id) {
  210. const data = await getDetails(id);
  211. this.customForm = data;
  212. this.defaultNum = data.type;
  213. this.formatterValue(data.type);
  214. this.setDefault(data.type);
  215. for (const key in this.customForm.categoryVoRelationMap) {
  216. this.matchList(key, this.customForm.categoryVoRelationMap);
  217. }
  218. },
  219. formatterValue (code) {
  220. this.typeList.map((item) => {
  221. if (item.code == code) {
  222. this.itemValue = item.value;
  223. }
  224. });
  225. },
  226. goBack () {
  227. this.$router.go(-1);
  228. },
  229. // 显示默认选中的tab
  230. setDefault (val) {
  231. switch (val) {
  232. case '3': {
  233. this.activeName = 'product';
  234. break;
  235. }
  236. case '1': {
  237. this.activeName = 'mould';
  238. break;
  239. }
  240. case '4': {
  241. this.activeName = 'mould';
  242. break;
  243. }
  244. case '6': {
  245. this.activeName = 'product';
  246. break;
  247. }
  248. case '7': {
  249. this.activeName = 'facility';
  250. break;
  251. }
  252. default:
  253. break;
  254. }
  255. },
  256. matchList (key, data) {
  257. switch (key) {
  258. case '1': {
  259. this.facilityData = data[key];
  260. break;
  261. }
  262. case '6': {
  263. this.mouldData = data[key];
  264. break;
  265. }
  266. case '7': {
  267. this.partData = data[key];
  268. break;
  269. }
  270. case '4': {
  271. this.productData = data[key];
  272. break;
  273. }
  274. case '3': {
  275. this.bomData = data[key];
  276. break;
  277. }
  278. default:
  279. break;
  280. }
  281. },
  282. handleDelete (index, row) {},
  283. //点击添加打开弹窗
  284. clickAdd () {
  285. this.$refs.addDialogRef.equipmentdialog = true;
  286. },
  287. handleCurrent (page) {
  288. this.pagination.page = page;
  289. // this._getList(this.params)
  290. },
  291. handleSize (size) {
  292. this.pagination.page = 1;
  293. this.pagination.size = size;
  294. // this._getList(this.params)
  295. }
  296. // 物品类型格式化
  297. // classificationCodeFormatter (row) {
  298. // let itemName = '';
  299. // this.typeList.map((item) => {
  300. // if (item.code == row.type) {
  301. // itemName = item.value;
  302. // }
  303. // });
  304. // return itemName;
  305. // }
  306. }
  307. };
  308. </script>
  309. <style lang="scss" scoped>
  310. .ele-body {
  311. :deep(.page-title) {
  312. border-bottom: 1px solid #eaeefb;
  313. padding-bottom: 8px;
  314. margin-bottom: 16px;
  315. display: flex;
  316. align-items: center;
  317. .el-page-header__left {
  318. display: flex;
  319. align-items: center;
  320. }
  321. .pageContent {
  322. display: flex;
  323. align-items: center;
  324. font-size: 18px;
  325. color: #303133;
  326. .topform {
  327. margin-left: 30px;
  328. display: flex;
  329. align-items: center;
  330. .el-form-item {
  331. margin-bottom: 0;
  332. }
  333. }
  334. }
  335. }
  336. .table-container {
  337. flex: 1;
  338. display: flex;
  339. overflow: hidden;
  340. .tree-col {
  341. margin-right: 10px;
  342. width: 25%;
  343. min-width: 250px;
  344. overflow: auto;
  345. padding: 20px 20px 20px 10px;
  346. background-color: #fff;
  347. margin-top: 10px;
  348. border: 1px solid #e6ebf5;
  349. border-radius: 4px;
  350. box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
  351. }
  352. }
  353. :deep(.attribute-row) {
  354. padding: 20px 5px;
  355. background: #fff;
  356. margin-top: 10px;
  357. overflow: auto;
  358. flex: 1;
  359. border: 1px solid #e6ebf5;
  360. border-radius: 4px;
  361. box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
  362. position: relative;
  363. .row-table {
  364. width: 100%;
  365. margin: 20px auto 0;
  366. .table-box {
  367. width: 100%;
  368. margin: 10px auto;
  369. min-height: 400px;
  370. }
  371. .bom-top {
  372. width: 100%;
  373. display: flex;
  374. align-items: center;
  375. justify-content: flex-start;
  376. .top-input {
  377. margin-left: 20px;
  378. display: flex;
  379. align-items: center;
  380. justify-content: flex-start;
  381. .input-box {
  382. width: 150px;
  383. margin: 0 10px;
  384. display: inline-box;
  385. }
  386. }
  387. }
  388. }
  389. .page-footer-btn {
  390. background: #fff;
  391. z-index: 1;
  392. position: fixed;
  393. bottom: 40px;
  394. right: 80px;
  395. text-align: right;
  396. width: 50%;
  397. }
  398. }
  399. }
  400. </style>