addDialog.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912
  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. width="80%"
  10. @close="cancel"
  11. >
  12. <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  13. <headerTitle title="订单信息"></headerTitle>
  14. <el-row>
  15. <el-col :span="12">
  16. <el-form-item
  17. label="项目名称"
  18. prop="projectName"
  19. style="margin-bottom: 22px"
  20. >
  21. <el-input
  22. clearable
  23. v-model="form.projectName"
  24. placeholder="请输入"
  25. />
  26. </el-form-item>
  27. <el-form-item
  28. label="销售类型"
  29. prop="saleType"
  30. style="margin-bottom: 22px"
  31. >
  32. <DictSelection
  33. dictName="销售类型"
  34. clearable
  35. v-model="form.saleType"
  36. :listFormatte="listFormatte"
  37. >
  38. </DictSelection>
  39. </el-form-item>
  40. <el-form-item
  41. label="销售部门"
  42. prop="salesDeptId"
  43. style="margin-bottom: 22px"
  44. >
  45. <ele-tree-select
  46. clearable
  47. :data="groupTreeData"
  48. v-model="form.salesDeptId"
  49. valueKey="id"
  50. labelKey="name"
  51. placeholder="请选择"
  52. @change="change_principalDep"
  53. default-expand-all
  54. />
  55. </el-form-item>
  56. <el-form-item prop="orderFiles" label="订单附件">
  57. <fileUpload
  58. v-model="form.orderFiles"
  59. module="main"
  60. :showLib="false"
  61. :limit="10"
  62. />
  63. </el-form-item>
  64. </el-col>
  65. <el-col :span="12">
  66. <el-form-item
  67. label="选择合同"
  68. prop="contractName"
  69. style="margin-bottom: 22px"
  70. >
  71. <el-input
  72. clearable
  73. v-model="form.contractName"
  74. @click.native="handleContractBtn"
  75. @clear="clearContrcat"
  76. placeholder="请输入"
  77. />
  78. </el-form-item>
  79. <el-form-item
  80. label="交货日期"
  81. prop="deliveryDate"
  82. style="margin-bottom: 22px"
  83. >
  84. <el-date-picker
  85. v-model="form.deliveryDate"
  86. type="date"
  87. placeholder="选择日期"
  88. >
  89. </el-date-picker>
  90. </el-form-item>
  91. <el-form-item label="结算方式" prop="settlementMode">
  92. <DictSelection
  93. dictName="结算方式"
  94. clearable
  95. @itemChange="settlementModeChange"
  96. v-model="form.settlementMode"
  97. >
  98. </DictSelection>
  99. </el-form-item>
  100. </el-col>
  101. </el-row>
  102. <headerTitle title="基本信息"></headerTitle>
  103. <el-row>
  104. <el-col :span="12">
  105. <el-form-item
  106. label="客户名称"
  107. prop="partaName"
  108. style="margin-bottom: 22px"
  109. >
  110. <el-input
  111. clearable
  112. v-model="form.partaName"
  113. @click.native="handParent"
  114. placeholder="请选择"
  115. />
  116. </el-form-item>
  117. <el-form-item
  118. label="客户统一社会信用代码"
  119. prop="partaUnifiedSocialCreditCode"
  120. label-width="160px"
  121. style="margin-bottom: 22px"
  122. >
  123. <el-input
  124. clearable
  125. v-model="form.partaUnifiedSocialCreditCode"
  126. placeholder="请输入"
  127. />
  128. </el-form-item>
  129. <el-form-item
  130. label="客户联系人"
  131. prop="partaLinkName"
  132. style="margin-bottom: 22px"
  133. >
  134. <el-select
  135. v-model="form.partaLinkName"
  136. placeholder="请选择"
  137. @change="onchangeLink"
  138. @focus="selectFocus"
  139. >
  140. <el-option
  141. v-for="item in linkNameOptions"
  142. :key="item.id"
  143. :label="item.linkName"
  144. :value="item.id"
  145. >
  146. </el-option>
  147. </el-select>
  148. </el-form-item>
  149. <el-form-item
  150. label="客户电话"
  151. prop="partaTel"
  152. style="margin-bottom: 22px"
  153. >
  154. <el-input
  155. clearable
  156. :maxlength="20"
  157. v-model="form.partaTel"
  158. placeholder="请输入"
  159. />
  160. </el-form-item>
  161. <el-form-item
  162. label="客户传真"
  163. prop="partaFax"
  164. style="margin-bottom: 22px"
  165. >
  166. <el-input clearable v-model="form.partaFax" placeholder="请输入" />
  167. </el-form-item>
  168. <el-form-item
  169. label=" 客户Email"
  170. prop="partaEmail"
  171. style="margin-bottom: 22px"
  172. >
  173. <el-input
  174. clearable
  175. v-model="form.partaEmail"
  176. placeholder="请输入"
  177. />
  178. </el-form-item>
  179. <el-form-item
  180. label="客户地址"
  181. prop="partaAddress"
  182. style="margin-bottom: 22px"
  183. >
  184. <el-input
  185. clearable
  186. v-model="form.partaAddress"
  187. placeholder="请输入"
  188. />
  189. </el-form-item>
  190. </el-col>
  191. <el-col :span="12">
  192. <el-form-item
  193. label="售出方名称"
  194. prop="partbName"
  195. style="margin-bottom: 22px"
  196. >
  197. <!-- <el-input
  198. clearable
  199. v-model="form.partbName"
  200. placeholder="请输入"
  201. /> -->
  202. <el-input
  203. v-if="enterprisePage.length <= 1"
  204. clearable
  205. v-model="form.partbName"
  206. placeholder="请输入"
  207. />
  208. <el-select
  209. v-if="enterprisePage.length > 1"
  210. style="width: 100%"
  211. v-model="form.partbName"
  212. placeholder="请选择"
  213. @change="getEnterprise()"
  214. >
  215. <el-option
  216. v-for="item in enterprisePage"
  217. :key="item.id"
  218. :label="item.name"
  219. :value="item.name"
  220. >
  221. </el-option>
  222. </el-select>
  223. </el-form-item>
  224. <el-form-item
  225. label="售出方统一社会信用代码"
  226. prop="partbUnifiedSocialCreditCode"
  227. label-width="170px"
  228. style="margin-bottom: 22px"
  229. >
  230. <el-input
  231. clearable
  232. v-model="form.partbUnifiedSocialCreditCode"
  233. placeholder="请输入"
  234. />
  235. </el-form-item>
  236. <el-form-item
  237. label="售出方联系人"
  238. prop="partbLinkName"
  239. style="margin-bottom: 22px"
  240. >
  241. <el-input
  242. clearable
  243. v-model="form.partbLinkName"
  244. @click.native="handHead"
  245. placeholder="请输入"
  246. />
  247. </el-form-item>
  248. <el-form-item prop="partbTel" label="售出方联系电话">
  249. <el-input clearable v-model="form.partbTel" placeholder="请输入" />
  250. </el-form-item>
  251. <el-form-item prop="partbFax" label="售出方传真">
  252. <el-input clearable v-model="form.partbFax" placeholder="请输入" />
  253. </el-form-item>
  254. <el-form-item
  255. label="售出方Email"
  256. prop="partbEmail"
  257. style="margin-bottom: 22px"
  258. >
  259. <el-input
  260. clearable
  261. v-model="form.partbEmail"
  262. placeholder="请输入"
  263. />
  264. </el-form-item>
  265. <el-form-item
  266. label="售出方地址"
  267. prop="partbAddress"
  268. style="margin-bottom: 22px"
  269. >
  270. <el-input
  271. clearable
  272. v-model="form.partbAddress"
  273. placeholder="请输入"
  274. />
  275. </el-form-item>
  276. </el-col>
  277. </el-row>
  278. <headerTitle title="产品清单" style="margin-top: 30px"></headerTitle>
  279. <inventoryTable
  280. ref="inventoryTable"
  281. :isCustomerMark="true"
  282. ></inventoryTable>
  283. <el-row style="margin-top: 20px">
  284. <el-col :span="12">
  285. <el-form-item
  286. label="金额"
  287. prop="payAmount"
  288. style="margin-bottom: 22px"
  289. >
  290. <el-input
  291. clearable
  292. :disabled="!!form.contractId"
  293. v-model="form.payAmount"
  294. placeholder="请输入"
  295. >
  296. <template slot="append">元</template>
  297. </el-input>
  298. </el-form-item>
  299. <el-form-item
  300. label="收货地址"
  301. prop="receiveAddress"
  302. style="margin-bottom: 22px"
  303. >
  304. <el-input
  305. clearable
  306. type="textarea"
  307. v-model="form.receiveAddress"
  308. placeholder="请输入"
  309. />
  310. </el-form-item>
  311. </el-col>
  312. <el-col :span="12">
  313. <el-form-item
  314. label="总金额"
  315. prop="totalAmount"
  316. style="margin-bottom: 22px"
  317. >
  318. {{ allcountAmount || 0 }}元
  319. </el-form-item>
  320. <el-form-item label="备注" prop="remark" style="margin-bottom: 22px">
  321. <el-input
  322. clearable
  323. type="textarea"
  324. v-model="form.remark"
  325. placeholder="请输入"
  326. />
  327. </el-form-item>
  328. </el-col>
  329. </el-row>
  330. </el-form>
  331. <div slot="footer" class="footer">
  332. <el-button type="primary" @click="save">保存</el-button>
  333. <el-button type="primary" @click="save('sub')">提交</el-button>
  334. <el-button @click="cancel">返回</el-button>
  335. </div>
  336. <parentList ref="parentRef" @changeParent="changeParent"></parentList>
  337. <head-list ref="headRef" @changeParent="changePersonel"></head-list>
  338. <contractListDialog
  339. ref="selectContractRef"
  340. @changeParent="changeContract"
  341. ></contractListDialog>
  342. </ele-modal>
  343. </template>
  344. <script>
  345. import { emailReg, numberReg } from 'ele-admin';
  346. import { acceptUnpackoptions } from '@/enum/dict';
  347. import inventoryTable from '@/views/contractManage/contractBook/components/inventoryTable.vue';
  348. import fileUpload from '@/components/upload/fileUpload';
  349. import dictMixins from '@/mixins/dictMixins';
  350. import parentList from '@/views/saleManage/contact/components/parentList.vue';
  351. import { getDetail } from '@/api/contractManage/contractBook';
  352. import {
  353. getSaleOrderDetail,
  354. UpdateInformation,
  355. addInformation,
  356. submit
  357. } from '@/api/saleManage/saleorder';
  358. import { getcontactlink } from '@/api/saleManage/businessFollow';
  359. import headList from '@/views/saleManage/businessOpportunity/components/headList.vue';
  360. import contractListDialog from './contractListDialog.vue';
  361. import paymentList from './paymentList.vue';
  362. import { listOrganizations } from '@/api/system/organization';
  363. import { copyObj } from '@/utils/util';
  364. import { enterprisePage } from '@/api/contractManage/contractBook';
  365. export default {
  366. mixins: [dictMixins],
  367. components: {
  368. fileUpload,
  369. headList,
  370. contractListDialog,
  371. paymentList,
  372. inventoryTable,
  373. parentList
  374. },
  375. data() {
  376. let formDef = {
  377. id: '',
  378. contractId: '',
  379. orderFiles: [],
  380. contractName: '',
  381. deliveryDate: '',
  382. payAmount: '',
  383. projectName: '',
  384. projectId: '',
  385. receiveAddress: '',
  386. remark: '',
  387. saleType: '',
  388. saleTypeName: '',
  389. totalAmount: '',
  390. partaUnifiedSocialCreditCode: '',
  391. partbUnifiedSocialCreditCode: '',
  392. partaAddress: '',
  393. partaEmail: '',
  394. partaFax: '',
  395. partaId: '',
  396. partaLinkId: '',
  397. partaLinkName: '',
  398. partaName: '',
  399. partaTel: '',
  400. partbAddress: '',
  401. partbEmail: '',
  402. partbFax: '',
  403. partbId: '',
  404. partbLinkId: '',
  405. partbLinkName: '',
  406. partbName: '',
  407. partbTel: ''
  408. };
  409. return {
  410. clearing: false, //是否清除合同
  411. payWayOptions: [],
  412. delDetailIds: [],
  413. linkNameOptions: [],
  414. acceptUnpackoptions,
  415. visible: false,
  416. title: '',
  417. row: {},
  418. activeName: 'base',
  419. formDef,
  420. form: copyObj(formDef),
  421. tableBankData: [],
  422. tableLinkData: [],
  423. // 组织机构树形结构数据
  424. groupTreeData: [],
  425. groupData: [],
  426. rules: {
  427. deliveryDate: [
  428. { required: true, message: '请选择交货日期', trigger: 'change' }
  429. ],
  430. settlementMode: [
  431. { required: true, message: '请选择结算方式', trigger: 'change' }
  432. ],
  433. saleType: [
  434. { required: true, message: '请选择销售类型', trigger: 'change' }
  435. ],
  436. partaName: [
  437. { required: true, message: '请选择客户名称', trigger: 'change' }
  438. ],
  439. partaLinkName: [
  440. { required: true, message: '请选择客户联系人', trigger: 'change' }
  441. ],
  442. acceptUnpack: [
  443. { required: true, message: '请选择是否接受', trigger: 'change' }
  444. ],
  445. partaTel: [
  446. {
  447. required: true,
  448. pattern: numberReg,
  449. message: '请输入客户联系电话',
  450. trigger: 'blur'
  451. }
  452. ],
  453. partbName: [
  454. { required: true, message: '请输入售出方名称', trigger: 'change' }
  455. ],
  456. partbLinkName: [
  457. { required: true, message: '请输入售出方联系人', trigger: 'change' }
  458. ],
  459. partbTel: [
  460. {
  461. required: true,
  462. pattern: numberReg,
  463. message: '请输入售出方联系电话',
  464. trigger: 'blur'
  465. }
  466. ],
  467. partaEmail: [
  468. { pattern: emailReg, message: '邮箱格式不正确', trigger: 'blur' }
  469. ]
  470. },
  471. // 提交状态
  472. loading: false,
  473. // 是否是修改
  474. isUpdate: false,
  475. enterprisePage: [],
  476. businessId: ''
  477. };
  478. },
  479. computed: {
  480. allcountAmount() {
  481. return this.$store.state.order.allcountAmount;
  482. }
  483. },
  484. created() {
  485. this.getGroupAll();
  486. this.getEnterprisePage();
  487. },
  488. methods: {
  489. // 选择负责人部门
  490. change_principalDep(id) {
  491. const info = this.groupData.find((e) => e.id == id);
  492. this.form.salesDeptName = info.name;
  493. },
  494. // 获取公司数据
  495. getGroupAll() {
  496. listOrganizations().then((list) => {
  497. this.groupData = list;
  498. this.groupTreeData = this.$util.toTreeData({
  499. data: list,
  500. idField: 'id',
  501. parentIdField: 'parentId'
  502. });
  503. });
  504. },
  505. //选择供应商
  506. changeSupplier(obj) {
  507. this.form = Object.assign({}, this.form, {
  508. partbId: obj.id,
  509. partbName: obj.name,
  510. partbAddress: obj.addressName + obj.address,
  511. partbLinkId: '',
  512. partbLinkName: '',
  513. partbEmail: '',
  514. partbTel: ''
  515. });
  516. this.getLinkInfo(obj.id);
  517. },
  518. //选择合同获取合同的详情
  519. async getDetailData(id) {
  520. this.loading = true;
  521. const data = await getDetail(id);
  522. this.loading = false;
  523. if (data) {
  524. this.$nextTick(() => {
  525. let { contractVO } = data;
  526. // this.form=contractVOform.receiveAddress
  527. let {
  528. partaAddress,
  529. partaEmail,
  530. partaFax,
  531. partaId,
  532. partaLinkId,
  533. partaLinkName,
  534. partaName,
  535. partaTel,
  536. partbAddress,
  537. partbEmail,
  538. partbFax,
  539. partbId,
  540. partbLinkId,
  541. partbLinkName,
  542. partbName,
  543. partbTel,
  544. totalPrice,
  545. discountTotalPrice,
  546. partaUnifiedSocialCreditCode,
  547. partbUnifiedSocialCreditCode,
  548. settlementMode,
  549. settlementModeName
  550. } = contractVO;
  551. this.form = Object.assign({}, this.form, {
  552. partaAddress,
  553. partaEmail,
  554. partaFax,
  555. partaId,
  556. partaLinkId,
  557. partaLinkName,
  558. partaName,
  559. partaTel,
  560. partbAddress,
  561. partbEmail,
  562. partbFax,
  563. partbId,
  564. partbLinkId,
  565. partbLinkName,
  566. partbName,
  567. partbTel,
  568. totalPrice,
  569. discountTotalPrice,
  570. partaUnifiedSocialCreditCode,
  571. partbUnifiedSocialCreditCode,
  572. totalAmount: totalPrice,
  573. payAmount: discountTotalPrice,
  574. receiveAddress: partaAddress,
  575. settlementMode,
  576. settlementModeName
  577. });
  578. this.getLinkInfo(partaId);
  579. this.$refs.inventoryTable &&
  580. this.$refs.inventoryTable.putTableValue(data);
  581. this.$store.commit('order/setAllcountAmount', totalPrice);
  582. });
  583. }
  584. },
  585. //获取订单详情
  586. async getSaleOrderDetail(id) {
  587. this.businessId = id;
  588. this.loading = true;
  589. const data = await getSaleOrderDetail(id);
  590. this.loading = false;
  591. if (data) {
  592. this.$nextTick(() => {
  593. this.form = data;
  594. this.$refs.inventoryTable &&
  595. this.$refs.inventoryTable.putTableValue(data);
  596. this.getLinkInfo(data.partaId);
  597. this.$store.commit('order/setAllcountAmount', data.totalAmount);
  598. this.$store.commit('order/setContractId', data.contractId);
  599. });
  600. }
  601. },
  602. //更新联系人数据
  603. async getLinkInfo(contactId) {
  604. const data = await getcontactlink({ contactId });
  605. if (data && data?.length) {
  606. this.linkNameOptions = data;
  607. }
  608. },
  609. selectFocus() {
  610. if (this.linkNameOptions.length === 0) {
  611. return this.$message.error('请先选择名称');
  612. }
  613. },
  614. //选择下拉框
  615. onchangeLink(selectedOptions) {
  616. const option = this.linkNameOptions.find(
  617. (opt) => opt.id === selectedOptions
  618. );
  619. this.form = Object.assign({}, this.form, {
  620. partaEmail: option?.email,
  621. partaLinkName: option?.linkName || '',
  622. partaTel: option?.mobilePhone || option?.phone || '',
  623. partaLinkId: option?.id
  624. });
  625. },
  626. handHead() {
  627. let item = {
  628. id: this.form.partbLinkId
  629. };
  630. this.$refs.headRef.open(item);
  631. },
  632. //选择售出方人回调
  633. changePersonel(obj) {
  634. this.$set(this.form, 'partbLinkId', obj.id);
  635. this.$set(this.form, 'partbLinkName', obj.name);
  636. this.$set(this.form, 'partbTel', obj.phone);
  637. this.$set(this.form, 'partbEmail', obj.email);
  638. },
  639. //选择客户回调
  640. changeParent(obj) {
  641. this.form = Object.assign({}, this.form, {
  642. partaId: obj.id,
  643. partaName: obj.name,
  644. partaAddress: obj.addressName + obj.address,
  645. partaLinkId: '',
  646. partaLinkName: '',
  647. partaEmail: '',
  648. partaTel: ''
  649. });
  650. this.getLinkInfo(obj.id);
  651. },
  652. //选择合同回调
  653. changeContract(obj) {
  654. this.form = Object.assign({}, this.form, {
  655. contractId: obj.id,
  656. contractName: obj.contractName,
  657. contractNo: obj.contractNo
  658. });
  659. this.getDetailData(obj.id);
  660. this.$store.commit('order/setContractId', obj.id);
  661. },
  662. //选择合同弹框
  663. handleContractBtn() {
  664. console.log('5556666');
  665. if (this.clearing) return;
  666. let item = {
  667. id: this.form.contractId
  668. };
  669. this.$refs.selectContractRef.open(item);
  670. },
  671. //清除合同
  672. clearContrcat() {
  673. this.clearing = true;
  674. let {
  675. id,
  676. projectName,
  677. saleType,
  678. saleTypeName,
  679. deliveryDate,
  680. orderFiles,
  681. remark
  682. } = this.form;
  683. this.form = Object.assign({}, copyObj(this.formDef), {
  684. id,
  685. projectName,
  686. saleType,
  687. saleTypeName,
  688. deliveryDate,
  689. orderFiles,
  690. remark
  691. });
  692. this.$store.commit('order/setContractId', '');
  693. this.$store.commit('order/setAllcountAmount', 0);
  694. this.$refs.inventoryTable.putTableValue([]);
  695. setTimeout(() => {
  696. this.clearing = false;
  697. }, 500);
  698. },
  699. handParent() {
  700. if (this.form.contractId) {
  701. return this.$message.error('选择了合同不能更改客户名称');
  702. }
  703. let item = {
  704. id: this.form.contactId
  705. };
  706. this.$refs.parentRef.open(item);
  707. },
  708. listFormatte(data){
  709. return data.filter(item=>item.dictCode!==0)
  710. },
  711. //打开新增编辑弹框
  712. async open(type, row, contactCategoryId) {
  713. this.title = type === 'add' ? '新增' : '修改';
  714. this.row = row;
  715. if (this.enterprisePage.length == 0) {
  716. await this.getEnterprisePage();
  717. }
  718. this.visible = true;
  719. if (type == 'add') {
  720. this.isUpdate = false;
  721. if (this.enterprisePage.length > 0) {
  722. this.form.partbName = this.enterprisePage[0].name;
  723. this.form.partbUnifiedSocialCreditCode =
  724. this.enterprisePage[0].unifiedSocialCreditCode;
  725. this.form.partbFax = this.enterprisePage[0].fax;
  726. this.form.partbAddress = this.enterprisePage[0].address;
  727. }
  728. } else {
  729. this.isUpdate = true;
  730. this.getSaleOrderDetail(row.id);
  731. }
  732. },
  733. getEnterprisePage() {
  734. enterprisePage({
  735. pageNum: 1,
  736. size: 100
  737. }).then((res) => {
  738. this.enterprisePage = [];
  739. this.enterprisePage.push(...res.list);
  740. });
  741. },
  742. getEnterprise() {
  743. let data = this.enterprisePage.find(
  744. (item) => item.name == this.form.quoteName
  745. );
  746. this.form.partbName = data.name;
  747. this.form.partbUnifiedSocialCreditCode = data.unifiedSocialCreditCode;
  748. this.form.partbFax = data.fax;
  749. this.form.partbAddress = data.address;
  750. },
  751. salesmanChange(val, info) {
  752. this.otherForm.salesmanName = info.name;
  753. },
  754. settlementModeChange(info) {
  755. this.form.settlementModeName = info.dictValue;
  756. },
  757. ifChiefChange(value, idx) {
  758. if (value === 1) {
  759. this.tableLinkData.forEach((e) => (e.ifChief = 0));
  760. this.tableLinkData[idx].ifChief = 1;
  761. }
  762. },
  763. getValidate() {
  764. return Promise.all([
  765. new Promise((resolve, reject) => {
  766. this.$refs.form.validate((valid) => {
  767. if (!valid) {
  768. reject(false);
  769. } else {
  770. resolve(true);
  771. }
  772. });
  773. }),
  774. new Promise((resolve, reject) => {
  775. this.$refs.inventoryTable.validateForm((valid) => {
  776. if (!valid) {
  777. reject(false);
  778. } else {
  779. resolve(true);
  780. }
  781. });
  782. })
  783. ]);
  784. },
  785. async save(type) {
  786. try {
  787. await this.getValidate();
  788. // 表单验证通过,执行保存操作
  789. this.loading = true;
  790. if (!this.isUpdate) {
  791. delete this.form.id;
  792. }
  793. if (!this.form.contractId) {
  794. this.form.totalAmount = this.allcountAmount;
  795. }
  796. let commitData = Object.assign({}, this.form, {
  797. productList: this.$refs.inventoryTable.getTableValue(),
  798. saleTypeName: this.getDictValue('销售类型', this.form.saleType)
  799. });
  800. if (this.isUpdate) {
  801. UpdateInformation(commitData)
  802. .then((res) => {
  803. this.loading = false;
  804. this.$message.success('修改成功');
  805. if (type === 'sub') {
  806. this.saleOrderSubmit(res);
  807. return;
  808. }
  809. this.cancel();
  810. this.$emit('done');
  811. })
  812. .catch((e) => {
  813. //this.loading = false;
  814. });
  815. } else {
  816. addInformation(commitData)
  817. .then((res) => {
  818. this.loading = false;
  819. this.$message.success('新增成功');
  820. if (type === 'sub') {
  821. this.saleOrderSubmit(res);
  822. return;
  823. }
  824. this.cancel();
  825. this.$emit('done');
  826. })
  827. .catch((e) => {
  828. //this.loading = false;
  829. });
  830. }
  831. } catch (error) {
  832. console.log(error);
  833. // 表单验证未通过,不执行保存操作
  834. }
  835. },
  836. saleOrderSubmit(res) {
  837. submit({
  838. businessId: this.businessId || res
  839. // productionSupervisorId
  840. }).then((res) => {
  841. this.cancel();
  842. this.$emit('done');
  843. });
  844. },
  845. cancel() {
  846. this.$nextTick(() => {
  847. this.activeName = 'base';
  848. // 关闭后,销毁所有的表单数据
  849. this.$refs['otherForm'] && this.$refs['otherForm'].resetFields();
  850. this.$refs['formRef'] && this.$refs['formRef'].resetFields();
  851. this.$store.commit('order/clearUserData');
  852. this.form = copyObj(this.formDef);
  853. this.visible = false;
  854. });
  855. },
  856. //查找合同分类对应name
  857. findNameById(tree, targetId) {
  858. for (let i = 0; i < tree.length; i++) {
  859. const node = tree[i];
  860. if (node.id === targetId) {
  861. return node.name;
  862. }
  863. if (node.children && node.children.length > 0) {
  864. const name = this.findNameById(node.children, targetId);
  865. if (name) {
  866. return name;
  867. }
  868. }
  869. }
  870. return null;
  871. }
  872. }
  873. };
  874. </script>
  875. <style scoped lang="scss">
  876. .TotalAmount {
  877. font-size: 16px;
  878. padding-right: 30px;
  879. }
  880. </style>