addDialog.vue 24 KB

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