<template> <div class="app-container"> <el-form ref="form" :model="form" label-width="120px" label-position="left" :inline="true" > <el-card> <div v-if="id" slot="header" class="card-title"> {{ $t("修改收款单") }} </div> <div v-else slot="header" class="card-title"> {{ $t("新增收款单") }} </div> <!-- <el-descriptions :column="3" border>--> <!-- <el-descriptions-item > --> <el-form-item style="margin-bottom: 0; margin-top: 20px" prop="customerId" :span="4" > <span style="margin-right: 20px" ><span style="color: #ff4949">*</span>{{ $t("客户") }}</span > <customer-selectorpay ref="customer" v-model="form.customerId" @change="customerChange" /> </el-form-item> <!-- </el-descriptions-item> <el-descriptions-item > --> <el-form-item style="margin-bottom: 0; margin-top: 20px" prop="departmentId" :span="4" > <span style="margin-right: 20px" ><span style="color: #ff4949">*</span>{{ $t("部门") }}:</span > <el-select v-model="form.departmentId" style="width: 300px" :placeholder="$t('请选择部门')" > <el-option v-for="item in deptData" :key="item.id" :label="item.name" :value="item.id" /> </el-select> </el-form-item> <el-form-item style="margin-bottom: 0; margin-top: 20px" prop="salesmanId" :span="4" > <span style="margin-right: 20px" ><span style="color: #ff4949">*</span>{{ $t("业务员") }}:</span > <el-select v-model="form.salesmanId" filterable :placeholder="$t('请选择业务员')" @change=" (v) => (form.salesmanName = creatorData.find( (t) => t.id === v ).nickname) " > <el-option v-for="item in creatorData" :key="item.id" :label="item.nickname" :value="item.id" /> </el-select> </el-form-item> <!-- </el-descriptions-item> --> <!-- <el-descriptions-item > --> <!-- <el-form-item :label="$t('手续费(RMB)')" style="margin-bottom: 0;margin-top: 20px;" prop="feeRate" :rules="{ required: true, trigger: ['blur', 'change'], message: $t('手续费不能为空') }" > <el-input v-model="form.feeRate" :placeholder="$t('请输入手续费')" ></el-input> </el-form-item> --> <!-- </el-descriptions-item> <el-descriptions-item > --> <el-form-item :label="$t('备注') + ':'" style="margin-bottom: 0; margin-top: 20px" label-width="55px" prop="remark" > <el-input style="display: inline-block" v-model="form.remark" :placeholder="$t('备注')" ></el-input> </el-form-item> <!-- </el-descriptions-item> --> <!-- </el-descriptions> --> </el-card> <el-card class="card amountCard"> <div slot="header" class="card-title">{{ $t("应收明细") }}</div> <el-col :span="1.5"> <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['ecw:voucher:create:add']" style="padding: 10px; margin-bottom: 10px" >{{ $t("添加未收客户款项") }}</el-button > </el-col> <el-table v-loading="loadings" :data="list" border :key="isUpdate"> <el-table-column :label="$t('订单号')" align="center" prop="orderNo" /> <el-table-column :label="$t('提单号')" align="center" prop="tidanNo" /> <el-table-column :label="$t('唛头')" align="center" prop="marks" /> <el-table-column :label="$t('品名')" align="center" prop="title"> <template slot-scope="scope"> {{ scope.row.titleZh ? scope.row.titleZh + "(" + scope.row.titleEn + ")" : "" }} </template> </el-table-column> <el-table-column :label="$t('箱数')" align="center" prop="num" /> <el-table-column :label="$t('体积/重量')" align="center" prop="weight" > <template slot-scope="scope"> {{ scope.row.volume }}/{{ scope.row.weight }} </template> </el-table-column> <el-table-column :label="$t('收入类型')" align="center" prop="feeType" > <template slot-scope="scope"> <dict-tag :type="DICT_TYPE.FEE_TYPE" :value="scope.row.feeType" ></dict-tag> </template> </el-table-column> <el-table-column :label="$t('单价金额')" align="center" prop="unitPrice" > <template slot-scope="scope"> <span >{{ scope.row.unitPrice }}{{ getCurrencyLabel(scope.row.currencyId) }}</span > <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> --> </template> </el-table-column> <el-table-column :label="$t('税率%')" align="center" prop="totalAmount" > <template slot-scope="scope"> <el-input type="text" v-model="scope.row.taxPoint" @input="changeTaxRate(scope.row, scope.$index)" ></el-input> </template> </el-table-column> <el-table-column :label="$t('不含税金额')" align="center" prop="totalAmount" > <template slot-scope="scope"> <span >{{ scope.row.totalAmount }}{{ getCurrencyLabel(scope.row.currencyId) }}</span > </template> </el-table-column> <el-table-column :label="$t('含税金额')" align="center" prop="taxAmount" > <template slot-scope="scope"> <span >{{ scope.row.taxAmount }}{{ getCurrencyLabel(scope.row.currencyId) }}</span > <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> --> </template> </el-table-column> <el-table-column :label="$t('优惠金额')" align="center"> <template slot-scope="scope"> <span> {{ scope.row.discountTotal ? `${scope.row.discountTotal}` : 0 }}</span > {{ getCurrencyLabel(scope.row.currencyId) }} <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> --> <span v-if="scope.row.discountTotal">{{ scope.row.discountRemark ? "(" + scope.row.discountRemark + ")" : "" }}</span> </template> </el-table-column> <el-table-column :label="$t('操作')" align="center"> <template slot-scope="scope"> <el-button v-if="scope.row.type !== 'total'" type="text" v-hasPermi="['ecw:voucher:create:editdiscount']" @click="addDiscount(scope.row, scope.$index)" >{{ scope.row.discountTotal ? $t("修改优惠") : $t("新增优惠") }}</el-button > <el-button v-if="scope.row.type !== 'total'" type="text" v-hasPermi="['ecw:voucher:create:deldiscount']" @click="deleteListRow(scope.$index)" >{{ $t("删除") }}</el-button > </template> </el-table-column> </el-table> <!-- <el-descriptions :column="2" border class="card"> <el-descriptions-item > --> <el-form-item style="margin-bottom: 0; margin-top: 20px" prop="openInvoice" > <span style="margin-right: 20px" ><span style="color: #ff4949">*</span >{{ $t("是否需要开票") }}:</span > <el-select v-model="form.openInvoice" :placeholder="$t('请选择是否需要开票')" > <el-option :value="1" :label="$t('是')"></el-option> <el-option :value="0" :label="$t('否')"></el-option> </el-select> </el-form-item> <el-form-item :label="$t('核销基准币种') + ':'" style="margin-bottom: 0; margin-top: 20px" > {{ getCurrencyLabel(showCurrencyId) }} <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="showCurrencyId" /> --> </el-form-item> <!-- </el-descriptions-item> <el-descriptions-item :label="$t('核销基准币种')"> </el-descriptions-item> </el-descriptions> --> </el-card> <el-card v-if="showInvoice" class="card"> <div slot="header" class="card-title">{{ $t("开票资料") }}</div> <el-descriptions :column="3" border> <el-descriptions-item :label="$t('发票抬头')"> <el-form-item label="" label-width="0" style="margin-bottom: 0" prop="invoice" :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请输入发票抬头'), }" > <el-input v-model="form.invoice"></el-input> </el-form-item> </el-descriptions-item> <el-descriptions-item :label="$t('纳税人识别号')"> <el-form-item label="" label-width="0" style="margin-bottom: 0" prop="taxpayer" :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请输入纳税人识别号'), }" > <el-input v-model="form.taxpayer"></el-input> </el-form-item> </el-descriptions-item> <el-descriptions-item :label="$t('开户行')"> <el-form-item label="" label-width="0" style="margin-bottom: 0" prop="accountBank" :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请输入开户行'), }" > <el-input v-model="form.accountBank"></el-input> </el-form-item> </el-descriptions-item> <el-descriptions-item :label="$t('账号')"> <el-form-item label="" label-width="0" style="margin-bottom: 0" prop="accountName" :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请输入账号'), }" > <el-input v-model="form.accountName"></el-input> </el-form-item> </el-descriptions-item> <el-descriptions-item :label="$t('项目')"> <el-form-item label="" label-width="0" style="margin-bottom: 0" prop="projectName" :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请输入项目'), }" > <el-input v-model="form.projectName"></el-input> </el-form-item> </el-descriptions-item> <el-descriptions-item :label="$t('税率%')"> <el-form-item label="" label-width="0" style="margin-bottom: 0" prop="taxRate" :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请输入税率'), }" > <el-input v-model="form.taxRate"></el-input> </el-form-item> </el-descriptions-item> <el-descriptions-item :label="$t('开票地址/电话')"> <el-form-item label="" label-width="0" style="margin-bottom: 0" prop="addressPhone" :rules="{ required: true, trigger: ['blur', 'change'], message: $t('请输入开票地址/电话'), }" > <el-input v-model="form.addressPhone"></el-input> </el-form-item> </el-descriptions-item> </el-descriptions> </el-card> <el-card class="card"> <div slot="header" class="card-title">{{ $t("收款信息") }}</div> <el-table :data="form.receiptAccountList" border :key="form.receiptAccountList.length" > <el-table-column :label="$t('应收币种')" align="center"> <template slot-scope="scope"> {{ getCurrencyLabel(scope.row.currencyId) }} </template> </el-table-column> <el-table-column :label="$t('应收金额')" align="center" prop="receivableAmount" > <template slot-scope="scope" v-if="scope.row.type !== 'total'"> {{ `${NP.minus( scope.row.receivableAmount, scope.row.discountTotal || 0 )}${ scope.row.discountTotal > 0 ? `(${scope.row.receivableAmount} - ${scope.row.discountTotal})` : "" }` }} </template> </el-table-column> <el-table-column align="center"> <template #header> {{ $t("核销基准币种") + "(" + getCurrencyLabel(showCurrencyId) + ")" + $t("汇率") }} </template> <template slot-scope="scope"> <template v-if="scope.row.type !== 'total'"> <span v-if="showCurrencyId === scope.row.currencyId">{{ scope.row.writeOffRate }}</span> <el-form-item v-else label="" label-width="0" style="margin-bottom: 0" :prop="`receiptAccountList.${scope.$index}.writeOffRate`" > <el-input v-model="scope.row.writeOffRate" @input="() => writeOffRateChange(scope.row, scope.$index)" ></el-input> </el-form-item> </template> <template v-else> {{ $t("应核销总金额") + "(" + getCurrencyLabel(showCurrencyId) + ")" }} </template> </template> </el-table-column> <el-table-column align="center" prop="writeOffAmount"> <template #header> {{ $t("核销基准金额") + "(" + getCurrencyLabel(showCurrencyId) + ")" }} </template> </el-table-column> <el-table-column :label="$t('期望收款账户')" align="center"> <template slot-scope="scope"> <el-form-item v-if="scope.row.type !== 'total'" label="" label-width="0" style="margin-bottom: 0" :prop="`receiptAccountList.${scope.$index}.platformAccountId`" > <!-- <el-select v-model="scope.row.platformAccountId" :placeholder="$t('请选择收款账户')" @change="(platformAccountId)=>changePlatformAccountId(platformAccountId,scope.$index)" > <el-option v-for="item in bankData" :key="item.id" :label="item.baAccountName + '(' + item.baAccountNum + ')'" :value="item.id" /> </el-select> --> <el-select filterable clear v-model="scope.row.platformAccountId" :placeholder="$t('请选择收款账户')" @change=" (platformAccountId) => changePlatformAccountId(platformAccountId, scope.$index) " v-el-select-loadmore="loadmore" :loading="codeLoading" > <el-option v-for="(item, i) in bankData" :key="'opt-code' + i" :label="item.baAccountName + '(' + item.baAccountNum + ')'" :value="item.id" ></el-option> </el-select> </el-form-item> </template> </el-table-column> <el-table-column :label="$t('期望收款币种')" align="center"> <template slot-scope="scope"> <el-form-item v-if="scope.row.type !== 'total'" label="" label-width="0" style="margin-bottom: 0" :prop="`receiptAccountList.${scope.$index}.collectionCurrencyId`" > <el-select v-model="scope.row.collectionCurrencyId" :placeholder="$t('请选择')" @change=" (val) => currencyIdChange(val, scope.row, scope.$index) " > <el-option v-for="item in currencyList" :key="item.id" :label=" $i18n.locale == 'zh_CN' ? item.titleZh : item.titleEn " :value="item.id" /> </el-select> </el-form-item> </template> </el-table-column> <el-table-column :label="$t('期望收款汇率')" align="center"> <!--lanbm 2024-05-06 汇率保留小数增加到6位,为了方便显示,加宽此列的显示--> <template slot-scope="scope" style="width: 200px"> <el-form-item v-if="scope.row.type !== 'total'" label="" label-width="0" style="margin-bottom: 0" :prop="`receiptAccountList.${scope.$index}.collectionRate`" > <el-input v-model="scope.row.collectionRate" @input="() => rateChange(scope.row, scope.$index)" ></el-input> </el-form-item> <span v-else>{{ $t("期望收费金额") }}</span> </template> </el-table-column> <el-table-column :label="$t('期望收款金额')" align="center" prop="collectionAmount" > <template slot-scope="scope"> <span v-if="scope.row.type !== 'total'">{{ scope.row.collectionAmount }}</span> <div v-else> <div v-for="itemAmount in scope.row.collectionAmount"> {{ $i18n.locale == "zh_CN" ? itemAmount ? itemAmount.currencyNameZh : "" : itemAmount ? itemAmount.currencyNameEn : "" }}: {{ itemAmount && itemAmount.amount ? itemAmount.amount : 0 }} </div> <!-- <div v-if="scope.row.collectionAmount[1]">{{ $t('人民币') }}: {{ scope.row.collectionAmount[1].toFixed(6) }}</div> <div v-if="scope.row.collectionAmount[2]">{{ $t('奈拉') }}: {{ scope.row.collectionAmount[2].toFixed(6) }}</div> <div v-if="scope.row.collectionAmount[3]">{{ $t('西非法郎') }}: {{ scope.row.collectionAmount[3].toFixed(6) }}</div> --> </div> <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> --> </template> </el-table-column> </el-table> <el-descriptions :column="2" border class="card"> <el-descriptions-item :label="$t('账单汇率有效期')"> <el-form-item label="" label-width="0" style="margin-bottom: 0" prop="rateValidateDate" > <el-date-picker v-model="form.rateValidateDate" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('选择日期时间')" > </el-date-picker> </el-form-item> </el-descriptions-item> </el-descriptions> </el-card> </el-form> <!-- <div slot="footer" style="margin: 20px 0"> <el-button v-if="id==0||form.state==0" type="primary" :loading="saveBtnLoading" @click="submitForm(1)">{{ $t('保存草稿') }}</el-button> <el-button v-else type="primary" :loading="saveBtnLoading" @click="$store.dispatch('tagsView/delCurrentView')">{{ $t('返回') }}</el-button> <el-button type="primary" :loading="saveBtnLoading" @click="submitForm(0)">{{ id&&form.state!=0 ? $t('修改') : $t('新增收款单') }}</el-button> </div> --> <div slot="header" class="bpm-title">{{ $t("审核流程") }}</div> <work-flow xmlkey="merge_order" v-model="form.copyUserList"></work-flow> <div slot="footer" style="margin: 20px 0"> <el-button type="primary" @click="submitForm(0)" v-hasPermi="['ecw:voucher:create:sumbit']" >{{ $t("提交申请") }}</el-button > <el-button v-if="id == 0 || form.state == 0" type="primary" :loading="saveBtnLoading" v-hasPermi="['ecw:voucher:create:save']" @click="submitForm(1)" >{{ $t("保存草稿") }}</el-button > <el-button v-if="orderData.inWarehouseState == 207" type="primary" v-hasPermi="['ecw:voucher:create:see']" @click=" $router.push( `/bpm/process-instance/detail?id=` + orderApprovalBackVO.applyingFormId ) " >{{ $t("审核中") }}</el-button > <!-- <el-button v-if="orderData.inWarehouseState==207" plain type="primary" @click="dialogVisible = true">{{$t('取消审核')}}</el-button> --> <el-button plain type="primary" @click="$store.dispatch('tagsView/delCurrentView')" >{{ $t("返回") }}</el-button > <!-- <el-button type="primary" :loading="saveBtnLoading" @click="submitForm(0)">{{ id&&form.state!=0 ? $t('修改') : $t('新增收款单') }}</el-button> --> </div> <el-dialog :visible.sync="open" :title="$t('添加未收客户款项')" width="80%" append-to-body @open="getList" > <div> <!-- <div slot="header" class="card-title">{{ $t('添加未收客户款项') }}</div> --> <!-- 搜索工作栏 --> <el-form v-if="open" :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="80px" > <el-row> <el-form-item :label="$t('始发仓')"> <el-select v-model="queryParams.departureId" :placeholder="$t('请选择始发地')" > <el-option v-for="item in expoerCityList" :label="item.titleZh" :value="item.id" :key="item.id" ></el-option> </el-select> </el-form-item> <el-form-item :label="$t('目的仓')"> <el-select v-model="queryParams.objectiveId" :placeholder="$t('请选择始发地')" > <el-option v-for="item in importCityList" :label="item.titleZh" :value="item.id" :key="item.id" ></el-option> </el-select> </el-form-item> <el-form-item :label="$t('运输方式')"> <dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model="queryParams.transportId" formatter="number" /> </el-form-item> <el-form-item :label="$t('出货渠道')"> <el-select v-model="queryParams.channelId" :placeholder="$t('请选择出货渠道')" > <el-option v-for="item in channelList" :label="item.nameZh" :value="item.channelId" :key="item.channelId" ></el-option> </el-select> </el-form-item> </el-row> <el-row> <el-form-item :label="$t('报关方式')"> <dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" v-model="queryParams.customsType" /> </el-form-item> <el-form-item :label="$t('控货')"> <dict-selector :type="DICT_TYPE.INFRA_BOOLEAN_STRING" v-model="queryParams.control" /> </el-form-item> <el-form-item :label="$t('客户名称')"> <customer-selector v-model="queryParams.customerId" @change="consignor = $event" /> </el-form-item> </el-row> <el-form-item :label="$t('订单编号')" prop="orderNo"> <el-input v-model="queryParams.orderNo" :placeholder="$t('请输入订单编号')" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item :label="$t('提单号')" prop="tidanNo"> <el-input v-model="queryParams.tidanNo" :placeholder="$t('请输入提单号')" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item> <el-button type="primary" icon="el-icon-search" @click="handleQuery" >{{ $t("查询") }}</el-button > </el-form-item> </el-form> <el-table ref="multipleTable" v-loading="loading1" :data="orderData" border @selection-change="handleSelectionChange" row-key="id" height="calc(100vh - 480px)" > <el-table-column type="selection" width="55" :reserve-selection="true" > </el-table-column> <el-table-column :label="$t('订单号')" align="center" prop="orderNo" /> <el-table-column :label="$t('提单号')" align="center" prop="tidanNo" /> <el-table-column :label="$t('唛头')" align="center" prop="marks" /> <el-table-column :label="$t('品名')" align="center" prop="title"> <template slot-scope="scope"> {{ scope.row.titleZh ? scope.row.titleZh + "(" + scope.row.titleEn + ")" : "" }} </template> </el-table-column> <el-table-column :label="$t('箱数')" align="center" prop="num" /> <el-table-column :label="$t('体积/重量')" align="center" prop="weight" > <template slot-scope="scope"> {{ scope.row.volume }}/{{ scope.row.weight }} </template> </el-table-column> <el-table-column :label="$t('发货人')" align="center" prop="consignorName" /> <el-table-column :label="$t('收货人')" align="center" prop="consigneeName" /> <el-table-column :label="$t('订单状态')" align="center" prop="status"> <template slot-scope="scope"> <dict-tag :type="DICT_TYPE.ORDER_STATUS" :value="scope.row.status" /> </template> </el-table-column> <el-table-column :label="$t('收入类型')" align="center" prop="feeType" > <template slot-scope="scope"> <dict-tag :type="DICT_TYPE.FEE_TYPE" :value="scope.row.feeType" ></dict-tag> </template> </el-table-column> <!-- <el-table-column :label="$t('单价美元')" align="center" prop="unitPrice" /> --> <el-table-column :label="$t('单价')" align="center" prop="unitPrice"> <template slot-scope="scope"> <span >{{ scope.row.unitPrice }}{{ getCurrencyLabel(scope.row.currencyId) }}</span > <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> --> </template> </el-table-column> <el-table-column :label="$t('总金额')" align="center" prop="totalAmount" > <template slot-scope="scope"> <span >{{ scope.row.totalAmount }}{{ getCurrencyLabel(scope.row.currencyId) }}</span > <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> --> </template> </el-table-column> </el-table> <pagination v-show="total > 0" :total="total" :page.sync="queryParams.page" :limit.sync="queryParams.rows" @pagination="getList" /> <!-- </el-card> --> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="saveSelectList">{{ $t("确认添加") }}</el-button> <el-button @click="hiddenDialog">{{ $t("取消") }}</el-button> </div> </div> </el-dialog> <el-dialog v-if="discountVisible" :visible.sync="discountVisible" :title="$t('优惠信息确认')" width="60%" append-to-body > <el-form label-width="120px"> <el-form-item v-if="form.receiptNo" :label="$t('收款单号')"> {{ form.receiptNo }} </el-form-item> <el-table :data="[selectListRow]" border style="margin-bottom: 22px"> <el-table-column :label="$t('订单号')" align="center" prop="orderNo" /> <el-table-column :label="$t('唛头')" align="center" prop="marks" /> <el-table-column :label="$t('品名')" align="center" prop="title"> <template slot-scope="scope"> {{ scope.row.titleZh ? scope.row.titleZh + "(" + scope.row.titleEn + ")" : "" }} </template> </el-table-column> <el-table-column :label="$t('箱数')" align="center" prop="num" /> <el-table-column :label="$t('体积/重量')" align="center" prop="weight" > <template slot-scope="scope"> {{ scope.row.volume }}/{{ scope.row.weight }} </template> </el-table-column> <el-table-column :label="$t('收入类型')" align="center" prop="feeType" > <template slot-scope="scope"> <dict-tag :type="DICT_TYPE.FEE_TYPE" :value="scope.row.feeType" ></dict-tag> </template> </el-table-column> <el-table-column :label="$t('单价金额')" align="center" prop="unitPrice" > <template slot-scope="scope"> <span >{{ scope.row.unitPrice }}{{ getCurrencyLabel(scope.row.currencyId) }}</span > <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> --> </template> </el-table-column> <el-table-column :label="$t('总金额')" align="center" prop="totalAmount" > <template slot-scope="scope"> <span >{{ scope.row.taxAmount }}{{ getCurrencyLabel(scope.row.currencyId) }}</span > <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> --> </template> </el-table-column> </el-table> <el-form-item :label="$t('总金额')"> {{ selectListRow.taxAmount }}{{ getCurrencyLabel(selectListRow.currencyId) }} </el-form-item> <el-form-item :label="$t('优惠金额')"> <el-input v-model="discountForm.discountTotal" type="number" min="0" :max="selectListRow.totalAmount" @input="checkDiscount" style="width: 300px" ></el-input> {{ getCurrencyLabel(selectListRow.currencyId) }} </el-form-item> <el-form-item :label="$t('优惠原因')"> <el-input v-model="discountForm.discountRemark" type="textarea" style="width: 300px" ></el-input> </el-form-item> <el-form-item :label="$t('优惠后')"> {{ ( selectListRow.taxAmount - (discountForm.discountTotal || 0) ).toFixed(2) }} {{ getCurrencyLabel(selectListRow.currencyId) }} </el-form-item> <el-form-item v-if="opnotice" :label="$t('操作人')"> {{ discountForm.author }} </el-form-item> <el-form-item v-if="opnotice" :label="$t('操作时间')"> {{ discountForm.time }} </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="saveDiscount">{{ $t("提交") }}</el-button> <el-button @click="cancelDiscount">{{ $t("取消") }}</el-button> </div> </el-dialog> </div> </template> <script> import { listSimpleUsers } from "@/api/system/user"; import { DICT_TYPE } from "@/utils/dict"; import { getToken } from "@/utils/auth"; import CustomerSelector from "@/components/CustomerSelector"; import CustomerSelectorpay from "@/components/CustomerSelectorpay"; import { getBankAccountPage } from "@/api/ecw/bankAccount"; import { listSimpleDepts } from "@/api/system/dept"; import { getChannelList } from "@/api/ecw/channel"; import { getTradeCityList } from "@/api/ecw/region"; import { createReceipt, getReceivableByOrderId, getReceivableList, getReceivableItemDetail, getReceiptInfoByIds, getReceiptAccountList, getInvoicingItem, updateReceipt, updateReceivableDiscountById, getReceivableDiscountLogById, } from "@/api/ecw/financial"; import { getCustomer } from "@/api/ecw/customer"; import NP from "number-precision"; import { getOrder, getDestCountryByOrderId } from "@/api/ecw/order"; import { getCurrencyPage } from "@/api/ecw/currency"; import { getExchangeRatePage } from "@/api/ecw/exchangeRate"; import ret from "bluebird/js/release/util"; import dayjs from "dayjs"; import { getUserProfile } from "@/api/system/user"; import { getWarehouseList } from "@/api/ecw/warehouse"; import WorkFlow from "@/components/WorkFlow/"; export default { name: "EcwFinancialCreatcollection", components: { CustomerSelector, WorkFlow, CustomerSelectorpay, }, data() { return { NP, loadings: false, loading1: false, uploadFileUrl: process.env.VUE_APP_BASE_API + "/app-api/file/upload", // 上传的图片服务器地址 form: { receiptAccountList: [], departmentId: "", salesmanId: "", salesmanName: "", }, creatorData: [], list: [], // fileList: [], orderData: [], opnotice: false, dialogTableKey: 0, total: 0, headers: { Authorization: "Bearer " + getToken(), }, loading: "", open: false, bankData: [], params: { page: 1, rows: 100, }, deptData: [], deptArr: [], oadings: false, channelList: [], queryParams: { page: 1, rows: 20, }, multipleSelection: [], tradeCityList: [], id: 0, receiptId: 0, currencyList: [], saveBtnLoading: false, discountVisible: false, discountForm: { author: "", }, selectListRow: {}, selectListIndex: 0, flag: false, warehouseList: [], selectedUsers: [], dialogVisible: false, isUpdate: false, codeLoading: false, codePage: { pageNo: 1, pageSize: 100, }, pages: 1, rateList: [], userInfo: null, //订单编号 lanbm 2024-05-20 add orderId: undefined, }; }, async activated() { let that = this; await getUserProfile().then((res) => (that.userInfo = res.data)); if (that.$route.query.id) { that.flag = true; that.id = that.$route.query.id; that.getReceivableData(); } else { that.removeData(); that.$set(that.form, "departmentId", that.userInfo.deptId); that.$set(that.discountForm, "author", that.userInfo.nickname); that.$set(that.form, "salesmanId", that.userInfo.id); that.$set(that.form, "salesmanName", that.userInfo.nickname); } if (that.$route.query.receiptId && that.$route.query.receiptId != 0) { that.receiptId = that.$route.query.receiptId; that.getReceivableInfo(); } else { // that.removeData() } if (that.$route.query.orderId) { getReceivableByOrderId({ orderId: that.$route.query.orderId }).then( (response) => { that.list = [...response.data]; that.list.map((v) => { if (!v.taxPoint) { v.taxAmount = v.totalAmount; } }); that.calculation(); getOrder(that.$route.query.orderId).then((response) => { // console.log(response.data) if (response.data.customerId) { that.$set(that.form, "customerId", response.data.customerId); } else { if (response.data.drawee == 1) { that.$set( that.form, "customerId", response.data.consignorVO.customerId ); } else if (response.data.drawee == 2) { that.$set( that.form, "customerId", response.data.consigneeVO.customerId ); } else { if (response.data.customDraweeVOList) { response.data.customDraweeVOList.map((v) => { if (v.name == "freight") { if (v.value == 1) { that.$set( that.form, "customerId", response.data.consignorVO.customerId ); } else { that.$set( that.form, "customerId", response.data.consigneeVO.customerId ); } } }); } } } }); getDestCountryByOrderId({ orderId: that.$route.query.orderId }).then( (response) => { // console.log(response.data) if (response.data) that.$set(that.queryParams, "destCountry", response.data); } ); } ); } }, directives: { "el-select-loadmore": { bind(el, binding) { const SELECTWRAP_DOM = el.querySelector( ".el-select-dropdown .el-select-dropdown__wrap" ); SELECTWRAP_DOM.addEventListener("scroll", function () { const condition = this.scrollHeight - this.scrollTop <= this.clientHeight; if (condition) { binding.value(); } }); }, }, }, async created() { await getUserProfile().then((res) => (this.userInfo = res.data)); // 获取汇率 await getCurrencyPage(this.params).then( (res) => (this.currencyList = res.data.list) ); await getExchangeRatePage(this.params).then( (res) => (this.rateList = res.data.list) ); getWarehouseList().then((res) => (this.warehouseList = res.data)); let that = this; if (that.$route.query.orderId) { //lanbm 2024-05-20 添加订单ID this.orderId = that.$route.query.orderId; await getReceivableByOrderId({ orderId: that.$route.query.orderId }).then( (response) => { this.list = [...response.data]; this.list.map((v) => { if (!v.taxPoint) { v.taxAmount = v.totalAmount; } }); this.calculation(); getOrder(that.$route.query.orderId).then((response) => { if (response.data.customerId) { that.$set(that.form, "customerId", response.data.customerId); } else { if (response.data.drawee == 1) { that.$set( that.form, "customerId", response.data.consignorVO.customerId ); } else if (response.data.drawee == 2) { that.$set( that.form, "customerId", response.data.consigneeVO.customerId ); } else { if (response.data.customDraweeVOList) { response.data.customDraweeVOList.map((v) => { if (v.name == "freight") { if (v.value == 1) { that.$set( that.form, "customerId", response.data.consignorVO.customerId ); } else { that.$set( that.form, "customerId", response.data.consigneeVO.customerId ); } } }); } } } }); } ); getDestCountryByOrderId({ orderId: this.$route.query.orderId }).then( (response) => { if (response.data) this.$set(this.queryParams, "destCountry", response.data); } ); } if (that.$route.query.id) { this.flag = true; this.id = this.$route.query.id; this.getReceivableData(); } else { this.discountForm.author = this.userInfo.nickname; this.form.departmentId = this.userInfo.deptId; this.form.salesmanId = this.userInfo.id; this.$set(this.form, "salesmanName", this.userInfo.nickname); } if (that.$route.query.receiptId && that.$route.query.receiptId !== "0") { this.receiptId = this.$route.query.receiptId; this.getReceivableInfo(); } // this.getList(); // if(that.$route.query.consignorId){ // this.queryParams.consignorId = this.$route.query.consignorId // } // if(that.$route.query.writeOffName){ // this.form.writeOffName = this.$route.query.writeOffName // } listSimpleUsers().then((res) => (that.creatorData = res.data)); getChannelList().then((res) => (that.channelList = res.data)); getTradeCityList().then((res) => (that.tradeCityList = res.data)); this.getCodeList(); listSimpleDepts().then((res) => { that.deptData = res.data; // res.data.forEach((item) => { // if (item.parentId == 0) { // that.deptArr.push(item); // } else { // that.deptData.push(item); // } // }); // that.deptData.forEach((value) => { // var dept = res.data.filter((itt) => itt.id == value.parentId); // if (dept.length > 0) { // value.name = dept[0].name + " | " + value.name; // } // }); }); }, computed: { expoerCityList() { // return this.tradeCityList.filter((item) => item.type == 2); return this.warehouseList.filter( (item) => item.tradeType == 2 || item.tradeType == 3 ); }, importCityList() { // return this.tradeCityList.filter((item) => item.type == 1); return this.warehouseList.filter( (item) => item.tradeType == 1 || item.tradeType == 3 ); }, showCurrencyId() { let fieldList = []; let groupList = []; this.list.map((element) => { if (fieldList.indexOf(element["currencyId"]) === -1) { fieldList.push(element["currencyId"]); } }); for (let i = 0; i < fieldList.length; i++) { let arr = this.list.filter((element) => { return element["currencyId"] === fieldList[i]; }); groupList.push({ currencyId: arr[0].currencyId, list: arr, }); } if (groupList.length === 1) return groupList[0].currencyId; else return 1; }, showInvoice() { return this.form.openInvoice == 1; }, }, methods: { // 懒加载 loadmore() { this.codePage.pageNo++; // 大于页码不请求了 console.log(111); if (this.codePage.pageNo > this.pages) { return; } this.getCodeList(); }, getCodeList(flag) { if (flag) { this.bankData = []; this.codeLoading = true; } setTimeout(() => { getBankAccountPage(this.codePage).then((res) => { this.codeLoading = false; this.bankData = this.bankData.concat(res.data.list); this.pages = res.data.total / this.codePage.pageSize + 1; }); }, 200); }, getReceivableData() { getReceiptInfoByIds({ id: this.id }).then((res) => { if (res.data.rateValidateDate) res.data.rateValidateDate = dayjs(res.data.rateValidateDate).format( "YYYY-MM-DD HH:mm:ss" ); this.form = Object.assign({}, this.form, res.data); this.discountForm.author = this.userInfo.nickname; if (!this.form.departmentId) this.form.departmentId = this.userInfo.deptId; if (!this.form.salesmanId) this.form.salesmanId = this.userInfo.id; if (!this.form.salesmanName) this.$set(this.form, "salesmanName", this.userInfo.nickname); }); getInvoicingItem({ id: this.id }).then((res) => { this.list = [...res.data]; this.list.map((v) => { if (!v.taxPoint) { v.taxAmount = v.totalAmount; } }); }); getReceiptAccountList({ id: this.id }).then((res) => { if (res.data.length > 0) { // totalAmount res.data = [ ...res.data, { type: "total", writeOffAmount: res.data .reduce( (total, currentValue) => NP.plus(total, currentValue.writeOffAmount || 0), 0 ) .toFixed(2), collectionAmount: [], }, ]; } this.$set(this.form, "receiptAccountList", res.data); this.$nextTick(() => { // const dollarList = this.list.filter(v => v.currencyId === 1) // const discountDollar = dollarList.reduce((total, currentValue) => NP.plus(total, currentValue.discountTotal || 0), 0) // const d = this.form.receiptAccountList.find(v => v.currencyId == 1) // d && (d.discountTotal = discountDollar) // const rmbList = this.list.filter(v => v.currencyId === 2) // const discountRmb = rmbList.reduce((total, currentValue) => NP.plus(total, currentValue.discountTotal || 0), 0) // const r = this.form.receiptAccountList.find(v => v.currencyId == 2) // r && (r.discountTotal = discountRmb) // const nairaList = this.list.filter(v => v.currencyId === 3) // const discountNaira = nairaList.reduce((total, currentValue) => NP.plus(total, currentValue.discountTotal || 0), 0) // const n = this.form.receiptAccountList.find(v => v.currencyId == 3) // n && (n.discountTotal = discountNaira) // this.form.receiptAccountList.forEach((item, index) => { // this.rateChange(item, index) // }); console.log(111); if (this.form.receiptAccountList.length > 0) { this.editReceiptAccountList(); } // this.calculation() }); }); }, getReceivableInfo() { getReceivableItemDetail({ id: this.receiptId }).then((res) => { this.list = res.data; this.list.map((v) => { if (!v.taxPoint) { v.taxAmount = v.totalAmount; } }); this.calculation(); getOrder(res.data.orderId).then((response) => { // console.log(response.data) if (response.data.customerId) this.$set(this.form, "customerId", response.data.customerId); }); }); }, getCurrencyLabel(id) { var label = this.currencyList.filter((item) => item.id == id); if (label.length > 0) return this.$i18n.locale == "zh_CN" ? label[0].titleZh : label[0].titleEn; return ""; }, checkDiscount(e) { if (e > this.selectListRow.totalAmount) { this.discountForm.discountTotal = this.selectListRow.totalAmount; } }, currencyIdChange(val, row, index) { row.collectionCurrencyId = val; if (val == row.currencyId) row.collectionRate = 1; else { // if (row.currencyId == 1 && val == 3) row.collectionRate = this.UStoRMB() // if (row.currencyId == 1 && val == 2) row.collectionRate = this.UStoNAN() // if (row.currencyId == 3 && val == 1) row.collectionRate = this.RMBtoUS() // if (row.currencyId == 3 && val == 2) row.collectionRate = this.RMBtoNAN() // if (row.currencyId == 2 && val == 1) row.collectionRate = this.NANtoUS() // if (row.currencyId == 2 && val == 3) row.collectionRate = this.NANtoRMB() // row.collectionRate = NP.times(this.currencyList.find(v => v.id === row.currencyId).huilv/100, this.currencyList.find(v => v.id === val).exchangeToFc/100).toFixed(6) row.collectionRate = this.getRate(row.currencyId, val); } this.rateChange(row, index); }, //获取汇率 getRate(sourceCurrencyId, targetCurrencyId) { var rate = this.rateList.find( (v) => v.sourceCurrencyId === sourceCurrencyId && v.targetCurrencyId === targetCurrencyId ); if (rate) return rate.currencyRate; return ""; }, writeOffRateChange(row, index) { if (row.writeOffRate == 0 && parseInt(row.writeOffRate) === 0) { this.$modal.msgError(this.$t("汇率不能为0,请输入正确的汇率")); } if (row.writeOffRate) { row.writeOffAmount = NP.times( row.writeOffRate || 0, NP.minus(row.receivableAmount, row.discountTotal || 0) ).toFixed(2); } else { row.writeOffAmount = ""; } const writeOffAmountTotal = this.form.receiptAccountList .filter((v) => v.type !== "total") .reduce( (total, currentValue) => NP.plus(total, currentValue.writeOffAmount || 0), 0 ); this.form.receiptAccountList[ this.form.receiptAccountList.length - 1 ].writeOffAmount = writeOffAmountTotal; }, rateChange(row, index) { if (row.collectionRate == 0 && parseInt(row.collectionRate) === 0) { this.$modal.msgError(this.$t("汇率不能为0,请输入正确的汇率")); } if (row.collectionRate) { row.receivableAmount && (row.collectionAmount = NP.times( row.collectionRate || 0, NP.minus(row.receivableAmount, row.discountTotal || 0) ).toFixed(2)); } else { row.collectionAmount = ""; } this.form.receiptAccountList[index] = { ...row }; setTimeout(() => { // 收款总计 this.editReceiptAccountList(); }, 100); }, editReceiptAccountList() { var amountList = []; this.currencyList.forEach((item, index) => { var dollarList = this.form.receiptAccountList.filter( (v) => v.collectionCurrencyId == item.id ); if (dollarList.length > 0) { var dollar = dollarList.reduce( (total, currentValue) => NP.plus(total, currentValue.collectionAmount), 0 ); amountList.push({ currencyId: item.id, currencyNameEn: item.titleEn, currencyNameZh: item.titleZh, amount: dollar.toFixed(2), }); } }); this.form.receiptAccountList[ this.form.receiptAccountList.length - 1 ].collectionAmount = amountList; this.$set(this.form, "receiptAccountList", [ ...this.form.receiptAccountList, ]); }, //明细改变税率 changeTaxRate(row, index) { var pointArr = []; var regs = /^[0-9]+\d*(\.\d*)?$|^0?\.\d*[0-9]\d*$/; if (row.taxPoint && !regs.test(row.taxPoint)) { row.taxPoint = ""; this.$modal.msgError(this.$t("输入税率格式不对")); } else { pointArr = row.taxPoint.split("."); if (pointArr.length > 1 && pointArr[1]) { row.taxPoint = Math.round(row.taxPoint * 100) / 100; } } if (row.taxPoint) { var amout = NP.times(NP.divide(row.taxPoint, 100), row.totalAmount); row.taxAmount = NP.plus(row.totalAmount, amout); } else { row.taxAmount = row.totalAmount; } this.list[index] = { ...row }; let dataArrTemp = JSON.stringify(this.list); this.list = JSON.parse(dataArrTemp); if (pointArr.length > 1 && !pointArr[1]) { return; } else { this.calculation(); } }, calculation() { const copyList = this.form.receiptAccountList; this.form.receiptAccountList = []; this.currencyList.forEach((item, index) => { var dollarList = this.list.filter((v) => v.currencyId === item.id); if (dollarList.length > 0) { let dollar, discountDollar; dollar = dollarList.reduce( (total, currentValue) => NP.plus(total, currentValue.taxAmount || 0), 0 ); discountDollar = dollarList.reduce( (total, currentValue) => NP.plus(total, currentValue.discountTotal || 0), 0 ); var t = copyList.find((v) => v.currencyId == item.id); console.log(discountDollar); this.form.receiptAccountList.push({ discountTotal: discountDollar, currencyId: item.id, receivableAmount: Math.round(dollar), writeOffRate: item.id == this.showCurrencyId ? 1 : this.getRate(item.id, this.showCurrencyId), platformAccountId: t?.platformAccountId || "", collectionCurrencyId: item.id, collectionRate: 1, }); this.calculationCount(NP.minus(dollar, discountDollar), item.id); } }); if (this.form.receiptAccountList.length > 0) { // totalAmount const totalt = this.form.receiptAccountList.reduce( (total, currentValue) => NP.plus(total, currentValue.writeOffAmount || 0), 0 ); this.form.receiptAccountList = [ ...this.form.receiptAccountList, { type: "total", writeOffAmount: totalt.toFixed(2), collectionAmount: [], }, ]; this.form.receivableTotalAmount = totalt.toFixed(2); } // receiptAccountList: [ // { currencyId: 1, receivableAmount: 0, writeOffRate: 1, writeOffAmount: 999, platformAccountId: '', currencyId: '', rate: 1, collectionAmount: 0 }, // { currencyId: 2, receivableAmount: 0, writeOffRate: 1, writeOffAmount: 999, platformAccountId: '', currencyId: '', rate: 1, collectionAmount: 0 }, // { currencyId: 3, receivableAmount: 0, writeOffRate: 1, writeOffAmount: 999, platformAccountId: '', currencyId: '', rate: 1, collectionAmount: 0 }, // ] if (this.showCurrencyId === 1) { // 美元 // const usCount = NP.plus(dollar, NP.times(this.RMBtoUS(), rmb), NP.times(this.NANtoUS(), naira)) // this.form.receivableDetailList[0].rate = 1 // this.form.receivableDetailList[0].amount = usCount // this.form.receivableDetailList[1].rate || (this.form.receivableDetailList[1].rate = this.UStoRMB()) // this.form.receivableDetailList[2].rate || (this.form.receivableDetailList[2].rate = this.UStoNAN()) // this.form.receivableTotalAmount = usCount // this.calculationCount(usCount) } else if (this.showCurrencyId === 2) { // 人民币 // const rmbCount = NP.plus(rmb, NP.times(this.UStoRMB(), dollar), NP.times(this.NANtoRMB(), naira)) // this.form.receivableDetailList[1].rate = 1 // this.form.receivableDetailList[1].amount = usCount // this.form.receivableDetailList[0].rate || (this.form.receivableDetailList[0].rate = this.RMBtoUS()) // this.form.receivableDetailList[2].rate || (this.form.receivableDetailList[2].rate = this.RMBtoNAN()) // this.form.receivableTotalAmount = rmbCount // this.calculationCount(rmbCount) } else if (this.showCurrencyId === 3) { // 奈拉 // const nairaCount = NP.plus(naira, NP.times(this.UStoNAN(), dollar), NP.times(this.RMBtoNAN(), rmb)) // this.form.receivableDetailList[2].rate = 1 // this.form.receivableDetailList[2].amount = nairaCount // this.form.receivableDetailList[0].rate || (this.form.receivableDetailList[0].rate = this.NANtoUS()) // this.form.receivableDetailList[1].rate || (this.form.receivableDetailList[1].rate = this.NANtoRMB()) // this.form.receivableTotalAmount = nairaCount // this.calculationCount(nairaCount) } this.$set(this.form, "receiptAccountList", [ ...this.form.receiptAccountList, ]); }, calculationCount(usCount, type) { const index = this.form.receiptAccountList.findIndex( (v) => v.currencyId == type ); const t = this.form.receiptAccountList[index]; if (t) { t.writeOffAmount = NP.times(t.writeOffRate || 0, usCount).toFixed(2); this.rateChange(t, index); } }, RMBtoUS() { return NP.divide( 100, this.currencyList.find((v) => v.titleEn === "USD").huilv ).toFixed(6); }, NANtoUS() { return NP.times(this.RMBtoUS(), this.NANtoRMB()).toFixed(6); }, UStoRMB() { return NP.divide( this.currencyList.find((v) => v.titleEn === "USD").huilv, 100 ).toFixed(6); }, UStoNAN() { return NP.times(this.RMBtoNAN(), this.UStoRMB()).toFixed(6); }, RMBtoNAN() { return NP.divide( 100, this.currencyList.find((v) => v.titleEn === "NGN").huilv ).toFixed(6); }, NANtoRMB() { return NP.divide( this.currencyList.find((v) => v.titleEn === "NGN").huilv, 100 ).toFixed(6); }, customerChange(value) { if (this.flag || !value) { this.flag = false; return; } this.form.customerName = value.payerName ? value.payerName : value.name; this.form.customerId && getCustomer(this.form.customerId).then((res) => { this.form = { ...this.form, invoice: res.data.invoiceTitle, taxpayer: res.data.licenseNumber, accountBank: res.data.bank, accountName: res.data.bankNumber, projectName: res.data.project, taxRate: res.data.taxRate, addressPhone: `${res.data.billingAddress || ""}/${ res.data.billingTell || "" }`, }; }); }, cancelDiscount() { this.discountVisible = false; this.discountForm = {}; this.selectListRow = {}; }, addDiscount(row, index) { this.discountVisible = true; this.selectListRow = { ...row }; console.log(this.selectListRow); this.selectListIndex = index; this.$set( this.discountForm, "time", dayjs().format("YYYY-MM-DD HH:mm:ss") ); getReceivableDiscountLogById({ id: row.id }).then((res) => { if (res.data?.creatorName) { this.$set( this.discountForm, "time", dayjs(res.data.createTime).format("YYYY-MM-DD HH:mm:ss") ); this.$set(this.discountForm, "discountTotal", res.data.discountTotal); this.$set( this.discountForm, "discountRemark", res.data.discountRemark ); this.$set(this.discountForm, "author", res.data.creatorName); this.opnotice = true; } else { this.opnotice = false; this.$set(this.discountForm, "discountTotal", ""); this.$set(this.discountForm, "discountRemark", ""); this.$set(this.discountForm, "author", ""); } }); }, saveDiscount() { console.log(this.discountForm); // this.selectListRow.id if ( this.discountForm.discountTotal === 0 || !this.discountForm.discountTotal ) { this.$modal.msgError(this.$t("优惠金额不能为空")); return; } if ( this.discountForm.discountRemark === 0 || !this.discountForm.discountRemark ) { this.$modal.msgError(this.$t("优惠原因不能为空")); return; } const params = { id: this.selectListRow.id, discountTotal: this.discountForm.discountTotal, discountRemark: this.discountForm.discountRemark, orderNo: this.selectListRow.orderNo, orderId: this.selectListRow.orderId, taxPoint: this.selectListRow.taxPoint, taxAmount: this.selectListRow.taxAmount, }; updateReceivableDiscountById(params).then((res) => { if (this.selectListRow.discountTotal) { this.$modal.msgSuccess(this.$t("修改成功")); } else { this.$modal.msgSuccess(this.$t("新增成功")); } // if(this.id>0){ // getInvoicingItem({ id: this.id }).then(res => { // this.list = [...res.data] // this.cancelDiscount() // this.calculation() // }) // }else{ var discount = this.list[this.selectListIndex]; discount["discountTotal"] = this.discountForm.discountTotal; discount["discountRemark"] = this.discountForm.discountRemark; setTimeout(() => { // getReceivableInfoByIds({ id: this.selectListRow.id }).then(res => { this.$set(this.list, this.selectListIndex, { ...discount }); this.cancelDiscount(); this.calculation(); // }) }, 1000); // } }); }, getList() { this.loading1 = true; // 处理查询参数 let params = { ...this.queryParams }; this.addBeginAndEndTime(params, this.dateType, "createTime"); // 执行查询 getReceivableList(params).then((response) => { this.orderData = response.data.list; this.dialogTableKey++; this.total = response.data.total; this.loading1 = false; this.$nextTick(() => { this.list.forEach((itm) => { const t = this.orderData.find((v) => v.id == itm.id); t && this.$refs.multipleTable.toggleRowSelection(t, true); }); }); }); }, /** 新增按钮操作 */ handleAdd() { this.queryParams.customerId = this.form.customerId; this.multipleSelection = this.list; this.open = true; }, hiddenDialog() { this.open = false; this.queryParams.customerId = ""; }, changePlatformAccountId(platformAccountId, index) { this.form.receiptAccountList[index].platformAccountId = platformAccountId; }, submitForm(addType) { // const params = {...this.form} const params = JSON.parse(JSON.stringify(this.form)); params.addType = addType; // params.receiptAccountList = params.receiptAccountList.map(v => Object.assign(v, { })) if (!params.customerId) { this.saveBtnLoading = false; this.$modal.msgError(this.$t("客户不能为空")); return; } if (!params.departmentId) { this.saveBtnLoading = false; this.$modal.msgError(this.$t("部门不能为空")); return; } if (!params.salesmanId) { this.saveBtnLoading = false; this.$modal.msgError(this.$t("业务员不能为空")); return; } if (params.openInvoice != 0 && params.openInvoice != 1) { console.log(params.openInvoice); this.saveBtnLoading = false; this.$modal.msgError(this.$t("请选择是否需要开票")); return; } if (this.list && this.list.length > 0) { params.receivableVOList = this.list; } else { this.saveBtnLoading = false; this.$modal.msgError(this.$t("请添加未收客户款项")); return; } // params.receiptAccountList.length = params.receiptAccountList.length - 1 var saveStatus = true; var writeStatus = true; var reatStatus = true; params.receiptAccountList.forEach((v) => { if (v.type != "total") { if (!v.platformAccountId) { saveStatus = false; } if (!v.writeOffRate) { writeStatus = false; } if (!v.collectionRate) { reatStatus = false; } var bankname = this.bankData.filter( (item) => item.id == v.platformAccountId ); if (bankname.length > 0) { v.platformAccountName = bankname[0].baAccountName; v.platformAccountNo = bankname[0].baAccountNum; v.platformAccountBlankName = bankname[0].baBankName; } delete v.discountTotal; v.writeOffRate = Number(v.writeOffRate); } }); if (!writeStatus) { this.$modal.msgError( this.$t("核销基准币种汇率不能为0,请输入正确的汇率") ); return; } if (!saveStatus) { this.$modal.msgError(this.$t("请添加收款账户")); return; } if (!reatStatus) { this.$modal.msgError(this.$t("期望收款汇率不能为0,请输入正确的汇率")); return; } delete params.receivableDetail; if (addType === 1) { this.saveBtnLoading = true; params.receiptAccountList.splice( params.receiptAccountList.length - 1, 1 ); if (this.id && this.id != 0) { params.updateType = 0; updateReceipt(params) .then((res) => { this.$modal.msgSuccess(this.$t("提交成功")); this.$store.dispatch("tagsView/delCurrentView"); }) .finally(() => { this.saveBtnLoading = false; }); } else { params.currencyId = this.showCurrencyId; createReceipt(params) .then((res) => { this.$modal.msgSuccess(this.$t("保存成功")); this.$store.dispatch("tagsView/delCurrentView"); }) .finally(() => { this.saveBtnLoading = false; }); } return; } this.saveBtnLoading = true; params.receiptAccountList.splice(params.receiptAccountList.length - 1, 1); if (this.id && this.id != 0) { // if(params.state==0) params.state = 1 params.updateType = 1; //lanbm 2024-05-20 添加订单ID params.orderId = this.orderId; updateReceipt(params) .then((res) => { this.$modal.msgSuccess(this.$t("修改成功")); this.$store.dispatch("tagsView/delCurrentView"); }) .finally(() => { this.saveBtnLoading = false; }); } else { params.currencyId = this.showCurrencyId; //lanbm 2024-05-20 添加订单ID params.orderId = this.orderId; createReceipt(params) .then((res) => { this.$modal.msgSuccess(this.$t("新增成功")); this.$store.dispatch("tagsView/delCurrentView"); }) .finally(() => { this.saveBtnLoading = false; }); } }, handleSelectionChange(val) { this.multipleSelection = val; }, removedup(arr, batch) { if (!Array.isArray(arr)) { return arr; } if (arr.length == 0) { return []; } let obj = {}; let uniqueArr = arr.reduce(function (total, item) { obj[item[batch]] ? "" : (obj[item[batch]] = true && total.push(item)); return total; }, []); return uniqueArr; }, saveSelectList() { this.multipleSelection.map((v) => { if (!v.taxPoint) { v.taxAmount = v.totalAmount; } }); if (this.list.length > 0) { this.list = this.list.concat(this.multipleSelection); this.list = this.removedup(this.list, "id"); } else { this.list = this.multipleSelection; } this.open = false; this.calculation(); }, deleteListRow(index) { const list = [...this.list]; delete list[index]; this.list = list.filter((v) => v); this.calculation(); }, /** 搜索按钮操作 */ handleQuery() { this.queryParams.page = 1; this.getList(); }, //清空数据 removeData() { this.id = 0; this.flag = false; this.discountForm = { author: "", }; this.$refs.customer.reset(); this.list = []; for (var i in this.form) { if (i == "receiptAccountList") { this.$set(this.form, i, []); } else { this.$set(this.form, i, ""); } } }, }, }; </script> <style scoped lang="scss"> .card { margin-top: 20px; } .dialog-footer { // padding: 40px; text-align: left; } .card-title { font-size: 18px; font-weight: bold; } ::v-deep .el-descriptions-item__label { width: 200px; } .amountCard { ::v-deep .el-descriptions-item__label { width: 20%; } ::v-deep .el-descriptions-item__content { width: 30%; } } .bpm-title { font-size: 20px; font-weight: bold; color: #666; margin: 20px 0; } </style>