addDialog.vue 33 KB

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