Commit 386aceb7 authored by chenwei's avatar chenwei

feat: 财务除报表外修复和新增

parent 762d1eec
......@@ -891,3 +891,41 @@ export function loadBatGNRTReceiptList(data) {
params
})
}
//银行收支明细列表
export function loadBankBalanceDetailsList(data) {
let params = {
pageNo: data.pageNo,
pageSize: data.pageSize
}
return request({
url: "/ecw/BankReceiptDetails/income/page",
method: "post",
data,
params
})
}
// 批量生成收款单
export function handleBankGNRTReceipt(data) {
return request({
url: "/ecw/receipt/batch-gen-receipt",
method: "post",
data
})
}
// 财务-批量生成收款单费用明细列表
export function loadReceivablePage(data) {
let params = {
page: data.page,
rows: data.rows
}
return request({
url: "/ecw/receivable/batch-gen-receipt/receivable/page",
method: "post",
data,
params
})
}
......@@ -4821,5 +4821,21 @@
"批量提交审核": "Batch submission for review",
"导入提示信息,请确认是否提交": "Import prompt information, please confirm whether to submit",
"银行收款信息模板": "Template of bank collection information",
"仅允许导入xls、xlsx格式文件。": "Only xls and xlsx format files are allowed to be imported."
"仅允许导入xls、xlsx格式文件。": "Only xls and xlsx format files are allowed to be imported.",
"缺少生成收款单的必要的信息": "Lack of information necessary to generate receipts",
"请先选择需要批量处理的订单": "Please select the order to be processed in bulk first",
"设置开票信息": "Set billing information",
"已选择订单/提单": "Order/bill of lading has been selected",
"设置是否开票": "Sets whether to invoice",
"批量设置收款单信息": "Set the receipt information in batches",
"批量生成收款单": "Batch generate receipt",
"设置收款单信息": "Set the receipt information",
"运输信息": "transport information",
"付款名称": "Name of payment",
"收款明细税率%": "Collection details tax rate %",
"期望收款账号": "Expected collection account number",
"开票税率": "Tax rate of billing",
"汇率有效期": "Validity period of exchange rate",
"收款明细税率": "Collection details tax rate",
"请输入收款明细税率": "Please enter the tax rate of the collection details"
}
......@@ -283,7 +283,8 @@ export const DICT_TYPE = {
RECEIPT_DETAIL_STATUS: "receipt_detail_status", //明细状态
INVOICEING_LINK: "invoicing_link", //开票环节
RECEIPT_GENERATE_PATH: "receipt_generate_path", //收款单生成路径
RECEIPT_LINK: "receipt_link" //应收款日志环节
RECEIPT_LINK: "receipt_link", //应收款日志环节
ECW_INCOME_RELATION_SYMBOL: "income_relation_symbol" //银行收支明细查询关系符号
}
/**
......
<template>
<div class="app-container">
<el-card>
<el-form ref="queryForm" :model="queryParams" label-width="100px" label-position="left" :inline="true">
<el-form-item :label="$t('开户银行')" style="margin-bottom: 0; margin-top: 20px" prop="platformAccountIds">
<el-select multiple clearable v-model="queryParams.platformAccountIds" :placeholder="$t('开户银行')" style="width: 220px">
<el-option v-for="item in bankData" :key="item.id" :label="item.baAccountName + '(' + item.baAccountNum + ')'" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item :label="$t('支/收')" style="margin-bottom: 0; margin-top: 20px" prop="isIncome">
<el-select clearable v-model="queryParams.isIncome" :placeholder="$t('请选择')" style="width: 220px">
<el-option :label="$t('收')" :value="0" />
<el-option :label="$t('支')" :value="1" />
</el-select>
</el-form-item>
<el-form-item :label="$t('金额')" style="margin-bottom: 0; margin-top: 20px">
<el-form-item prop="relationSymbol">
<dict-selector :type="DICT_TYPE.ECW_INCOME_RELATION_SYMBOL" clearable style="width: 130px" v-model="queryParams.relationSymbol" />
</el-form-item>
<el-form-item prop="amount">
<el-input v-model="queryParams.amount" style="width: 130px" placeholder="请输入数值" clearable />
</el-form-item>
</el-form-item>
<el-form-item :label="$t('关联单号')" prop="relationNo" style="margin-bottom: 0; margin-top: 20px">
<el-input v-model="queryParams.relationNo" style="width: 130px" placeholder="请输入" clearable />
</el-form-item>
<el-form-item :label="$t('交易日期')" prop="tradeDate" style="margin-bottom: 0; margin-top: 20px">
<el-date-picker v-model="queryParams.tradeDate" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
</el-form-item>
<el-form-item style="margin-bottom: 0; margin-top: 20px">
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t("搜索") }}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{ $t("重置") }}</el-button>
</el-form-item>
</el-form>
</el-card>
<div class="mb8 showBar pad-t" v-loading="loading">
<el-descriptions class="margin-top barTop" :column="1" :size="size" border>
<el-descriptions-item>
<template slot="label"> {{ $t("收:") }}: </template>
<span class="unit" v-for="item in currentAmount" :key="item.currencyId">{{ getCurrencySymbol(item.currencyId * 1) }}{{ item.amount }}</span>
</el-descriptions-item>
</el-descriptions>
</div>
<div class="table-box">
<el-table v-loading="loading" :data="list" border>
<el-table-column type="index" :index="indexMethod" />
<el-table-column :label="$t('开户银行')" width="160" align="center" prop="accountBankName"> </el-table-column>
<el-table-column :label="$t('支/收')" width="160" align="center">
<template slot-scope="scope">
<span v-if="scope.row.isIncome == 0"> {{ $t("") }}</span>
<span v-else>{{ $t("") }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('金额')" width="160" align="center">
<template slot-scope="{ row }"> {{ getCurrencySymbol(row.currencyId * 1) }}{{ row.amount }} </template>
</el-table-column>
<el-table-column :label="$t('交易关联单号')" width="200" align="center">
<template slot-scope="{ row }">
<div v-for="item in row.orderInfoList">
<router-link :to="`/financial/receiptDetail?id=${row.receiptId}`" class="link-type"> {{ row.receiptNo }} </router-link> -
<router-link :to="`/order/detail?orderId=${item.orderId}`" class="link-type"> {{ item.tidanNo }} </router-link>
</div>
</template>
</el-table-column>
<el-table-column :label="$t('交易日期')" prop="amountDate" width="160" align="center" />
<el-table-column :label="$t('备注')" align="center" prop="remark" />
<el-table-column :label="$t('账号余额')" align="center" width="200">
<template slot-scope="{ row }">
<span class="unit" v-for="item in row.accountBalance" :key="item.currencyId">{{ getCurrencySymbol(item.currencyId * 1) }}{{ item.amount }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('详情')" width="160" align="center">
<template slot-scope="{ row }">
<el-button size="small" type="primary" v-if="row.receiptId" @click="goBankReceiptDetailsList(row)">{{ $t("查看") }}</el-button>
<template v-else>-</template>
</template>
</el-table-column>
</el-table>
</div>
<el-descriptions class="margin-top pad-t" v-loading="loading" :column="2" border>
<el-descriptions-item>
<template slot="label"> {{ $t("汇总") }}: </template>
<span class="unit" v-for="item in totalAmount" :key="item.currencyId">{{ getCurrencySymbol(item.currencyId * 1) }}{{ item.amount }}</span>
</el-descriptions-item>
</el-descriptions>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" @pagination="getList" />
</div>
</template>
<script>
import { loadBankBalanceDetailsList } from "@/api/ecw/financial"
import { getBankAccountPage } from "@/api/ecw/bankAccount"
import { mapGetters } from "vuex"
export default {
data() {
return {
total: 0,
loading: true,
currentAmount: [],
totalAmount: [],
queryParams: {
platformAccountIds: [],
isIncome: "",
tradeDate: "",
amount: "",
relationSymbol: "",
pageNo: 1,
pageSize: 10
},
bankData: []
}
},
async created() {
const { data } = await getBankAccountPage({ pageNo: 1, pageSize: 1000 })
this.bankData = data.list
this.handleQuery()
},
computed: {
...mapGetters(["getCurrencySymbol"])
},
methods: {
goBankReceiptDetailsList(row) {
this.$router.push({ path: "/financial/BankReceiptDetails", query: { receiptNo: row.receiptNo } })
},
indexMethod(index) {
return index * this.queryParams.pageNo + 1
},
resetQuery() {
this.$refs["queryForm"].resetFields()
this.queryParams.pageNo = 1
this.queryParams.pageSize = 10
this.handleQuery()
},
handleQuery() {
this.loading = true
this.$nextTick(() => {
this.queryParams.pageNo = 1
this.getList()
})
},
async getList() {
const params = this.removeEmpty({ ...this.queryParams })
this.addBeginAndEndTime(params, params.tradeDate, "AmountDate")
console.log("sdsdd", params)
const { data } = await loadBankBalanceDetailsList(params)
this.list = data.list
this.loading = false
this.totalAmount = data.totalAmount
this.currentAmount = data.currentAmount
this.total = data.total
}
}
}
</script>
<style lang="scss" scoped>
.table-box {
padding: 0 10px;
}
.pad-t {
padding: 10px 0;
}
.unit {
padding-left: 10px;
}
</style>
This diff is collapsed.
......@@ -96,7 +96,14 @@
<dict-tag :type="DICT_TYPE.ORDER_STATUS" :value="row.orderStatus" />
</template>
</el-table-column>
<el-table-column :label="$t('应收汇总')"> </el-table-column>
<el-table-column :label="$t('应收汇总')">
<template slot-scope="{ row }">
<div v-for="item in row.receivableAmount">
{{ getCurrencySymbol(item.countryId) }}
{{ item.amount }}
</div>
</template>
</el-table-column>
<el-table-column :label="$t('自编号状态')" prop="selfNoStatus">
<template slot-scope="{ row }">
<dict-tag :type="DICT_TYPE.BOX_ORDER_SHIPMENT_STATE" value="row.selfNoStatus"></dict-tag>
......@@ -106,9 +113,9 @@
<el-table-column :label="$t('费用明细')" fixed="right">
<template v-slot="{ row }">
<div>
<!-- <router-link :to="`/customer/query/${row.payerId}`" class="link-type"> -->
{{ $t("费用明细") }}
<!-- </router-link> -->
<router-link :to="`/financial/orderItemCostDetails/${row.orderId}/${row.drawee}`" class="link-type">
{{ $t("费用明细") }}
</router-link>
</div>
</template>
</el-table-column>
......@@ -118,6 +125,7 @@
</template>
<script>
import { mapGetters } from "vuex"
import { getWarehouseList } from "@/api/ecw/warehouse"
import { getRegionList } from "@/api/ecw/order"
import { loadBatGNRTReceiptList } from "@/api/ecw/financial"
......@@ -132,6 +140,7 @@ export default {
objWareHouseList: [],
cityList: [],
countryList: [],
multipleSelectedList: [],
queryParams: {
departureWareHouseId: [], //始发地
destCountry: [], //目的国
......@@ -143,6 +152,9 @@ export default {
}
}
},
computed: {
...mapGetters(["getCurrencySymbol"])
},
watch: {
"queryParams.destCountry": {
handler(val, oldVal) {
......@@ -175,7 +187,9 @@ export default {
this.getList()
},
methods: {
handleSelectionChange() {},
handleSelectionChange(val) {
this.multipleSelectedList = val
},
getWareHouseLabel(id) {
const houseItem = this.warehouseList.filter((item) => {
return item.id == id
......@@ -234,7 +248,16 @@ export default {
this.getList()
})
},
batGNRTReceipt() {},
batGNRTReceipt() {
if (this.multipleSelectedList.length == 0) {
this.$modal.msgError(this.$t("请先选择"))
return
}
const ids = this.multipleSelectedList.map((item) => {
return item.orderId
})
this.$router.push({ path: "/financial/batchGenerateReceipt/" + ids })
},
getList() {
this.loading = true
loadBatGNRTReceiptList(this.queryParams).then((response) => {
......
......@@ -232,7 +232,7 @@ export default {
let p2 = []
for (var i = 0; i < this.ids.length; i++) {
var obj = {}
obj.id = this.ids[i]
obj.id = this.ids[i].bmpId
obj.comment = this.form.comment
p2.push(obj)
}
......@@ -257,7 +257,7 @@ export default {
batchApprove(key) {
if (this.ids.length == 0) {
//this.modal.msgSuccess
this.$message.error(this.$t("请选择需要批量不通过的任务。"))
this.$message.error(this.$t("请选择需要批量操作的任务。"))
return
}
this.form.comment = ""
......
......@@ -173,6 +173,7 @@
</el-table-column>
<!-- 本次核销金额(美元) -->
<el-table-column
width="160"
:label="
$t('本次核销金额({currency})', {
currency: getBaseCurrencynName(bankReceiptDetails.writeOffCurrencyId)
......@@ -180,7 +181,7 @@
"
>
<template slot-scope="scope">
<el-input-number @change="changeCurrentItemWirteOff(scope.row.id)" v-if="statusKey != 'view' && bankReceiptDetails.writeOffAmount" :min="0" :precision="2" :controls="false" v-model="scope.row.writeOffAmount"></el-input-number>
<el-input-number style="width: 138px" @change="changeCurrentItemWirteOff(scope.row.id)" v-if="statusKey != 'view' && bankReceiptDetails.writeOffAmount" :min="0" :precision="2" :controls="false" v-model="scope.row.writeOffAmount"></el-input-number>
<span v-else>{{ scope.row.writeOffAmount }}</span>
</template>
<!-- writeOffAmount -->
......@@ -398,6 +399,7 @@ export default {
},
saveFrom() {
const params = { ...this.bankReceiptDetails }
params.writeOffCurrencyId = this.bankReceiptDetails.writeOffCurrencyId
params.receivableWriteOffList = []
try {
let totalInput = 0
......
......@@ -366,9 +366,7 @@
</el-form-item>
</el-descriptions-item>
<el-descriptions-item :label="$t('开票资料备注')">
<el-form-item label="" label-width="0" style="margin-bottom: 0">
<el-input v-model="form.invoiceRemark" maxlength="500"></el-input>
</el-form-item>
<el-input type="textarea" rows="1" show-word-limit style="width: 78%" v-model="form.invoiceRemark" maxlength="500"></el-input>
</el-descriptions-item>
</el-descriptions>
</el-card>
......@@ -1070,8 +1068,8 @@ export default {
// this.list[index].exchangeRate = row.writeOffRate
// this.list[index].baseAmount = row.writeOffAmount
// console.log("listdd", this.list)
console.log("listdde", row)
this.form.receiptAccountList[index + 1].writeOffAmount = writeOffAmountTotal
this.form.receiptAccountList[this.form.receiptAccountList.length - 1].writeOffAmount = writeOffAmountTotal
},
rateChange(row, index) {
if (row.collectionRate == 0 && parseInt(row.collectionRate) === 0) {
......
......@@ -28,7 +28,7 @@
</el-card>
<div class="tableTop">
<el-table v-loading="loading" :data="invoiceList" border>
<el-table-column :label="$t('开票编号')" width="160" align="center" prop="invoiceNo">
<el-table-column :label="$t('开票编号')" fixed="left" width="160" align="center" prop="invoiceNo">
<template slot-scope="{ row }">
<router-link
:to="{
......@@ -44,7 +44,7 @@
</router-link>
</template>
</el-table-column>
<el-table-column :label="$t('收款单号')" width="160" align="center" prop="receiptNo">
<el-table-column :label="$t('收款单号')" fixed="left" width="160" align="center" prop="receiptNo">
<template slot-scope="{ row }">
<router-link
:to="{
......@@ -59,7 +59,7 @@
</router-link>
</template>
</el-table-column>
<el-table-column :label="$t('申请日期')" width="160" align="center" prop="invoiceInfoSaveTime" />
<el-table-column :label="$t('申请日期')" width="160" align="center" prop="createTime" />
<el-table-column :label="$t('申请人/部门')" width="200" align="center">
<template slot-scope="{ row }">
<div>{{ row.applyUserName }}/{{ row.departmentName }}</div>
......
......@@ -200,7 +200,7 @@
</el-descriptions>
</el-card>
<!-- 开票信息 -->
<el-card class="margin-top-card" v-if="$route.query.key == 'view' || $route.query.key == 'submitInfo' || $route.query.key == 'editInfo' || $route.query.key == 'delInfo'">
<el-card class="margin-top-card" v-if="($route.query.key == 'view' && form.invoiceNumber) || $route.query.key == 'submitInfo' || $route.query.key == 'editInfo' || $route.query.key == 'delInfo'">
<div slot="header" class="card-title">{{ $t("开票信息") }}</div>
<el-descriptions :column="3" border>
<el-descriptions-item :label="$t('发票号码')">
......@@ -611,6 +611,7 @@ export default {
invoiceTime: this.form.invoiceTime,
invoiceInfoRemark: this.form?.invoiceInfoRemark || ""
}
await this.$modal.confirm(this.$t(`确认提交开票吗?`))
const data = await updateInvoiceApplicationInfo(params)
if (data.code === 0) {
this.$message({
......
<template>
<div class="app-container">
<el-card class="card-form">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="120px" class="card">
<el-form-item :label="$t('收款类型')" prop="collectionType">
<dict-selector ref="dictMethod" multiple v-model="queryParams.collectionType" :type="DICT_TYPE.PAYMENT_TYPE"></dict-selector>
</el-form-item>
<el-form-item :label="$t('费用来源')" prop="feeSource">
<dict-selector ref="dictMethod" multiple v-model="queryParams.feeSource" :type="DICT_TYPE.ECW_FEE_SOURCE"></dict-selector>
</el-form-item>
<el-form-item :label="$t('收入类型')" prop="feeType">
<dict-selector ref="dictMethod" multiple v-model="queryParams.feeType" :type="DICT_TYPE.FEE_TYPE"></dict-selector>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ $t("搜索") }}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{ $t("重置") }}</el-button>
</el-form-item>
</el-form>
</el-card>
<div class="mb8 showBar pad-t">
<el-descriptions class="margin-top barTop" :column="1" :size="size" border>
<el-descriptions-item label-class-name="my-label-total">
<template slot="label"> {{ $t("合计金额:") }}: </template>
<span class="unit" v-for="item in totalActualAmount" :key="item.currencyId"> {{ $t("总金额") }}{{ getCurrencySymbol(item.currencyId * 1) }}{{ item.amount }}</span>
</el-descriptions-item>
</el-descriptions>
</div>
<div class="table">
<!-- 礼品列表 -->
<el-table ref="multipleTable" v-loading="loading" :data="list">
<el-table-column prop="titleZh" :label="$t('品名')" align="center">
<template slot-scope="{ row }">
{{ $l(row, "title") }}
</template>
</el-table-column>
<el-table-column prop="num" :label="$t('箱数')" width="100" align="center"></el-table-column>
<el-table-column prop="volumeOrWeight" :label="$t('体积/重量')" width="180" align="center">
<template slot-scope="{ row }">
<div>{{ row.volume }}m³/{{ row.weight }}kg</div>
</template>
</el-table-column>
<el-table-column :label="$t('付款方')" width="160" align="center">
<template slot-scope="scope">
<span v-if="scope.row.drawee == 3"> {{ $t("自定义") }}</span>
<span v-else> {{ scope.row.drawee == 1 ? $t("发货人") : $t("收货人") }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('收款类型')" align="center">
<template slot-scope="{ row }">
<dict-tag :type="DICT_TYPE.PAYMENT_TYPE" :value="row.collectionType" />
</template>
</el-table-column>
<el-table-column :label="$t('费用来源')" prop="feeSource" align="center">
<template slot-scope="{ row }">
<dict-tag :type="DICT_TYPE.ECW_FEE_SOURCE" :value="row.feeSource" />
</template>
</el-table-column>
<el-table-column prop="incomeType" :label="$t('收入类型')" width="120" align="center">
<template slot-scope="{ row }">
<div>
<dict-tag :type="DICT_TYPE.FEE_TYPE" :value="row.feeType" />
</div>
</template>
</el-table-column>
<el-table-column :label="$t('单价金额')" prop="unitPrice" align="center">
<template slot-scope="{ row }">{{ getCurrencySymbol(row.currencyId * 1) }} {{ row.unitPrice }} </template>
</el-table-column>
<el-table-column :label="$t('总金额')" prop="totalAmount" align="center">
<template slot-scope="{ row }"> {{ getCurrencySymbol(row.currencyId * 1) }}{{ row.totalAmount }} </template>
</el-table-column>
</el-table>
</div>
<!-- //分页列表 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.page" :limit.sync="queryParams.rows" @pagination="getList" />
</div>
</template>
<script>
import { mapGetters } from "vuex"
import { loadReceivablePage } from "@/api/ecw/financial"
export default {
// this.$route.params.id.split(",")
data() {
return {
list: [],
size: "small",
loading: true,
total: 0,
totalActualAmount: [],
queryParams: {
collectionType: [],
feeSource: [],
feeType: [],
orderId: this.$route.params.id,
paymentUser: this.$route.params.drawee,
page: 1,
rows: 10
}
}
},
computed: {
...mapGetters(["getCurrencySymbol"])
},
created() {
this.getList()
},
methods: {
async getList() {
const params = this.removeEmpty({ ...this.queryParams })
const { data } = await loadReceivablePage(params)
this.list = data.list
this.loading = false
this.totalActualAmount = data.totalActualAmount
this.total = data.total
},
resetQuery() {
this.$refs["queryForm"].resetFields()
this.queryParams.page = 1
this.queryParams.rows = 10
this.handleQuery()
},
handleQuery() {
this.loading = true
this.$nextTick(() => {
this.queryParams.page = 1
this.getList()
})
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .card-form .el-form-item {
margin-bottom: 0;
}
.pad-t {
padding: 10px 0;
}
::v-deep .my-label-total {
width: 300px;
}
</style>
......@@ -7,7 +7,11 @@
<el-descriptions-item :label="$t('状态')">
<dict-tag :type="DICT_TYPE.ECW_RECEIPT_STATE" :value="form.state" />
</el-descriptions-item>
<el-descriptions-item :label="$t('客户')">{{ form.customerName }}</el-descriptions-item>
<el-descriptions-item :label="$t('客户')">
<router-link :to="'/customer/query/' + form.customerId">
{{ form.customerName }}
</router-link>
</el-descriptions-item>
<el-descriptions-item :label="$t('部门')">{{ form.departmentName }}</el-descriptions-item>
<el-descriptions-item :label="$t('业务员')">{{ form.salesmanName }}</el-descriptions-item>
<!-- <el-descriptions-item :label="$t('手续费(RMB)')">{{ form.feeRate }}</el-descriptions-item> -->
......@@ -1488,6 +1492,7 @@ export default {
},
saveFrom() {
const params = { ...this.addForm }
params.writeOffCurrencyId = this.list[0].baseCurrencyId
params.receivableWriteOffList = []
try {
let totalInput = 0
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment