addOrEditDialog.vue 29 KB

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