Commit 40cbc823 authored by 吴滔's avatar 吴滔

详情联调/开票联调

parent 814cf115
......@@ -191,6 +191,24 @@ export function deleteReceipt(id) {
})
}
// 获得收款单开票信息
export function getReceiptInvoicing(id) {
return request({
url: '/ecw/receipt/invoicing/info/' + id,
method: 'get'
})
}
// 更新收款单开票信息
export function updateReceiptInvoicing(data) {
return request({
url: '/ecw/receipt/invoicing/info',
method: 'put',
data: data
})
}
// 更新应付款
export function updatePayable(data) {
return request({
......
......@@ -27,7 +27,6 @@ export default {
download0(data, fileName, mineType) {
// 创建 blob
let blob = new Blob([data], {type: mineType});
debugger
// 创建 href 超链接,点击进行下载
window.URL = window.URL || window.webkitURL;
let href = URL.createObjectURL(blob);
......
......@@ -149,12 +149,11 @@
<dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" />
</template>
</el-table-column>
<el-table-column label="核销比例" align="center" prop="totalAmount">
<!-- <el-table-column label="核销比例" align="center" prop="totalAmount">
<template slot-scope="scope">
<span>{{ scope.row.totalAmount }}%</span>
<!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> -->
</template>
</el-table-column>
</el-table-column> -->
<!-- <el-table-column label="已收金额" align="center" prop="unitPrice">
<template slot-scope="scope">
<span>{{ scope.row.unitPrice }}</span>
......
......@@ -2,72 +2,94 @@
<div class="app-container">
<div slot="header" class="card-title">开票</div>
<!-- 搜索工作栏 -->
<el-form
:model="invoiceData"
ref="queryForm"
size="small"
:inline="true"
label-width="120px"
class="card"
>
<el-card class="card">
<el-form ref="queryForm" size="small" :inline="true" label-width="100px" class="card">
<el-form-item label="发票号码:" >
{{invoiceData.sn}}
<el-form-item label="发票号码:" prop="invoiceNumber" :rules="{ required: true, trigger: ['blur'], message: '发票号码不能为空' }">
<el-input v-model="invoiceData.invoiceNumber"></el-input>
</el-form-item>
<el-form-item label="开票类型:" >
<dict-selector :type="DICT_TYPE.ECW_INVOICING_TYPE" v-model="invoiceData.invoicingTypeId" />
<el-form-item label="开票类型:" prop="invoicingTypeId" :rules="{ required: true, trigger: ['blur', 'change'], message: '开票类型不能为空' }">
<dict-selector
:type="DICT_TYPE.ECW_INVOICING_TYPE"
v-model="invoiceData.invoicingTypeId"
/>
</el-form-item>
</el-form>
</el-card>
<el-card class="card">
<div slot="header" class="card-title">开票资料</div>
<el-table v-loading="loading" :data="invoiceData.info" border class="card">
<el-table-column label="发票抬头" align="center" prop="taxpayer" />
<el-table-column label="纳税人识别号" align="center" prop="taxpayer" />
<el-table-column label="地址" align="center" prop="orderNo" />
<el-table-column label="开户行" align="center" prop="customerName" />
<el-table-column label="税率" align="center">
<el-descriptions title="" direction="vertical" :column="6" border>
<el-descriptions-item label="发票抬头">{{ invoiceData.invoice }}</el-descriptions-item>
<el-descriptions-item label="纳税人识别号">{{ invoiceData.taxpayer }}</el-descriptions-item>
<el-descriptions-item label="地址">{{ invoiceData.addressPhone }}</el-descriptions-item>
<el-descriptions-item label="开户行">{{ invoiceData.accountBank }}</el-descriptions-item>
<el-descriptions-item label="税率">
<el-form-item label="">
<el-input v-model="invoiceData.taxRate"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="项目">
<el-form-item label="">
<el-input v-model="invoiceData.projectName"></el-input>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
</el-card>
<el-card class="card">
<el-table
v-loading="loading"
:data="list"
border
class="card"
show-summary
:summary-method="getSummaries"
>
<el-table-column label="订单号" align="center" prop="orderNo" />
<el-table-column label="品名" align="center" prop="titleZh">
<template slot-scope="scope">
<el-input v-model="scope.row.taxRate" type="number" min="0"></el-input>
{{ scope.row.titleZh || scope.row.titleEn ? scope.row.titleZh + "(" + scope.row.titleEn + ")" : '' }}
</template>
</el-table-column>
<el-table-column label="项目" align="center">
<el-table-column label="箱数" align="center" prop="num" />
<el-table-column label="体积/重量" align="center" prop="weight"></el-table-column>
<el-table-column label="费用类型" align="center" prop="feeType">
<template slot-scope="scope">
<el-input v-model="scope.row.projectName" type="text"></el-input>
<dict-tag
:type="DICT_TYPE.ECW_TRANSPORT_TYPE"
:value="scope.row.feeType"
></dict-tag>
</template>
</el-table-column>
</el-table>
</el-card>
<el-card class="card">
<el-table v-loading="loading" :data="invoiceData.list" border class="card" show-summary :summary-method="getSummaries">
<el-table-column label="订单号" align="center" prop="orderSn" />
<el-table-column label="品名" align="center" prop="prodName" />
<el-table-column label="箱数" align="center" prop="num" />
<el-table-column label="体积/重量" align="center">
<el-table-column label="单价" align="center" prop="unitPrice" />
<el-table-column label="总金额" align="center" prop="totalAmount" />
<el-table-column label="税额" align="center">
<template slot-scope="scope">
<span>{{scope.row.volume+"m³/"+scope.row.weight+"kg"}}</span>
</template>
</el-table-column>
<el-table-column label="费用类型" align="center" prop="feeType">
<el-table-column label="价税合计" align="center">
<template slot-scope="scope">
<dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="scope.row.feeType"></dict-tag>
</template>
</el-table-column>
<el-table-column label="单价" align="center" prop="num" />
<el-table-column label="金额" align="center" prop="num" />
<el-table-column label="税额" align="center" prop="num" />
<el-table-column label="价税合计" align="center" prop="num" />
<div slot="append" class="lastRow">
<div>收款人</div>
<div>111</div>
<div>核销人</div>
<div>222</div>
<div>开票人</div>
<div>333</div>
<div></div>
<div>价税合计大写</div>
<div>444</div>
</div>
</el-table>
</el-card>
<el-descriptions class="card" style="width: 50%;">
<el-descriptions-item label="备注" >
<el-input v-model="invoiceData.remarks" type="text" placeholder="" clearable></el-input>
<el-descriptions class="card" style="width: 50%">
<el-descriptions-item label="备注">
<el-input
v-model="invoiceData.invoicingRemark"
type="text"
placeholder=""
clearable
></el-input>
</el-descriptions-item>
</el-descriptions>
</el-form>
<div slot="footer" class="card">
<el-button type="primary" @click="submitForm">确定</el-button>
</div>
......@@ -75,102 +97,94 @@
</template>
<script>
import { DICT_TYPE } from "@/utils/dict";
import { getReceiptInvoicing, getInvoicingItem, updateReceiptInvoicing } from "@/api/ecw/financial";
import {DICT_TYPE} from '@/utils/dict'
export default {
export default {
name: "OpenInvoice",
components: {
},
components: {},
data() {
return {
loading: false,
invoiceData:{},
}
invoiceData: {},
id: 0,
list: []
};
},
created() {
let that = this
if (this.$route.query.id) {
this.id = this.$route.query.id;
this.getData();
}
},
methods: {
/** 查询列表 */
getList() {
getData() {
this.loading = true;
// 处理查询参数
getReceiptPage().then(response => {
this.invoiceData = response.data;
if(!this.invoiceData.info||this.invoiceData.info.length==0){
this.$modal.msgError("客户开票资料不能为空,请完善客户开票信息");
}
getReceiptInvoicing(this.id).then((res) => {
this.invoiceData = res.data;
this.invoiceData.invoicingTypeId = this.invoiceData.invoicingTypeId || ''
// if (!this.invoiceData.info || this.invoiceData.info.length == 0) {
// this.$modal.msgError("客户开票资料不能为空,请完善客户开票信息");
// }
this.loading = false;
});
getInvoicingItem({ id: this.id }).then(res => {
const t = {
orderNo: '合计',
totalAmount: res.data.reduce((total, curr) => total + curr.totalAmount, 0)
}
this.list = [...res.data, t]
})
},
submitForm(){
submitForm() {
this.$refs.queryForm.validate(valid => {
if (valid) {
updateReceiptInvoicing(this.invoiceData).then(res => {
this.open = false;
this.$modal.msgSuccess("操作成功");
this.$router.back();
})
}
})
},
getSummaries(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '总价';
return;
}else if(index<6){
sums[index] = 'N/A';
return;
}
const values = data.map(item => Number(item[column.property]));
if (!values.every(value => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] += '';
} else {
sums[index] = 'N/A';
}
});
return sums;
}
return ['收款人', this.invoiceData.payeeName, '核销人', this.invoiceData.writeOffName, '开票人', this.invoiceData.issuerName, '', '价税合计大写', 444];
},
}
</script>
},
};
</script>
<style>
.card{
<style scoped lang="scss">
.card {
margin-top: 20px;
}
.dialog-footer{
}
.dialog-footer {
padding: 30px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
height: 160px;
}
.card-title{
}
.card-title {
font-size: 18px;
font-weight: bold;
}
.lastRow{
border-top:1px solid #dfe6ec;
}
.lastRow {
border-top: 1px solid #dfe6ec;
display: flex;
width: 100%;
height: 44px;
text-align: center;
align-items: center;
}
.lastRow div{
flex:1;
}
.lastRow div {
flex: 1;
height: 44px;
line-height: 44px;
border-right:1px solid #dfe6ec;
}
</style>
border-right: 1px solid #dfe6ec;
}
::v-deep .el-form-item--small.el-form-item {
margin-bottom: 0;
}
</style>
......@@ -72,12 +72,11 @@
<dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" />
</template>
</el-table-column>
<el-table-column label="核销比例" align="center" prop="totalAmount">
<!-- <el-table-column label="核销比例" align="center" prop="totalAmount">
<template slot-scope="scope">
<span>{{ scope.row.totalAmount }}%</span>
<!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> -->
</template>
</el-table-column>
</el-table-column> -->
<!-- <el-table-column label="已收金额" align="center" prop="unitPrice">
<template slot-scope="scope">
<span>{{ scope.row.unitPrice }}</span>
......@@ -277,9 +276,9 @@
<el-form-item label="收款单号">{{ form.receiptNo }}</el-form-item>
<el-form-item label="剩余应收金额">
<div>
<div>10000美元</div>
<div>10000美元</div>
<div>10000美元</div>
<div>{{ remainingAmount.usAmount }}美元</div>
<div>{{ remainingAmount.rmbAmount }}人民币</div>
<div>{{ remainingAmount.nairaAmount }}奈拉</div>
</div>
</el-form-item>
<el-form-item label="收款账户" required prop="accountNo" error="收款账户不能为空">
......@@ -324,7 +323,7 @@
v-if="showCurrencyId != addForm.currencyId"
prop="rate"
required
error="实收不能为空"
error="汇率不能为空"
>
<template slot="label">
汇率(<dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="showCurrencyId" />
......@@ -333,7 +332,6 @@
</el-form-item>
<el-form-item
v-if="showCurrencyId != addForm.currencyId"
prop="rate"
>
<template slot="label">
金额(<dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="showCurrencyId" />
......@@ -424,6 +422,11 @@ export default {
nairaCount: 0,
writtenOff: 0,
WriteOffProportion: 0
},
remainingAmount: {
usAmount: 0,
rmbAmount: 0,
nairaAmount: 0
}
}
},
......@@ -449,6 +452,11 @@ export default {
else return 1
}
},
watch: {
'addForm.currencyId'(newVal) {
this.currencyIdChange(newVal)
}
},
async created() {
// 获取汇率
await getCurrencyPage(this.params).then(res => this.currencyList = res.data.list)
......@@ -489,12 +497,30 @@ export default {
if (this.showCurrencyId === 1) { // 美元
this.verificationData.writtenOff = usCount
this.verificationData.WriteOffProportion = NP.times(NP.divide(usCount, this.form.receivableTotalAmount), 100)
const remaining = NP.minus(this.form.receivableTotalAmount, usCount)
this.remainingAmount = {
usAmount: remaining,
rmbAmount: NP.times(this.UStoRMB(), remaining),
nairaAmount: NP.times(this.UStoNAN(), remaining)
}
} else if (this.showCurrencyId === 2) { // 人民币
this.verificationData.writtenOff = rmbCount
this.verificationData.WriteOffProportion = NP.times(NP.divide(rmbCount, this.form.receivableTotalAmount), 100)
const remaining = NP.minus(this.form.receivableTotalAmount, rmbCount)
this.remainingAmount = {
usAmount: NP.times(this.RMBtoUS(), remaining),
rmbAmount: remaining,
nairaAmount: NP.times(this.RMBtoNAN(), remaining)
}
} else if (this.showCurrencyId === 3) { // 奈拉
this.verificationData.writtenOff = nairaCount
this.verificationData.WriteOffProportion = NP.times(NP.divide(nairaCount, this.form.receivableTotalAmount), 100)
const remaining = NP.minus(this.form.receivableTotalAmount, nairaCount)
this.remainingAmount = {
usAmount: NP.times(this.NANtoUS(), remaining),
rmbAmount: NP.times(this.NANtoRMB(), remaining),
nairaAmount: remaining
}
}
},
RMBtoUS() {
......@@ -515,6 +541,19 @@ export default {
NANtoRMB() {
return NP.divide(this.currencyList.find(v => v.titleEn === 'NGN').huilv, 100)
},
currencyIdChange(val) {
val = Number(val)
if(val === this.showCurrencyId) {
this.addForm.rate = 1
} else {
if (this.showCurrencyId === 1 && val === 2) this.addForm.rate = this.RMBtoUS()
else if (this.showCurrencyId === 1 && val === 3) this.addForm.rate = this.NANtoUS()
else if (this.showCurrencyId === 2 && val === 1) this.addForm.rate = this.UStoRMB()
else if (this.showCurrencyId === 2 && val === 3) this.addForm.rate = this.NANtoRMB()
else if (this.showCurrencyId === 3 && val === 1) this.addForm.rate = this.UStoNAN()
else if (this.showCurrencyId === 3 && val === 2) this.addForm.rate = this.RMBtoNAN()
}
},
getList() {
getReceivableItem({ id: this.id }).then(res => {
this.detailed = res.data.map(v => ({
......
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