addInvoiceDialog.vue 34 KB

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