| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302 |
- <template>
- <ele-modal
- custom-class="ele-dialog-form long-dialog-form"
- :centered="true"
- :visible.sync="addOrEditDialogFlag"
- :title="title"
- :append-to-body="true"
- :close-on-click-modal="false"
- width="70%"
- :before-close="cancel"
- :maxable="true"
- :resizable="true"
- >
- <el-form
- ref="form"
- :rules="rules"
- class="el-form-box-add"
- :model="form"
- label-width="160px"
- >
- <headerTitle title="基本信息"></headerTitle>
- <el-row :gutter="12">
- <el-col :span="8">
- <el-form-item label="发票类型" prop="type">
- <el-select
- v-model="form.type"
- @change="handleSelType('isType')"
- clearable
- :disabled="!isEditType"
- style="width: 100%"
- >
- <el-option label="开票" value="1"></el-option>
- <el-option label="收票" value="2"></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="8" v-if="form.type">
- <el-form-item label="来源类型" prop="sourceType">
- <el-select
- v-model="form.sourceType"
- @change="handleSelType()"
- :disabled="!isEditType"
- clearable
- style="width: 100%"
- >
- <el-option v-for="item in sourceTypeOp" :label="item.label" :value="item.value" :key="item.value"></el-option>
- <!-- <el-option label="对账单" :value="1"></el-option>
- <el-option label="合同" :value="2"></el-option>
- <el-option label="订单" :value="3"></el-option>
- <el-option label="收款计划" :value="1"></el-option>
- <el-option
- label="应收"
- :value="5"
- v-if="form.type == 1"
- ></el-option>
- <el-option
- label="应付"
- :value="4"
- v-if="form.type == 2"
- ></el-option> -->
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="8" v-if="form.sourceType == 6">
- <el-form-item label="收款计划编码" prop="sourceCode">
- <el-input
- v-model="form.sourceCode"
- readonly
- @click.native="handleSelectAccount(6)"
- ></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8" v-if="form.sourceType == 7">
- <el-form-item label="付款计划编码" prop="sourceCode">
- <el-input
- v-model="form.sourceCode"
- readonly
- @click.native="handleSelectAccount(7)"
- ></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8" v-if="form.sourceType == 5">
- <el-form-item label="应收编码" prop="sourceCode">
- <el-input
- v-model="form.sourceCode"
- readonly
- @click.native="handleSelectAccount(5)"
- ></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8" v-if="form.sourceType == 4">
- <el-form-item label="应付编码" prop="sourceCode">
- <el-input
- v-model="form.sourceCode"
- readonly
- @click.native="handleSelectAccount(4)"
- ></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="发票金额" prop="amount">
- <el-input
- type="number"
- v-model="form.amount"
- :precision="2"
- :controls="false"
- style="width: 100%"
- disabled
- :min="0"
- >
- <template slot="append">
- <span>元</span>
- </template>
- </el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="发票号" prop="invoiceNos">
- <el-input
- v-model="form.invoiceNos"
- ></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="开票日期">
- <el-date-picker
- style="width: 100%"
- v-model="form.expectInvoiceDate"
- type="date"
- value-format="yyyy-MM-dd"
- placeholder="选择日期"
- >
- </el-date-picker>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="申请部门" prop="applyDeptId">
- <ele-tree-select
- clearable
- :data="deptTreeList"
- v-model="form.applyDeptId"
- valueKey="id"
- labelKey="name"
- placeholder="请选择"
- @change="changeDeptInfo"
- default-expand-all
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="申请人" prop="applyUserId">
- <personSelect
- ref="directorRef"
- v-model="form.applyUserId"
- @selfChange="changeUserInfo"
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="发票种类" prop="category">
- <el-select
- v-model="form.category"
- clearable
- style="width: 100%"
- >
- <el-option label="增值税专用发票" :value="1"></el-option>
- <el-option label="增值税普通发票" :value="2"></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item prop="files" label="发票附件">
- <fileMain v-model="form.files"></fileMain>
- </el-form-item>
- </el-col>
- </el-row>
- <headerTitle title="发票信息"></headerTitle>
- <el-row :gutter="12">
- <el-col :span="12">
- <el-form-item label="购买方名称" prop="companyName">
- <el-input
- v-model="form.companyName"
- placeholder="请输入"
- v-if="enterprisePage.length <= 1 || form.type == 1"
- />
- <el-select
- v-if="enterprisePage.length > 1 && form.type == 2"
- style="width: 100%"
- v-model="form.companyName"
- placeholder="请选择"
- @change="enterpriseChange"
- >
- <el-option
- v-for="item in enterprisePage"
- :key="item.id"
- :label="item.name"
- :value="item.name"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item
- label="统一社会信用代码"
- prop="companyUsc"
- class="form_item_label"
- >
- <el-input v-model="form.companyUsc"></el-input>
- </el-form-item>
- <el-form-item label="联系人" prop="companyContactName">
- <el-input v-model="form.companyContactName"></el-input>
- </el-form-item>
- <el-form-item label="电话" prop="companyTel">
- <el-input v-model="form.companyTel"></el-input>
- </el-form-item>
- <el-form-item label="银行账号" prop="companyBankAccount">
- <el-input v-model="form.companyBankAccount"></el-input>
- </el-form-item>
- <el-form-item label="开户行" prop="companyBankBranchNo">
- <el-input v-model="form.companyBankBranchNo"></el-input>
- </el-form-item>
-
- <el-form-item label="地址" prop="companyAddress">
- <el-input v-model="form.companyAddress"></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="销售方名称" prop="receiverName">
- <el-input
- v-model="form.receiverName"
- placeholder="请输入"
- v-if="enterprisePage.length <= 1 || form.type == 2"
- />
- <el-select
- v-if="enterprisePage.length > 1 && form.type == 1"
- style="width: 100%"
- v-model="form.receiverName"
- placeholder="请选择"
- @change="enterpriseChange"
- >
- <el-option
- v-for="item in enterprisePage"
- :key="item.id"
- :label="item.name"
- :value="item.name"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item
- label="统一社会信用代码"
- prop="salesCompanyUsc"
- class="form_item_label"
- >
- <el-input v-model="form.salesCompanyUsc"></el-input>
- </el-form-item>
- <el-form-item label="联系人" prop="receiverContactName">
- <el-input v-model="form.receiverContactName"></el-input>
- </el-form-item>
- <el-form-item label="电话" prop="receiverTel">
- <el-input v-model="form.receiverTel"></el-input>
- </el-form-item>
- <el-form-item label="银行账号" prop="salesCompanyBankAccount">
- <el-input v-model="form.salesCompanyBankAccount"></el-input>
- </el-form-item>
- <el-form-item label="开户行" prop="salesCompanyBankBranchNo">
- <el-input v-model="form.salesCompanyBankBranchNo"></el-input>
- </el-form-item>
-
- <el-form-item label="地址" prop="receiverAddress">
- <el-input v-model="form.receiverAddress"></el-input>
- </el-form-item>
- <!-- <el-form-item prop="files" label="发票附件">
- <fileMain v-model="form.files"></fileMain>
- </el-form-item> -->
- </el-col>
- </el-row>
-
- <div class="payinfo" style="margin-top: 20px;">
- <headerTitle :title="form.type == 2 ? '付款计划信息' : '收款计划信息'"></headerTitle>
- <!-- <el-form ref="form" :model="tableForm"> -->
- <ele-pro-table
- ref="table"
- :needPage="false"
- :columns="columns"
- :datasource="form.receiptPayments"
- row-key="id"
- class="time-form"
- >
- <template v-slot:toolbar>
- <!-- <span>已开票金额:{{ totalInvoiceAmount }}</span> -->
- </template>
- <template v-slot:planPaymentAmount="scope">
- <el-form-item
- style="width: 100%;"
- label-width="0"
- :prop="'receiptPayments.' + scope.$index + '.planPaymentAmount'"
- :rules="[
- {
- required: false,
- message: '请输入计划金额',
- trigger: 'blur'
- }
- ]"
- >
- <span v-if="dialogType === 'view'">{{ scope.row.planPaymentAmount }}</span>
- <el-input v-else v-model="scope.row.planPaymentAmount" type="number" @input="updatePlanPaymentAmount(scope.row)"></el-input>
- </el-form-item>
- </template>
- <template v-slot:invoiceAmount="scope">
- <el-form-item
- style="width: 100%;"
- label-width="0"
- :prop="'receiptPayments.' + scope.$index + '.invoiceAmount'"
- :rules="[
- {
- required: false,
- message: '请输入开票金额',
- trigger: 'blur'
- },
- {
- required: false,
- validator: (rule, value, callback) => {
- if (value === undefined || value === null || value === '') {
- callback('请输入开票金额');
- } else if (parseFloat(value) <= 0 || parseFloat(value) > parseFloat(scope.row.unInvoiceAmount)) {
- callback('开票金额必须大于0且不超过未开票金额');
- } else {
- callback();
- }
- },
- trigger: 'blur'
- }
- ]"
- >
- <span v-if="dialogType === 'view'">{{ scope.row.invoiceAmount }}</span>
- <el-input v-else v-model="scope.row.invoiceAmount" type="number" @input="updateInvoiceAmount(scope.row)"></el-input>
- </el-form-item>
- </template>
- </ele-pro-table>
- <!-- </el-form> -->
- </div>
- </el-form>
- <div style="margin-top: 20px;">
- <headerTitle title="关联物品清单信息"></headerTitle>
- <table-info-new
- :dialogType="dialogType"
- :contactData="contactData"
- ref="tableInfoRef"
- :invoiceAmount="form.invoiceAmount"
- @invoiceAmountChange="invoiceAmountChange"
- ></table-info-new>
- </div>
- <div slot="footer">
- <el-button type="primary" v-click-once @click="handleSave(0)">保存</el-button>
- <el-button
- type="primary"
- v-if="isNeed_process_is_close"
- v-click-once
- @click="handleSave(1)"
- >提交</el-button
- >
- <el-button v-click-once @click="cancel">返回</el-button>
- </div>
- <process-submit-dialog
- api-fun-name="fininvoiceapplyStatusAPI"
- :processSubmitDialogFlag.sync="processSubmitDialogFlag"
- v-if="processSubmitDialogFlag"
- ref="processSubmitDialogRef"
- @reload="reload"
- ></process-submit-dialog>
- <!--对账单-->
- <!-- <account-statement-dialog
- ref="accountStatementDialogRef"
- :form="form"
- v-if="accountStatementDialogFlag"
- :accountstatement-dialog-flag.sync="accountStatementDialogFlag"
- @getAccountData="getAccountData"
- :contactData="contactData"
- :type="form.type"
- >
- </account-statement-dialog> -->
- <!--采购订单-->
- <purchasinOrderListDialog
- ref="orderListDialogRef"
- @changeParent="changeOrder"
- ></purchasinOrderListDialog>
- <!--销售订单-->
- <saleOrderListDialog
- ref="saleOrderListDialogref"
- @changeParent="changeOrder"
- ></saleOrderListDialog>
- <contractListDialog
- ref="selectContractRef"
- @changeParent="changeContract"
- :type="form.type"
- ></contractListDialog>
- <!-- 应收 -->
- <receivableDialog
- ref="receivableRef"
- @receivableDone="receivableDone"
- v-if="receivableDialogFlag"
- :receivableDialogFlag.sync="receivableDialogFlag"
- ></receivableDialog>
- <!-- 应付 -->
- <paymentListDialog
- ref="receivableRef1"
- @receivableDone="receivableDone"
- v-if="paymentListDialogFlag"
- :paymentListDialogFlag.sync="paymentListDialogFlag"
- ></paymentListDialog>
- <!-- 收款计划列表 -->
- <collectionPlanDialog
- ref="collectionPlanDialogRef"
- v-if="collectionPlanDialogFlag"
- :collectionPlanDialogFlag.sync="collectionPlanDialogFlag"
- @getPlanData="getPlanData"
- :type="form.type"
- ></collectionPlanDialog>
- </ele-modal>
- </template>
- <script>
- import personSelect from '@/components/CommomSelect/person-select.vue';
- import { listOrganizations } from '@/api/system/organization';
- import { mapGetters } from 'vuex';
- import fileUpload from '@/components/upload/fileUpload.vue';
- import tableInfoNew from './tableInfoNew.vue';
- import { getTreeByPid } from '@/api/classifyManage';
- import {
- invoiceApplyInfoV2API,
- invoiceApplyCreateAPI,
- invoiceApplyUpdateV2API
- } from '@/api/financialManage/invoiceManage';
- import { getpurchaseorderDetail } from '@/api/purchasingManage/purchaseOrder';
- import { getSaleOrderDetail } from '@/api/saleManage/saleorder';
- import { getDetail } from '@/api/contractManage/contractBook';
- import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
- import accountStatementDialog from './accountstatementDialog.vue';
- import contractListDialog from '@/views/saleManage/saleOrder/components/contractListDialog.vue';
- import purchasinOrderListDialog from '@/views/purchasingManage/purchaseOrder/invoice/components/orderListDialog.vue'; //采购订单
- import saleOrderListDialog from '@/views/saleManage/saleOrder/invoice/components/orderListDialog.vue'; //销售订单
- import { enterprisePage } from '@/api/contractManage/contractBook';
- import { contactDetail } from '@/api/saleManage/contact';
- // import fileMain from '@/components/addDoc/index.vue';
- import receivableDialog from '@/views/financialManage/receivableManage/components/receivableDialog.vue'; //应收
- import paymentListDialog from '@/views/financialManage/payableManage/components/paymentListDialog.vue'; //应付
- import collectionPlanDialog from './collectionPlanDialog.vue' // 收款计划列表
- import { updateContractStatus } from '@/api/contractManage/contractBook';
- import { getMergeInvoiceInfoAPI } from '@/api/financialManage/payAndCollectPlan';
- import { paymentTypeOp } from '@/enum/dict';
- const defForm = {
- accountingSubjectCode: '',
- accountingSubjectId: '',
- accountingSubjectName: '',
- amount: undefined,
- contactId: '',
- companyAddress: '',
- companyBankAccount: '',
- companyUsc: '',
- expectInvoiceDate: '',
- companyBankBranchNo: '',
- companyName: '',
- receiverAddress: '',
- receiverName: '',
- receiverTel: '',
- receiverContactName: '',
- companyTel: '',
- companyContactName: '',
- detailList: [],
- drawerId: '',
- drawerName: '',
- files: [],
- invoiceStatus: '',
- link: [],
- remark: '',
- settlementAccountId: '',
- settlementAccountName: '',
- invoiceAmount: 0,
- getAccountData: '',
- sourceId: '',
- sourceCode: '',
- salesCompanyUsc: '',
- salesCompanyBankBranchNo: '',
- salesCompanyBankAccount: '',
- category: 1,
- receiptPayments: [],
- productMap: {}
- };
- export default {
- name: 'add-or-edit-dialog',
- components: {
- processSubmitDialog,
- fileUpload,
- personSelect,
- tableInfoNew,
- accountStatementDialog,
- contractListDialog,
- purchasinOrderListDialog,
- saleOrderListDialog,
- // fileMain,
- receivableDialog,
- paymentListDialog,
- collectionPlanDialog
- },
- props: {
- isEditType: {
- type: Boolean,
- default: true
- },
- addOrEditDialogFlag: {
- type: Boolean,
- default: false
- },
- contactData: {
- type: Object,
- default: () => {
- return {};
- }
- }
- },
- provide() {
- return {
- invoiceType: () => this.form.type
- };
- },
- computed: {
- ...mapGetters(['user']),
- sourceTypeOp() {
- return this.form.type == 1 ? [{
- label: '收款计划',
- value: 6
- }, {
- label: '应收管理',
- value: 5
- }] : [{
- label: '付款计划',
- value: 7
- }, {
- label: '应付管理',
- value: 4
- }]
- },
- columns() {
- return [
- {
- width: 45,
- type: 'index',
- columnKey: 'index',
- align: 'center',
- fixed: 'left'
- },
- {
- width: 150,
- prop: 'sourceOrderDetailNo',
- label: this.form.type == 1 ? '收款计划编码' : '付款计划编码',
- align: 'center'
- },
- {
- width: 150,
- prop: 'relatedOrderNo',
- label: '订单编号',
- align: 'center'
- },
- {
- width: 120,
- prop: 'relatedOrderType',
- label: '订单类型',
- align: 'center',
- formatter: (row) => {
- return row.relatedOrderType == 1 ? '销售订单' : '采购订单'
- }
- },
- {
- width: 120,
- prop: 'contractNo',
- label: '合同编码',
- align: 'center'
- },
- {
- width: 120,
- prop: 'contractCode',
- label: '合同编号',
- align: 'center'
- },
- {
- width: 120,
- prop: 'contractName',
- label: '合同名称',
- align: 'center'
- },
- {
- prop: 'issueNumber',
- label: '期数',
- align: 'center'
- },
- {
- width: 120,
- prop: 'paymentType',
- label: '款项类型',
- align: 'center',
- formatter: (row) => {
- return this.paymentTypeOp.find(item => item.value == row.paymentType)?.label || ''
- }
- },
- {
- prop: 'moneyName',
- label: '款项名称',
- align: 'center',
- width: 170
- },
- {
- width: 150,
- prop: 'paymentRatio',
- label: '比例',
- align: 'center',
- formatter: (row) => {
- return row.paymentRatio ? row.paymentRatio + '%' : ''
- }
- },
- {
- width: 170,
- prop: 'planPaymentAmount',
- label: this.form.type == 1 ? '计划收款金额' : '计划付款金额',
- align: 'center',
- slot: 'planPaymentAmount'
- },
- {
- width: 150,
- prop: 'unInvoiceAmount',
- label: '未开票金额',
- align: 'center'
- },
- {
- width: 150,
- prop: 'invoicedAmount',
- label: '已开票金额',
- align: 'center'
- },
- {
- width: 160,
- prop: 'invoiceAmount',
- label: '本次开票金额',
- align: 'center',
- // slot: 'invoiceAmount',
- fixed: 'right'
- }
- ];
- },
- },
- data() {
- return {
- businessId: '',
- paymentTypeOp,
- fullscreen: false,
- receivableDialogFlag: false,
- dialogType: '',
- title: '',
- isOtherSourceFlag: false,
- processSubmitDialogFlag: false,
- collectionPlanDialogFlag: false,
- paymentListDialogFlag: false,
- enterprisePage: [],
- totalInvoiceAmount: 0,
- form: {
- applyDeptId: '',
- applyDeptName: '',
- applyUserId: '',
- applyUserName: '',
- type: '1',
- id: '',
- ...defForm
- },
- feeTypeList: [],
- accountingSubjectList: [],
- deptList: [],
- deptTreeList: [],
- rules: {
- applyDeptId: { required: true, message: '请选择', trigger: 'change' },
- applyUserId: { required: true, message: '请选择', trigger: 'change' },
- accountingSubjectId: {
- required: true,
- message: '请选择',
- trigger: 'change'
- },
- feeTypeId: { required: true, message: '请选择', trigger: 'change' },
- // amount: { required: true, message: '请输入', trigger: 'blur' },
- companyName: { required: true, message: '请输入', trigger: 'blur' },
- type: { required: true, message: '请选择', trigger: 'change' },
- sourceType: { required: true, message: '请选择', trigger: 'change' }
- }
- };
- },
- created() {
- this.getClassifyList(24, 'accountingSubjectList');
- this.getDeptList();
- },
- methods: {
- //从发票管理新增发票初始化
- async init(row = {}, type) {
- this.businessId = row.id || '';
- this.title = type == 'add' ? '新增' : '修改';
- console.log('row', row, type);
- this.dialogType = type;
- if (type == 'add') {
- this.form.applyDeptId = this.user.info.groupId;
- this.form.applyDeptName = this.user.info.groupName;
- this.form.applyUserId = this.user.info.userId;
- this.form.applyUserName = this.user.info.name;
- enterprisePage({
- pageNum: 1,
- size: 200
- }).then((res) => {
- this.enterprisePage = [];
- this.enterprisePage.push(...res.list);
- this.enterpriseChange(this.enterprisePage[0]?.name);
- });
- } else {
- await this.getInfo(row.id);
- }
- this.$nextTick(async () => {
- // await this.getUser List(this.form.applyDeptId);
- });
- },
- updateInvoiceAmount(row) {
- // row.invoiceAmount = Number(row.invoiceAmount).toFixed(2);
- this.form.amount = this.form.receiptPayments.reduce((pre, cur) => {
- return pre + Number(cur.invoiceAmount);
- }, 0);
- // this.$refs.tableInfoRef.setSinglePrice(row, this.form.receiptPayments);
- },
- //来源类型
- async handleSelectAccount(val) {
- if (val == 6 || val == 7) {
- this.collectionPlanDialogFlag = true;
- }
- if (val == 2) {
- this.$refs.selectContractRef.open({}, 1, 1);
- }
- if (val == 3 && this.form.type == 2) {
- this.$refs.orderListDialogRef.open({}, 1, true);
- }
- if (val == 3 && this.form.type == 1) {
- this.$refs.saleOrderListDialogref.open({}, 1, true);
- }
- if (val == 5) {
- this.receivableDialogFlag = true;
- }
- if (val == 4) {
- this.paymentListDialogFlag = true;
- }
- },
- //合同回调
- async changeContract(data) {
- const res = await getDetail(data.id);
- this.$set(this.form, 'sourceId', data.id);
- this.$set(this.form, 'sourceCode', data.contractNo);
- this.$set(
- this.form,
- 'amount',
- res.contractVO?.discountTotalPrice - res.contractVO?.invoiceAmount
- );
- this.$set(this.form, 'invoiceAmount', res.contractVO?.invoiceAmount);
- this.getContactDetail(
- this.form.type == 2
- ? res.contractVO?.partbId
- : res.contractVO?.partaId,
- res.contractVO
- );
- res.productList.forEach((item) => {
- item.singlePrice =
- (item.discountSinglePrice &&
- Number(item.discountSinglePrice).toFixed(2)) ||
- item.singlePrice;
- item.totalPrice =
- (item.discountTotalPrice &&
- Number(item.discountTotalPrice).toFixed(2)) ||
- item.totalPrice;
- item.typeName = this.form.type == 1 ? '销售合同' : '采购合同';
- item.type = this.form.type == 1 ? '101' : '102';
- });
- this.$nextTick(() => {
- this.$refs.table.setValue(res.productList);
- });
- this.$forceUpdate();
- },
- async getContactDetail(id, data) {
- let contactValue = {};
- if (id) {
- this.form.contactId = id;
- contactValue = await contactDetail(id);
- }
- const { base, other, bankList, linkList } = contactValue;
- if (this.form.type == 1) {
- this.form.companyName = base.name;
- this.form.companyUsc = base.unifiedSocialCreditCode;
- this.form.companyAddress = other?.addressName + other?.address;
- this.form.companyTel =
- data.partbTel ||
- linkList.find((item) => item.ifChief == 1)?.mobilePhone;
- this.form.companyBankAccount = bankList[0]?.accountNo;
- this.form.companyBankBranchNo = bankList[0]?.bankName;
- this.enterpriseChange(data.partbName);
- } else {
- this.form.receiverName = base.name;
- this.form.receiverAddress = base?.addressName + other?.address;
- this.form.receiverTel =
- data.partaTel ||
- linkList.find((item) => item.ifChief == 1)?.mobilePhone;
- this.form.salesCompanyUsc = base.unifiedSocialCreditCode;
- this.form.salesCompanyBankAccount = bankList[0]?.accountNo;
- this.form.salesCompanyBankBranchNo = bankList[0]?.bankName;
- this.enterpriseChange(data.partaName);
- }
- },
- setCompanyBankAccount(base) {
- console.log('base~~~', base);
- if (this.form.type == 1) {
- console.log('base~~~111', base.companyName);
- this.form.companyName = base.companyName;
- this.form.companyUsc = base.companyUsc;
- this.form.companyAddress = base.companyAddress;
- this.form.companyTel = base.companyTel;
- this.form.companyContactName = base.companyContactName;
- this.form.companyBankAccount = base.companyBankAccount;
- this.form.companyBankBranchNo = base.companyBankBranchNo;
- // this.enterpriseChange(base.companyName);
- } else {
- this.form.receiverName = base.receiverName;
- this.form.receiverAddress = base.receiverAddress;
- this.form.receiverTel = base.receiverTel;
- this.form.receiverContactName = base.receiverContactName;
- this.form.salesCompanyUsc = base.salesCompanyUsc;
- this.form.salesCompanyBankAccount = base.salesCompanyBankAccount;
- this.form.salesCompanyBankBranchNo = base.salesCompanyBankBranchNo;
- // this.enterpriseChange(base.receiverName);
- }
- },
- //订单回调
- async changeOrder(data) {
- this.$set(this.form, 'sourceId', data.id);
- this.$set(this.form, 'sourceCode', data.orderNo);
- let res = {};
- if (this.form.type == 2) {
- res = await getpurchaseorderDetail(data.id);
- } else {
- res = await getSaleOrderDetail(data.id);
- }
- this.$set(this.form, 'amount', res.payAmount - res.invoiceAmount);
- this.$set(this.form, 'invoiceAmount', res.invoiceAmount);
- this.getContactDetail(
- this.form.type == 2 ? res.partbId : res.partaId,
- res
- );
- res.productList.forEach((item) => {
- item.singlePrice =
- (item.discountSinglePrice &&
- Number(item.discountSinglePrice).toFixed(2)) ||
- item.singlePrice;
- item.totalPrice =
- (item.discountTotalPrice &&
- Number(item.discountTotalPrice).toFixed(2)) ||
- item.totalPrice;
- item.typeName = this.form.type == 1 ? '销售订单' : '采购订单';
- item.type = this.form.type == 1 ? '201' : '202';
- });
- this.$nextTick(() => {
- this.$refs.table.setValue(res.productList);
- });
- this.$forceUpdate();
- console.log(res);
- },
- //应收应付回调
- async payableManage(data) {
- const { row, form } = data;
- console.log(data);
- this.$set(this.form, 'sourceId', row.id);
- this.$set(this.form, 'sourceCode', row.code);
- // this.$set(
- // this.form,
- // 'amount',
- // row.receivedTotalPrice || row.paidTotalPrice
- // );
- // this.$set(this.form, 'invoiceAmount', row.invoiceAmount);
- // this.getContactDetail(form.contactId, {});
- },
- receivableDone(data) {
- // this.$set(this.form, 'type', Number(data.type));
- // this.$set(this.form, 'sourceType', data.sourceType);
- // this.payableManage(data.data);
- this.getPlanData(data)
- },
- // 收/付款计划回调
- async getPlanData(data) {
- let tempIds = [];
- let tempNames = [];
- if(this.form.sourceType == 4 || this.form.sourceType == 5) {
- tempIds = data.map((item) => item.receiptPlanOrderId);
- tempNames = data.map((item) => item.code);
- } else {
- tempIds = data.map((item) => item.id);
- tempNames = data.map((item) => item.detailNo);
- }
- this.form.sourceCode = tempNames.join(',');
-
- const res = await getMergeInvoiceInfoAPI(tempIds)
- res.receiptPayments = res.receiptPayments.map((item) => {
- item.invoiceAmount = item.unInvoiceAmount;
- return item
- })
-
- this.form.receiptPayments = res.receiptPayments;
- this.form.productMap = res.productMap;
- const amount = this.form.receiptPayments.reduce((prev, cur) => prev +
- +cur.invoiceAmount, 0) || 0;
- this.form.amount = amount;
- console.log('form~~~', this.form);
- this.setCompanyBankAccount(res)
- // this.form.detailList = res.detailList;
- this.$nextTick(() => {
- this.$refs.tableInfoRef.setValue(this.form);
- })
- console.log('getPlanData~~~', res);
- // console.log('detailList~~~', res.detailList);
- },
- //对账单回调
- async getAccountData(tableInfo) {
- let res = {};
- if (this.form.type == 2) {
- res = await getpurchaseorderDetail(tableInfo?.children?.orderId);
- } else {
- res = await getSaleOrderDetail(tableInfo?.children?.orderId);
- }
- this.getContactDetail(tableInfo.contactId, res);
- this.$nextTick(() => {
- this.$set(this.form, 'sourceId', tableInfo?.children?.id);
- this.$set(this.form, 'sourceCode', tableInfo?.statementNo);
- this.$set(
- this.form,
- 'invoiceAmount',
- tableInfo?.children?.invoiceAmount
- );
- this.$refs.table.getAccountData(tableInfo);
- });
- },
- //订单、合同列表
- async createInvoice1(data, type, sourceType) {
- console.log('createInvoice1~~~', data);
- // const tempIds = data.map((item) => item.id).join(',');
- this.$set(this.form, 'type', type);
- this.$set(this.form, 'sourceType', sourceType);
- // this.$set(this.form, 'sourceCode', tempIds);
- await this.init({}, 'add');
- this.getPlanData(data);
- // if (sourceType == 2) {
- // this.changeContract(data);
- // }
- // if (sourceType == 3) {
- // this.changeOrder(data);
- // }
- // if (sourceType == 4 || sourceType == 5) {
- // this.payableManage(data);
- // }
- },
- //对账单列表
- createInvoice(
- row = {},
- invoiceType,
- tableInfo = {},
- isOtherSourceFlag = true,
- dialogType = 'add'
- ) {
- this.dialogType = dialogType;
- this.init(row, dialogType);
- this.form.type = tableInfo.type;
- this.$set(this.form, 'sourceType', invoiceType);
- // this.form.sourceType=invoiceType
- setTimeout(() => {
- this.getAccountData(tableInfo);
- }, 400);
- },
- //获取详情
- async getInfo(id) {
- this.form = await invoiceApplyInfoV2API(id);
- this.$nextTick(() => {
- this.$refs.tableInfoRef.putValue(this.form);
- })
- },
- //获取分类管理中的数据
- async getClassifyList(id, listName) {
- let res = await getTreeByPid(id);
- this[listName] = res.data;
- },
- //获取费用类别选中数据
- changeFeeTypeInfo(val) {
- if (!val) {
- this.form.feeTypeName = '';
- this.form.feeTypeCode = '';
- }
- let data = this.$refs.feeTypeTree?.$refs?.tree?.getCurrentNode() || {};
- this.form.feeTypeName = data.name;
- this.form.feeTypeCode = data.code;
- },
- //获取会计科目选中数据
- changeSubjectInfo(val) {
- if (!val) return (this.form.accountingSubjectName = '');
- let data = this.$refs.treeSelect?.$refs?.tree?.getCurrentNode() || {};
- this.form.accountingSubjectName = data.name;
- },
- // 获取部门数据
- getDeptList() {
- listOrganizations().then((list) => {
- this.deptList = list;
- this.deptTreeList = this.$util.toTreeData({
- data: list,
- idField: 'id',
- parentIdField: 'parentId'
- });
- });
- },
- // 选择负责人部门
- changeDeptInfo(id) {
- const info = this.deptList.find((e) => e.id == id) || {};
- this.form.applyDeptName = info.name;
- this.form.applyUserId = '';
- this.form.applyUserName = '';
- this.getUserList(id);
- },
- // 获取人员数据
- getUserList(deptId) {
- if (deptId) {
- this.$refs.directorRef.getList({ deptId });
- }
- },
- //选择人员数据
- changeUserInfo(val, info) {
- this.form.applyUserName = info.name;
- },
- //
- handleSelType(val) {
- this.form = Object.assign({}, this.form, defForm);
- if (val == 'isType') {
- this.$set(this.form, 'sourceType', '');
- }
- this.form.receiptPayments = [];
- this.$refs.tableInfoRef.clearTable();
- this.enterpriseChange(this.enterprisePage[0]?.name);
- },
- setPrice(val) {
- this.form.amount = val;
- },
- //系统公司信息
- enterpriseChange(name) {
- let data = this.enterprisePage.find((item) => item.name == name);
- if (this.form.type == 2) {
- this.form.companyName = data?.name;
- this.form.companyUsc = data?.unifiedSocialCreditCode;
- this.form.companyAddress = data?.address;
- this.form.companyTel = data?.tel;
- this.form.companyContactName = data?.contact;
- } else {
- this.form.receiverName = data?.name;
- this.form.receiverAddress = data?.address;
- this.form.salesCompanyUsc = data?.unifiedSocialCreditCode;
- this.form.receiverTel = data?.tel;
- this.form.receiverContactName = data?.contact;
- }
- this.$forceUpdate();
- },
- invoiceAmountChange(item, sum) {
- console.log('item~~~', item, sum);
- const sameKeyItems = this.form.receiptPayments.filter((d) => d.relatedOrderNo === item.key)
- console.log('sameKeyItems~~~', sameKeyItems);
-
- let remainingTotal = sum;
- const lastIndex = sameKeyItems.length - 1;
- // 从上到下分配 sum 给相同订单号的数据,多余数量放在最后一个
- sameKeyItems.forEach((paymentItem, index) => {
- if (remainingTotal <= 0) {
- paymentItem.invoiceAmount = 0;
- } else if (index === lastIndex) {
- // 最后一个分配所有剩余
- paymentItem.invoiceAmount = remainingTotal.toFixed(2);
- } else {
- const unInvoiceAmount = parseFloat(paymentItem.unInvoiceAmount) || 0;
- const allocateAmount = Math.min(remainingTotal, unInvoiceAmount);
- paymentItem.invoiceAmount = allocateAmount.toFixed(2);
- remainingTotal -= allocateAmount;
- }
- });
- this.updateInvoiceAmount();
- console.log('分配完成后的 sameKeyItems:', sameKeyItems);
- },
- updatePlanPaymentAmount(item) {
- console.log('item~~~', item);
- item.unInvoiceAmount = item.planPaymentAmount - item.invoicedAmount;
- // 更新关联物品清单中的 defaultAmountTotalPrice
- const tableInfoRef = this.$refs.tableInfoRef;
- if (tableInfoRef && item.relatedOrderNo) {
- const key = item.relatedOrderNo;
- const newTotal = this.form.receiptPayments
- .filter((d) => d.relatedOrderNo === key)
- .reduce((sum, d) => sum + (parseFloat(d.unInvoiceAmount) || 0), 0);
- tableInfoRef.tableForm.detailList.forEach((detail) => {
- if (detail.key === key) {
- this.$set(detail, 'defaultAmountTotalPrice', newTotal.toFixed(2));
- }
- });
- }
- },
- getValidate() {
- console.log(this.form);
- let arr = [
- new Promise((resolve, reject) => {
- this.$refs.form.validate((valid) => {
- if (!valid) {
- reject(false);
- } else {
- resolve(true);
- }
- });
- })
- ];
-
- // this.$refs.tableInfoRef.tableForm.detailList.forEach((item, index) => {
- // arr.push(
- // new Promise((resolve, reject) => {
- // this.$refs.tableInfoRef.$ref['form'+index].validateForm((valid) => {
- // if (!valid) {
- // reject(false);
- // } else {
- // resolve(true);
- // }
- // });
- // })
- // );
- // })
- return Promise.all(arr);
- },
- async handleSave(flag) {
- // this.$refs.form.validate(async (valid) => {
- try {
- const valid = await this.getValidate();
- console.log('valid~~~',valid);
- // if (!valid) return this.$message.warning('有必填项未填,请检查');
-
- // if (this.form.sourceType != 4 || this.form.sourceType != 5) {
- // tableData = await this.$refs.table.getTableValidate();
- // }
- // // 校验表格数据
- // const tableValid = await new Promise((resolve) => {
- // this.$refs.table.validateForm((valid) => {
- // resolve(valid);
- // });
- // });
- const tableValid = await this.$refs.tableInfoRef.getTableValidate();
- console.log('tableValid~~~',tableValid);
- // if (!tableValid) {
- // return;
- // }
- let tableData = this.$refs.tableInfoRef.getTableData();
- // this.form.link = tableData.link;
- this.form.productMap = tableData;
- console.log('commitData~~~',this.form);
- const API =
- this.dialogType == 'add'
- ? invoiceApplyCreateAPI
- : invoiceApplyUpdateV2API;
- const id = await API(this.form);
- if (this.form.sourceType == 2) {
- updateContractStatus([this.form.sourceId]);
- }
- if (flag) {
- await this.handleSub(id);
- return;
- }
- this.$message.success('操作成功');
- this.done();
- this.cancel();
- // });
- } catch (error) {
- // this.$message.warning('有必填项未填,请检查');
- }
- },
- //
- handleSave1(flag) {
- this.$refs.form.validate(async (valid) => {
- if (!valid) return this.$message.warning('有必填项未填,请检查');
- let tableData = {};
- if (this.form.sourceType != 4 || this.form.sourceType != 5) {
- tableData = await this.$refs.table.getTableValidate();
- }
- // 校验表格数据
- const tableValid = await new Promise((resolve) => {
- this.$refs.table.validateForm((valid) => {
- resolve(valid);
- });
- });
- if (!tableValid) {
- return;
- }
- this.form.link = tableData.link;
- this.form.detailList = tableData.detailList;
- const API =
- this.dialogType == 'add'
- ? invoiceApplySaveAPI
- : invoiceApplyUpdateV2API;
- const id = await API(this.form);
- if (this.form.sourceType == 2) {
- updateContractStatus([this.form.sourceId]);
- }
- if (flag) {
- await this.handleSub(id);
- return;
- }
- this.$message.success('操作成功');
- this.done();
- this.cancel();
- });
- },
- //提交-开启流程
- async handleSub(id = '') {
- let data = await invoiceApplyInfoV2API(this.businessId || id);
- this.processSubmitDialogFlag = true;
- let key =
- data.type == 1 ? 'fin_invoice_apply' : 'fin_invoice_receive_apply';
- this.$nextTick(() => {
- let params = {
- businessId: data.id,
- businessKey: key,
- formCreateUserId: data.createUserId,
- variables: {
- type: data.type,
- businessCode: data.orderNo,
- businessName: data.companyName,
- businessType: data.type == 1 ? '开票' : '收票'
- }
- // callBackMethodType : '1',
- // callBackMethod : 'proTargetPlanApproveApiImpl.updatePlanApprovalStatus',
- // pcHandle : '/bpm/handleTask/components/project-manage/plan-manage/submit.vue',
- // pcView : '/bpm/handleTask/components/project-manage/plan-manage/detailDialog.vue',
- // miniHandle : '',
- // miniView : '',
- };
- this.$refs.processSubmitDialogRef.init(params);
- });
- // try {
- // await invoiceApplySubmit({
- // businessId: id || this.form.id,
- // type: this.form.type
- // });
- // } catch (e) {
- // this.$message.error(e.message);
- // }
- },
- reload() {
- this.done();
- this.cancel();
- },
- //刷新主列表数据
- done() {
- this.$emit('reload');
- },
- //关闭弹窗
- cancel() {
- this.$emit('update:addOrEditDialogFlag', false);
- }
- }
- };
- </script>
- <style scoped lang="scss">
- .el-form-box .el-table .el-table__row .el-table__cell {
- padding: 10px 0;
- }
- .payinfo .el-form-item {
- margin-bottom: 0!important;
- }
- </style>
|