addInvoiceDialog.vue 28 KB

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