outsourcingOutbound.vue 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910
  1. <!-- 仓库委外申请(委外发货出库) 出库标识 -->
  2. <template>
  3. <div class="ele-body">
  4. <el-card shadow="never">
  5. <el-form
  6. :model="formData"
  7. ref="formName"
  8. label-width="110px"
  9. :rules="rules"
  10. >
  11. <el-row :gutter="20">
  12. <el-col :span="8">
  13. <el-form-item label="出库场景" prop="bizType">
  14. <span>{{ outboundTypeMapping[formData.bizType] }}</span>
  15. </el-form-item></el-col
  16. >
  17. <el-col :span="8">
  18. <el-form-item label="领料单" prop="sourceBizNo">
  19. <span>{{ formData.sourceBizNo }}</span>
  20. </el-form-item>
  21. </el-col>
  22. <el-col :span="8">
  23. <el-form-item label="出库物品类型" prop="extInfo.assetType">
  24. <span>{{ assetTypeMapping[formData.extInfo.assetType] }}</span>
  25. </el-form-item>
  26. </el-col>
  27. <el-col :span="8">
  28. <el-form-item label="权属部门" prop="deptName">
  29. <el-input
  30. v-if="!isStorage"
  31. placeholder="权属部门"
  32. disabled
  33. v-model="formData.extInfo.deptName"
  34. clearable
  35. />
  36. <span v-else>{{ formData.extInfo.deptName }}</span>
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="8">
  40. <el-form-item label="出库登记人">
  41. <el-input
  42. v-if="!isStorage"
  43. placeholder="登记人"
  44. disabled
  45. v-model="formData.extInfo.createUserName"
  46. clearable
  47. />
  48. <span v-else>{{ formData.extInfo.createUserName }}</span>
  49. </el-form-item></el-col
  50. >
  51. <el-col :span="8">
  52. <el-form-item label="领料人部门" prop="verifyDeptName">
  53. <selectTree
  54. v-if="!isStorage"
  55. ref="tree"
  56. class="form-ipt"
  57. size="medium"
  58. style="width: 100%"
  59. clearable
  60. :options="treeList"
  61. :props="{
  62. value: 'code',
  63. label: 'name',
  64. children: 'children'
  65. }"
  66. @getValue="auditorDeptClick"
  67. />
  68. <span v-else>{{ formData.extInfo.verifyDeptName }}</span>
  69. </el-form-item>
  70. </el-col>
  71. <el-col :span="8">
  72. <el-form-item label="领料人" prop="fromUser">
  73. <el-select
  74. v-if="!isStorage"
  75. v-model="formData.fromUser"
  76. filterable
  77. placeholder="请选择领料人"
  78. >
  79. <el-option
  80. v-for="item in llrLsit"
  81. :key="item.id"
  82. :label="item.name"
  83. :value="item.id"
  84. @click.native="
  85. () => (formData.extInfo.fromUserPhone = item.phone)
  86. "
  87. >
  88. </el-option>
  89. </el-select>
  90. <span v-else>{{ formData.fromUser }}</span>
  91. </el-form-item></el-col
  92. >
  93. <el-col :span="8">
  94. <el-form-item label="领料人联系方式" prop="fromUserPhone">
  95. <el-input
  96. v-if="!isStorage"
  97. placeholder="请输入"
  98. disabled
  99. v-model="formData.extInfo.fromUserPhone"
  100. clearable
  101. />
  102. <span v-else>{{ formData.fromUserPhone }}</span>
  103. </el-form-item></el-col
  104. >
  105. <el-col :span="24">
  106. <el-form-item label="备注" prop="remark">
  107. <el-input
  108. v-if="!isStorage"
  109. v-model="formData.remark"
  110. clearable
  111. type="textarea"
  112. placeholder="请详细说明"
  113. :rows="4"
  114. ></el-input>
  115. <span v-else>{{ formData.remark }}</span>
  116. </el-form-item>
  117. </el-col>
  118. </el-row>
  119. </el-form>
  120. <div v-if="!isStorage">
  121. <el-button
  122. style="margin-bottom: 20px; float: right; margin-right: 20px"
  123. type="primary"
  124. @click="addStock"
  125. >添加</el-button
  126. >
  127. </div>
  128. <div class="material">
  129. <div style="width: 100%; text-align: right"></div>
  130. <div>
  131. <header-title title="物品清单"></header-title>
  132. <div class="mt10 form-table">
  133. <el-form
  134. ref="warehousingMaterialListRef"
  135. :model="{ warehousingMaterialList: warehousingMaterialList }"
  136. :show-message="false"
  137. >
  138. <el-table
  139. ref="multipleTable"
  140. :data="warehousingMaterialList"
  141. tooltip-effect="dark"
  142. style="width: 100%"
  143. stripe
  144. :header-cell-style="{ background: '#EEEEEE', border: 'none' }"
  145. >
  146. <el-table-column label="序号" type="index" width="50">
  147. </el-table-column>
  148. <el-table-column
  149. label="编码"
  150. prop="assetCode"
  151. width="150"
  152. ></el-table-column>
  153. <el-table-column
  154. label="名称"
  155. prop="assetName"
  156. width="150"
  157. ></el-table-column>
  158. <el-table-column
  159. v-for="(item, index) in tableHeader"
  160. :key="index"
  161. align="center"
  162. :label="item.label"
  163. width="150"
  164. :prop="item.prop"
  165. >
  166. <template slot-scope="{ row }">
  167. <template v-if="item.formatter">{{
  168. item.formatter(row)
  169. }}</template>
  170. <template v-else>{{ row[item.prop] }}</template>
  171. </template>
  172. </el-table-column>
  173. <el-table-column
  174. label="批号"
  175. prop="manualBatchNo"
  176. width="100"
  177. ></el-table-column>
  178. <el-table-column
  179. label="批次号"
  180. prop="batchNo"
  181. ></el-table-column>
  182. <el-table-column label="最小包装单元" width="120">
  183. <template slot-scope="{ row }">
  184. {{ row.minPackingCount }}{{ row.measuringUnit }}/{{
  185. row.minUnit
  186. }}
  187. </template>
  188. </el-table-column>
  189. <el-table-column label="包装数量" prop="availableCountBase">
  190. <template slot-scope="{ row }">
  191. {{ row.packingCountBase }}{{ row.minUnit }}
  192. </template>
  193. </el-table-column>
  194. <el-table-column
  195. label="计量数量"
  196. prop="availableCountBase"
  197. ></el-table-column>
  198. <el-table-column
  199. label="计量单位"
  200. prop="measuringUnit"
  201. ></el-table-column>
  202. <el-table-column label="重量" prop="weight"></el-table-column>
  203. <el-table-column
  204. label="重量单位"
  205. prop="weightUnit"
  206. ></el-table-column>
  207. <el-table-column
  208. v-if="!isStorage"
  209. label="仓库"
  210. width="300"
  211. prop="warehouseName"
  212. ></el-table-column>
  213. <el-table-column
  214. v-else
  215. label="仓库"
  216. width="300"
  217. prop="position"
  218. >
  219. </el-table-column>
  220. <!-- <el-table-column v-if="!isStorage" label="操作" width="200">
  221. <template slot-scope="{ row, $index }">
  222. <el-button type="text" @click="listDel(row, $index)"
  223. >删除</el-button
  224. >
  225. </template>
  226. </el-table-column> -->
  227. </el-table>
  228. </el-form>
  229. </div>
  230. <header-title class="mt20" title="包装清单"></header-title>
  231. <div class="mt10 form-table">
  232. <BatchDetail
  233. :assetType="formData.extInfo.assetType"
  234. :data="batchDetailsVOList"
  235. />
  236. </div>
  237. </div>
  238. <div class="mt20">
  239. <el-tabs v-model="activeName" type="card">
  240. <el-tab-pane :label="`${title}明细`" name="a">
  241. <el-table
  242. ref="multipleTable"
  243. :data="materialCodeReqList"
  244. tooltip-effect="dark"
  245. style="width: 100%"
  246. stripe
  247. :header-cell-style="rowClass"
  248. >
  249. <el-table-column label="序号" type="index" width="50">
  250. </el-table-column>
  251. <el-table-column
  252. :label="`编码`"
  253. width="150"
  254. prop="assetCode"
  255. ></el-table-column>
  256. <el-table-column label="名称" prop="name" width="150">
  257. </el-table-column>
  258. <el-table-column
  259. label="批号"
  260. prop="manualBatchNo"
  261. width="100"
  262. ></el-table-column>
  263. <el-table-column label="批次号" prop="batchNo">
  264. </el-table-column>
  265. <el-table-column
  266. label="发货条码"
  267. prop="barcodes"
  268. width="80"
  269. :show-overflow-tooltip="true"
  270. ></el-table-column>
  271. <el-table-column
  272. v-if="dimension == 4"
  273. label="包装编码"
  274. width="150"
  275. prop="onlyCode"
  276. ></el-table-column>
  277. <el-table-column
  278. v-for="(item, index) in tableHeader"
  279. :key="index"
  280. align="center"
  281. :label="item.label"
  282. width="150"
  283. :prop="item.prop"
  284. >
  285. <template slot-scope="{ row }">
  286. <template v-if="item.formatter">{{
  287. item.formatter(row)
  288. }}</template>
  289. <template v-else>{{ row[item.prop] }}</template>
  290. </template>
  291. </el-table-column>
  292. <el-table-column
  293. label="物料编码"
  294. width="250"
  295. prop="no"
  296. ></el-table-column>
  297. <el-table-column label="计量数量" prop="">
  298. <template slot-scope="{ row }">1</template>
  299. </el-table-column>
  300. <el-table-column
  301. label="计量单位"
  302. prop="measuringUnit"
  303. ></el-table-column>
  304. <el-table-column
  305. label="物料代号"
  306. prop="meterielCode"
  307. width="130"
  308. >
  309. </el-table-column>
  310. <el-table-column
  311. label="客户代号"
  312. prop="clientCode"
  313. ></el-table-column>
  314. <el-table-column label="刻码" prop="engrave"></el-table-column>
  315. <el-table-column label="重量" prop="weight"></el-table-column>
  316. <el-table-column
  317. label="重量单位"
  318. prop="weightUnit"
  319. ></el-table-column>
  320. </el-table>
  321. </el-tab-pane>
  322. </el-tabs>
  323. </div>
  324. </div>
  325. </el-card>
  326. <AssetsDialog
  327. ref="assetsDialogRef"
  328. :title="title"
  329. :warehousingMaterialList="selectionList"
  330. :assetType="formData.extInfo.assetType"
  331. @detailData="detailData"
  332. />
  333. </div>
  334. </template>
  335. <script>
  336. import { getById } from '@/api/bpm/components/outsourcedWarehousing/index';
  337. import outin from '@/api/warehouseManagement/outin';
  338. import { getPurchaseOutSourceSendDetailAPI } from '@/api/bpm/components/purchasingManage/outSourceSend';
  339. import warehouseDefinition from '@/api/warehouseManagement/warehouseDefinition';
  340. import { deepClone } from '@/components/FormGenerator/utils/index';
  341. import {
  342. getTreeByPid,
  343. getTreeByGroup,
  344. allCategoryLevel,
  345. getOutInBySourceBizNoOrError
  346. } from '@/api/classifyManage';
  347. import pickOrder from '@/views/bpm/outgoingManagement/components/pickOrder.vue';
  348. import {
  349. warehousingType,
  350. outputSceneState,
  351. emergencyState,
  352. materialType
  353. } from '@/utils/dict/index';
  354. import selectTree from '@/components/selectTree';
  355. import AssetsDialog from '@/views/bpm/outgoingManagement/components/AssetsDialog.vue';
  356. import { tableHeader } from '@/views/bpm/handleTask/components/inoutBound/common';
  357. import BatchDetail from '@/views/bpm/outgoingManagement/components/batchDetail.vue';
  358. import { getLoginUser } from '@/api/login';
  359. export default {
  360. components: {
  361. BatchDetail,
  362. pickOrder,
  363. selectTree,
  364. AssetsDialog
  365. },
  366. props: {
  367. taskDefinitionKey: {
  368. type: String,
  369. default: ''
  370. },
  371. activeComp: {
  372. type: String,
  373. default: ''
  374. },
  375. businessId: {
  376. type: String,
  377. default: ''
  378. },
  379. infoData: {
  380. type: Object,
  381. default: {}
  382. }
  383. },
  384. data() {
  385. return {
  386. form: {}, // 用于传参
  387. outboundTypeMapping: {}, // 出库类型映射表
  388. outputSceneState, // 出库类型类型
  389. codeList: [], // 物品类型列表
  390. assetTypeMapping: {}, // 物品类型映射表
  391. isStorage: false, // 是否出库
  392. dimension: '3',
  393. materialType,
  394. warehousingType,
  395. emergencyState,
  396. title: '',
  397. warehousingMaterialList: [],
  398. activeName: 'a',
  399. treeList: [],
  400. formData: {
  401. extInfo: {
  402. assetType: '', //物品类型
  403. deptCode: '', //部门code
  404. deptName: '', //部门名称
  405. verifyDeptCode: '', //审核部门编码
  406. verifyDeptName: '', //审核部门名称
  407. deliveryName: '', //送货人名称
  408. fromUserPhone: '', //送货人电话
  409. sourceBizNo: '', //销售订单
  410. urgent: '', //紧急状态
  411. supplierId: '', //供应商ID
  412. supplierName: '', //供应商名称
  413. createUserName: '' //创建人名字
  414. },
  415. fromUser: '', //送货人
  416. bizType: '', //物品类型
  417. verifyId: '', //审核人Id
  418. verifyName: '', //审核人名称
  419. createUserId: '',
  420. remark: ''
  421. },
  422. rules: {
  423. bizType: {
  424. required: true,
  425. message: '请选择出库场景',
  426. trigger: 'change'
  427. },
  428. fromUser: {
  429. required: true,
  430. message: '请选择领料人',
  431. trigger: 'change'
  432. }
  433. },
  434. llrLsit: [],
  435. options: [],
  436. onSelectTableDataVal: [],
  437. batchDetailsVOList: [],
  438. materialCodeReqList: [],
  439. selectionList: [],
  440. materialObj: {},
  441. wlParams: {}
  442. };
  443. },
  444. computed: {
  445. tableHeader() {
  446. return tableHeader(this.formData.extInfo.assetType);
  447. }
  448. },
  449. async mounted() {
  450. await this.initData();
  451. // const data = await getById(this.businessId);
  452. // console.log(data);
  453. //未出库
  454. this.isStorage = false;
  455. // 物品类型
  456. this.formData.extInfo.assetType =
  457. this.infoData.detailList[0].rootCategoryLevelId;
  458. // 出库类型(自选领用出库)
  459. this.formData.bizType = '11';
  460. // 增加添加物品判断条件
  461. this.title = this.assetTypeMapping[this.formData.extInfo.assetType];
  462. // 添加单据来源
  463. this.formData.sourceBizNo = this.infoData.code;
  464. // 将出库状态改成出库状态 2出库 1入库
  465. this.formData.type = 2;
  466. console.log(this.formData);
  467. this.$forceUpdate();
  468. // let returnDetailsForm = await getPurchaseOutSourceSendDetailAPI(
  469. // this.businessId
  470. // );
  471. // this.form = returnDetailsForm;
  472. // console.log(returnDetailsForm);
  473. // getOutInBySourceBizNoOrError(returnDetailsForm.code)
  474. // .then((data) => {
  475. // // 已经出库(详情)
  476. // console.log('有订单来源');
  477. // this.isStorage = true; // 已经出库
  478. // this.formData = deepClone(data);
  479. // // 填充遍历数据
  480. // console.log('this.formData-----', this.formData);
  481. // if (this.formData.outInDetailVOList?.length > 0) {
  482. // this.warehousingMaterialList = []; // 物品列表
  483. // this.batchDetailsVOList = []; // 包装列表
  484. // this.materialCodeReqList = []; // 物料列表
  485. // this.formData.outInDetailVOList.forEach((goodsiItem) => {
  486. // goodsiItem.assetName = goodsiItem.name;
  487. // goodsiItem.assetCode = goodsiItem.categoryCode;
  488. // goodsiItem.outInNum = goodsiItem.packingCount;
  489. // this.warehousingMaterialList.push(goodsiItem);
  490. // goodsiItem.outInDetailRecordVOList.forEach((wrapItem) => {
  491. // wrapItem.assetName = goodsiItem.name;
  492. // wrapItem.assetCode = goodsiItem.categoryCode;
  493. // // wrapItem.count =
  494. // // wrapItem.outInDetailRecordMaterialDetailVOList.length; // 增加包装计量数量
  495. // this.batchDetailsVOList.push(wrapItem);
  496. // wrapItem.outInDetailRecordMaterialDetailVOList.forEach(
  497. // (materialItem) => {
  498. // materialItem.isPack = true;
  499. // this.materialCodeReqList.push(materialItem);
  500. // }
  501. // );
  502. // });
  503. // });
  504. // }
  505. // })
  506. // .catch(() => {
  507. // //未出库
  508. // this.isStorage = false;
  509. // // 物品类型
  510. // this.formData.extInfo.assetType =
  511. // returnDetailsForm.categoryLevelTopId;
  512. // // 出库类型(委外出库)
  513. // this.formData.bizType = '6';
  514. // // 增加添加物品判断条件
  515. // this.title = this.assetTypeMapping[this.formData.extInfo.assetType];
  516. // // 添加单据来源
  517. // this.formData.sourceBizNo = returnDetailsForm.code;
  518. // // 将出库状态改成出库状态 2出库 1入库
  519. // this.formData.type = 2;
  520. // this.$forceUpdate();
  521. // });
  522. },
  523. methods: {
  524. //获取回执附件
  525. getQualityFile() {
  526. return {};
  527. },
  528. detailData(data, dimension) {
  529. this.dimension = dimension;
  530. console.log('总数居', data);
  531. this.onSelectTableDataVal = data.realTimeInventoryVOList;
  532. this.warehousingMaterialList = data.realTimeInventoryVOList.map(
  533. (next) => {
  534. delete next.updateTime;
  535. delete next.createTime;
  536. return {
  537. ...next,
  538. realInventoryAmount: 0,
  539. assetType: this.formData.extInfo.assetType,
  540. outInNum: '',
  541. assetCode: next.code,
  542. assetName: next.name,
  543. bizStatus: 2,
  544. contactCode: next.contactCode
  545. };
  546. }
  547. );
  548. // this.batchDetailsVOList = data.batchDetailsVOList;
  549. if (dimension == 4) {
  550. this.materialCodeReqList = data.wlList;
  551. this.selectionList = data.wlList;
  552. //包装维度出库
  553. const list = data.realTimeInventoryVOList;
  554. //获取包装维度
  555. let packArr = [];
  556. for (const item of list) {
  557. if (item.inventoryDetailsVOList.length != 0) {
  558. for (const iterator of item.inventoryDetailsVOList) {
  559. packArr.push({ ...iterator, batchNo: iterator.batchNum });
  560. }
  561. }
  562. }
  563. this.batchDetailsVOList = packArr.map((item) => {
  564. return {
  565. ...item,
  566. packingCountBase:
  567. dimension == 4 || dimension == 3 ? 1 : item.packingCountBase
  568. // weight: 0
  569. };
  570. });
  571. let params = {
  572. realTimeInventoryNewPOList: data.realTimeInventoryVOList
  573. };
  574. for (const item of params.realTimeInventoryNewPOList) {
  575. item.inventoryDetailsNewPOList = item.inventoryDetailsVOList;
  576. for (const detail of item.inventoryDetailsNewPOList) {
  577. detail.outInMaterialDetailsAddPOList = [];
  578. for (const wlItem of data.wlList) {
  579. if (detail.id === wlItem.recordId) {
  580. detail.outInMaterialDetailsAddPOList.push({
  581. ...wlItem
  582. });
  583. }
  584. }
  585. }
  586. }
  587. this.wlParams = params;
  588. this.materialObj = data;
  589. } else if (dimension == 3) {
  590. //包装维度出库
  591. const list = data.realTimeInventoryVOList;
  592. //获取包装维度
  593. let packArr = [];
  594. for (const item of list) {
  595. if (item.inventoryDetailsVOList.length != 0) {
  596. for (const iterator of item.inventoryDetailsVOList) {
  597. packArr.push({ ...iterator, batchNo: iterator.batchNum });
  598. }
  599. }
  600. }
  601. this.batchDetailsVOList = packArr.map((item) => {
  602. return {
  603. ...item,
  604. packingCountBase:
  605. dimension == 4 || dimension == 3 ? 1 : item.packingCountBase
  606. // weight: 0
  607. };
  608. });
  609. //物料维度数据
  610. let meteArr = [];
  611. for (const item of packArr) {
  612. if (item.materialDetailsVOList.length != 0) {
  613. for (const iterator of item.materialDetailsVOList) {
  614. meteArr.push({
  615. ...iterator
  616. });
  617. }
  618. }
  619. }
  620. this.materialCodeReqList = meteArr;
  621. //再次打开选择上
  622. this.selectionList = list;
  623. //send数据
  624. this.wlParams = { realTimeInventoryNewPOList: list };
  625. this.wlParams.realTimeInventoryNewPOList.forEach((item) => {
  626. item.inventoryDetailsNewPOList = item.inventoryDetailsVOList;
  627. item.inventoryDetailsNewPOList.forEach((ite) => {
  628. ite.weight = 0;
  629. ite.outInMaterialDetailsAddPOList = ite.materialDetailsVOList;
  630. });
  631. });
  632. } else {
  633. // else if (dimension == 2) {
  634. // this.batchDetailsVOList = data.wlList;
  635. // this.selectionList = data.wlList;
  636. // }
  637. //物品维度出库
  638. const list = data.realTimeInventoryVOList;
  639. //获取包装维度
  640. let packArr = [];
  641. for (const item of list) {
  642. if (item.inventoryDetailsVOList.length != 0) {
  643. for (const iterator of item.inventoryDetailsVOList) {
  644. packArr.push({ ...iterator, batchNo: iterator.batchNum });
  645. }
  646. }
  647. }
  648. this.batchDetailsVOList = packArr.map((item) => {
  649. return {
  650. ...item,
  651. packingCountBase: dimension == 3 ? 1 : item.packingCountBase
  652. // weight: 0
  653. };
  654. });
  655. //物料维度数据
  656. let meteArr = [];
  657. for (const item of packArr) {
  658. if (item.materialDetailsVOList.length != 0) {
  659. for (const iterator of item.materialDetailsVOList) {
  660. meteArr.push({
  661. ...iterator
  662. });
  663. }
  664. }
  665. }
  666. this.materialCodeReqList = meteArr;
  667. //再次打开选择上
  668. this.selectionList = list;
  669. //send数据
  670. this.wlParams = { realTimeInventoryNewPOList: list };
  671. this.wlParams.realTimeInventoryNewPOList.forEach((item) => {
  672. item.inventoryDetailsNewPOList = item.inventoryDetailsVOList;
  673. item.inventoryDetailsNewPOList.forEach((ite) => {
  674. ite.weight = 0;
  675. ite.outInMaterialDetailsAddPOList = ite.materialDetailsVOList;
  676. });
  677. });
  678. }
  679. },
  680. getStatus() {
  681. return true;
  682. },
  683. getReturnStorage() {
  684. return new Promise((resolve) => {
  685. this.$refs.formName.validate((valid) => {
  686. if (valid) {
  687. if (!this.warehousingMaterialList?.length) {
  688. return this.$message.error('请添加出库明细!');
  689. }
  690. let obj = { ...this.formData, type: 2 };
  691. obj.extInfo.sourceBizNo = obj.sourceBizNo;
  692. obj.fromType = obj.type;
  693. obj = { ...obj, ...this.wlParams };
  694. if (this.dimension == 4) {
  695. obj.num = this.materialObj.wlList.length;
  696. } else {
  697. obj.num = this.materialCodeReqList.length;
  698. }
  699. console.log(obj);
  700. let selectGoodId = [];
  701. obj.realTimeInventoryNewPOList =
  702. obj.realTimeInventoryNewPOList.map((goodItem) => {
  703. selectGoodId.push(goodItem.id);
  704. goodItem.inventoryDetailsNewPOList =
  705. goodItem.inventoryDetailsNewPOList.map((wrapItem) => {
  706. wrapItem.workOrderId =
  707. this.infoData.detailList[0].workOrderId;
  708. wrapItem.pickOrderId =
  709. this.infoData.detailList[0].pickOrderId;
  710. wrapItem.taskId = this.infoData.detailList[0].taskId;
  711. wrapItem.instanceId = goodItem.id;
  712. wrapItem.demandQuantity = wrapItem.availableCountBase;
  713. return wrapItem;
  714. });
  715. return goodItem;
  716. });
  717. let boolen = true;
  718. console.log(selectGoodId);
  719. console.log(this.infoData.detailList);
  720. this.infoData.detailList.forEach((item) => {
  721. if (
  722. selectGoodId.indexOf(item.categoryId) == -1 &&
  723. selectGoodId.indexOf(item.instanceId) == -1
  724. ) {
  725. boolen = false;
  726. }
  727. });
  728. if (boolen) {
  729. resolve(obj);
  730. } else {
  731. this.$confirm('领料物品与出库物品不一致, 是否继续?', '提示', {
  732. confirmButtonText: '确定',
  733. cancelButtonText: '取消',
  734. type: 'warning'
  735. })
  736. .then(() => {
  737. resolve(obj);
  738. })
  739. .catch(() => {
  740. console.log('取消');
  741. });
  742. }
  743. }
  744. });
  745. });
  746. },
  747. rowClass({ row, column, rowIndex, columnIndex }) {
  748. if (rowIndex === 1) {
  749. return {
  750. display: 'none',
  751. background: '#EEEEEE',
  752. border: 'none'
  753. };
  754. }
  755. return { background: '#EEEEEE', border: 'none' };
  756. },
  757. // 部门点击事件
  758. async auditorDeptClick(data) {
  759. console.log(data);
  760. this.formData.extInfo.verifyDeptCode = data?.id;
  761. this.formData.extInfo.verifyDeptName = data?.name;
  762. this.formData.verifyId = '';
  763. this.formData.verifyName = '';
  764. this.$refs.formName.validateField('verifyDeptName');
  765. if (data) {
  766. this.getStaffList(data);
  767. }
  768. },
  769. // 获取领料人列表
  770. async getStaffList(data) {
  771. let res = await warehouseDefinition.getUserPage({
  772. groupId: data.id,
  773. size: 9999,
  774. page: 1
  775. });
  776. this.llrLsit = res.list;
  777. },
  778. //出库明细删除
  779. listDel(row, index) {
  780. this.warehousingMaterialList.splice(index, 1);
  781. if (this.warehousingMaterialList.length == 0) {
  782. this.formData.sourceBizNo = '';
  783. this.formData.extInfo.clientName = '';
  784. this.formData.extInfo.clientUser = '';
  785. this.formData.extInfo.clientUserPhone = '';
  786. }
  787. // 从 this.batchDetailsVOList 中删除满足条件的对象
  788. this.removeItemsFromArray(
  789. this.batchDetailsVOList,
  790. (item) => item.code.substr(0, 12) === row.code
  791. );
  792. // 从 this.materialCodeReqList 中删除满足条件的对象
  793. this.removeItemsFromArray(
  794. this.materialCodeReqList,
  795. (item) => item.assetCode === row.code
  796. );
  797. },
  798. // 删除数组中满足条件的对象
  799. removeItemsFromArray(arr, condition) {
  800. for (let i = arr.length - 1; i >= 0; i--) {
  801. if (condition(arr[i])) {
  802. arr.splice(i, 1);
  803. }
  804. }
  805. },
  806. // 获取物品类型列表
  807. async getAssetTypeOptions() {
  808. const { data } = await allCategoryLevel();
  809. this.codeList = data;
  810. let obj = {};
  811. data.forEach((item) => {
  812. obj[item.id] = item.name;
  813. });
  814. this.assetTypeMapping = obj;
  815. },
  816. // 出库类型映射表
  817. async getOutboundTypeMapping() {
  818. let obj = {};
  819. this.outputSceneState.forEach((item) => {
  820. obj[item.code] = item.label;
  821. });
  822. this.outboundTypeMapping = obj;
  823. },
  824. async initData() {
  825. await this.getAssetTypeOptions();
  826. await this.getOutboundTypeMapping();
  827. const res = await warehouseDefinition.tree();
  828. this.treeList = this.$util.toTreeData({
  829. data: res,
  830. idField: 'id',
  831. parentIdField: 'parentId'
  832. });
  833. const info = await getLoginUser();
  834. let obj = res.find(
  835. (item) => item.id === info.deptId[info.deptId.length - 1]
  836. );
  837. if (!obj) return;
  838. this.formData.extInfo.deptCode = obj.id;
  839. this.formData.extInfo.deptName = obj.name;
  840. this.formData.extInfo.createUserName = info.name;
  841. this.formData.createUserId = info.id;
  842. },
  843. addStock() {
  844. if (!this.title) return this.$message.error('请选择出库产品类型');
  845. if (!this.formData.bizType && this.formData.bizType !== 0) {
  846. return this.$message.error('请选择出库场景');
  847. }
  848. this.$refs.assetsDialogRef.open();
  849. }
  850. }
  851. };
  852. </script>
  853. <style lang="scss" scoped>
  854. ::v-deep.form-table {
  855. .el-form-item {
  856. margin-bottom: 0;
  857. }
  858. .el-input__inner {
  859. padding: 0 10px;
  860. }
  861. }
  862. .p20 {
  863. padding: 20px;
  864. }
  865. .el-select,
  866. .el-date-editor {
  867. width: 100%;
  868. }
  869. .el-form-item {
  870. margin-bottom: 22px;
  871. }
  872. .material {
  873. margin-top: 20px;
  874. .flex {
  875. display: flex;
  876. justify-content: space-between;
  877. font-size: 14px;
  878. align-items: center;
  879. .red {
  880. color: #ff4949;
  881. }
  882. }
  883. }
  884. .mt10 {
  885. margin-top: 10px;
  886. }
  887. .mt20 {
  888. margin-top: 20px;
  889. }
  890. .center {
  891. text-align: center;
  892. }
  893. </style>