outdetails.vue 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <!-- <div class="page-title">-->
  5. <!-- <headerTitle title="出库单详情"></headerTitle>-->
  6. <!-- </div>-->
  7. <!-- <div class="stepsStatus">-->
  8. <!-- <el-steps :active="active" align-center>-->
  9. <!-- <el-step title="创建"></el-step>-->
  10. <!-- <el-step title="待审核"></el-step>-->
  11. <!-- <el-step :title="stepsTitle" :status="stepsStatus"></el-step>-->
  12. <!-- </el-steps>-->
  13. <!-- </div>-->
  14. <div>
  15. <div class="content-detail">
  16. <header-title title="基本信息" size="16px"></header-title>
  17. <div class="mt20">
  18. <el-form label-width="120px">
  19. <el-col :span="8">
  20. <el-form-item label="出库单号:">
  21. <span>{{ infoData.bizNo && infoData.bizNo.toString() }}</span>
  22. </el-form-item>
  23. </el-col>
  24. <el-col :span="8">
  25. <el-form-item label="出库物品类型:">
  26. <span>{{
  27. handleAssetType(infoData?.extInfo?.assetType)
  28. }}</span>
  29. </el-form-item>
  30. </el-col>
  31. <el-col :span="8">
  32. <el-form-item label="出库场景:">
  33. <span>{{ getSceneState(infoData.bizType) }}</span>
  34. </el-form-item>
  35. </el-col>
  36. <el-col :span="8">
  37. <el-form-item label="关联订单:">
  38. <span>{{ extInfo?.documentSource }}</span>
  39. </el-form-item>
  40. </el-col>
  41. <el-col :span="8" v-if="infoData.bizType == 3">
  42. <el-form-item label="客户名称:">
  43. <span>{{ infoData.clientName }}</span>
  44. </el-form-item> </el-col
  45. ><el-col :span="8" v-if="infoData.bizType == 3">
  46. <el-form-item label="客户联系人:">
  47. <span>{{ infoData.clientUser }}</span>
  48. </el-form-item> </el-col
  49. ><el-col :span="8" v-if="infoData.bizType == 3">
  50. <el-form-item label="客户电话:">
  51. <span>{{ infoData.clientPhone }}</span>
  52. </el-form-item>
  53. </el-col>
  54. <el-col :span="8">
  55. <el-form-item
  56. :label="infoData.bizType == 4 ? '领料单:' : '来源单据:'"
  57. >
  58. <span>{{ infoData.sourceBizNo }}</span>
  59. </el-form-item>
  60. </el-col>
  61. <el-col :span="8">
  62. <el-form-item label="领料人联系方式:">
  63. <span>{{ infoData.fromUserPhone }}</span>
  64. </el-form-item>
  65. </el-col>
  66. <el-col :span="8">
  67. <el-form-item label="出库登记人:">
  68. <span>{{ infoData.extInfo?.createUserName }}</span>
  69. </el-form-item>
  70. </el-col>
  71. <el-col :span="8">
  72. <el-form-item label="权属部门:">
  73. <span>{{ infoData.extInfo?.deptName }}</span>
  74. </el-form-item>
  75. </el-col>
  76. <!-- <el-col :span="8">
  77. <el-form-item label="创建时间">
  78. <span>{{ infoData.createTime }}</span>
  79. </el-form-item>
  80. </el-col>
  81. <el-col :span="8">
  82. <el-form-item label="出库时间">
  83. <span>{{ infoData.createTime }}</span>
  84. </el-form-item>
  85. </el-col> -->
  86. <el-col :span="8">
  87. <el-form-item label="状态:">
  88. <span>{{ stepsTitle }}</span>
  89. </el-form-item>
  90. </el-col>
  91. <el-col :span="8">
  92. <el-form-item label="领料人部门:">
  93. <span>{{ infoData?.extInfo?.verifyDeptName }}</span>
  94. </el-form-item>
  95. </el-col>
  96. <el-col :span="8">
  97. <el-form-item label="领料人:">
  98. <span>{{ infoData.fromUser }}</span>
  99. </el-form-item>
  100. </el-col>
  101. <el-col :span="16">
  102. <el-form-item label="备注:">
  103. <span>{{ infoData.remark }}</span>
  104. </el-form-item>
  105. </el-col>
  106. </el-form>
  107. </div>
  108. </div>
  109. <div class="content-detail mt20">
  110. <header-title title="产品信息" size="16px"></header-title>
  111. <el-table
  112. ref="productListTable"
  113. :data="productList"
  114. border
  115. tooltip-effect="dark"
  116. :max-height="300"
  117. :header-cell-style="rowClass"
  118. @selection-change="handleSelectionProductChange"
  119. >
  120. <el-table-column label="序号" type="index" width="50">
  121. </el-table-column>
  122. <el-table-column
  123. type="selection"
  124. width="55"
  125. align="center"
  126. :selectable="selectable"
  127. >
  128. </el-table-column>
  129. <el-table-column
  130. minWidth="150"
  131. label="出库单号"
  132. prop="bizNo"
  133. align="center"
  134. :show-overflow-tooltip="true"
  135. ></el-table-column>
  136. <el-table-column
  137. label="仓库"
  138. prop="warehouseName"
  139. :show-overflow-tooltip="true"
  140. >
  141. </el-table-column>
  142. <el-table-column
  143. label="编码"
  144. prop="categoryCode"
  145. align="center"
  146. :show-overflow-tooltip="true"
  147. ></el-table-column>
  148. <el-table-column
  149. label="名称"
  150. align="center"
  151. prop="categoryName"
  152. :show-overflow-tooltip="true"
  153. ></el-table-column>
  154. <el-table-column
  155. v-if="clientEnvironmentId == 4"
  156. label="级别"
  157. prop="level"
  158. align="center"
  159. >
  160. </el-table-column>
  161. <el-table-column
  162. label="型号"
  163. align="center"
  164. prop="categoryModel"
  165. :show-overflow-tooltip="true"
  166. ></el-table-column>
  167. <el-table-column
  168. label="规格"
  169. align="center"
  170. prop="specification"
  171. :show-overflow-tooltip="true"
  172. ></el-table-column>
  173. <el-table-column
  174. label="牌号"
  175. align="center"
  176. prop="brandNum"
  177. :show-overflow-tooltip="true"
  178. ></el-table-column>
  179. <el-table-column
  180. v-for="(item, index) in newColumns"
  181. :key="index"
  182. :label="item.label"
  183. :align="item.align"
  184. :prop="item.prop"
  185. :show-overflow-tooltip="item.showOverflowTooltip"
  186. ></el-table-column>
  187. <el-table-column
  188. label="批次号"
  189. prop="batchNo"
  190. align="center"
  191. :show-overflow-tooltip="true"
  192. >
  193. </el-table-column>
  194. <el-table-column
  195. label="最小包装单元"
  196. align="center"
  197. width="120"
  198. prop="minPackingQuantity"
  199. >
  200. <template slot-scope="{ row, $index }">
  201. {{ row.minPackingQuantity }} {{ row.measureUnit }} /{{
  202. row.packingUnit
  203. }}
  204. </template>
  205. </el-table-column>
  206. <el-table-column
  207. label="包装数量"
  208. prop="packingQuantity"
  209. align="center"
  210. >
  211. <template slot-scope="{ row, $index }">
  212. {{ row.packingQuantity }} {{ row.packingUnit }}
  213. </template>
  214. </el-table-column>
  215. <el-table-column
  216. label="计量数量"
  217. prop="measureQuantity"
  218. width="100"
  219. align="center"
  220. >
  221. </el-table-column>
  222. <el-table-column label="计量单位" prop="measureUnit" align="center">
  223. <template slot-scope="{ row, $index }">
  224. <template>
  225. {{ row.measureUnit }}
  226. </template>
  227. </template>
  228. </el-table-column>
  229. <el-table-column
  230. label="重量"
  231. prop="weight"
  232. align="center"
  233. :show-overflow-tooltip="true"
  234. >
  235. </el-table-column>
  236. <el-table-column
  237. label="重量单位"
  238. prop="weightUnit"
  239. align="center"
  240. :show-overflow-tooltip="true"
  241. >
  242. </el-table-column>
  243. <el-table-column label="单价" prop="price" align="center">
  244. <template slot-scope="{ row }">
  245. <template>
  246. {{ row.price ? row.price : ' ' + '元' }}/{{ row.measureUnit }}
  247. </template>
  248. </template>
  249. </el-table-column>
  250. <el-table-column
  251. label="金额"
  252. align="center"
  253. prop="contentImage"
  254. :show-overflow-tooltip="true"
  255. >
  256. <template slot-scope="{ row, $index }">
  257. {{ row.totalMoney ? row.totalMoney : 0 }}
  258. </template>
  259. </el-table-column>
  260. <el-table-column
  261. v-if="clientEnvironmentId == 4"
  262. label="采购原因"
  263. align="center"
  264. prop="purpose"
  265. :show-overflow-tooltip="true"
  266. ></el-table-column>
  267. </el-table>
  268. </div>
  269. <div class="mt20">
  270. <header-title :title="`包装明细`" size="16px"></header-title>
  271. <el-table
  272. ref="showPackingListTable"
  273. :data="showPackingList"
  274. tooltip-effect="dark"
  275. :max-height="300"
  276. border
  277. @selection-change="handleSelectionChange"
  278. :row-class-name="tableRowClassName"
  279. :header-cell-style="rowClass"
  280. v-el-table-infinite-scroll="pickingHandleScroll"
  281. >
  282. <el-table-column
  283. label="序号"
  284. type="index"
  285. width="50"
  286. align="center"
  287. >
  288. </el-table-column>
  289. <el-table-column
  290. type="selection"
  291. :selectable="selectablePick"
  292. width="55"
  293. align="center"
  294. >
  295. </el-table-column>
  296. <el-table-column
  297. label="编码"
  298. prop="categoryCode"
  299. :show-overflow-tooltip="true"
  300. ></el-table-column>
  301. <el-table-column
  302. label="名称"
  303. prop="categoryName"
  304. :show-overflow-tooltip="true"
  305. ></el-table-column>
  306. <el-table-column
  307. label="批次号"
  308. prop="batchNo"
  309. :show-overflow-tooltip="true"
  310. ></el-table-column>
  311. <el-table-column
  312. label="发货条码"
  313. prop="barcodes"
  314. :show-overflow-tooltip="true"
  315. ></el-table-column>
  316. <el-table-column
  317. label="包装编码"
  318. prop="packageNo"
  319. :show-overflow-tooltip="true"
  320. ></el-table-column>
  321. <el-table-column
  322. label="包装数量"
  323. prop="packingQuantity"
  324. :show-overflow-tooltip="true"
  325. ></el-table-column>
  326. <el-table-column
  327. label="包装单位"
  328. prop="packingUnit"
  329. :show-overflow-tooltip="true"
  330. ></el-table-column>
  331. <el-table-column
  332. label="计量数量"
  333. prop="measureQuantity"
  334. :show-overflow-tooltip="true"
  335. ></el-table-column>
  336. <el-table-column
  337. label="计量单位"
  338. prop="measureUnit"
  339. :show-overflow-tooltip="true"
  340. ></el-table-column>
  341. <el-table-column
  342. label="物料代号"
  343. prop="materielDesignation"
  344. :show-overflow-tooltip="true"
  345. >
  346. </el-table-column>
  347. <el-table-column
  348. label="客户代号"
  349. prop="clientCode"
  350. :show-overflow-tooltip="true"
  351. >
  352. </el-table-column>
  353. <el-table-column
  354. label="刻码"
  355. prop="engrave"
  356. :show-overflow-tooltip="true"
  357. >
  358. </el-table-column>
  359. <el-table-column
  360. label="重量"
  361. prop="weight"
  362. :show-overflow-tooltip="true"
  363. >
  364. </el-table-column>
  365. <el-table-column
  366. label="重量单位"
  367. prop="weightUnit"
  368. :show-overflow-tooltip="true"
  369. >
  370. </el-table-column>
  371. <el-table-column
  372. label="质检结果"
  373. prop="result"
  374. :show-overflow-tooltip="true"
  375. >
  376. <template slot-scope="{ row }">
  377. <span>{{ qualityResults[row.result] }}</span>
  378. </template>
  379. </el-table-column>
  380. <el-table-column
  381. label="质检状态"
  382. prop="status"
  383. :show-overflow-tooltip="true"
  384. >
  385. <template slot-scope="{ row }">
  386. <span>{{ qualityStatus[row.status] }}</span>
  387. </template>
  388. </el-table-column>
  389. <el-table-column
  390. label="生产日期"
  391. prop="productionDate"
  392. :show-overflow-tooltip="true"
  393. >
  394. </el-table-column>
  395. <el-table-column
  396. label="采购日期"
  397. prop="purchaseDate"
  398. :show-overflow-tooltip="true"
  399. >
  400. </el-table-column>
  401. </el-table>
  402. </div>
  403. <div class="mt20">
  404. <header-title :title="`物料明细`" size="16px"> </header-title>
  405. <el-table
  406. ref="multipleTable"
  407. :data="showMaterialList"
  408. tooltip-effect="dark"
  409. :max-height="300"
  410. :row-class-name="tableRowClassName"
  411. :header-cell-style="rowClass"
  412. border
  413. style="width: 100%"
  414. stripe
  415. height="300px"
  416. v-el-table-infinite-scroll="materielHandleScroll"
  417. >
  418. <el-table-column label="序号" type="index" width="50">
  419. </el-table-column>
  420. <el-table-column
  421. label="编码"
  422. prop="categoryCode"
  423. :show-overflow-tooltip="true"
  424. ></el-table-column>
  425. <el-table-column
  426. label="名称"
  427. prop="categoryName"
  428. :show-overflow-tooltip="true"
  429. ></el-table-column>
  430. <el-table-column label="批次号" prop="batchNo"></el-table-column>
  431. <el-table-column
  432. label="物料编码"
  433. prop="materialCode"
  434. :show-overflow-tooltip="true"
  435. ></el-table-column>
  436. <el-table-column
  437. label="发货条码"
  438. prop="barcodes"
  439. :show-overflow-tooltip="true"
  440. ></el-table-column>
  441. <el-table-column
  442. label="计量数量"
  443. prop="measureQuantity"
  444. ></el-table-column>
  445. <el-table-column
  446. label="计量单位"
  447. prop="measureUnit"
  448. ></el-table-column>
  449. <el-table-column label="物料代号" prop="materielDesignation">
  450. </el-table-column>
  451. <el-table-column label="客户代号" prop="clientCode">
  452. </el-table-column>
  453. <el-table-column label="刻码" prop="engrave"> </el-table-column>
  454. <el-table-column width="100" label="重量" prop="weight">
  455. </el-table-column>
  456. <el-table-column label="重量单位" prop="weightUnit">
  457. </el-table-column>
  458. <el-table-column label="质检结果" prop="result" width="120">
  459. <template slot-scope="{ row }">
  460. <span>{{ qualityResults[row.result] }}</span>
  461. </template>
  462. </el-table-column>
  463. <el-table-column label="质检状态" prop="status" width="120">
  464. <template slot-scope="{ row }">
  465. <span>{{ qualityStatus[row.status] }}</span>
  466. </template>
  467. </el-table-column>
  468. </el-table>
  469. </div>
  470. </div>
  471. </el-card>
  472. </div>
  473. </template>
  474. <script>
  475. import elTableInfiniteScroll from 'el-table-infinite-scroll';
  476. import { getFile } from '@/api/system/file/index.js';
  477. // import { allCategoryLevel } from '@/api/classifyManage';
  478. import { useDictLabel } from '@/utils/dict';
  479. import { outputSceneStateEnum } from '@/enum/dict';
  480. import { mapGetters, mapActions } from 'vuex';
  481. import {
  482. allCategoryLevel,
  483. getInfoBySourceBizNoAPI,
  484. getInfoBySourceBizNoAll
  485. } from '@/api/wms';
  486. import { getUserDetail } from '@/api/system/organization/index.js';
  487. import { fieldModelAPI } from '@/api/main';
  488. export default {
  489. components: {},
  490. directives: {
  491. 'el-table-infinite-scroll': elTableInfiniteScroll
  492. },
  493. data() {
  494. return {
  495. newColumns: [], // 动态表头
  496. qualityStatus: {
  497. 0: '未质检',
  498. 1: '已质检'
  499. }, // 质检状态 0未检 1已检
  500. qualityResults: {
  501. 1: '合格',
  502. 2: '不合格'
  503. }, // 质检结果 1合格 2不合格
  504. productList: [], // 产品列表
  505. showPackingList: [], // 展示的包装列表
  506. packingList: [], // 包装列表
  507. showMaterialList: [], // 展示物料列表
  508. materialList: [], // 物料列表
  509. extInfo: {}, // 扩展信息
  510. pageSize: 20,
  511. pickingPageNum: 1,
  512. materielPageNum: 1,
  513. codeList: [],
  514. infoData: {},
  515. stepsTitle: '已完成',
  516. stepsStatus: 'success',
  517. active: 0,
  518. multipleSelection: [],
  519. productSelection: []
  520. };
  521. },
  522. watch: {
  523. 'infoData.verifyStatus': {
  524. immediate: true,
  525. handler(val) {
  526. if (val == 0) {
  527. this.active = 1;
  528. this.stepsTitle = '未审核';
  529. this.stepsStatus = 'wait';
  530. } else if (val == 1) {
  531. this.active = 2;
  532. this.stepsTitle = '审核中';
  533. this.stepsStatus = 'process';
  534. } else if (val == 2) {
  535. this.active = 2;
  536. this.stepsTitle = '审核通过';
  537. this.stepsStatus = 'success';
  538. } else if (val == 3) {
  539. this.active = 2;
  540. this.stepsTitle = '驳回';
  541. this.stepsStatus = 'error';
  542. }
  543. }
  544. },
  545. packingList: {
  546. handler(newVal) {
  547. console.log('包装列表', newVal);
  548. console.log('当前包装列表加载页数', this.pickingPageNum);
  549. this.showPackingList = newVal.slice(
  550. 0,
  551. this.pageSize * (this.pickingPageNum > 0 ? this.pickingPageNum : 1)
  552. );
  553. },
  554. deep: true
  555. },
  556. materialList: {
  557. handler(newVal) {
  558. console.log('物料列表', newVal);
  559. console.log('当前物料列表加载页数', this.materielPageNum);
  560. this.showMaterialList = newVal.slice(
  561. 0,
  562. this.pageSize *
  563. (this.materielPageNum > 0 ? this.materielPageNum : 1)
  564. );
  565. },
  566. deep: true
  567. }
  568. },
  569. computed: {
  570. ...mapGetters(['getDictValue']),
  571. clientEnvironmentId() {
  572. return this.$store.state.user.info.clientEnvironmentId;
  573. }
  574. },
  575. created() {
  576. this.getFieldModel();
  577. this.requestDict('类型用途');
  578. this.getAllCategoryType();
  579. // this._getInfo();
  580. },
  581. methods: {
  582. selectable(row, index) {
  583. let arr = this.multipleSelection.map((item) => {
  584. return item.batchNo + item.categoryId;
  585. });
  586. return !arr.includes(row.batchNo + row.categoryId);
  587. },
  588. selectablePick(row, index) {
  589. let arr = this.productSelection.map((item) => {
  590. return item.batchNo + item.categoryId;
  591. });
  592. return !arr.includes(row.batchNo + row.categoryId);
  593. },
  594. // 获取动态表头
  595. getFieldModel() {
  596. fieldModelAPI({ fieldModel: 't_main_category' }).then((res) => {
  597. let newRes = res.map((m) => {
  598. return {
  599. prop: 'extField.' + m.prop,
  600. label: m.label,
  601. align: 'center',
  602. showOverflowTooltip: true
  603. };
  604. });
  605. this.newColumns = [...newRes];
  606. });
  607. },
  608. pickingHandleScroll() {
  609. console.log('---------pickingHandleScroll------------');
  610. if (this.showPackingList.length < this.packingList.length) {
  611. if (this.packingList.length > this.pageSize) {
  612. this.pickingPageNum += 1;
  613. }
  614. this.pickingFetchData();
  615. }
  616. },
  617. pickingFetchData() {
  618. const start = (this.pickingPageNum - 1) * this.pageSize;
  619. const end = start + this.pageSize;
  620. this.showPackingList = this.showPackingList.concat(
  621. this.packingList.slice(start, end)
  622. );
  623. },
  624. materielHandleScroll() {
  625. console.log('---------materielHandleScroll------------');
  626. if (this.showMaterialList.length < this.materialList.length) {
  627. if (this.materialList.length > this.pageSize) {
  628. this.materielPageNum += 1;
  629. }
  630. this.materielFetchData();
  631. }
  632. },
  633. materielFetchData() {
  634. const start = (this.materielPageNum - 1) * this.pageSize;
  635. const end = start + this.pageSize;
  636. this.showMaterialList = this.showMaterialList.concat(
  637. this.materialList.slice(start, end)
  638. );
  639. console.log(this.showMaterialList);
  640. },
  641. ...mapActions('dict', ['requestDict']),
  642. getSceneState: useDictLabel(outputSceneStateEnum),
  643. handleAssetType(r) {
  644. let codes = r && r.split(',');
  645. let name = codes?.map((code) => {
  646. return this.codeList.find((val) => val.dictCode == code)?.dictValue;
  647. });
  648. return name?.toString();
  649. },
  650. tableRowClassName({ row, rowIndex }) {
  651. console.log(row);
  652. if (row.result == 2) {
  653. return 'warning-row';
  654. } else {
  655. return '';
  656. }
  657. },
  658. rowClass({ row, column, rowIndex, columnIndex }) {
  659. if (rowIndex === 1) {
  660. return {
  661. display: 'none',
  662. background: '#EEEEEE'
  663. };
  664. }
  665. return { background: '#0000' };
  666. },
  667. async getAllCategoryType() {
  668. const { data } = await allCategoryLevel();
  669. this.codeList = data.map((item) => {
  670. return { dictCode: item.id, dictValue: item.name };
  671. });
  672. },
  673. async _getInfo(sourceBizNo, type, list = []) {
  674. const dataArray = await getInfoBySourceBizNoAll(sourceBizNo);
  675. let res = {};
  676. if (dataArray && dataArray.length > 0) {
  677. res = JSON.parse(JSON.stringify(dataArray[0]));
  678. res['outInDetailList'] = [];
  679. dataArray.forEach((item) => {
  680. console.log(item, 'item');
  681. item.outInDetailList.forEach((val) => {
  682. val['bizNo'] = item.bizNo;
  683. res['outInDetailList'].push(val);
  684. });
  685. });
  686. res['bizNo'] = dataArray.map((item) => item.bizNo);
  687. }
  688. let user = await getUserDetail(res.extInfo?.createUserId);
  689. res.extInfo['deptName'] = user.deptName;
  690. // res
  691. this.init(res, type);
  692. },
  693. init(res, type) {
  694. console.log(res, 'res');
  695. this.infoData = res;
  696. this.extInfo = res.extInfo;
  697. this.productList = res?.outInDetailList?.map(
  698. (productItem, productIndex) => {
  699. // productItem['bizNo'] = res.bizNo[productIndex]||res.bizNo[0];
  700. return {
  701. ...productItem,
  702. outInDetailRecordRequestList:
  703. productItem.outInDetailRecordRequestList.map((packingItem) => {
  704. return {
  705. ...packingItem,
  706. categoryName: productItem.categoryName,
  707. categoryCode: productItem.categoryCode,
  708. bizNo: productItem.bizNo,
  709. materialDetailList: packingItem.materialDetailList.map(
  710. (materialItem) => {
  711. return {
  712. ...materialItem,
  713. categoryName: productItem.categoryName,
  714. categoryCode: productItem.categoryCode
  715. };
  716. }
  717. )
  718. };
  719. })
  720. };
  721. }
  722. );
  723. // 获取包装维度数据
  724. const arr = [];
  725. for (const key in this.productList) {
  726. for (const k in this.productList[key].outInDetailRecordRequestList) {
  727. arr.push({
  728. ...this.productList[key].outInDetailRecordRequestList[k]
  729. });
  730. }
  731. }
  732. this.packingList = arr;
  733. // 获取物料维度数据
  734. let iArr = [];
  735. arr.forEach((item) => {
  736. item.materialDetailList.forEach((ele) => {
  737. iArr.push({ ...ele });
  738. });
  739. });
  740. this.materialList = iArr;
  741. console.log(this.packingList);
  742. console.log(this.materialList);
  743. this.pickingFetchData();
  744. this.materielFetchData();
  745. // if (type == 10) {
  746. // this.multipleSelection = this.showPackingList;
  747. // this.$emit('handleSave');
  748. // }
  749. },
  750. handleSelectionChange(val) {
  751. this.multipleSelection = val;
  752. },
  753. handleSelectionProductChange(val) {
  754. this.productSelection = val;
  755. },
  756. setMultipleSelection() {
  757. return (
  758. this.multipleSelection.map((item) => {
  759. item['outInCode'] = item.bizNo;
  760. item['packageId'] = item.id;
  761. item['wmsOutId'] = item.outInId;
  762. item['wmsOutNo'] = item.bizNo;
  763. item['outboundType'] = item.outType;
  764. item['outboundDetailId'] = item.id;
  765. item['productName'] = item.categoryName;
  766. item['productCode'] = item.categoryCode;
  767. item['measuringUnit'] = item.measureUnit;
  768. item['productId'] = item.categoryId;
  769. item['receiveTotalWeight'] = item.weight;
  770. item['provenance']= item['provenance']||[]
  771. this.productList.forEach((val) => {
  772. if (item.categoryCode == val.categoryCode) {
  773. item['warehouseId'] = val.warehouseId;
  774. item['warehouseName'] = val.warehouseName;
  775. }
  776. });
  777. item.id = '';
  778. return item;
  779. }) || []
  780. );
  781. },
  782. setProductSelection() {
  783. return (
  784. this.productSelection.map((item) => {
  785. item['outInCode'] = item.bizNo;
  786. item['wmsOutId'] = item.outInId;
  787. item['wmsOutNo'] = item.bizNo;
  788. item['outboundType'] = item.outType;
  789. // item['outboundDetailId'] = item.id;
  790. item['productName'] = item.categoryName;
  791. item['productCode'] = item.categoryCode;
  792. item['measuringUnit'] = item.measureUnit;
  793. item['productId'] = item.categoryId;
  794. item['receiveTotalWeight'] = item.weight;
  795. item['provenance']= item['provenance']||[]
  796. // this.productList.forEach((val) => {
  797. // if (item.categoryCode == val.categoryCode) {
  798. // item['warehouseId'] = val.warehouseId;
  799. // item['warehouseName'] = val.warehouseName;
  800. // }
  801. // });
  802. item.id = '';
  803. return item;
  804. }) || []
  805. );
  806. },
  807. getValue() {
  808. return [...this.setMultipleSelection(), ...this.setProductSelection()];
  809. },
  810. download(row) {
  811. if (row.storePath) {
  812. getFile({ objectName: row.storePath }, row.name);
  813. }
  814. }
  815. }
  816. };
  817. </script>
  818. <style lang="scss" scoped>
  819. .stepsStatus {
  820. width: 40%;
  821. margin: 0 auto;
  822. }
  823. .p20 {
  824. padding: 20px;
  825. }
  826. .flex {
  827. display: flex;
  828. }
  829. .title {
  830. justify-content: space-between;
  831. border-bottom: 1px solid #ccc;
  832. padding-bottom: 5px;
  833. span {
  834. font-size: 16px;
  835. }
  836. .col {
  837. padding-left: 40px;
  838. font-size: 14px;
  839. color: #aaaaaa;
  840. }
  841. }
  842. .degree {
  843. margin-right: 10px;
  844. padding: 0px 15px;
  845. color: #fff;
  846. font-size: 13px;
  847. line-height: 23px;
  848. border-radius: 23px;
  849. display: flex;
  850. align-items: center;
  851. justify-content: space-between;
  852. span {
  853. width: 5px;
  854. height: 5px;
  855. border-radius: 100%;
  856. margin-right: 6px;
  857. background-color: #fff;
  858. }
  859. }
  860. .red {
  861. background-color: rgb(163, 0, 20);
  862. }
  863. .blue {
  864. background-color: #1989fa;
  865. }
  866. .createdInfo {
  867. justify-content: space-around;
  868. margin-top: 10px;
  869. font-size: 14px;
  870. .col {
  871. color: #6e6e6e;
  872. padding-right: 10px;
  873. }
  874. }
  875. .mt40 {
  876. margin-top: 40px;
  877. }
  878. .custSteps {
  879. margin-top: 20px;
  880. margin-left: 70px;
  881. .box {
  882. width: 158px;
  883. border: 1px solid #ccc;
  884. padding: 10px;
  885. flex-direction: row;
  886. flex-wrap: wrap;
  887. // justify-content: space-between;
  888. font-size: 12px;
  889. color: #9e9e9e;
  890. .x {
  891. width: 20px;
  892. height: 15px;
  893. margin-right: 5px;
  894. }
  895. .q {
  896. background-color: #d0e4d5;
  897. }
  898. .b {
  899. background-color: #1989fa;
  900. }
  901. .g {
  902. background-color: #157a2c;
  903. }
  904. .r {
  905. background-color: #a30014;
  906. }
  907. .a {
  908. align-items: center;
  909. margin-bottom: 10px;
  910. }
  911. .mr10 {
  912. margin-right: 10px;
  913. }
  914. .mb0 {
  915. margin-bottom: 0;
  916. }
  917. }
  918. .stepsInfo {
  919. // flex: 1;
  920. width: 483px;
  921. }
  922. }
  923. .mt20 {
  924. margin-top: 20px;
  925. }
  926. .content-detail {
  927. overflow: hidden;
  928. }
  929. .executor {
  930. font-size: 14px;
  931. .col {
  932. color: #6e6e6e;
  933. padding-right: 10px;
  934. }
  935. }
  936. .result {
  937. justify-content: space-around;
  938. }
  939. .mr20 {
  940. margin-right: 20px;
  941. }
  942. .details {
  943. font-size: 14px;
  944. margin-bottom: 10px;
  945. }
  946. .customSteps {
  947. margin-top: 40px;
  948. font-size: 14px;
  949. margin-left: 80px;
  950. .time {
  951. font-size: 12px;
  952. color: #6e6e6e;
  953. margin-right: 20px;
  954. position: relative;
  955. &::after {
  956. content: '';
  957. width: 1px;
  958. height: 100%;
  959. background-color: #157a2c;
  960. position: absolute;
  961. right: -26px;
  962. }
  963. }
  964. .flex:last-child {
  965. .time {
  966. &::after {
  967. display: none;
  968. }
  969. }
  970. }
  971. .round {
  972. margin-right: 20px;
  973. width: 10px;
  974. height: 10px;
  975. border-radius: 100%;
  976. background-color: #157a2c;
  977. position: relative;
  978. span {
  979. position: absolute;
  980. top: 50%;
  981. left: 50%;
  982. width: 4px;
  983. height: 4px;
  984. background-color: #fff;
  985. border-radius: 100%;
  986. transform: translate(-2px, -2px);
  987. }
  988. }
  989. .text {
  990. .info {
  991. margin-top: 10px;
  992. width: 955px;
  993. background-color: #f0f3f3;
  994. overflow: hidden;
  995. padding: 10px;
  996. margin-bottom: 10px;
  997. }
  998. }
  999. }
  1000. </style>