addInvoiceDialog.vue 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132
  1. <template>
  2. <ele-modal
  3. custom-class="ele-dialog-form long-dialog-form"
  4. :centered="true"
  5. v-if="visible"
  6. :visible.sync="visible"
  7. :title="title"
  8. :close-on-click-modal="false"
  9. :append-to-body="true"
  10. width="70%"
  11. :maxable="true"
  12. :resizable="true"
  13. @close="cancel"
  14. >
  15. <el-form
  16. ref="form"
  17. :model="form"
  18. :rules="rules"
  19. class="el-form-box"
  20. label-width="120px"
  21. >
  22. <headerTitle title="发货信息"></headerTitle>
  23. <el-row :gutter="12">
  24. <el-col :span="12">
  25. <el-form-item label="销售订单" prop="orderNo">
  26. <el-input
  27. clearable
  28. v-model="form.orderNo"
  29. @click.native="handleOrderBtn"
  30. placeholder="请输入"
  31. :disabled="!!saleOrderData.id"
  32. />
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="12">
  36. <el-form-item label="受托收货单">
  37. <el-input
  38. clearable
  39. :disabled="!!saleOrderData.id"
  40. v-model="form.entrustedCode"
  41. @click.native="handleEntrustedReceive"
  42. placeholder="请输入"
  43. />
  44. </el-form-item>
  45. </el-col>
  46. </el-row>
  47. <el-row :gutter="12">
  48. <el-col :span="12">
  49. <el-form-item label="退货单">
  50. <el-input
  51. clearable
  52. :disabled="!!saleOrderData.id"
  53. v-model="form.sourceNo"
  54. @click.native="handleReturnGoodsBtn"
  55. placeholder="请输入"
  56. />
  57. </el-form-item>
  58. </el-col>
  59. <el-col :span="12">
  60. <el-form-item label="客户名称" prop="contactName">
  61. <el-input v-model="form.contactName" disabled></el-input>
  62. </el-form-item>
  63. </el-col>
  64. </el-row>
  65. <el-row :gutter="12">
  66. <el-col :span="12">
  67. <el-form-item label="客户联系人" prop="linkName">
  68. <el-input clearable v-model="form.linkName" placeholder="请输入" />
  69. </el-form-item>
  70. </el-col>
  71. <el-col :span="12">
  72. <el-form-item label="客户电话" prop="linkPhone">
  73. <el-input clearable v-model="form.linkPhone" placeholder="请输入" />
  74. </el-form-item>
  75. </el-col>
  76. <el-col :span="12">
  77. <el-form-item label="收货地址" prop="receiveAddress">
  78. <el-input
  79. clearable
  80. v-model="form.receiveAddress"
  81. placeholder="请输入"
  82. />
  83. </el-form-item>
  84. </el-col>
  85. <el-col :span="12">
  86. <el-form-item label="项目名称" prop="projectName">
  87. <el-input clearable v-model="form.projectName" :disabled="true" />
  88. </el-form-item>
  89. </el-col>
  90. <el-col :span="12">
  91. <el-form-item label="车牌号" prop="carNo">
  92. <el-select
  93. v-model="form.carNo"
  94. style="width: 100%"
  95. clearable
  96. multiple
  97. filterable
  98. allow-create
  99. default-first-option
  100. >
  101. <el-option
  102. :label="item.trakNumber"
  103. :value="item.trakNumber"
  104. v-for="(item, index) in carList"
  105. :key="index"
  106. ></el-option>
  107. </el-select>
  108. </el-form-item>
  109. </el-col>
  110. <el-col :span="12">
  111. <el-form-item label="托盘数" prop="trayNum">
  112. <el-input clearable v-model="form.trayNum" />
  113. </el-form-item>
  114. </el-col>
  115. <el-col :span="12">
  116. <el-form-item label="打印编码" prop="printNo">
  117. <el-input clearable v-model="form.printNo" />
  118. </el-form-item>
  119. </el-col>
  120. <el-col :span="12" style="height: 40px">
  121. <el-form-item label="送货方式" prop="deliveryTypeId">
  122. <DictSelection
  123. dictName="送货方式"
  124. clearable
  125. v-model="form.deliveryTypeId"
  126. filterable
  127. allow-create
  128. default-first-option
  129. style="width: 100%"
  130. >
  131. </DictSelection>
  132. </el-form-item>
  133. </el-col>
  134. <el-col :span="12">
  135. <el-form-item label="回执要求" prop="receiptRequirementTypeId">
  136. <el-radio-group v-model="form.receiptRequirementTypeId">
  137. <el-radio
  138. v-for="item in receiptRequirementTypeOption"
  139. :key="item.value"
  140. :label="item.value"
  141. >{{ item.label }}</el-radio
  142. >
  143. </el-radio-group>
  144. </el-form-item>
  145. </el-col>
  146. <el-col :span="12">
  147. <el-form-item prop="sendFiles" label="发货附件">
  148. <fileMain v-model="form.sendFiles"></fileMain>
  149. </el-form-item>
  150. </el-col>
  151. <el-col :span="12">
  152. <el-form-item prop="repliedFiles" label="回执附件">
  153. <fileMain v-model="form.repliedFiles"></fileMain>
  154. </el-form-item>
  155. </el-col>
  156. <el-col :span="12">
  157. <el-form-item prop="makerName" label="制单人" v-if="form.makerName">
  158. <el-input disabled v-model="form.makerName" />
  159. </el-form-item>
  160. </el-col>
  161. <el-col :span="12">
  162. <!-- <el-form-item prop="productionRequirements" label="生产要求">
  163. <el-input
  164. clearable
  165. v-model="form.productionRequirements"
  166. placeholder=""
  167. type="textarea"
  168. disabled
  169. />
  170. </el-form-item> -->
  171. </el-col>
  172. </el-row>
  173. </el-form>
  174. <el-tabs v-model="activeName" style="margin-top: 15px" type="border-card">
  175. <el-tab-pane label="物品清单" name="first">
  176. <inventoryTable
  177. :pricingWay="form.pricingWay"
  178. :entrustedCode="form.entrustedCode"
  179. ref="inventoryTableref"
  180. :orderId="form.orderId"
  181. :orderIds="form.orderIds"
  182. @replaceTableChange="replaceTableChange"
  183. :needProduce="saleOrderValue.needProduce"
  184. :typeIds="saleOrderValue.typedetailIds"
  185. :isTotalCount="isTotalCount"
  186. :oldProductList="oldProductList"
  187. :sourceType="form.sourceType"
  188. ></inventoryTable>
  189. </el-tab-pane>
  190. <el-tab-pane label="托盘清单" name="second">
  191. <palletTable
  192. ref="palletTableRef"
  193. @totalCountChange="totalCountChange"
  194. ></palletTable>
  195. </el-tab-pane>
  196. <el-tab-pane label="装载车叉车信息" name="third">
  197. <stowageTable ref="stowageTableRef"></stowageTable>
  198. </el-tab-pane>
  199. <el-tab-pane label="运输清单" name="fourth">
  200. <taskInfoTable
  201. ref="taskInfoTableRef"
  202. @setAddress="setAddress"
  203. ></taskInfoTable>
  204. </el-tab-pane>
  205. <el-tab-pane label="替代料" name="5">
  206. <replaceTable
  207. :pricingWay="form.pricingWay"
  208. ref="replaceRef"
  209. ></replaceTable>
  210. </el-tab-pane>
  211. </el-tabs>
  212. <div slot="footer" class="footer">
  213. <el-button type="primary" @click="save" v-click-once>保存</el-button>
  214. <el-button
  215. type="primary"
  216. v-if="isNeed_process_is_close"
  217. @click="save('sub')"
  218. v-click-once
  219. >提交</el-button
  220. >
  221. <el-button @click="cancel">返回</el-button>
  222. </div>
  223. <orderListDialog
  224. ref="orderListDialogRef"
  225. @changeParent="changeOrder"
  226. :contactData="contactData"
  227. :isAll="true"
  228. :isTotalCount="isTotalCount"
  229. ></orderListDialog>
  230. <!-- 受托发货单 -->
  231. <entrusted-receive-dialog
  232. :entrusted-receive-dialog-flag.sync="entrustedReceiveDialogFlag"
  233. v-if="entrustedReceiveDialogFlag"
  234. @changeParent="getInfo"
  235. ref="entrustedReceiveDialogRef"
  236. ></entrusted-receive-dialog>
  237. <process-submit-dialog
  238. :isNotNeedProcess="false"
  239. :processSubmitDialogFlag.sync="processSubmitDialogFlag"
  240. v-if="processSubmitDialogFlag"
  241. ref="processSubmitDialogRef"
  242. @reload="reload"
  243. ></process-submit-dialog>
  244. <!-- 退货单 -->
  245. <return-order-dialog
  246. :returnOrderDialogFlag.sync="returnOrderDialogFlag"
  247. v-if="returnOrderDialogFlag"
  248. returnSourceType=""
  249. hasHandleReceipt=""
  250. types=""
  251. @changeParent="getSReturnOrderInfo"
  252. ref="returnOrderDialogRef"
  253. >
  254. </return-order-dialog>
  255. </ele-modal>
  256. </template>
  257. <script>
  258. import fileUpload from '@/components/upload/fileUpload';
  259. import dictMixins from '@/mixins/dictMixins';
  260. import parentList from '@/views/saleManage/contact/components/parentList.vue';
  261. import { getSaleOrderDetails } from '@/api/saleManage/saleorder';
  262. import taskInfoTable from './taskInfoTable.vue';
  263. import {
  264. addSendInformation,
  265. UpdateSendInformation,
  266. getSendSaleOrderrecordDetailSplit
  267. } from '@/api/saleManage/saleordersendrecord';
  268. import { getPSaleEntrustedReceiveDetailAPI } from '@/api/saleManage/entrustedReceive';
  269. import inventoryTable from './inventoryTable.vue';
  270. import replaceTable from './replaceTable.vue';
  271. import stowageTable from './stowageTable.vue';
  272. import orderListDialog from './orderListDialog.vue';
  273. import { copyObj } from '@/utils/util';
  274. import entrustedReceiveDialog from './entrustedReceiveDialog.vue';
  275. import outSourceSendDialog from '@/views/purchasingManage/purchaseOrder/invoice/components/outSourceSendDialog.vue';
  276. import PalletTable from '@/views/saleManage/saleOrder/invoice/components/palletTable.vue';
  277. // import fileMain from '@/components/addDoc/index.vue';
  278. import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
  279. import { carBookPageListAPI } from '@/api/transportManager/carBook';
  280. import { projectsGetByIdAPI } from '@/api/pro';
  281. import { parameterGetByCode } from '@/api/main/index.js';
  282. import { getWarehouseListByIds } from '@/api/purchasingManage/returnGoods';
  283. import returnOrderDialog from '@/views/saleManage/saleOrder/customerReturnOrder/returnOrderDialog.vue';
  284. import { getReturnSaleOrderrecordDetail } from '@/api/saleManage/returnGoods';
  285. export default {
  286. mixins: [dictMixins],
  287. components: {
  288. processSubmitDialog,
  289. // fileMain,
  290. PalletTable,
  291. outSourceSendDialog,
  292. taskInfoTable,
  293. fileUpload,
  294. inventoryTable,
  295. orderListDialog,
  296. parentList,
  297. entrustedReceiveDialog,
  298. stowageTable,
  299. replaceTable,
  300. returnOrderDialog
  301. },
  302. //客户管理数据
  303. props: {
  304. contactData: {
  305. type: Object,
  306. default: () => {
  307. return {};
  308. }
  309. },
  310. saleOrderData: {
  311. type: Object,
  312. default: () => {
  313. return {};
  314. }
  315. },
  316. // 是否是退货单创建发货单
  317. isReturnGoodsCreate: {
  318. type: Boolean,
  319. default: false
  320. }
  321. },
  322. data() {
  323. let formDef = {
  324. id: '',
  325. contactId: '',
  326. contactName: '',
  327. entrustedCode: '',
  328. entrustedId: '',
  329. pricingWay: 1,
  330. sendFiles: [],
  331. repliedFiles: [],
  332. projectName: '',
  333. projectId: '',
  334. receiveAddress: '',
  335. deviceName: '',
  336. deviceId: '',
  337. carNo: [],
  338. linkName: '',
  339. linkPhone: '',
  340. orderNo: '',
  341. orderId: '',
  342. replied: 0,
  343. trayNum: '',
  344. replaceList: [],
  345. deliveryTypeId: '',
  346. receiptRequirementTypeId: 2,
  347. sourceType: '', // 1 销售订单 2 受托收货单 3 退货单
  348. sourceId: '',
  349. sourceNo: ''
  350. };
  351. return {
  352. fullscreen: false,
  353. saleOrderValue: {},
  354. detailData: {},
  355. payWayOptions: [],
  356. delDetailIds: [],
  357. carList: [],
  358. oldProductList: [],
  359. visible: false,
  360. entrustedReceiveDialogFlag: false,
  361. processSubmitDialogFlag: false,
  362. title: '',
  363. activeName: 'first',
  364. formDef,
  365. form: copyObj(formDef),
  366. returnOrderDialogFlag: false,
  367. // 提交状态
  368. loading: false,
  369. // 是否是修改
  370. isUpdate: false,
  371. businessId: '',
  372. isTotalCount: 0,
  373. receiptRequirementTypeOption: [
  374. {
  375. label: '签回单',
  376. value: 1
  377. },
  378. {
  379. label: '不签回单',
  380. value: 2
  381. },
  382. {
  383. label: '带签收单',
  384. value: 3
  385. }
  386. ]
  387. };
  388. },
  389. computed: {
  390. allcountAmount() {
  391. return this.$store.state.order.allcountAmount;
  392. },
  393. rules() {
  394. return {
  395. partaName: [
  396. { required: true, message: '请选择客户名称', trigger: 'change' }
  397. ],
  398. linkName: [
  399. {
  400. required: this.form.needProduce != 2 ? true : false,
  401. message: '请输入',
  402. trigger: ['blur', 'change']
  403. }
  404. ],
  405. linkPhone: [
  406. {
  407. required: this.form.needProduce != 2 ? true : false,
  408. message: '请输入',
  409. trigger: 'change'
  410. }
  411. ],
  412. orderNo: [{ required: true, message: '请选择', trigger: 'change' }],
  413. receiveAddress: [
  414. {
  415. required: this.form.needProduce != 2 ? true : false,
  416. message: '请输入',
  417. trigger: 'change'
  418. }
  419. ],
  420. deviceName: [
  421. { required: true, message: '前选择车辆', trigger: 'change' }
  422. ]
  423. };
  424. }
  425. },
  426. methods: {
  427. //销售发货数量是否限制不能大于采购总数//0否 1是
  428. parameterGetByCode() {
  429. parameterGetByCode({
  430. code: 'saleOrder_invoice_productList_totalCount'
  431. }).then((res) => {
  432. this.isTotalCount = res.value;
  433. });
  434. },
  435. //选择订单回调
  436. changeOrder(obj) {
  437. this.form = Object.assign({}, this.form, {
  438. productionRequirements: obj
  439. .map((item) => item.productionRequirements)
  440. .toString(),
  441. orderIds: obj.map((item) => item.id).toString(),
  442. orderNo: obj.map((item) => item.orderNo).toString(),
  443. // needProduce: obj.map((item) => item.needProduce),
  444. sourceType: 1
  445. });
  446. this.getSaleOrderDetails(obj.map((item) => item.id));
  447. },
  448. async setData(res, type) {
  449. let eom_saleOrder_addInvoice = await parameterGetByCode({
  450. code: 'eom_saleOrder_addInvoice'
  451. });
  452. console.log('eom_saleOrder_addInvoice', res);
  453. let data = {
  454. ...res[0],
  455. orderIds: res.map((item) => item.id).toString(),
  456. orderNo: res.map((item) => item.orderNo).toString(),
  457. productList: res.map((item) => item.productList).flat(),
  458. typedetailIds: res.map((item) => item.typedetailIds).flat(),
  459. // needProduce: res.map((item) => item.needProduce),
  460. totalAmount: res.reduce(
  461. (sum, obj) =>
  462. sum + ((obj.totalAmount && Number(obj.totalAmount)) || 0),
  463. 0
  464. ),
  465. payAmount: res.reduce(
  466. (sum, obj) => sum + ((obj.payAmount && Number(obj.payAmount)) || 0),
  467. 0
  468. ),
  469. projectName: res
  470. .filter((item) => item.projectName)
  471. .map((item) => item.projectName)
  472. .toString(),
  473. projectId: res
  474. .filter((item) => item.projectId)
  475. .map((item) => item.projectId)
  476. .toString(),
  477. projectCode: res
  478. .filter((item) => item.projectCode)
  479. .map((item) => item.projectCode)
  480. .toString()
  481. };
  482. this.loading = false;
  483. this.saleOrderValue = JSON.parse(JSON.stringify(data));
  484. this.oldProductList = JSON.parse(JSON.stringify(data.productList));
  485. this.partbAddress = data.partbAddress;
  486. if (type == 'sendInit') {
  487. return;
  488. }
  489. this.$nextTick(() => {
  490. let {
  491. partaId,
  492. partaName,
  493. partaTel,
  494. orderIds,
  495. orderNo,
  496. partaLinkName,
  497. partaAddress,
  498. productList,
  499. trayList,
  500. trakNoteList,
  501. totalAmount,
  502. payAmount,
  503. projectName,
  504. projectId,
  505. projectCode,
  506. totalPrice,
  507. receiveAddress,
  508. productionRequirements,
  509. needProduce
  510. } = data;
  511. if (productList && productList.length > 0) {
  512. productList.forEach((v) => {
  513. v.orderTotalCount = v.totalCount;
  514. v.extField = {};
  515. });
  516. }
  517. this.form = Object.assign({}, this.form, {
  518. contactId: partaId,
  519. contactName: partaName,
  520. linkName: partaLinkName,
  521. linkPhone: partaTel,
  522. orderNo,
  523. orderIds,
  524. receiveAddress: receiveAddress || partaAddress,
  525. productList,
  526. trakNoteList,
  527. trayList,
  528. totalAmount,
  529. totalPrice,
  530. payAmount,
  531. projectName,
  532. projectId,
  533. projectSn: projectCode,
  534. productionRequirements,
  535. needProduce
  536. });
  537. console.log('form~~~~~~~~~~', this.form);
  538. productList.forEach((item, index) => {
  539. item['tempId'] = index;
  540. item.id = '';
  541. });
  542. // this.$refs.inventoryTableref &&
  543. // this.$refs.inventoryTableref.putTableValue(productList);
  544. this.oldProductList = JSON.parse(JSON.stringify(productList));
  545. if (eom_saleOrder_addInvoice?.value == 1) {
  546. this.$refs.inventoryTableref &&
  547. this.$refs.inventoryTableref.putTableValue(productList, true);
  548. } else {
  549. this.$refs.inventoryTableref &&
  550. this.$refs.inventoryTableref.$refs.productListRef.open(
  551. productList
  552. );
  553. }
  554. this.$refs.taskInfoTableRef &&
  555. this.$refs.taskInfoTableRef.putTableValue(trakNoteList);
  556. this.setAddress();
  557. if (projectId) {
  558. this.getProjectData(projectId);
  559. }
  560. });
  561. },
  562. // //获取订单详情
  563. // async getSaleOrderDetail(id) {
  564. // this.loading = true;
  565. // this.form = Object.assign({}, this.form, {
  566. // orderIds: id,
  567. // });
  568. // // const data = await getSaleOrderDetail(id);
  569. // this.setData(data);
  570. // },
  571. //获取订单详情 多id
  572. async getSaleOrderDetails(ids) {
  573. this.loading = true;
  574. let res = await getSaleOrderDetails(ids);
  575. console.log('res~~~~', res);
  576. if (res?.length) {
  577. this.setData(res);
  578. }
  579. },
  580. setAddress() {
  581. this.$refs.taskInfoTableRef.setAddress(
  582. this.partbAddress,
  583. this.form.receiveAddress
  584. );
  585. },
  586. async getProjectData(id) {
  587. const data = await projectsGetByIdAPI(id);
  588. if (data.contactAddressId) {
  589. this.form.receiveAddress =
  590. data.contactAddressName + data.contactAddress;
  591. this.setAddress();
  592. }
  593. if (data.contactRelationPhone) {
  594. this.form.linkPhone = data.contactRelationPhone;
  595. }
  596. if (data.contactRelationUserName) {
  597. this.form.linkName = data.contactRelationUserName;
  598. }
  599. },
  600. //发货单详情
  601. async getSendSaleOrderDetail(id) {
  602. this.businessId = id;
  603. this.loading = true;
  604. const data = await getSendSaleOrderrecordDetailSplit(id);
  605. // this.partbAddress = data.saleOrder[0].partbAddress;
  606. // this.saleOrderValue = data.saleOrder;
  607. if (data.saleOrderList) {
  608. this.setData(data.saleOrderList, 'sendInit');
  609. } else if (data.saleOrder) {
  610. this.setData([data.saleOrder], 'sendInit');
  611. }
  612. console.log('data~~~~', data);
  613. this.loading = false;
  614. if (data) {
  615. this.$nextTick(() => {
  616. data.productList?.forEach((item) => {
  617. item['tempId'] = item.id;
  618. });
  619. data.carNo = data.carNo ? data.carNo.split(',') : [];
  620. this.form = data;
  621. this.form.needProduce = data?.saleOrderList[0]?.needProduce;
  622. this.form.deliveryTypeId = data.deliveryTypeId + '';
  623. this.$refs.inventoryTableref &&
  624. this.$refs.inventoryTableref.putTableValue(
  625. data.productList,
  626. true
  627. );
  628. this.$refs.stowageTableRef &&
  629. this.$refs.stowageTableRef.putTableValue(data.carList);
  630. this.$refs.taskInfoTableRef &&
  631. this.$refs.taskInfoTableRef.putTableValue(
  632. data.logisticTrakListNoteVOList
  633. );
  634. this.$refs.palletTableRef &&
  635. this.$refs.palletTableRef.putTableValue(data.trayList);
  636. this.$refs.replaceRef &&
  637. this.$refs.replaceRef.putTableValue(data.replaceList);
  638. });
  639. }
  640. },
  641. // 选择退货单
  642. handleReturnGoodsBtn(e) {
  643. if (e.target.nodeName == 'I') {
  644. this.form = Object.assign({}, this.form, {
  645. carNo: [],
  646. deviceName: '',
  647. deviceId: '',
  648. linkName: '',
  649. linkPhone: '',
  650. orderNo: '',
  651. productList: [],
  652. orderId: '',
  653. contactId: '',
  654. contactName: '',
  655. entrustedCode: '',
  656. entrustedId: '',
  657. sendNoteNo: '',
  658. pricingWay: '',
  659. sourceNo: '',
  660. sourceId: '',
  661. sourceType: ''
  662. });
  663. this.$refs.inventoryTableref &&
  664. this.$refs.inventoryTableref.putTableValue([], true);
  665. return;
  666. }
  667. this.returnOrderDialogFlag = true;
  668. // this.$nextTick(() => {
  669. // this.$refs.returnOrderDialogRef.init();
  670. // });
  671. },
  672. // 获取退货单数据
  673. async getSReturnOrderInfo(row) {
  674. console.log('row~~~~', row);
  675. // this.form = Object.assign({}, this.form, {
  676. // sourceId: row.id,
  677. // sourceNo: row.returnNo,
  678. // });
  679. const data = await getReturnSaleOrderrecordDetail(row.id);
  680. if (data) {
  681. this.$nextTick(() => {
  682. let {
  683. carNo,
  684. returnNo,
  685. id,
  686. linkName,
  687. linkPhone,
  688. orderIds,
  689. orderNo,
  690. contactId,
  691. contactName,
  692. pricingWay = data?.saleOrder?.pricingWay,
  693. partaId,
  694. partaName,
  695. partaTel,
  696. partaLinkName,
  697. partaAddress,
  698. productList,
  699. trayList,
  700. trakNoteList,
  701. totalAmount,
  702. payAmount,
  703. projectName,
  704. projectId,
  705. projectCode,
  706. totalPrice,
  707. redressProductList,
  708. receiveAddress
  709. } = data;
  710. if (redressProductList && redressProductList.length > 0) {
  711. productList.push(...redressProductList);
  712. }
  713. if (productList && productList.length > 0) {
  714. productList.forEach((v) => {
  715. v.orderTotalCount = v.totalCount;
  716. v.extField = {};
  717. });
  718. }
  719. this.form = Object.assign({}, this.form, {
  720. // contactId,
  721. // contactName,
  722. // linkName,
  723. // linkPhone,
  724. // orderNo,
  725. // orderIds: orderIds,
  726. carNo: carNo ? carNo.split(',') : [],
  727. pricingWay,
  728. sourceType: 3,
  729. sourceNo: returnNo,
  730. sourceId: id,
  731. contactId,
  732. contactName,
  733. // linkName: partaLinkName,
  734. // linkPhone: partaTel,
  735. orderNo,
  736. orderIds,
  737. // receiveAddress: receiveAddress || partaAddress,
  738. productList,
  739. trakNoteList,
  740. trayList,
  741. totalAmount,
  742. totalPrice,
  743. payAmount,
  744. projectName,
  745. projectId,
  746. projectSn: projectCode
  747. });
  748. productList.forEach((item, index) => {
  749. item['tempId'] = index;
  750. item.id = '';
  751. });
  752. this.oldProductList = JSON.parse(JSON.stringify(productList));
  753. this.$refs.inventoryTableref &&
  754. this.$refs.inventoryTableref.putTableValue(productList, true);
  755. });
  756. }
  757. },
  758. //选择受托收货单弹框
  759. handleEntrustedReceive(e) {
  760. if (e.target.nodeName == 'I') {
  761. this.form = Object.assign({}, this.form, {
  762. carNo: [],
  763. deviceName: '',
  764. deviceId: '',
  765. linkName: '',
  766. linkPhone: '',
  767. orderNo: '',
  768. productList: [],
  769. orderId: '',
  770. contactId: '',
  771. contactName: '',
  772. entrustedCode: '',
  773. entrustedId: '',
  774. sendNoteNo: '',
  775. pricingWay: '',
  776. sourceNo: '',
  777. sourceId: '',
  778. sourceType: ''
  779. });
  780. this.$refs.inventoryTableref &&
  781. this.$refs.inventoryTableref.putTableValue([], true);
  782. return;
  783. }
  784. this.searchParams = {
  785. orderId: this.form.orderId
  786. };
  787. this.entrustedReceiveDialogFlag = true;
  788. this.$nextTick(() => {
  789. this.$refs.entrustedReceiveDialogRef.init();
  790. });
  791. },
  792. //获取受托收货单数据回调
  793. async getInfo(row) {
  794. const data = await getPSaleEntrustedReceiveDetailAPI(row.id);
  795. this.$nextTick(() => {
  796. let {
  797. carNo,
  798. code,
  799. id,
  800. linkName,
  801. linkPhone,
  802. orderId,
  803. orderNo,
  804. // productList,
  805. contactId,
  806. contactName,
  807. pricingWay = data?.saleOrder?.pricingWay
  808. } = data;
  809. // if (productList && productList.length > 0) {
  810. // productList.forEach((v) => {
  811. // v.orderTotalCount = v.orderTotalCount || v.totalCount;
  812. // v.extField = {};
  813. // });
  814. // }
  815. this.form = Object.assign({}, this.form, {
  816. contactId,
  817. contactName,
  818. linkName,
  819. linkPhone,
  820. orderNo,
  821. orderIds: orderId,
  822. // productList,
  823. carNo: carNo ? carNo.split(',') : [],
  824. pricingWay,
  825. entrustedCode: code,
  826. entrustedId: id,
  827. sourceType: 2
  828. });
  829. this.getSaleOrderDetails([orderId]);
  830. // productList.forEach((item, index) => {
  831. // item.id = '';
  832. // item['tempId'] = index;
  833. // });
  834. // this.$refs.inventoryTableref &&
  835. // this.$refs.inventoryTableref.putTableValue(productList, code);
  836. });
  837. },
  838. //替代料
  839. replaceTableChange(list) {
  840. this.$refs.replaceRef.putTableValue(list, 'add');
  841. },
  842. //选择订单弹框
  843. handleOrderBtn(e) {
  844. if (e.target.nodeName == 'I') {
  845. this.form = Object.assign({}, this.form, {
  846. contactId: '',
  847. contactName: '',
  848. carNo: [],
  849. deviceName: '',
  850. deviceId: '',
  851. linkName: '',
  852. linkPhone: '',
  853. orderNo: '',
  854. orderId: '',
  855. pricingWay: '',
  856. entrustedCode: '',
  857. entrustedId: '',
  858. productionRequirements: '',
  859. sourceType: '',
  860. sourceNo: '',
  861. sourceId: ''
  862. });
  863. this.$refs.inventoryTableref &&
  864. this.$refs.inventoryTableref.putTableValue([]);
  865. return;
  866. }
  867. let item = {
  868. id: this.form.orderId
  869. };
  870. this.$refs.orderListDialogRef.open(item);
  871. },
  872. //打开新增编辑弹框
  873. async open(type, row, orderId) {
  874. this.visible = true;
  875. this.title = type === 'add' ? '新增发货单' : '修改';
  876. this.parameterGetByCode();
  877. this.carList = await carBookPageListAPI({ pageNum: 1, size: 100 });
  878. if (orderId) {
  879. await this.getSaleOrderDetails(orderId);
  880. }
  881. if (this.saleOrderData.id) {
  882. await this.getSaleOrderDetails([this.saleOrderData.id]);
  883. }
  884. if (row && row?.id) {
  885. await this.getSendSaleOrderDetail(row?.id);
  886. }
  887. if (this.isReturnGoodsCreate && type == 'add') {
  888. this.getSReturnOrderInfo(row);
  889. }
  890. if (type == 'add') {
  891. this.isUpdate = false;
  892. } else {
  893. this.isUpdate = true;
  894. }
  895. },
  896. entrustedReceiveInit(row) {
  897. this.title = '新增发货单';
  898. this.visible = true;
  899. this.isUpdate = false;
  900. this.getInfo(row);
  901. },
  902. totalCountChange(num) {
  903. this.form.trayNum = num;
  904. },
  905. getValidate() {
  906. return Promise.all([
  907. new Promise((resolve, reject) => {
  908. this.$refs.form.validate((valid) => {
  909. if (!valid) {
  910. reject(false);
  911. } else {
  912. resolve(true);
  913. }
  914. });
  915. }),
  916. new Promise((resolve, reject) => {
  917. this.$refs.inventoryTableref.validateFormOptimized((valid) => {
  918. if (!valid) {
  919. reject(false);
  920. } else {
  921. resolve(true);
  922. }
  923. });
  924. }),
  925. new Promise((resolve, reject) => {
  926. this.$refs.taskInfoTableRef.getTableValidate((valid) => {
  927. if (!valid) {
  928. reject(false);
  929. } else {
  930. resolve(true);
  931. }
  932. });
  933. }),
  934. new Promise((resolve, reject) => {
  935. this.$refs.palletTableRef.validateForm((valid) => {
  936. if (!valid) {
  937. reject(false);
  938. } else {
  939. resolve(true);
  940. }
  941. });
  942. })
  943. ]).catch((e) => {
  944. return Promise.reject(e);
  945. });
  946. },
  947. async save(type) {
  948. try {
  949. await this.getValidate();
  950. // 表单验证通过,执行保存操作
  951. this.loading = true;
  952. if (!this.isUpdate) {
  953. delete this.form.id;
  954. }
  955. this.form.repliedFiles = this.form.repliedFiles || [];
  956. this.form.replied = this.form.repliedFiles.length > 0 ? 1 : 0;
  957. const replaceList =
  958. (this.$refs.replaceRef && this.$refs.replaceRef.getTableValue()) ||
  959. [];
  960. const productList = this.$refs.inventoryTableref.getTableValue();
  961. productList.forEach((item) => {
  962. if (
  963. replaceList.map((_item) => _item.relationId).includes(item.tempId)
  964. ) {
  965. item['isReplace'] = 1;
  966. }
  967. if (item.isSuspend == 1) {
  968. item.offsetDetail[0]['reverseQuantity'] = item.saleCount;
  969. item['reverseQuantity'] = item.saleCount;
  970. } else {
  971. item['reverseQuantity'] = 0;
  972. }
  973. });
  974. let commitData = Object.assign({}, this.form, {
  975. productList,
  976. replaceList,
  977. trayList: this.$refs.palletTableRef.getTableValue(),
  978. carList: this.$refs.stowageTableRef.getTableValue(),
  979. trakNoteList: this.$refs.taskInfoTableRef.getTableValue()
  980. });
  981. commitData.carNo = commitData.carNo.toString();
  982. if (this.isUpdate) {
  983. UpdateSendInformation(commitData)
  984. .then((res) => {
  985. this.loading = false;
  986. this.$message.success('修改成功');
  987. if (type === 'sub') {
  988. this.sendSubmit(res);
  989. return;
  990. }
  991. this.cancel();
  992. this.$emit('done');
  993. })
  994. .catch((e) => {
  995. //this.loading = false;
  996. });
  997. } else {
  998. addSendInformation(commitData)
  999. .then((res) => {
  1000. this.loading = false;
  1001. this.$message.success('新增成功');
  1002. if (type === 'sub') {
  1003. this.sendSubmit(res);
  1004. return;
  1005. }
  1006. this.cancel();
  1007. this.$emit('done');
  1008. })
  1009. .catch((e) => {
  1010. //this.loading = false;
  1011. });
  1012. }
  1013. } catch (error) {
  1014. console.log(error);
  1015. // 表单验证未通过,不执行保存操作
  1016. }
  1017. },
  1018. async sendSubmit(res) {
  1019. console.log('res~~~~~~', res, this.businessId);
  1020. let paramsId = this.isReturnGoodsCreate ? res : this.businessId || res;
  1021. console.log('paramsId~~~', paramsId);
  1022. const data = await getSendSaleOrderrecordDetailSplit(paramsId);
  1023. let storemanIds = '';
  1024. console.log('data~~~~~~', data);
  1025. let ids = data.productList.map((item) => item.warehouseId);
  1026. if (ids?.length) {
  1027. let warehouseList = await getWarehouseListByIds(ids || []);
  1028. storemanIds = warehouseList.map((item) => item.ownerId);
  1029. }
  1030. this.processSubmitDialogFlag = true;
  1031. this.$nextTick(() => {
  1032. let params = {
  1033. businessId: paramsId,
  1034. businessKey:
  1035. data.saleTypeName.indexOf('技改') != '-1'
  1036. ? 'sele_order_send_correction'
  1037. : data.saleTypeName.indexOf('三包') != '-1'
  1038. ? 'eom_sh'
  1039. : data.saleTypeName.indexOf('补发') != '-1'
  1040. ? 'eom_sh'
  1041. : data.saleTypeName.indexOf('赠品') != '-1'
  1042. ? 'sale_order_send_giftAndOther'
  1043. : 'sales_send_approve',
  1044. formCreateUserId: data.createUserId,
  1045. variables: {
  1046. businessCode: data.docNo,
  1047. businessName: data.contactName,
  1048. storemanIds: storemanIds.toString(),
  1049. businessType: data.sourceType == 3 ? '退货发货单' : '销售发货单'
  1050. }
  1051. };
  1052. this.$refs.processSubmitDialogRef.init(params);
  1053. });
  1054. },
  1055. reload() {
  1056. this.cancel();
  1057. this.$emit('done');
  1058. },
  1059. cancel() {
  1060. this.$nextTick(() => {
  1061. this.activeName = 'first';
  1062. // 关闭后,销毁所有的表单数据
  1063. this.$refs['otherForm'] && this.$refs['otherForm'].resetFields();
  1064. this.$refs['formRef'] && this.$refs['formRef'].resetFields();
  1065. this.$store.commit('order/clearUserData');
  1066. this.form = copyObj(this.formDef);
  1067. this.visible = false;
  1068. });
  1069. }
  1070. }
  1071. };
  1072. </script>
  1073. <style scoped lang="scss">
  1074. .TotalAmount {
  1075. font-size: 16px;
  1076. padding-right: 30px;
  1077. }
  1078. .headbox {
  1079. display: flex;
  1080. justify-content: flex-start;
  1081. align-items: center;
  1082. .amount {
  1083. font-size: 14px;
  1084. font-weight: bold;
  1085. margin-right: 20px;
  1086. }
  1087. }
  1088. </style>