addDialog.vue 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569
  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. :maxable="true"
  12. :resizable="true"
  13. :title="title"
  14. >
  15. <el-form
  16. ref="form"
  17. :model="form"
  18. :rules="rules"
  19. label-width="120px"
  20. class="el-form-box"
  21. >
  22. <headerTitle title="订单信息"> </headerTitle>
  23. <el-row>
  24. <el-col :span="12">
  25. <el-form-item label="销售类型" prop="saleType">
  26. <DictSelection
  27. dictName="销售类型"
  28. clearable
  29. v-model="form.saleType"
  30. :listFormatte="listFormatte"
  31. @change="saleTypeChange"
  32. >
  33. </DictSelection>
  34. </el-form-item>
  35. <el-form-item
  36. label="报价单"
  37. prop="relationCode"
  38. v-if="form.relationType == 2"
  39. >
  40. <el-input
  41. clearable
  42. readonly
  43. @clear="clearContrcat"
  44. v-model="form.relationCode"
  45. @click.native="handQuotation"
  46. placeholder="请输入"
  47. />
  48. </el-form-item>
  49. <el-form-item
  50. label="商机名称"
  51. prop="relationName"
  52. v-if="form.relationType == 1"
  53. >
  54. <el-input
  55. clearable
  56. v-model="form.relationName"
  57. @click.native="handOpportunity"
  58. readonly
  59. @clear="clearContrcat"
  60. placeholder="请输入"
  61. />
  62. </el-form-item>
  63. <el-form-item
  64. label="选择合同"
  65. prop="relationName"
  66. v-if="form.relationType == 3"
  67. >
  68. <el-input
  69. clearable
  70. v-model="form.relationName"
  71. @click.native="handleContractBtn"
  72. @clear="clearContrcat"
  73. placeholder="请选择"
  74. :disabled="!!projectData.contractId"
  75. />
  76. </el-form-item>
  77. <el-form-item
  78. label="项目名称"
  79. prop="projectName"
  80. v-if="form.relationType == 4"
  81. >
  82. <el-input
  83. clearable
  84. v-model="form.projectName"
  85. @change="form.relationName = form.projectName"
  86. @clear="clearContrcat('project')"
  87. placeholder="请输入"
  88. style="width: calc(100% - 80px)"
  89. />
  90. <el-button
  91. style="margin-left: 5px"
  92. size="small"
  93. type="primary"
  94. @click.native="handleProjectBtn"
  95. >选择
  96. </el-button>
  97. </el-form-item>
  98. <el-form-item label="销售部门" prop="salesDeptId">
  99. <ele-tree-select
  100. clearable
  101. :data="groupTreeData"
  102. v-model="form.salesDeptId"
  103. valueKey="id"
  104. labelKey="name"
  105. placeholder="请选择"
  106. @change="change_principalDep"
  107. default-expand-all
  108. />
  109. </el-form-item>
  110. <!-- <el-form-item label="预销售订单编码" prop="preOrderNo">
  111. <el-input
  112. clearable
  113. v-model="form.preOrderNo"
  114. placeholder="请输入"
  115. />
  116. </el-form-item> -->
  117. <el-form-item label="订单类型" prop="needProduce">
  118. <el-radio
  119. v-model="form.needProduce"
  120. :label="1"
  121. @change="needProduceChange"
  122. >有客户生产性订单</el-radio
  123. >
  124. <el-radio
  125. v-model="form.needProduce"
  126. :label="0"
  127. @change="needProduceChange"
  128. >库存式订单</el-radio
  129. >
  130. <el-radio
  131. v-model="form.needProduce"
  132. :label="2"
  133. @change="needProduceChange"
  134. >无客户生产性订单</el-radio
  135. >
  136. <el-radio
  137. v-model="form.needProduce"
  138. :label="4"
  139. @change="needProduceChange"
  140. v-if="clientEnvironmentId != 5"
  141. >不定向订单</el-radio
  142. >
  143. </el-form-item>
  144. <el-form-item prop="orderFiles" label="订单附件">
  145. <fileMain v-model="form.orderFiles"></fileMain>
  146. </el-form-item>
  147. </el-col>
  148. <el-col :span="12">
  149. <el-form-item label="来源类型" prop="relationType">
  150. <el-select
  151. v-model="form.relationType"
  152. filterable
  153. clearable
  154. style="width: 100%"
  155. @change="clearContrcat"
  156. >
  157. <el-option :value="1" label="商机"></el-option>
  158. <el-option :value="2" label="报价"></el-option>
  159. <el-option :value="3" label="销售合同"></el-option>
  160. <el-option :value="4" label="项目"></el-option>
  161. </el-select>
  162. </el-form-item>
  163. <el-form-item
  164. label="合同编号"
  165. prop="relationCode"
  166. v-if="form.relationType == 3"
  167. >
  168. <el-input
  169. :disabled="!!form.contractId"
  170. v-model="form.relationCode"
  171. />
  172. </el-form-item>
  173. <el-form-item label="结算方式" prop="settlementMode">
  174. <DictSelection
  175. dictName="结算方式"
  176. clearable
  177. @itemChange="settlementModeChange"
  178. v-model="form.settlementMode"
  179. >
  180. </DictSelection>
  181. </el-form-item>
  182. <el-form-item
  183. label="总数"
  184. prop="totalPlanNum"
  185. v-if="form.needProduce == 4"
  186. >
  187. <el-input v-model="form.totalPlanNum" class="totalPlanNum">
  188. <template slot="append">
  189. <DictSelection
  190. dictName="计量单位"
  191. clearable
  192. v-model="form.planNumUnit"
  193. >
  194. </DictSelection>
  195. </template>
  196. </el-input>
  197. </el-form-item>
  198. </el-col>
  199. </el-row>
  200. <headerTitle title="基本信息" v-if="form.needProduce != 2"></headerTitle>
  201. <el-row v-if="form.needProduce != 2">
  202. <el-col :span="12">
  203. <el-form-item label="客户名称" prop="partaName">
  204. <el-input
  205. clearable
  206. v-model="form.partaName"
  207. @click.native="handParent"
  208. placeholder="请选择"
  209. readonly
  210. :disabled="!!contactData?.id"
  211. />
  212. </el-form-item>
  213. <el-form-item
  214. label="客户统一社会信用代码"
  215. prop="partaUnifiedSocialCreditCode"
  216. class="form_item_label"
  217. >
  218. <el-input
  219. clearable
  220. v-model="form.partaUnifiedSocialCreditCode"
  221. placeholder="请输入"
  222. />
  223. </el-form-item>
  224. <el-form-item label="客户联系人" prop="partaLinkName">
  225. <el-select
  226. v-model="form.partaLinkName"
  227. placeholder="请选择"
  228. @change="onchangeLink"
  229. style="width: 100%"
  230. >
  231. <el-option
  232. v-for="item in linkNameOptions"
  233. :key="item.id"
  234. :label="item.linkName"
  235. :value="item.id"
  236. >
  237. </el-option>
  238. </el-select>
  239. </el-form-item>
  240. <el-form-item label="客户电话" prop="partaTel">
  241. <el-input
  242. clearable
  243. :maxlength="20"
  244. v-model="form.partaTel"
  245. placeholder="请输入"
  246. />
  247. </el-form-item>
  248. <el-form-item label="客户传真" prop="partaFax">
  249. <el-input clearable v-model="form.partaFax" placeholder="请输入" />
  250. </el-form-item>
  251. <el-form-item label=" 客户Email" prop="partaEmail">
  252. <el-input
  253. clearable
  254. v-model="form.partaEmail"
  255. placeholder="请输入"
  256. />
  257. </el-form-item>
  258. <el-form-item label="客户地址" prop="partaAddress">
  259. <el-input
  260. clearable
  261. v-model="form.partaAddress"
  262. placeholder="请输入"
  263. />
  264. </el-form-item>
  265. </el-col>
  266. <el-col :span="12">
  267. <el-form-item label="售出方名称" prop="partbName">
  268. <el-input
  269. v-if="enterprisePage.length <= 1"
  270. clearable
  271. v-model="form.partbName"
  272. placeholder="请输入"
  273. />
  274. <el-select
  275. v-if="enterprisePage.length > 1"
  276. style="width: 100%"
  277. v-model="form.partbName"
  278. placeholder="请选择"
  279. @change="getEnterprise()"
  280. >
  281. <el-option
  282. v-for="item in enterprisePage"
  283. :key="item.id"
  284. :label="item.name"
  285. :value="item.name"
  286. >
  287. </el-option>
  288. </el-select>
  289. </el-form-item>
  290. <el-form-item
  291. label="售出方统一社会信用代码"
  292. prop="partbUnifiedSocialCreditCode"
  293. class="form_item_label"
  294. >
  295. <el-input
  296. clearable
  297. v-model="form.partbUnifiedSocialCreditCode"
  298. placeholder="请输入"
  299. />
  300. </el-form-item>
  301. <el-form-item label="售出方联系人" prop="partbLinkName">
  302. <el-input
  303. clearable
  304. v-model="form.partbLinkName"
  305. @click.native="handHead"
  306. placeholder="请输入"
  307. />
  308. </el-form-item>
  309. <el-form-item prop="partbTel" label="售出方联系电话">
  310. <el-input clearable v-model="form.partbTel" placeholder="请输入" />
  311. </el-form-item>
  312. <el-form-item prop="partbFax" label="售出方传真">
  313. <el-input clearable v-model="form.partbFax" placeholder="请输入" />
  314. </el-form-item>
  315. <el-form-item label="售出方Email" prop="partbEmail">
  316. <el-input
  317. clearable
  318. v-model="form.partbEmail"
  319. placeholder="请输入"
  320. />
  321. </el-form-item>
  322. <el-form-item label="售出方地址" prop="partbAddress">
  323. <el-input
  324. clearable
  325. v-model="form.partbAddress"
  326. placeholder="请输入"
  327. />
  328. </el-form-item>
  329. </el-col>
  330. </el-row>
  331. <headerTitle
  332. title="物品清单"
  333. style="margin-top: 30px"
  334. v-if="form.needProduce != 4"
  335. >
  336. <el-button
  337. type="primary"
  338. size="mini"
  339. style="margin-bottom: 5px"
  340. @click="orderListShow"
  341. v-if="!form.id"
  342. >历史记录</el-button
  343. ></headerTitle
  344. >
  345. <inventoryTable
  346. v-if="form.needProduce != 4"
  347. :customerMark="customerMark"
  348. :isCustomerMark="clientEnvironmentId != 4 && form.needProduce != 2"
  349. :isProduceDeliveryDeadline="form.needProduce != 0"
  350. ref="inventoryTable"
  351. @setCountAmount="setCountAmount"
  352. :isContractId="!!form.contractId"
  353. :isChangeCount="false"
  354. :needProduce="form.needProduce"
  355. :isSupplier="true"
  356. :isArrivalWay="true"
  357. :cacheKeyUrl="cacheKeyUrl"
  358. :isGoods="true"
  359. :isTaxRate="isTaxRate"
  360. :isSinglePrice="form.needProduce != 2"
  361. :isBatchNo="isBatchNo == 1 && form.saleTypeName.includes('受托')"
  362. ></inventoryTable>
  363. <headerTitle
  364. title="类型清单"
  365. style="margin-top: 30px"
  366. v-if="form.needProduce == 4"
  367. ></headerTitle>
  368. <typeList
  369. v-if="form.needProduce == 4"
  370. @setCountAmount="setCountAmount"
  371. @setTotalPlanNum="setTotalPlanNum"
  372. ref="typeListRef"
  373. ></typeList>
  374. <el-row v-if="form.needProduce == 1">
  375. <el-col :span="8">
  376. <el-form-item
  377. label="自动生成采购计划:"
  378. label-width="160px"
  379. prop="generatePurchase"
  380. >
  381. <el-radio-group v-model="form.generatePurchase">
  382. <el-radio :label="1">是</el-radio>
  383. <el-radio :label="0">否</el-radio>
  384. </el-radio-group>
  385. </el-form-item>
  386. </el-col>
  387. <el-col :span="8">
  388. <el-form-item
  389. label="自动生成生产计划:"
  390. label-width="160px"
  391. prop="generateProduce"
  392. >
  393. <el-radio-group v-model="form.generateProduce">
  394. <el-radio :label="1">是</el-radio>
  395. <el-radio :label="0">否</el-radio>
  396. </el-radio-group>
  397. </el-form-item>
  398. </el-col>
  399. <el-col :span="8">
  400. <el-form-item
  401. label="自动生成项目立项:"
  402. label-width="160px"
  403. prop="generateProject"
  404. >
  405. <el-radio-group v-model="form.generateProject">
  406. <el-radio :label="1">是</el-radio>
  407. <el-radio :label="0">否</el-radio>
  408. </el-radio-group>
  409. </el-form-item>
  410. </el-col>
  411. </el-row>
  412. <el-row style="margin-top: 20px">
  413. <el-col :span="12">
  414. <el-form-item label="总金额" prop="totalAmount">
  415. {{ form.totalAmount || 0 }}元
  416. </el-form-item>
  417. <el-form-item label="收货地址" prop="receiveAddress">
  418. <el-input
  419. clearable
  420. type="textarea"
  421. v-model="form.receiveAddress"
  422. placeholder="请输入"
  423. />
  424. </el-form-item>
  425. </el-col>
  426. <el-col :span="12">
  427. <el-form-item label="优惠后总金额">
  428. <el-input
  429. type="number"
  430. :min="0"
  431. :max="form.totalAmount"
  432. clearable
  433. :disabled="!!form.contractId || !form.totalAmount"
  434. v-model="form.payAmount"
  435. @input="discountInput"
  436. placeholder="请输入"
  437. >
  438. <template slot="append">元</template>
  439. </el-input>
  440. </el-form-item>
  441. <el-form-item label="备注" prop="remark">
  442. <el-input
  443. clearable
  444. type="textarea"
  445. v-model="form.remark"
  446. placeholder="请输入"
  447. />
  448. </el-form-item>
  449. </el-col>
  450. </el-row>
  451. <el-row style="margin-top: 20px">
  452. <el-col :span="12">
  453. <el-form-item label="收货人信息" prop="receivePerson">
  454. <el-input clearable v-model="form.receivePerson" />
  455. </el-form-item>
  456. </el-col>
  457. </el-row>
  458. </el-form>
  459. <div slot="footer" class="footer">
  460. <el-button type="primary" @click="save" v-click-once>保存</el-button>
  461. <el-button
  462. type="primary"
  463. v-if="isNeed_process_is_close"
  464. @click="save('sub')"
  465. v-click-once
  466. >提交</el-button
  467. >
  468. <el-button @click="cancel">返回</el-button>
  469. </div>
  470. <quotationList
  471. ref="quotationListRef"
  472. @changeParent="changeQuotationList"
  473. :isContractBook="false"
  474. ></quotationList>
  475. <!-- 商机 -->
  476. <opportunity-dialog
  477. :opportunityDialogFlag.sync="opportunityDialogFlag"
  478. v-if="opportunityDialogFlag"
  479. ref="opportunityDialogRef"
  480. @changeParent="getOpportunityDetail"
  481. ></opportunity-dialog>
  482. <parentList ref="parentRef" @changeParent="changeParent"></parentList>
  483. <head-list ref="headRef" @changeParent="changePersonel"></head-list>
  484. <contractListDialog
  485. ref="selectContractRef"
  486. @changeParent="changeContract"
  487. :contactData="contactData"
  488. :isCreatedByOrder="2"
  489. ></contractListDialog>
  490. <projectListDialog
  491. :contactData="contactData"
  492. ref="selectProjectRef"
  493. @changeParent="changeProject"
  494. ></projectListDialog>
  495. <process-submit-dialog
  496. :isNotNeedProcess="false"
  497. :processSubmitDialogFlag.sync="processSubmitDialogFlag"
  498. v-if="processSubmitDialogFlag"
  499. ref="processSubmitDialogRef"
  500. @reload="reload"
  501. :callBack="callBack"
  502. ></process-submit-dialog>
  503. <bomDialog ref="bomDialogRef" @handleSubmit="bomDialogSuccess"></bomDialog>
  504. <saleOrderListDialog
  505. ref="saleOrderListDialogRef"
  506. :isMy="true"
  507. @changeParent="saleOrderListDialogChange"
  508. ></saleOrderListDialog>
  509. </ele-modal>
  510. </template>
  511. <script>
  512. import { emailReg, numberReg, telReg } from 'ele-admin';
  513. import inventoryTable from '@/BIZComponents/inventoryTable.vue';
  514. import fileUpload from '@/components/upload/fileUpload';
  515. import dictMixins from '@/mixins/dictMixins';
  516. import parentList from '@/views/saleManage/contact/components/parentList.vue';
  517. import {
  518. getDetail,
  519. updateContractStatus
  520. } from '@/api/contractManage/contractBook';
  521. import {
  522. contactDetail,
  523. updateRelationStatus
  524. } from '@/api/saleManage/contact';
  525. import {
  526. getSaleOrderDetail,
  527. UpdateInformation,
  528. addInformation,
  529. submit,
  530. getByRepeatBomAttribute,
  531. saveOrderBomList
  532. } from '@/api/saleManage/saleorder';
  533. import { getDetail as getOpportunityInfo } from '@/api/saleManage/businessOpportunity';
  534. import { getcontactlink } from '@/api/saleManage/businessFollow';
  535. import headList from '@/BIZComponents/user-select/user-select.vue';
  536. import contractListDialog from './contractListDialog.vue';
  537. import projectListDialog from './projectListDialog.vue';
  538. import paymentList from './paymentList.vue';
  539. import { listOrganizations } from '@/api/system/organization';
  540. import { copyObj } from '@/utils/util';
  541. import { enterprisePage } from '@/api/contractManage/contractBook';
  542. // import fileMain from '@/components/addDoc/index.vue';
  543. import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
  544. import { getUserDetail } from '@/api/system/organization/index.js';
  545. import typeList from './typeList.vue';
  546. import bomDialog from './bomDialog';
  547. import saleOrderListDialog from '@/views/saleManage/saleOrder/invoice/components/orderListDialog.vue';
  548. import { parameterGetByCode } from '@/api/main/index.js';
  549. import quotationList from '@/views/contractManage/contractBook/components/quotationList.vue';
  550. import opportunityDialog from '@/views/financialManage/components/opportunityDialog.vue';
  551. export default {
  552. mixins: [dictMixins],
  553. components: {
  554. processSubmitDialog,
  555. // fileMain,
  556. fileUpload,
  557. headList,
  558. contractListDialog,
  559. projectListDialog,
  560. paymentList,
  561. inventoryTable,
  562. parentList,
  563. typeList,
  564. bomDialog,
  565. quotationList,
  566. saleOrderListDialog,
  567. opportunityDialog
  568. },
  569. props: {
  570. contactData: {
  571. type: Object,
  572. default: () => {
  573. return {};
  574. }
  575. },
  576. isRequired: {
  577. type: Boolean,
  578. default: true
  579. }
  580. },
  581. data() {
  582. let formDef = {
  583. id: '',
  584. contractId: '',
  585. orderFiles: [],
  586. contractName: '',
  587. projectName: '',
  588. projectId: '',
  589. pricingWay: 1,
  590. payAmount: '',
  591. generatePurchase: 0,
  592. generateProduce: 0,
  593. generateProject: 0,
  594. projectName: '',
  595. projectId: '',
  596. receiveAddress: '',
  597. remark: '',
  598. saleType: '',
  599. saleTypeName: '',
  600. totalAmount: 0,
  601. settlementMode: '4',
  602. settlementModeName: '分期付款',
  603. partaUnifiedSocialCreditCode: '',
  604. partbUnifiedSocialCreditCode: '',
  605. partaAddress: '',
  606. partaEmail: '',
  607. partaFax: '',
  608. partaId: '',
  609. partaLinkId: '',
  610. partaLinkName: '',
  611. partaName: '',
  612. partaTel: '',
  613. partbAddress: '',
  614. partbEmail: '',
  615. partbFax: '',
  616. partbId: '',
  617. partbLinkId: '',
  618. partbLinkName: '',
  619. partbName: '',
  620. partbTel: '',
  621. needProduce: 1,
  622. planNumUnit: '立方',
  623. receivePerson: '',
  624. relationType: '',
  625. relationName: '',
  626. relationCode: '',
  627. relationId: ''
  628. };
  629. return {
  630. customerMark: '',
  631. opportunityDialogFlag: false,
  632. projectData: {}, //项目数据
  633. clearing: false, //是否清除合同
  634. processSubmitDialogFlag: false,
  635. fullscreen: false, //全屏
  636. linkNameOptions: [],
  637. cacheKeyUrl: 'eos-saleManage-saleOrder-inventoryTable',
  638. visible: false,
  639. title: '',
  640. formDef,
  641. form: copyObj(formDef),
  642. tableLinkData: [],
  643. // 组织机构树形结构数据
  644. groupTreeData: [],
  645. groupData: [],
  646. tableList: [],
  647. // rules: {
  648. // settlementMode: [
  649. // { required: true, message: '请选择结算方式', trigger: 'change' }
  650. // ],
  651. // saleType: [
  652. // { required: true, message: '请选择销售类型', trigger: 'change' }
  653. // ],
  654. // partaName: [
  655. // { required: true, message: '请选择客户名称', trigger: 'change' }
  656. // ],
  657. // partaLinkName: [
  658. // { required: true, message: '请选择客户联系人', trigger: 'change' }
  659. // ],
  660. // acceptUnpack: [
  661. // { required: true, message: '请选择是否接受', trigger: 'change' }
  662. // ],
  663. // partaTel: [
  664. // {
  665. // required: true,
  666. // pattern: telReg,
  667. // message: '请输入客户联系电话',
  668. // trigger: 'blur'
  669. // }
  670. // ],
  671. // partbName: [
  672. // { required: true, message: '请输入售出方名称', trigger: 'change' }
  673. // ],
  674. // partbLinkName: [
  675. // { required: true, message: '请输入售出方联系人', trigger: 'change' }
  676. // ],
  677. // partbTel: [
  678. // {
  679. // required: true,
  680. // pattern: telReg,
  681. // message: '请输入售出方联系电话',
  682. // trigger: 'blur'
  683. // }
  684. // ],
  685. // partaEmail: [
  686. // { pattern: emailReg, message: '邮箱格式不正确', trigger: 'blur' }
  687. // ],
  688. // payAmount: [{ required: true, message: '请输入', trigger: 'blur' }]
  689. // },
  690. // 提交状态
  691. loading: false,
  692. // 是否是修改
  693. isUpdate: false,
  694. enterprisePage: [],
  695. businessId: '',
  696. isBatchNo: 0,
  697. isTaxRate: 0
  698. };
  699. },
  700. computed: {
  701. rules() {
  702. let isRequired = this.isRequired;
  703. return {
  704. settlementMode: [
  705. {
  706. required: this.getSaleTypeName(this.form.saleType) ? false : true,
  707. message: '请选择结算方式',
  708. trigger: 'change'
  709. }
  710. ],
  711. saleType: [
  712. { required: true, message: '请选择销售类型', trigger: 'change' }
  713. ],
  714. projectName: [
  715. {
  716. required: this.clientEnvironmentId == 4 ? true : false,
  717. message: '请选择项目',
  718. trigger: 'change'
  719. }
  720. ],
  721. partaName: [
  722. { required: true, message: '请选择客户名称', trigger: 'change' }
  723. ],
  724. partaLinkName: [
  725. {
  726. required: isRequired,
  727. message: '请选择客户联系人',
  728. trigger: 'change'
  729. }
  730. ],
  731. acceptUnpack: [
  732. { required: true, message: '请选择是否接受', trigger: 'change' }
  733. ],
  734. partaTel: [
  735. {
  736. required: isRequired,
  737. pattern: telReg,
  738. message: '请输入客户联系电话',
  739. trigger: 'blur'
  740. }
  741. ],
  742. partbName: [
  743. { required: true, message: '请输入售出方名称', trigger: 'change' }
  744. ],
  745. partbLinkName: [
  746. {
  747. required: isRequired,
  748. message: '请输入售出方联系人',
  749. trigger: 'change'
  750. }
  751. ],
  752. partbTel: [
  753. {
  754. required: isRequired,
  755. pattern: telReg,
  756. message: '请输入售出方联系电话',
  757. trigger: 'blur'
  758. }
  759. ],
  760. partaEmail: [
  761. { pattern: emailReg, message: '邮箱格式不正确', trigger: 'blur' }
  762. ],
  763. payAmount: [{ required: true, message: '请输入', trigger: 'blur' }]
  764. };
  765. }
  766. },
  767. created() {
  768. this.changePersonel();
  769. this.getGroupAll();
  770. this.getEnterprisePage();
  771. //批次号是否必填//0否 1是
  772. parameterGetByCode({
  773. code: 'eom_saleOrder_entrusted_batchNo'
  774. }).then((res) => {
  775. this.isBatchNo = res.value;
  776. });
  777. parameterGetByCode({
  778. code: 'eom_saleOrder_order-taxRate'
  779. }).then((res) => {
  780. this.isTaxRate = res.value;
  781. });
  782. },
  783. methods: {
  784. setCountAmount(allPrice) {
  785. this.form.totalAmount = allPrice;
  786. this.form.payAmount = allPrice;
  787. },
  788. setTotalPlanNum(totalPlanNum) {
  789. this.$set(this.form, 'totalPlanNum', totalPlanNum);
  790. },
  791. discountInput() {
  792. this.$refs.inventoryTable.discountInputByOrder(this.form.payAmount);
  793. },
  794. // 选择负责人部门
  795. change_principalDep(id) {
  796. const info = this.groupData.find((e) => e.id == id);
  797. this.form.salesDeptName = info.name;
  798. },
  799. // 获取公司数据
  800. getGroupAll() {
  801. listOrganizations().then((list) => {
  802. this.groupData = list;
  803. this.groupTreeData = this.$util.toTreeData({
  804. data: list,
  805. idField: 'id',
  806. parentIdField: 'parentId'
  807. });
  808. });
  809. },
  810. //选择商机
  811. handOpportunity(e) {
  812. this.opportunityDialogFlag = true;
  813. this.$nextTick(() => {
  814. let item = {
  815. id: this.form.sourceId
  816. };
  817. this.$refs.opportunityDialogRef.init(item);
  818. });
  819. },
  820. //获取商机信息
  821. async getOpportunityDetail(row) {
  822. this.$set(this.form, 'relationName', row.name);
  823. this.$set(this.form, 'relationId', row.id);
  824. this.$set(this.form, 'relationCode', row.code);
  825. let cusInfo = await contactDetail(row.contactId);
  826. let info = await getOpportunityInfo(row?.id ?? '');
  827. await this.getLinkInfo(cusInfo.base.id);
  828. let totalPrice = info.productList.reduce((num, cur) => {
  829. return num + Number(cur.totalPrice);
  830. }, 0);
  831. info.productList.forEach((item) => {
  832. item.discountSinglePrice =
  833. item.discountSinglePrice || item.singlePrice;
  834. item.discountTotalPrice = item.discountTotalPrice || item.totalPrice;
  835. });
  836. let discountTotalPrice = info.productList.reduce((num, cur) => {
  837. return num + Number(cur.discountTotalPrice);
  838. }, 0);
  839. this.form = Object.assign({}, this.form, {
  840. partaName: cusInfo.base.name,
  841. partaId: cusInfo.base.id,
  842. partaUnifiedSocialCreditCode: cusInfo.base.unifiedSocialCreditCode,
  843. partaAddress: cusInfo.base.addressName + cusInfo.base.address,
  844. partaLinkName: cusInfo.linkList[0]?.linkName,
  845. partaLinkId: cusInfo.linkList[0]?.id,
  846. partaTel: cusInfo.linkList[0]?.mobilePhone,
  847. totalPrice: totalPrice,
  848. discountTotalPrice: discountTotalPrice
  849. });
  850. this.$nextTick(() => {
  851. this.$refs.inventoryTable &&
  852. this.$refs.inventoryTable.putTableValue(info);
  853. });
  854. // let form = {
  855. // contractVO: {
  856. // },
  857. // productList: info.productList || []
  858. // };
  859. },
  860. //选择报价单
  861. handQuotation(e) {
  862. this.$refs.quotationListRef.open();
  863. },
  864. //报价单
  865. async changeQuotationList({ data, sourceCode, sourceId }) {
  866. this.form = Object.assign({}, this.form, {
  867. relationCode: sourceCode,
  868. relationId: sourceId
  869. });
  870. this.getDetailData('', data);
  871. },
  872. //选择合同获取合同的详情
  873. async getDetailData(id, row) {
  874. this.loading = true;
  875. let data = null;
  876. if (row) {
  877. data = row;
  878. } else {
  879. data = await getDetail(id);
  880. }
  881. this.loading = false;
  882. if (data) {
  883. await this.changeParent({ id: data.contractVO?.partaId }, true);
  884. let { contractVO } = data;
  885. this.$nextTick(() => {
  886. let {
  887. partaAddress,
  888. partaEmail,
  889. partaFax,
  890. partaId,
  891. partaLinkId,
  892. partaLinkName,
  893. partaName,
  894. partaTel,
  895. partbAddress,
  896. partbEmail,
  897. partbFax,
  898. partbId,
  899. partbLinkId,
  900. partbLinkName,
  901. partbName,
  902. partbTel,
  903. totalPrice,
  904. discountTotalPrice,
  905. partaUnifiedSocialCreditCode,
  906. partbUnifiedSocialCreditCode,
  907. settlementMode,
  908. settlementModeName,
  909. pricingWay,
  910. contractNo,
  911. contractNumber,
  912. contractName
  913. } = contractVO;
  914. this.form = Object.assign(
  915. {},
  916. this.form,
  917. {
  918. partaAddress,
  919. partaEmail,
  920. partaFax,
  921. partaId,
  922. partaLinkId,
  923. partaLinkName,
  924. partaName,
  925. partaTel,
  926. partbAddress,
  927. partbEmail,
  928. partbFax,
  929. partbId,
  930. partbLinkId,
  931. partbLinkName,
  932. partbName,
  933. partbTel,
  934. pricingWay,
  935. totalPrice,
  936. discountTotalPrice,
  937. partaUnifiedSocialCreditCode,
  938. partbUnifiedSocialCreditCode,
  939. totalAmount: totalPrice,
  940. payAmount: discountTotalPrice || totalPrice,
  941. receiveAddress: partaAddress,
  942. settlementMode,
  943. settlementModeName,
  944. contractNo,
  945. contractNumber
  946. },
  947. !row
  948. ? {
  949. relationName: contractName,
  950. relationCode: contractNumber,
  951. relationId: id
  952. }
  953. : {}
  954. );
  955. data.productList = data.productList.map((item) => {
  956. item['saleCount'] = item.contractCount || item.saleCount;
  957. item['saleUnit'] = item.contractUnit || item.saleUnit;
  958. item['saleUnitId'] = item.contractUnitId || item.saleUnitId;
  959. return item;
  960. });
  961. this.getLinkInfo(partaId);
  962. this.$refs.inventoryTable &&
  963. this.$refs.inventoryTable.putTableValue(data);
  964. });
  965. }
  966. },
  967. //获取订单详情
  968. async getSaleOrderDetail(id) {
  969. this.businessId = id;
  970. this.loading = true;
  971. const data = await getSaleOrderDetail(id);
  972. this.loading = false;
  973. this.form = data;
  974. if (data.partaId) {
  975. await this.changeParent({ id: data.partaId }, true);
  976. }
  977. if (data) {
  978. data.saleType = +data.saleType;
  979. this.$nextTick(() => {
  980. this.$refs.inventoryTable &&
  981. this.$refs.inventoryTable.putTableValue(data);
  982. this.$refs.typeListRef &&
  983. this.$refs.typeListRef.putTableValue(data.typedetailList);
  984. this.getLinkInfo(data.partaId);
  985. this.$store.commit('order/setContractId', data.partaId);
  986. });
  987. }
  988. },
  989. //更新联系人数据
  990. async getLinkInfo(contactId) {
  991. const data = await getcontactlink({ contactId });
  992. if (data && data?.length) {
  993. this.linkNameOptions = data;
  994. }
  995. },
  996. //选择下拉框
  997. onchangeLink(selectedOptions) {
  998. const option = this.linkNameOptions.find(
  999. (opt) => opt.id === selectedOptions
  1000. );
  1001. this.form = Object.assign({}, this.form, {
  1002. partaEmail: option?.email,
  1003. partaLinkName: option?.linkName || '',
  1004. partaTel: option?.mobilePhone || option?.phone || '',
  1005. partaLinkId: option?.id
  1006. });
  1007. },
  1008. handHead() {
  1009. let item = {
  1010. id: this.form.partbLinkId
  1011. };
  1012. this.$refs.headRef.open(item);
  1013. },
  1014. orderListShow() {
  1015. this.$refs.saleOrderListDialogRef.open();
  1016. },
  1017. async saleOrderListDialogChange(row) {
  1018. let data = await getSaleOrderDetail(row.id);
  1019. [
  1020. 'id',
  1021. 'orderId',
  1022. 'createTime',
  1023. 'createUserId',
  1024. 'createUserName',
  1025. 'createDept',
  1026. 'orderNo',
  1027. 'orderStatus',
  1028. 'outboundStatus',
  1029. 'payStatus',
  1030. 'preOrderNo',
  1031. 'progress',
  1032. 'processInstanceId',
  1033. 'orderBomList'
  1034. ].forEach((key) => {
  1035. delete data[key];
  1036. data.productList.forEach((item) => {
  1037. if (['id', 'createTime', 'createUserId', 'orderId'].includes(key)) {
  1038. delete item[key];
  1039. }
  1040. });
  1041. data.typedetailList.forEach((item) => {
  1042. if (['id', 'createTime', 'createUserId', 'orderId'].includes(key)) {
  1043. delete item[key];
  1044. }
  1045. });
  1046. });
  1047. this.form = data;
  1048. if (data) {
  1049. data.saleType = +data.saleType;
  1050. this.$nextTick(() => {
  1051. this.$refs.inventoryTable &&
  1052. this.$refs.inventoryTable.putTableValue(data);
  1053. this.$refs.typeListRef &&
  1054. this.$refs.typeListRef.putTableValue(data.typedetailList);
  1055. this.getLinkInfo(data.partaId);
  1056. this.$store.commit('order/setContractId', data.partaId);
  1057. });
  1058. }
  1059. },
  1060. //选择售出方人回调
  1061. changePersonel(obj) {
  1062. if (!obj) {
  1063. obj = this.$store.getters.user.info;
  1064. obj.id = obj.userId;
  1065. }
  1066. this.$set(this.form, 'partbLinkId', obj.id);
  1067. this.$set(this.form, 'partbLinkName', obj.name);
  1068. this.$set(this.form, 'partbTel', obj.phone);
  1069. this.$set(this.form, 'partbEmail', obj.email);
  1070. },
  1071. //选择客户回调
  1072. async changeParent(obj, isCustomerMark) {
  1073. const { base, other, linkList } = await contactDetail(obj.id);
  1074. const userInfo = base?.salesmanId
  1075. ? await getUserDetail(base?.salesmanId)
  1076. : {};
  1077. this.customerMark = base?.serialNo;
  1078. // 新增时带出默认收货人
  1079. const defaultReceived = linkList.find((item) => item.isDefault === 1);
  1080. this.form.receivePerson = defaultReceived?.linkName;
  1081. if (isCustomerMark) {
  1082. return;
  1083. }
  1084. this.form = Object.assign({}, this.form, {
  1085. partaId: base?.id,
  1086. partaName: base?.name,
  1087. partaAddress: other?.addressName + other?.address,
  1088. partaLinkId: '',
  1089. partaLinkName: '',
  1090. partaEmail: '',
  1091. partaTel: '',
  1092. partaUnifiedSocialCreditCode: base?.unifiedSocialCreditCode,
  1093. customerMark: base?.serialNo,
  1094. receiveAddress: other?.addressName + other?.address,
  1095. receivePerson: defaultReceived?.linkName
  1096. });
  1097. this.changePersonel(userInfo?.id ? userInfo : '');
  1098. await this.getLinkInfo(obj.id);
  1099. this.$nextTick(() => {
  1100. let firstLink =
  1101. this.linkNameOptions.find((item) => item.ifChief == 1) || {};
  1102. this.form = Object.assign({}, this.form, {
  1103. partaLinkId: firstLink.id || this.linkNameOptions[0]?.id,
  1104. partaLinkName:
  1105. firstLink.linkName || this.linkNameOptions[0]?.linkName,
  1106. partaTel:
  1107. firstLink.mobilePhone || this.linkNameOptions[0]?.mobilePhone
  1108. });
  1109. this.setProductInfo();
  1110. });
  1111. },
  1112. setProductInfo() {
  1113. if (this.$refs.inventoryTable && this.$refs.inventoryTable.form) {
  1114. this.$refs.inventoryTable?.form?.datasource.forEach((item, index) => {
  1115. this.$set(
  1116. this.$refs.inventoryTable?.form?.datasource[index],
  1117. 'customerMark',
  1118. this.customerMark
  1119. );
  1120. });
  1121. }
  1122. },
  1123. saleTypeChange() {
  1124. if (this.getSaleTypeName()) {
  1125. this.$set(this.form, 'settlementMode', '');
  1126. }
  1127. },
  1128. getSaleTypeName() {
  1129. let saleTypeName =
  1130. this.getDictValue('销售类型', this.form.saleType) || '';
  1131. this.form.saleTypeName = saleTypeName;
  1132. if (
  1133. saleTypeName.indexOf('技改') != '-1' ||
  1134. saleTypeName.indexOf('三包') != '-1' ||
  1135. saleTypeName.indexOf('补发') != '-1'
  1136. ) {
  1137. return true;
  1138. } else {
  1139. return false;
  1140. }
  1141. },
  1142. //选择合同回调
  1143. changeContract(obj) {
  1144. this.form = Object.assign({}, this.form, {
  1145. contractId: obj.id,
  1146. contractName: obj.contractName,
  1147. relationType:3
  1148. });
  1149. this.getDetailData(obj.id);
  1150. this.$store.commit('order/setContractId', obj.id);
  1151. },
  1152. //选择合同弹框
  1153. handleContractBtn() {
  1154. if (this.clearing) return;
  1155. let item = {
  1156. id: this.form.contractId
  1157. };
  1158. this.$refs.selectContractRef.open(item);
  1159. },
  1160. //选择项目回调
  1161. async changeProject(obj) {
  1162. this.projectData = obj;
  1163. this.form = Object.assign({}, this.form, {
  1164. projectName: obj.name,
  1165. projectId: obj.id,
  1166. projectCode: obj.code,
  1167. relationName: obj.name,
  1168. relationId: obj.id,
  1169. relationCode: obj.code
  1170. });
  1171. if (obj.contractId) {
  1172. this.changeContract({
  1173. id: obj.contractId,
  1174. contractName: obj.contractName
  1175. });
  1176. } else if (obj.contactId) {
  1177. this.changeParent({ id: obj.contactId });
  1178. }
  1179. },
  1180. //选择项目弹框
  1181. handleProjectBtn() {
  1182. if (this.clearing) return;
  1183. let item = {
  1184. id: this.form.projectId
  1185. };
  1186. this.$refs.selectProjectRef.open(item);
  1187. },
  1188. //清除合同
  1189. clearContrcat(type) {
  1190. if (type == 'project' && !this.form.projectId) {
  1191. return;
  1192. }
  1193. this.clearing = true;
  1194. let { id, saleType, saleTypeName, orderFiles, remark, relationType } =
  1195. this.form;
  1196. this.form = Object.assign({}, copyObj(this.formDef), {
  1197. id,
  1198. saleType,
  1199. saleTypeName,
  1200. relationType,
  1201. orderFiles,
  1202. remark
  1203. });
  1204. this.projectData = {};
  1205. this.$store.commit('order/setContractId', '');
  1206. this.$refs.inventoryTable &&
  1207. this.$refs.inventoryTable.putTableValue([]);
  1208. setTimeout(() => {
  1209. this.clearing = false;
  1210. }, 500);
  1211. },
  1212. handParent() {
  1213. if (this.form.contractId) {
  1214. return this.$message.error('选择了合同不能更改客户名称');
  1215. }
  1216. let item = {
  1217. id: this.form.contactId
  1218. };
  1219. this.$refs.parentRef.open(item);
  1220. },
  1221. listFormatte(data) {
  1222. return data.filter((item) => item.dictCode !== 0);
  1223. },
  1224. //打开新增编辑弹框
  1225. async open(type, row, contactCategoryId) {
  1226. this.businessId = '';
  1227. this.title = type === 'add' ? '新增' : '修改';
  1228. this.clientEnvironmentId=this.$store.state.user.info.clientEnvironmentId;
  1229. this.row = row;
  1230. if (this.enterprisePage.length == 0) {
  1231. await this.getEnterprisePage();
  1232. }
  1233. this.visible = true;
  1234. if (type == 'add') {
  1235. this.isUpdate = false;
  1236. if (this.enterprisePage.length > 0) {
  1237. this.form.partbName = this.enterprisePage[0].name;
  1238. this.form.partbUnifiedSocialCreditCode =
  1239. this.enterprisePage[0].unifiedSocialCreditCode;
  1240. this.form.partbFax = this.enterprisePage[0].fax;
  1241. this.form.partbAddress = this.enterprisePage[0].address;
  1242. }
  1243. if (this.contactData.id) {
  1244. this.changeParent({ id: this.contactData.id });
  1245. }
  1246. this.form.saleType = 1;
  1247. //嘉实默认值
  1248. if (this.clientEnvironmentId == 5) {
  1249. this.form.saleType = 2;
  1250. this.form.needProduce = 0;
  1251. this.form.settlementMode = '6';
  1252. }
  1253. //宝悦默认值
  1254. if (this.clientEnvironmentId == 4) {
  1255. this.form.needProduce = 4;
  1256. this.form.relationType = 4;
  1257. }
  1258. } else {
  1259. this.isUpdate = true;
  1260. this.getSaleOrderDetail(row.id);
  1261. }
  1262. },
  1263. needProduceChange() {
  1264. this.$nextTick(() => {
  1265. this.form.totalAmount = 0;
  1266. this.form.payAmount = 0;
  1267. this.$refs.inventoryTable &&
  1268. this.$refs.inventoryTable.putTableValue({});
  1269. this.$refs.typeListRef && this.$refs.typeListRef.putTableValue([]);
  1270. });
  1271. },
  1272. //从合同页面新增订单
  1273. async contractOpen(row) {
  1274. this.title = '新增';
  1275. this.visible = true;
  1276. this.isUpdate = false;
  1277. if (this.enterprisePage.length == 0) {
  1278. await this.getEnterprisePage();
  1279. }
  1280. if (this.enterprisePage.length > 0) {
  1281. this.form.partbName = this.enterprisePage[0].name;
  1282. this.form.partbUnifiedSocialCreditCode =
  1283. this.enterprisePage[0].unifiedSocialCreditCode;
  1284. this.form.partbFax = this.enterprisePage[0].fax;
  1285. this.form.partbAddress = this.enterprisePage[0].address;
  1286. }
  1287. await this.changeContract(row);
  1288. },
  1289. getEnterprisePage() {
  1290. enterprisePage({
  1291. pageNum: 1,
  1292. size: 100
  1293. }).then((res) => {
  1294. this.enterprisePage = [];
  1295. this.enterprisePage.push(...res.list);
  1296. });
  1297. },
  1298. getEnterprise() {
  1299. let data = this.enterprisePage.find(
  1300. (item) => item.name == this.form.partbName
  1301. );
  1302. this.form.partbName = data.name;
  1303. this.form.partbUnifiedSocialCreditCode = data.unifiedSocialCreditCode;
  1304. this.form.partbFax = data.fax;
  1305. this.form.partbAddress = data.address;
  1306. },
  1307. settlementModeChange(info) {
  1308. this.form.settlementModeName = info.dictValue;
  1309. },
  1310. ifChiefChange(value, idx) {
  1311. if (value === 1) {
  1312. this.tableLinkData.forEach((e) => (e.ifChief = 0));
  1313. this.tableLinkData[idx].ifChief = 1;
  1314. }
  1315. },
  1316. getValidate() {
  1317. console.log(this.form);
  1318. let arr = [
  1319. new Promise((resolve, reject) => {
  1320. this.$refs.form.validate((valid) => {
  1321. if (!valid) {
  1322. reject(false);
  1323. } else {
  1324. resolve(true);
  1325. }
  1326. });
  1327. })
  1328. ];
  1329. if (this.form.needProduce != 4) {
  1330. arr.push(
  1331. new Promise((resolve, reject) => {
  1332. this.$refs.inventoryTable.validateForm((valid) => {
  1333. if (!valid) {
  1334. reject(false);
  1335. } else {
  1336. resolve(true);
  1337. }
  1338. });
  1339. })
  1340. );
  1341. }
  1342. return Promise.all(arr);
  1343. },
  1344. async save(type) {
  1345. try {
  1346. await this.getValidate();
  1347. // 表单验证通过,执行保存操作
  1348. this.loading = true;
  1349. let isTemporary = [];
  1350. if (!this.isUpdate) {
  1351. delete this.form.id;
  1352. }
  1353. let commitData = Object.assign({}, this.form, {
  1354. productList: this.$refs?.inventoryTable?.getTableValue() || [],
  1355. typedetailList: this.$refs?.typeListRef?.getTableValue() || [],
  1356. saleTypeName: this.getDictValue('销售类型', this.form.saleType)
  1357. });
  1358. commitData.productList.forEach((item) => {
  1359. if (!item.productCode) {
  1360. isTemporary.push(item.productName);
  1361. }
  1362. });
  1363. if (isTemporary.length > 0) {
  1364. this.$message.error(
  1365. isTemporary.toString() +
  1366. '是临时产品,无法创建订单,请先去主数据维护!'
  1367. );
  1368. return;
  1369. }
  1370. this.interfaceCall(commitData, type);
  1371. } catch (error) {
  1372. console.log(error);
  1373. // 表单验证未通过,不执行保存操作
  1374. }
  1375. },
  1376. interfaceCall(commitData, type) {
  1377. let API = this.isUpdate ? UpdateInformation : addInformation;
  1378. API(commitData)
  1379. .then((res) => {
  1380. this.loading = false;
  1381. updateRelationStatus([this.form.partaId]);
  1382. if (this.form.contractId) {
  1383. updateContractStatus([this.form.contractId]);
  1384. }
  1385. if (type === 'sub') {
  1386. this.saleOrderSubmitOrGenerate(res, commitData);
  1387. return;
  1388. } else {
  1389. this.$message.success('操作成功');
  1390. }
  1391. this.cancel();
  1392. this.$emit('done');
  1393. })
  1394. .catch((e) => {
  1395. //this.loading = false;
  1396. });
  1397. },
  1398. async callBack() {
  1399. if (!this.current.generatePurchase && !this.current.generateProduce) {
  1400. return 0;
  1401. }
  1402. const code = saveOrderBomList({
  1403. categoryDTOList: this.tableList || [],
  1404. orderId: this.current.id
  1405. });
  1406. return code;
  1407. },
  1408. async saleOrderSubmitOrGenerate(id) {
  1409. this.tableList = [];
  1410. this.current = await getSaleOrderDetail(this.businessId || id);
  1411. if (!this.current.generatePurchase && !this.current.generateProduce) {
  1412. this.saleOrderSubmit(this.current.id);
  1413. } else {
  1414. const data = await getByRepeatBomAttribute(this.current.id);
  1415. if (data && data.length) {
  1416. this.$refs.bomDialogRef.open(data);
  1417. return;
  1418. }
  1419. this.saleOrderSubmit(this.current.id);
  1420. }
  1421. },
  1422. bomDialogSuccess(tableList) {
  1423. this.tableList = tableList;
  1424. this.saleOrderSubmit(this.current.id);
  1425. },
  1426. async saleOrderSubmit(res) {
  1427. const data = await getSaleOrderDetail(this.businessId || res);
  1428. this.processSubmitDialogFlag = true;
  1429. let businessType =
  1430. data.needProduce == 1
  1431. ? '有客户生产性订单'
  1432. : data.needProduce == 2
  1433. ? '无客户生产性订单'
  1434. : data.needProduce == 4
  1435. ? '不定向订单'
  1436. : '库存式订单';
  1437. this.$nextTick(() => {
  1438. let params = {
  1439. businessId: data.id,
  1440. businessKey: 'sales_order_approve',
  1441. formCreateUserId: data.createUserId,
  1442. variables: {
  1443. businessCode: data.orderNo,
  1444. businessName: data.partaName,
  1445. businessType: businessType
  1446. }
  1447. };
  1448. this.$refs.processSubmitDialogRef.init(params);
  1449. });
  1450. },
  1451. reload() {
  1452. this.cancel();
  1453. this.$emit('done');
  1454. },
  1455. cancel() {
  1456. this.$nextTick(() => {
  1457. // 关闭后,销毁所有的表单数据
  1458. this.$refs['otherForm'] && this.$refs['otherForm'].resetFields();
  1459. this.$refs['formRef'] && this.$refs['formRef'].resetFields();
  1460. this.$store.commit('order/clearUserData');
  1461. this.form = copyObj(this.formDef);
  1462. this.visible = false;
  1463. this.projectData = {};
  1464. });
  1465. },
  1466. //查找合同分类对应name
  1467. findNameById(tree, targetId) {
  1468. for (let i = 0; i < tree.length; i++) {
  1469. const node = tree[i];
  1470. if (node.id === targetId) {
  1471. return node.name;
  1472. }
  1473. if (node.children && node.children.length > 0) {
  1474. const name = this.findNameById(node.children, targetId);
  1475. if (name) {
  1476. return name;
  1477. }
  1478. }
  1479. }
  1480. return null;
  1481. }
  1482. }
  1483. };
  1484. </script>
  1485. <style scoped lang="scss">
  1486. .TotalAmount {
  1487. font-size: 16px;
  1488. padding-right: 30px;
  1489. }
  1490. .totalPlanNum {
  1491. :deep(.el-input-group__append) {
  1492. width: 160px;
  1493. }
  1494. }
  1495. </style>