addOrEditDialog.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863
  1. <template>
  2. <ele-modal
  3. custom-class="ele-dialog-form long-dialog-form"
  4. :centered="true"
  5. :visible.sync="addOrEditDialogFlag"
  6. :title="title"
  7. :append-to-body="true"
  8. :close-on-click-modal="false"
  9. width="70%"
  10. :before-close="cancel"
  11. :maxable="true"
  12. :resizable="true"
  13. >
  14. <el-form
  15. ref="form"
  16. :rules="rules"
  17. class="el-form-box"
  18. :model="form"
  19. label-width="140px"
  20. >
  21. <headerTitle title="基本信息"></headerTitle>
  22. <el-row :gutter="12">
  23. <el-col :span="12">
  24. <el-form-item label="发票类型" prop="type">
  25. <el-select
  26. v-model="form.type"
  27. @change="handleSelType('isType')"
  28. clearable
  29. style="width: 100%"
  30. >
  31. <el-option label="开票" :value="1"></el-option>
  32. <el-option label="收票" :value="2"></el-option>
  33. </el-select>
  34. </el-form-item>
  35. </el-col>
  36. <el-col :span="12" v-if="form.type">
  37. <el-form-item label="来源类型" prop="sourceType">
  38. <el-select
  39. v-model="form.sourceType"
  40. @change="handleSelType()"
  41. :disabled="isOtherSourceFlag"
  42. clearable
  43. style="width: 100%"
  44. >
  45. <el-option label="对账单" :value="1"></el-option>
  46. <el-option label="合同" :value="2"></el-option>
  47. <el-option label="订单" :value="3"></el-option>
  48. <el-option
  49. label="应收"
  50. :value="5"
  51. v-if="form.type == 1"
  52. ></el-option>
  53. <el-option
  54. label="应付"
  55. :value="4"
  56. v-if="form.type == 2"
  57. ></el-option>
  58. </el-select>
  59. </el-form-item>
  60. </el-col>
  61. <el-col :span="12" v-if="form.sourceType == 1">
  62. <el-form-item label="对账单" prop="sourceCode">
  63. <el-input
  64. v-model="form.sourceCode"
  65. readonly
  66. @click.native="handleSelectAccount(1)"
  67. ></el-input>
  68. </el-form-item>
  69. </el-col>
  70. <el-col :span="12" v-if="form.sourceType == 2">
  71. <el-form-item label="合同" prop="sourceCode">
  72. <el-input
  73. v-model="form.sourceCode"
  74. readonly
  75. @click.native="handleSelectAccount(2)"
  76. ></el-input>
  77. </el-form-item>
  78. </el-col>
  79. <el-col :span="12" v-if="form.sourceType == 3">
  80. <el-form-item label="订单" prop="sourceCode">
  81. <el-input
  82. v-model="form.sourceCode"
  83. readonly
  84. @click.native="handleSelectAccount(3)"
  85. ></el-input>
  86. </el-form-item>
  87. </el-col>
  88. <el-col :span="12" v-if="form.sourceType == 5">
  89. <el-form-item label="应收" prop="sourceCode">
  90. <el-input
  91. v-model="form.sourceCode"
  92. readonly
  93. @click.native="handleSelectAccount(5)"
  94. ></el-input>
  95. </el-form-item>
  96. </el-col>
  97. <el-col :span="12" v-if="form.sourceType == 4">
  98. <el-form-item label="应付" prop="sourceCode">
  99. <el-input
  100. v-model="form.sourceCode"
  101. readonly
  102. @click.native="handleSelectAccount(4)"
  103. ></el-input>
  104. </el-form-item>
  105. </el-col>
  106. <el-col :span="12">
  107. <el-form-item label="金额" prop="amount">
  108. <el-input-number
  109. v-model="form.amount"
  110. :precision="2"
  111. :controls="false"
  112. style="width: 100%"
  113. :min="0"
  114. ></el-input-number>
  115. </el-form-item>
  116. </el-col>
  117. <el-col :span="12">
  118. <el-form-item label="申请部门" prop="applyDeptId">
  119. <ele-tree-select
  120. clearable
  121. :data="deptTreeList"
  122. v-model="form.applyDeptId"
  123. valueKey="id"
  124. labelKey="name"
  125. placeholder="请选择"
  126. @change="changeDeptInfo"
  127. default-expand-all
  128. />
  129. </el-form-item>
  130. </el-col>
  131. <el-col :span="12">
  132. <el-form-item label="申请人" prop="applyUserId">
  133. <personSelect
  134. ref="directorRef"
  135. v-model="form.applyUserId"
  136. @selfChange="changeUserInfo"
  137. />
  138. </el-form-item>
  139. </el-col>
  140. <el-col :span="12">
  141. <el-form-item label="预计开票日期">
  142. <el-date-picker
  143. style="width: 100%"
  144. v-model="form.expectInvoiceDate"
  145. type="date"
  146. value-format="yyyy-MM-dd"
  147. placeholder="选择日期"
  148. >
  149. </el-date-picker>
  150. </el-form-item>
  151. </el-col>
  152. </el-row>
  153. <headerTitle title="开票信息"></headerTitle>
  154. <el-row :gutter="12">
  155. <el-col :span="12">
  156. <el-form-item label="公司名称" prop="companyName">
  157. <el-input
  158. v-model="form.companyName"
  159. placeholder="请输入"
  160. v-if="enterprisePage.length <= 1 || form.type == 2"
  161. />
  162. <el-select
  163. v-if="enterprisePage.length > 1 && form.type == 1"
  164. style="width: 100%"
  165. v-model="form.companyName"
  166. placeholder="请选择"
  167. @change="enterpriseChange"
  168. >
  169. <el-option
  170. v-for="item in enterprisePage"
  171. :key="item.id"
  172. :label="item.name"
  173. :value="item.name"
  174. >
  175. </el-option>
  176. </el-select>
  177. </el-form-item>
  178. </el-col>
  179. <el-col :span="12">
  180. <el-form-item label="发票类型" prop="category">
  181. <el-radio v-model="form.category" :label="2"
  182. >增值税普通发票</el-radio
  183. >
  184. <el-radio v-model="form.category" :label="1"
  185. >增值税专用发票</el-radio
  186. >
  187. </el-form-item>
  188. </el-col>
  189. <el-col :span="12">
  190. <el-form-item
  191. label="统一社会信用代码"
  192. prop="companyUsc"
  193. class="form_item_label"
  194. >
  195. <el-input v-model="form.companyUsc"></el-input>
  196. </el-form-item>
  197. </el-col>
  198. <el-col :span="12">
  199. <el-form-item label="开户银行" prop="companyBankBranchNo">
  200. <el-input v-model="form.companyBankBranchNo"></el-input>
  201. </el-form-item>
  202. </el-col>
  203. <el-col :span="12">
  204. <el-form-item label="银行账户" prop="companyBankAccount">
  205. <el-input v-model="form.companyBankAccount"></el-input>
  206. </el-form-item>
  207. </el-col>
  208. <el-col :span="12">
  209. <el-form-item label="单位地址" prop="companyAddress">
  210. <el-input v-model="form.companyAddress"></el-input>
  211. </el-form-item>
  212. </el-col>
  213. <el-col :span="12">
  214. <el-form-item label="电话号码" prop="companyTel">
  215. <el-input v-model="form.companyTel"></el-input>
  216. </el-form-item>
  217. </el-col>
  218. <el-col :span="12">
  219. <el-form-item prop="files" label="发票附件">
  220. <fileMain v-model="form.files" ></fileMain>
  221. </el-form-item>
  222. </el-col>
  223. </el-row>
  224. <headerTitle title="收票信息"></headerTitle>
  225. <el-row :gutter="12">
  226. <el-col :span="12">
  227. <el-form-item label="收票人" prop="receiverName">
  228. <el-input
  229. v-model="form.receiverName"
  230. placeholder="请输入"
  231. v-if="enterprisePage.length <= 1 || form.type == 1"
  232. />
  233. <el-select
  234. v-if="enterprisePage.length > 1 && form.type == 2"
  235. style="width: 100%"
  236. v-model="form.receiverName"
  237. placeholder="请选择"
  238. @change="enterpriseChange"
  239. >
  240. <el-option
  241. v-for="item in enterprisePage"
  242. :key="item.id"
  243. :label="item.name"
  244. :value="item.name"
  245. >
  246. </el-option>
  247. </el-select>
  248. </el-form-item>
  249. </el-col>
  250. <el-col :span="12">
  251. <el-form-item label="收票人地址" prop="receiverAddress">
  252. <el-input v-model="form.receiverAddress"></el-input>
  253. </el-form-item>
  254. </el-col>
  255. </el-row>
  256. <el-row :gutter="12">
  257. <el-col :span="12">
  258. <el-form-item label="联系方式" prop="receiverTel">
  259. <el-input v-model="form.receiverTel"></el-input>
  260. </el-form-item>
  261. </el-col>
  262. </el-row>
  263. </el-form>
  264. <headerTitle title="关联信息"></headerTitle>
  265. <table-info
  266. :isOtherSourceFlag="isOtherSourceFlag"
  267. :dialogType="dialogType"
  268. :form="form"
  269. :contactData="contactData"
  270. ref="table"
  271. @setPrice="setPrice"
  272. :invoiceAmount="form.invoiceAmount"
  273. ></table-info>
  274. <div slot="footer">
  275. <el-button type="primary" @click="handleSave(0)">保存</el-button>
  276. <el-button
  277. type="primary"
  278. v-if="isNeed_process_is_close"
  279. @click="handleSave(1)"
  280. >提交</el-button
  281. >
  282. <el-button @click="cancel">返回</el-button>
  283. </div>
  284. <process-submit-dialog
  285. api-fun-name="fininvoiceapplyStatusAPI"
  286. :processSubmitDialogFlag.sync="processSubmitDialogFlag"
  287. v-if="processSubmitDialogFlag"
  288. ref="processSubmitDialogRef"
  289. @reload="reload"
  290. ></process-submit-dialog>
  291. <!--对账单-->
  292. <account-statement-dialog
  293. ref="accountStatementDialogRef"
  294. :form="form"
  295. v-if="accountStatementDialogFlag"
  296. :accountstatement-dialog-flag.sync="accountStatementDialogFlag"
  297. @getAccountData="getAccountData"
  298. :contactData="contactData"
  299. :type="form.type"
  300. >
  301. </account-statement-dialog>
  302. <!--采购订单-->
  303. <purchasinOrderListDialog
  304. ref="orderListDialogRef"
  305. @changeParent="changeOrder"
  306. ></purchasinOrderListDialog>
  307. <!--销售订单-->
  308. <saleOrderListDialog
  309. ref="saleOrderListDialogref"
  310. @changeParent="changeOrder"
  311. ></saleOrderListDialog>
  312. <contractListDialog
  313. ref="selectContractRef"
  314. @changeParent="changeContract"
  315. :type="form.type"
  316. ></contractListDialog>
  317. <!-- 应收 -->
  318. <receivableDialog
  319. ref="receivableRef"
  320. @receivableDone="receivableDone"
  321. v-if="receivableDialogFlag"
  322. :receivableDialogFlag.sync="receivableDialogFlag"
  323. ></receivableDialog>
  324. <!-- 应付 -->
  325. <paymentListDialog
  326. ref="receivableRef1"
  327. @receivableDone="receivableDone"
  328. v-if="paymentListDialogFlag"
  329. :paymentListDialogFlag.sync="paymentListDialogFlag"
  330. ></paymentListDialog>
  331. </ele-modal>
  332. </template>
  333. <script>
  334. import personSelect from '@/components/CommomSelect/person-select.vue';
  335. import { listOrganizations } from '@/api/system/organization';
  336. import { mapGetters } from 'vuex';
  337. import fileUpload from '@/components/upload/fileUpload.vue';
  338. import tableInfo from './tableInfo.vue';
  339. import { getTreeByPid } from '@/api/classifyManage';
  340. import {
  341. invoiceApplyInfoAPI,
  342. invoiceApplySaveAPI,
  343. invoiceApplyUpdateAPI
  344. } from '@/api/financialManage/invoiceManage';
  345. import { getpurchaseorderDetail } from '@/api/purchasingManage/purchaseOrder';
  346. import { getSaleOrderDetail } from '@/api/saleManage/saleorder';
  347. import { getDetail } from '@/api/contractManage/contractBook';
  348. import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
  349. import accountStatementDialog from './accountstatementDialog.vue';
  350. import contractListDialog from '@/views/saleManage/saleOrder/components/contractListDialog.vue';
  351. import purchasinOrderListDialog from '@/views/purchasingManage/purchaseOrder/invoice/components/orderListDialog.vue'; //采购订单
  352. import saleOrderListDialog from '@/views/saleManage/saleOrder/invoice/components/orderListDialog.vue'; //销售订单
  353. import { enterprisePage } from '@/api/contractManage/contractBook';
  354. import { contactDetail } from '@/api/saleManage/contact';
  355. // import fileMain from '@/components/addDoc/index.vue';
  356. import receivableDialog from '@/views/financialManage/receivableManage/components/receivableDialog.vue'; //应收
  357. import paymentListDialog from '@/views/financialManage/payableManage/components/paymentListDialog.vue'; //应付
  358. import { updateContractStatus } from '@/api/contractManage/contractBook';
  359. const defForm = {
  360. accountingSubjectCode: '',
  361. accountingSubjectId: '',
  362. accountingSubjectName: '',
  363. amount: undefined,
  364. contactId: '',
  365. companyAddress: '',
  366. companyBankAccount: '',
  367. companyUsc: '',
  368. expectInvoiceDate: '',
  369. companyBankBranchNo: '',
  370. companyName: '',
  371. receiverAddress: '',
  372. receiverName: '',
  373. receiverTel: '',
  374. companyTel: '',
  375. detailList: [],
  376. drawerId: '',
  377. drawerName: '',
  378. files: [],
  379. invoiceStatus: '',
  380. link: [],
  381. remark: '',
  382. settlementAccountId: '',
  383. settlementAccountName: '',
  384. invoiceAmount: 0,
  385. getAccountData: '',
  386. sourceId: '',
  387. sourceCode: '',
  388. category: 1
  389. };
  390. export default {
  391. name: 'add-or-edit-dialog',
  392. components: {
  393. processSubmitDialog,
  394. fileUpload,
  395. personSelect,
  396. tableInfo,
  397. accountStatementDialog,
  398. contractListDialog,
  399. purchasinOrderListDialog,
  400. saleOrderListDialog,
  401. // fileMain,
  402. receivableDialog,
  403. paymentListDialog
  404. },
  405. props: {
  406. addOrEditDialogFlag: {
  407. type: Boolean,
  408. default: false
  409. },
  410. contactData: {
  411. type: Object,
  412. default: () => {
  413. return {};
  414. }
  415. }
  416. },
  417. provide() {
  418. return {
  419. invoiceType: () => this.form.type
  420. };
  421. },
  422. computed: {
  423. ...mapGetters(['user'])
  424. },
  425. data() {
  426. return {
  427. fullscreen: false,
  428. receivableDialogFlag: false,
  429. dialogType: '',
  430. title: '',
  431. isOtherSourceFlag: false,
  432. processSubmitDialogFlag: false,
  433. accountStatementDialogFlag: false,
  434. paymentListDialogFlag: false,
  435. enterprisePage: [],
  436. form: {
  437. applyDeptId: '',
  438. applyDeptName: '',
  439. applyUserId: '',
  440. applyUserName: '',
  441. type: 1,
  442. id: '',
  443. ...defForm
  444. },
  445. feeTypeList: [],
  446. accountingSubjectList: [],
  447. deptList: [],
  448. deptTreeList: [],
  449. rules: {
  450. applyDeptId: { required: true, message: '请选择', trigger: 'change' },
  451. applyUserId: { required: true, message: '请选择', trigger: 'change' },
  452. accountingSubjectId: {
  453. required: true,
  454. message: '请选择',
  455. trigger: 'change'
  456. },
  457. feeTypeId: { required: true, message: '请选择', trigger: 'change' },
  458. amount: { required: true, message: '请输入', trigger: 'blur' },
  459. companyName: { required: true, message: '请输入', trigger: 'blur' },
  460. type: { required: true, message: '请选择', trigger: 'change' },
  461. sourceType: { required: true, message: '请选择', trigger: 'change' }
  462. }
  463. };
  464. },
  465. created() {
  466. this.getClassifyList(24, 'accountingSubjectList');
  467. this.getDeptList();
  468. },
  469. methods: {
  470. //从发票管理新增发票初始化
  471. async init(row = {}, type) {
  472. this.title = type == 'add' ? '新增' : '修改';
  473. this.dialogType = type;
  474. if (type == 'add') {
  475. this.form.applyDeptId = this.user.info.groupId;
  476. this.form.applyDeptName = this.user.info.groupName;
  477. this.form.applyUserId = this.user.info.userId;
  478. this.form.applyUserName = this.user.info.name;
  479. enterprisePage({
  480. pageNum: 1,
  481. size: 200
  482. }).then((res) => {
  483. this.enterprisePage = [];
  484. this.enterprisePage.push(...res.list);
  485. this.enterpriseChange(this.enterprisePage[0]?.name);
  486. });
  487. } else {
  488. await this.getInfo(row.id);
  489. }
  490. this.$nextTick(async () => {
  491. await this.getUserList(this.form.applyDeptId);
  492. });
  493. },
  494. //来源类型
  495. async handleSelectAccount(val) {
  496. if (val == 1) {
  497. this.accountStatementDialogFlag = true;
  498. }
  499. if (val == 2) {
  500. this.$refs.selectContractRef.open({}, 1, 1);
  501. }
  502. if (val == 3 && this.form.type == 2) {
  503. this.$refs.orderListDialogRef.open({}, 1, true);
  504. }
  505. if (val == 3 && this.form.type == 1) {
  506. this.$refs.saleOrderListDialogref.open({}, 1, true);
  507. }
  508. if (val == 5) {
  509. this.receivableDialogFlag = true;
  510. }
  511. if (val == 4) {
  512. this.paymentListDialogFlag = true;
  513. }
  514. },
  515. //合同回调
  516. async changeContract(data) {
  517. const res = await getDetail(data.id);
  518. this.$set(this.form, 'sourceId', data.id);
  519. this.$set(this.form, 'sourceCode', data.contractNo);
  520. this.$set(
  521. this.form,
  522. 'amount',
  523. res.contractVO?.discountTotalPrice - res.contractVO?.invoiceAmount
  524. );
  525. this.$set(this.form, 'invoiceAmount', res.contractVO?.invoiceAmount);
  526. this.getContactDetail(
  527. this.form.type == 2
  528. ? res.contractVO?.partbId
  529. : res.contractVO?.partaId,
  530. res.contractVO
  531. );
  532. res.productList.forEach((item) => {
  533. item.singlePrice =
  534. (item.discountSinglePrice &&
  535. Number(item.discountSinglePrice).toFixed(2)) ||
  536. item.singlePrice;
  537. item.totalPrice =
  538. (item.discountTotalPrice &&
  539. Number(item.discountTotalPrice).toFixed(2)) ||
  540. item.totalPrice;
  541. item.typeName = this.form.type == 1 ? '销售合同' : '采购合同';
  542. item.type = this.form.type == 1 ? '101' : '102';
  543. });
  544. this.$nextTick(() => {
  545. this.$refs.table.setValue(res.productList);
  546. });
  547. this.$forceUpdate();
  548. },
  549. async getContactDetail(id, data) {
  550. let contactValue = {};
  551. if (id) {
  552. this.form.contactId = id;
  553. contactValue = await contactDetail(id);
  554. }
  555. const { base, other, bankList, linkList } = contactValue;
  556. if (this.form.type == 2) {
  557. this.form.companyName = base.name;
  558. this.form.companyUsc =
  559. data.partbUnifiedSocialCreditCode || base.unifiedSocialCreditCode;
  560. this.form.companyAddress =
  561. data.partbAddress || other?.addressName + other?.address;
  562. this.form.companyTel =
  563. data.partbTel ||
  564. linkList.find((item) => item.ifChief == 1)?.mobilePhone;
  565. this.form.companyBankAccount = bankList[0]?.accountNo;
  566. this.form.companyBankBranchNo = bankList[0]?.bankName;
  567. this.enterpriseChange(data.partaName);
  568. } else {
  569. this.form.receiverName = base.name;
  570. this.form.receiverAddress =
  571. data.partaAddress || other?.addressName + other?.address;
  572. this.form.receiverTel =
  573. data.partaTel ||
  574. linkList.find((item) => item.ifChief == 1)?.mobilePhone;
  575. this.enterpriseChange(data.partbName);
  576. }
  577. },
  578. //订单回调
  579. async changeOrder(data) {
  580. this.$set(this.form, 'sourceId', data.id);
  581. this.$set(this.form, 'sourceCode', data.orderNo);
  582. let res = {};
  583. if (this.form.type == 2) {
  584. res = await getpurchaseorderDetail(data.id);
  585. } else {
  586. res = await getSaleOrderDetail(data.id);
  587. }
  588. this.$set(this.form, 'amount', res.payAmount - res.invoiceAmount);
  589. this.$set(this.form, 'invoiceAmount', res.invoiceAmount);
  590. this.getContactDetail(
  591. this.form.type == 2 ? res.partbId : res.partaId,
  592. res
  593. );
  594. res.productList.forEach((item) => {
  595. item.singlePrice =
  596. (item.discountSinglePrice &&
  597. Number(item.discountSinglePrice).toFixed(2)) ||
  598. item.singlePrice;
  599. item.totalPrice =
  600. (item.discountTotalPrice &&
  601. Number(item.discountTotalPrice).toFixed(2)) ||
  602. item.totalPrice;
  603. item.typeName = this.form.type == 1 ? '销售订单' : '采购订单';
  604. item.type = this.form.type == 1 ? '201' : '202';
  605. });
  606. this.$nextTick(() => {
  607. this.$refs.table.setValue(res.productList);
  608. });
  609. this.$forceUpdate();
  610. console.log(res);
  611. },
  612. //应收应付回调
  613. async payableManage(data) {
  614. const { row, form } = data;
  615. console.log(data);
  616. this.$set(this.form, 'sourceId', row.id);
  617. this.$set(this.form, 'sourceCode', row.code);
  618. this.$set(
  619. this.form,
  620. 'amount',
  621. row.receivedTotalPrice || row.paidTotalPrice
  622. );
  623. this.$set(this.form, 'invoiceAmount', row.invoiceAmount);
  624. this.getContactDetail(form.contactId, {});
  625. },
  626. receivableDone(data) {
  627. this.$set(this.form, 'type', Number(data.type));
  628. this.$set(this.form, 'sourceType', data.sourceType);
  629. this.payableManage(data.data);
  630. },
  631. //对账单回调
  632. async getAccountData(tableInfo) {
  633. let res = {};
  634. if (this.form.type == 2) {
  635. res = await getpurchaseorderDetail(tableInfo?.children?.orderId);
  636. } else {
  637. res = await getSaleOrderDetail(tableInfo?.children?.orderId);
  638. }
  639. this.getContactDetail(tableInfo.contactId, res);
  640. this.$nextTick(() => {
  641. this.$set(this.form, 'sourceId', tableInfo?.children?.id);
  642. this.$set(this.form, 'sourceCode', tableInfo?.statementNo);
  643. this.$set(
  644. this.form,
  645. 'invoiceAmount',
  646. tableInfo?.children?.invoiceAmount
  647. );
  648. this.$refs.table.getAccountData(tableInfo);
  649. });
  650. },
  651. //订单、合同列表
  652. async createInvoice1(data, type, sourceType) {
  653. this.$set(this.form, 'type', Number(type));
  654. this.$set(this.form, 'sourceType', sourceType);
  655. await this.init({}, 'add');
  656. if (sourceType == 2) {
  657. this.changeContract(data);
  658. }
  659. if (sourceType == 3) {
  660. this.changeOrder(data);
  661. }
  662. if (sourceType == 4 || sourceType == 5) {
  663. this.payableManage(data);
  664. }
  665. },
  666. //对账单列表
  667. createInvoice(
  668. row = {},
  669. invoiceType,
  670. tableInfo = {},
  671. isOtherSourceFlag = true,
  672. dialogType = 'add'
  673. ) {
  674. this.dialogType = dialogType;
  675. this.init(row, dialogType);
  676. this.form.type = tableInfo.type;
  677. this.$set(this.form, 'sourceType', invoiceType);
  678. // this.form.sourceType=invoiceType
  679. setTimeout(() => {
  680. this.getAccountData(tableInfo);
  681. }, 400);
  682. },
  683. //获取详情
  684. async getInfo(id) {
  685. this.form = await invoiceApplyInfoAPI(id);
  686. },
  687. //获取分类管理中的数据
  688. async getClassifyList(id, listName) {
  689. let res = await getTreeByPid(id);
  690. this[listName] = res.data;
  691. },
  692. //获取费用类别选中数据
  693. changeFeeTypeInfo(val) {
  694. if (!val) {
  695. this.form.feeTypeName = '';
  696. this.form.feeTypeCode = '';
  697. }
  698. let data = this.$refs.feeTypeTree?.$refs?.tree?.getCurrentNode() || {};
  699. this.form.feeTypeName = data.name;
  700. this.form.feeTypeCode = data.code;
  701. },
  702. //获取会计科目选中数据
  703. changeSubjectInfo(val) {
  704. if (!val) return (this.form.accountingSubjectName = '');
  705. let data = this.$refs.treeSelect?.$refs?.tree?.getCurrentNode() || {};
  706. this.form.accountingSubjectName = data.name;
  707. },
  708. // 获取部门数据
  709. getDeptList() {
  710. listOrganizations().then((list) => {
  711. this.deptList = list;
  712. this.deptTreeList = this.$util.toTreeData({
  713. data: list,
  714. idField: 'id',
  715. parentIdField: 'parentId'
  716. });
  717. });
  718. },
  719. // 选择负责人部门
  720. changeDeptInfo(id) {
  721. const info = this.deptList.find((e) => e.id == id) || {};
  722. this.form.applyDeptName = info.name;
  723. this.form.applyUserId = '';
  724. this.form.applyUserName = '';
  725. this.getUserList(id);
  726. },
  727. // 获取人员数据
  728. getUserList(deptId) {
  729. if (deptId) {
  730. this.$refs.directorRef.getList({ deptId });
  731. }
  732. },
  733. //选择人员数据
  734. changeUserInfo(val, info) {
  735. this.form.applyUserName = info.name;
  736. },
  737. //
  738. handleSelType(val) {
  739. this.form = Object.assign({}, this.form, defForm);
  740. if (val == 'isType') {
  741. this.$set(this.form, 'sourceType', '');
  742. }
  743. this.$refs.table.clearTable();
  744. this.enterpriseChange(this.enterprisePage[0]?.name);
  745. },
  746. setPrice(val) {
  747. this.form.amount = val;
  748. },
  749. //系统公司信息
  750. enterpriseChange(name) {
  751. let data = this.enterprisePage.find((item) => item.name == name);
  752. if (this.form.type == 1) {
  753. this.form.companyName = data?.name;
  754. this.form.companyUsc = data?.unifiedSocialCreditCode;
  755. this.form.companyAddress = data?.address;
  756. this.form.companyTel = data?.tel;
  757. } else {
  758. this.form.receiverName = data?.name;
  759. this.form.receiverAddress = data?.address;
  760. this.form.receiverTel = data?.tel;
  761. }
  762. this.$forceUpdate();
  763. },
  764. //
  765. handleSave(flag) {
  766. this.$refs.form.validate(async (valid) => {
  767. if (!valid) return this.$message.warning('有必填项未填,请检查');
  768. let tableData = {};
  769. if (this.form.sourceType != 4 || this.form.sourceType != 5) {
  770. tableData = await this.$refs.table.getTableValidate();
  771. }
  772. this.form.link = tableData.link;
  773. this.form.detailList = tableData.detailList;
  774. const API =
  775. this.dialogType == 'add'
  776. ? invoiceApplySaveAPI
  777. : invoiceApplyUpdateAPI;
  778. const id = await API(this.form);
  779. if (this.form.sourceType == 2) {
  780. updateContractStatus([this.form.sourceId]);
  781. }
  782. if (flag) {
  783. await this.handleSub(id);
  784. return;
  785. }
  786. this.$message.success('操作成功');
  787. this.done();
  788. this.cancel();
  789. });
  790. },
  791. //提交-开启流程
  792. async handleSub(id = '') {
  793. let data = await invoiceApplyInfoAPI(id);
  794. this.processSubmitDialogFlag = true;
  795. let key =
  796. data.type == 1 ? 'fin_invoice_apply' : 'fin_invoice_receive_apply';
  797. this.$nextTick(() => {
  798. let params = {
  799. businessId: data.id,
  800. businessKey: key,
  801. formCreateUserId: data.createUserId,
  802. variables: {
  803. type: data.type,
  804. businessCode: data.code,
  805. businessName: data.companyName,
  806. businessType: data.type == 1 ? '开票' : '收票'
  807. }
  808. // callBackMethodType : '1',
  809. // callBackMethod : 'proTargetPlanApproveApiImpl.updatePlanApprovalStatus',
  810. // pcHandle : '/bpm/handleTask/components/project-manage/plan-manage/submit.vue',
  811. // pcView : '/bpm/handleTask/components/project-manage/plan-manage/detailDialog.vue',
  812. // miniHandle : '',
  813. // miniView : '',
  814. };
  815. this.$refs.processSubmitDialogRef.init(params);
  816. });
  817. // try {
  818. // await invoiceApplySubmit({
  819. // businessId: id || this.form.id,
  820. // type: this.form.type
  821. // });
  822. // } catch (e) {
  823. // this.$message.error(e.message);
  824. // }
  825. },
  826. reload() {
  827. this.done();
  828. this.cancel();
  829. },
  830. //刷新主列表数据
  831. done() {
  832. this.$emit('reload');
  833. },
  834. //关闭弹窗
  835. cancel() {
  836. this.$emit('update:addOrEditDialogFlag', false);
  837. }
  838. }
  839. };
  840. </script>
  841. <style scoped lang="scss"></style>