fix(finance): 修复财务模块表单验证和显示问题

- 为申请开票表单添加disabled属性控制
- 注释掉开票详情表格中的操作列
- 调整condensed-item样式间距和错误提示层级
- 为申请付款对话框添加表单验证规则
- 修复银行账号字段名称错误
- 为申请退款对话框添加表单验证规则
- 实现退款信息变更确认提示功能
- 动态显示开票单和红冲开票详情标题
- 为财务详情页面金额字段添加负数红色显示
- 在表格中显示绝对值金额
- 为审批页面添加标签状态颜色
- 修复审批历史加载的单据编号
- 调整审批页面付款编号显示
- 为开票列表页面金额字段添加负数红色显示
- 修正生成收票单按钮文本为生成开票单
- 修复上传发票对话框票据类型显示问题
dev_1.0.0
chenhao 2026-01-08 17:00:09 +08:00
parent 0dfdeee19d
commit 5485a827be
27 changed files with 238 additions and 93 deletions

View File

@ -75,7 +75,7 @@
<el-card> <el-card>
<h4>{{ log.approveOpinion }}</h4> <h4>{{ log.approveOpinion }}</h4>
<p><b>操作人:</b> {{ log.approveUserName }} </p> <p><b>操作人:</b> {{ log.approveUserName }} </p>
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p> <p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>
@ -152,7 +152,7 @@ export default {
getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => { getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => {
this.form = response.data; this.form = response.data;
this.loadApproveHistory(this.form.receiptBillCode); this.loadApproveHistory(this.form.ticketBillCode);
this.detailLoading = false; this.detailLoading = false;
}).catch(() => { }).catch(() => {
this.detailLoading = false; this.detailLoading = false;

View File

@ -89,7 +89,7 @@
<el-card> <el-card>
<h4>{{ log.approveOpinion }}</h4> <h4>{{ log.approveOpinion }}</h4>
<p><b>操作人:</b> {{ log.approveUserName }} </p> <p><b>操作人:</b> {{ log.approveUserName }} </p>
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p> <p><b>审批状态:</b><el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>
@ -195,7 +195,7 @@ export default {
getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => { getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => {
this.form = response.data; this.form = response.data;
this.loadApproveHistory(this.form.receiptBillCode); this.loadApproveHistory(this.form.ticketBillCode);
this.detailLoading = false; this.detailLoading = false;
}).catch(() => { }).catch(() => {
this.detailLoading = false; this.detailLoading = false;

View File

@ -76,7 +76,7 @@
<el-card> <el-card>
<h4>{{ log.approveOpinion }}</h4> <h4>{{ log.approveOpinion }}</h4>
<p><b>操作人:</b> {{ log.approveUserName }} </p> <p><b>操作人:</b> {{ log.approveUserName }} </p>
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p> <p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>
@ -153,7 +153,7 @@ export default {
getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => { getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => {
this.form = response.data; this.form = response.data;
this.loadApproveHistory(this.form.receiptBillCode); this.loadApproveHistory(this.form.ticketBillCode);
this.detailLoading = false; this.detailLoading = false;
}).catch(() => { }).catch(() => {
this.detailLoading = false; this.detailLoading = false;

View File

@ -93,7 +93,7 @@
<el-card> <el-card>
<h4>{{ log.approveOpinion }}</h4> <h4>{{ log.approveOpinion }}</h4>
<p><b>操作人:</b> {{ log.approveUserName }} </p> <p><b>操作人:</b> {{ log.approveUserName }} </p>
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p> <p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>
@ -199,7 +199,7 @@ export default {
getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => { getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => {
this.form = response.data; this.form = response.data;
this.loadApproveHistory(this.form.receiptBillCode); this.loadApproveHistory(this.form.ticketBillCode);
this.detailLoading = false; this.detailLoading = false;
}).catch(() => { }).catch(() => {
this.detailLoading = false; this.detailLoading = false;

View File

@ -65,7 +65,7 @@
<ApproveLayout ref="approveLayout" title="付款单详情"> <ApproveLayout ref="approveLayout" title="付款单详情">
<payment-detail :data="form"></payment-detail> <payment-detail :data="form"></payment-detail>
<template #footer> <template #footer>
<span>付款编号: {{ form.paymentBillCode }}</span> <span> {{ form.paymentBillCode }}</span>
</template> </template>
</ApproveLayout> </ApproveLayout>
</div> </div>

View File

@ -69,7 +69,7 @@
<ApproveLayout ref="approveLayout" title="付款单详情"> <ApproveLayout ref="approveLayout" title="付款单详情">
<payment-detail :data="form"></payment-detail> <payment-detail :data="form"></payment-detail>
<template #footer> <template #footer>
<span>付款编号: {{ form.paymentBillCode }}</span> <span> {{ form.paymentBillCode }}</span>
</template> </template>
</ApproveLayout> </ApproveLayout>
</div> </div>
@ -81,7 +81,7 @@
<el-card> <el-card>
<h4>{{ log.approveOpinion }}</h4> <h4>{{ log.approveOpinion }}</h4>
<p><b>操作人:</b> {{ log.approveUserName }} </p> <p><b>操作人:</b> {{ log.approveUserName }} </p>
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p> <p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>

View File

@ -93,7 +93,7 @@
<el-card> <el-card>
<h4>{{ log.approveOpinion }}</h4> <h4>{{ log.approveOpinion }}</h4>
<p><b>操作人:</b> {{ log.approveUserName }} </p> <p><b>操作人:</b> {{ log.approveUserName }} </p>
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p> <p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>

View File

@ -77,7 +77,7 @@
<el-card> <el-card>
<h4>{{ log.approveOpinion }}</h4> <h4>{{ log.approveOpinion }}</h4>
<p><b>操作人:</b> {{ log.approveUserName }} </p> <p><b>操作人:</b> {{ log.approveUserName }} </p>
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p> <p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>

View File

@ -89,7 +89,7 @@
<el-card> <el-card>
<h4>{{ log.approveOpinion }}</h4> <h4>{{ log.approveOpinion }}</h4>
<p><b>操作人:</b> {{ log.approveUserName }} </p> <p><b>操作人:</b> {{ log.approveUserName }} </p>
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p> <p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>

View File

@ -77,7 +77,7 @@
<el-card> <el-card>
<h4>{{ log.approveOpinion }}</h4> <h4>{{ log.approveOpinion }}</h4>
<p><b>操作人:</b> {{ log.approveUserName }} </p> <p><b>操作人:</b> {{ log.approveUserName }} </p>
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p> <p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>

View File

@ -93,7 +93,7 @@
<el-card> <el-card>
<h4>{{ log.approveOpinion }}</h4> <h4>{{ log.approveOpinion }}</h4>
<p><b>操作人:</b> {{ log.approveUserName }} </p> <p><b>操作人:</b> {{ log.approveUserName }} </p>
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p> <p><b>审批状态:</b><el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>

View File

@ -75,7 +75,7 @@
<el-card> <el-card>
<h4>{{ log.approveOpinion }}</h4> <h4>{{ log.approveOpinion }}</h4>
<p><b>操作人:</b> {{ log.approveUserName }} </p> <p><b>操作人:</b> {{ log.approveUserName }} </p>
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p> <p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>

View File

@ -87,7 +87,7 @@
<el-card> <el-card>
<h4>{{ log.approveOpinion }}</h4> <h4>{{ log.approveOpinion }}</h4>
<p><b>操作人:</b> {{ log.approveUserName }} </p> <p><b>操作人:</b> {{ log.approveUserName }} </p>
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p> <p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>

View File

@ -79,7 +79,7 @@
<el-card> <el-card>
<h4>{{ log.approveOpinion }}</h4> <h4>{{ log.approveOpinion }}</h4>
<p><b>操作人:</b> {{ log.approveUserName }} </p> <p><b>操作人:</b> {{ log.approveUserName }} </p>
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p> <p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>

View File

@ -91,7 +91,7 @@
<el-card> <el-card>
<h4>{{ log.approveOpinion }}</h4> <h4>{{ log.approveOpinion }}</h4>
<p><b>操作人:</b> {{ log.approveUserName }} </p> <p><b>操作人:</b> {{ log.approveUserName }} </p>
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p> <p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
</el-card> </el-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>

View File

@ -1,7 +1,7 @@
<template> <template>
<el-dialog title="申请开票" :visible.sync="visible" width="1000px" append-to-body @close="handleClose" <el-dialog title="申请开票" :visible.sync="visible" width="1000px" append-to-body @close="handleClose"
custom-class="invoice-dialog"> custom-class="invoice-dialog">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="110px" class="invoice-form"> <el-form ref="form" :model="form" :rules="rules" :disabled="isRedRush" size="small" label-width="110px" class="invoice-form">
<!-- 1. 顶部发票类型与票号日期 --> <!-- 1. 顶部发票类型与票号日期 -->
<div class="invoice-header"> <div class="invoice-header">
@ -142,14 +142,14 @@
<span v-else>{{ scope.row.taxAmount }}</span> <span v-else>{{ scope.row.taxAmount }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="60" align="center"> <!-- <el-table-column label="操作" width="60" align="center">-->
<template slot-scope="scope"> <!-- <template slot-scope="scope">-->
<i class="el-icon-plus table-icon" @click="addDetailRow" <!-- <i class="el-icon-plus table-icon" @click="addDetailRow"-->
v-if="scope.$index === form.detailItemList.length - 1"></i> <!-- v-if="scope.$index === form.detailItemList.length - 1"></i>-->
<i class="el-icon-minus table-icon" @click="removeDetailRow(scope.$index)" <!-- <i class="el-icon-minus table-icon" @click="removeDetailRow(scope.$index)"-->
v-if="form.detailItemList.length > 1" style="margin-left:5px"></i> <!-- v-if="form.detailItemList.length > 1" style="margin-left:5px"></i>-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
</el-table> </el-table>
</div> </div>
@ -677,7 +677,11 @@ export default {
} }
.condensed-item { .condensed-item {
margin-bottom: 5px; margin-bottom: 18px;
}
.condensed-item ::v-deep .el-form-item__error {
z-index: 10;
} }
.condensed-item ::v-deep .el-form-item__label { .condensed-item ::v-deep .el-form-item__label {

View File

@ -1,6 +1,6 @@
<template> <template>
<el-drawer <el-drawer
title="收票单详情" :title="detail.invoiceBillType==='RED_RUSH'?'红冲开票详情':'开票单详情'"
:visible.sync="visible" :visible.sync="visible"
direction="rtl" direction="rtl"
size="70%" size="70%"
@ -23,25 +23,25 @@
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">含税总价(): {{ detail.totalPriceWithTax }}</div> <div class="detail-item">含税总价(): <span :class="{'red-text':detail.invoiceBillType==='RED_RUSH'}">{{ detail.totalPriceWithTax }}</span></div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">未税总价(): {{ detail.totalPriceWithoutTax }}</div> <div class="detail-item">未税总价(): <span :class="{'red-text':detail.invoiceBillType==='RED_RUSH'}">{{ detail.totalPriceWithoutTax }} </span></div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">税额(): {{ $calc.sub(detail.totalPriceWithTax,detail.totalPriceWithoutTax) }}</div> <div class="detail-item">税额(): <span :class="{'red-text':detail.invoiceBillType==='RED_RUSH'}">{{ $calc.sub(detail.totalPriceWithTax,detail.totalPriceWithoutTax) }} </span></div>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">发票含税总价: {{ detail.invoicePriceWithTax }}</div> <div class="detail-item">发票含税总价: <span :class="{'red-text':detail.invoiceBillType==='RED_RUSH'}"> {{ detail.invoicePriceWithTax }}</span></div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">发票未税总价: {{ detail.invoicePriceWithoutTax }}</div> <div class="detail-item">发票未税总价: <span :class="{'red-text':detail.invoiceBillType==='RED_RUSH'}"{{ detail.invoicePriceWithoutTax }}</span></div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">发票税额: {{ $calc.sub(detail.invoicePriceWithTax,detail.invoicePriceWithoutTax) }}</div> <div class="detail-item">发票税额: <span :class="{'red-text':detail.invoiceBillType==='RED_RUSH'}"{{ $calc.sub(detail.invoicePriceWithTax,detail.invoicePriceWithoutTax) }}</span></div>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
@ -118,8 +118,16 @@
<el-table-column property="projectName" label="项目名称"></el-table-column> <el-table-column property="projectName" label="项目名称"></el-table-column>
<el-table-column property="receivableBillCode" label="销售-应收单编号"></el-table-column> <el-table-column property="receivableBillCode" label="销售-应收单编号"></el-table-column>
<el-table-column property="totalPriceWithTax" label="含税总价(元)"></el-table-column> <el-table-column property="totalPriceWithTax" label="含税总价(元)"></el-table-column>
<el-table-column property="receiptAmount" label="本次开票金额"></el-table-column> <el-table-column property="receiptAmount" label="本次开票金额">
<el-table-column property="receiptRate" label="本次开票比例(%)"></el-table-column> <template slot-scope="scope">
<span>{{ Math.abs(scope.row.receiptAmount) }}</span>
</template>
</el-table-column>
<el-table-column property="receiptRate" label="本次开票比例(%)">
<template slot-scope="scope">
<span>{{ Math.abs(scope.row.receiptRate) }}</span>
</template>
</el-table-column>
</el-table> </el-table>
</div> </div>
</div> </div>
@ -171,6 +179,9 @@ export default {
align-items: center; align-items: center;
} }
.red-text{
color: red;
}
.section { .section {
margin-bottom: 20px; margin-bottom: 20px;
} }

View File

@ -119,14 +119,16 @@
<el-col :span="12"> <el-col :span="12">
<el-form :model="uploadForm" ref="uploadForm" :rules="rules" label-width="120px" size="medium" > <el-form :model="uploadForm" ref="uploadForm" :rules="rules" label-width="120px" size="medium" >
<el-form-item label="票据类型" prop="invoiceType" required> <el-form-item label="票据类型" prop="invoiceType" required>
<el-select v-model="uploadForm.invoiceType" placeholder="请选择票据类型" @change="handleTypeChange"> <dict-tag :options="dict.type.finance_invoice_type" :value="uploadForm.invoiceType"/>
<el-option <!-- <el-select v-model="uploadForm.invoiceType" placeholder="请选择票据类型" @change="handleTypeChange">-->
v-for="item in dict.type.finance_invoice_type" <!-- -->
:key="item.value" <!-- <el-option-->
:label="item.label" <!-- v-for="item in dict.type.finance_invoice_type"-->
:value="item.value" <!-- :key="item.value"-->
></el-option> <!-- :label="item.label"-->
</el-select> <!-- :value="item.value"-->
<!-- ></el-option>-->
<!-- </el-select>-->
</el-form-item> </el-form-item>
<el-form-item label="开票附件" prop="file" > <el-form-item label="开票附件" prop="file" >
<div style="display: flex; flex-direction: column; align-items: flex-start;"> <div style="display: flex; flex-direction: column; align-items: flex-start;">

View File

@ -134,18 +134,30 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="进货商名称" align="center" prop="partnerName" width="300" /> <el-table-column label="进货商名称" align="center" prop="partnerName" width="300" />
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="180" /> <el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="180" >
<el-table-column label="未税总价(元)" align="center" prop="totalPriceWithoutTax" width="180"/> <template slot-scope="scope">
<el-table-column label="发票未税总价(元)" align="center" prop="invoicePriceWithoutTax" width="180"/> <span :style="scope.row.totalPriceWithTax<0?{color:'red'}:{}">{{ scope.row.totalPriceWithTax }}</span>
</template>
</el-table-column>
<el-table-column label="未税总价(元)" align="center" prop="totalPriceWithoutTax" width="180">
<template slot-scope="scope">
<span :style="scope.row.totalPriceWithoutTax<0?{color:'red'}:{}">{{ scope.row.totalPriceWithoutTax }}</span>
</template>
</el-table-column>
<el-table-column label="发票未税总价(元)" align="center" prop="invoicePriceWithoutTax" width="180">
<template slot-scope="scope">
<span :style="scope.row.invoicePriceWithoutTax<0?{color:'red'}:{}">{{ scope.row.invoicePriceWithoutTax }}</span>
</template>
</el-table-column>
<el-table-column label="税额(元)" align="center" prop="taxAmount" width="180"> <el-table-column label="税额(元)" align="center" prop="taxAmount" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ $calc.sub(scope.row.totalPriceWithTax, scope.row.totalPriceWithoutTax) }}</span> <span :style="scope.row.invoicePriceWithoutTax<0?{color:'red'}:{}">{{ $calc.sub(scope.row.totalPriceWithTax, scope.row.totalPriceWithoutTax) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="发票税额(元)" align="center" prop="invoicePriceTax" width="180"> <el-table-column label="发票税额(元)" align="center" prop="invoicePriceTax" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ $calc.sub(scope.row.totalPriceWithTax, scope.row.invoicePriceWithoutTax) }}</span> <span :style="scope.row.invoicePriceWithoutTax<0?{color:'red'}:{}">{{ $calc.sub(scope.row.totalPriceWithTax, scope.row.invoicePriceWithoutTax) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="开票状态" align="center" prop="invoiceStatus" width="150" > <el-table-column label="开票状态" align="center" prop="invoiceStatus" width="150" >

View File

@ -1,6 +1,6 @@
<template> <template>
<el-drawer <el-drawer
title="采购-付款单详情" :title="detail.paymentBillType==='REFUND'?'退款单详情':'付款单详情'"
:visible.sync="visible" :visible.sync="visible"
direction="rtl" direction="rtl"
size="70%" size="70%"
@ -24,13 +24,13 @@
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">含税总价(): {{ detail.totalPriceWithTax }}</div> <div class="detail-item">含税总价():<span :class="{'red-text':detail.paymentBillType==='REFUND'}"> {{ detail.totalPriceWithTax }}</span></div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">未税总价(): {{ detail.totalPriceWithoutTax }}</div> <div class="detail-item">未税总价(): <span :class="{'red-text':detail.paymentBillType==='REFUND'}">{{ detail.totalPriceWithoutTax }}</span></div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">税额(): {{ detail.taxAmount }}</div> <div class="detail-item">税额(): <span :class="{'red-text':detail.paymentBillType==='REFUND'}">{{ detail.taxAmount }} </span></div>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
@ -96,8 +96,16 @@
<el-table-column property="projectName" label="项目名称"></el-table-column> <el-table-column property="projectName" label="项目名称"></el-table-column>
<el-table-column property="payableBillCode" label="采购-应付单编号"></el-table-column> <el-table-column property="payableBillCode" label="采购-应付单编号"></el-table-column>
<el-table-column property="totalPriceWithTax" label="含税总价"></el-table-column> <el-table-column property="totalPriceWithTax" label="含税总价"></el-table-column>
<el-table-column property="paymentAmount" label="本次付款金额"></el-table-column> <el-table-column property="paymentAmount" label="本次付款金额">
<el-table-column property="paymentRate" label="本次付款比例"></el-table-column> <template slot-scope="scope">
<span>{{ Math.abs(scope.row.paymentAmount) }}</span>
</template>
</el-table-column>
<el-table-column property="paymentRate" label="本次付款比例">
<template slot-scope="scope">
<span >{{ Math.abs(scope.row.paymentRate) }}</span>
</template>
</el-table-column>
</el-table> </el-table>
</div> </div>
</div> </div>
@ -164,6 +172,9 @@ export default {
margin-bottom: 20px; margin-bottom: 20px;
} }
.red-text{
color: red;
}
.grid-content { .grid-content {
border-radius: 4px; border-radius: 4px;
min-height: 36px; min-height: 36px;

View File

@ -1,6 +1,6 @@
<template> <template>
<el-drawer <el-drawer
title="收票单详情" :title="detail.ticketBillType==='RED_RUSH'?'红冲收票详情':'收票单详情'"
:visible.sync="visible" :visible.sync="visible"
direction="rtl" direction="rtl"
size="70%" size="70%"
@ -26,28 +26,28 @@
<div class="detail-item">制造商名称: {{ detail.vendorName }}</div> <div class="detail-item">制造商名称: {{ detail.vendorName }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">含税总价: {{ detail.totalPriceWithTax }}</div> <div class="detail-item">含税总价: <span :class="{'red-text':detail.ticketBillType==='RED_RUSH'}">{{ detail.totalPriceWithTax }}</span></div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">未税总价: {{ detail.totalPriceWithoutTax }}</div> <div class="detail-item">未税总价: <span :class="{'red-text':detail.ticketBillType==='RED_RUSH'}">{{ detail.totalPriceWithoutTax }}</span></div>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">税额: {{ detail.taxAmount }}</div> <div class="detail-item">税额: <span :class="{'red-text':detail.ticketBillType==='RED_RUSH'}">{{ detail.taxAmount }} </span></div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">发票含税总价: {{ detail.ticketPriceWithTax || '-'}}</div> <div class="detail-item">发票含税总价: <span :class="{'red-text':detail.ticketBillType==='RED_RUSH'}">{{ detail.ticketPriceWithTax || '-'}} </span></div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">发票未税总价: {{ detail.ticketPriceWithoutTax || '-'}}</div> <div class="detail-item">发票未税总价: <span :class="{'red-text':detail.ticketBillType==='RED_RUSH'}">{{ detail.ticketPriceWithoutTax || '-'}} </span></div>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">发票税额: {{ detail.ticketAmount }}</div> <div class="detail-item">发票税额: <span :class="{'red-text':detail.ticketBillType==='RED_RUSH'}">{{ detail.ticketAmount }} </span></div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">收票状态: <div class="detail-item">收票状态:
@ -134,6 +134,9 @@ export default {
font-size: 14px; font-size: 14px;
align-items: center; align-items: center;
} }
.red-text{
color: red;
}
.section { .section {
margin-bottom: 20px; margin-bottom: 20px;

View File

@ -114,14 +114,15 @@
<el-col :span="12"> <el-col :span="12">
<el-form :model="uploadForm" ref="uploadForm" :rules="rules" label-width="120px" size="medium" > <el-form :model="uploadForm" ref="uploadForm" :rules="rules" label-width="120px" size="medium" >
<el-form-item label="票据类型" prop="ticketType" required> <el-form-item label="票据类型" prop="ticketType" required>
<el-select v-model="uploadForm.ticketType" placeholder="请选择票据类型"> <dict-tag :options="dict.type.finance_invoice_type" :value="uploadForm.ticketType"/>
<el-option <!-- <el-select v-model="uploadForm.ticketType" placeholder="请选择票据类型">-->
v-for="item in dict.type.finance_invoice_type" <!-- <el-option-->
:key="item.value" <!-- v-for="item in dict.type.finance_invoice_type"-->
:label="item.label" <!-- :key="item.value"-->
:value="item.value" <!-- :label="item.label"-->
></el-option> <!-- :value="item.value"-->
</el-select> <!-- ></el-option>-->
<!-- </el-select>-->
</el-form-item> </el-form-item>
<el-form-item label="收票附件" prop="file" required> <el-form-item label="收票附件" prop="file" required>
<div style="display: flex; flex-direction: column; align-items: flex-start;"> <div style="display: flex; flex-direction: column; align-items: flex-start;">

View File

@ -140,7 +140,7 @@
v-show="scope.row.uninvoicedAmount!==0" v-show="scope.row.uninvoicedAmount!==0"
@click="handleGeneratedInvoice(scope.row)" @click="handleGeneratedInvoice(scope.row)"
v-hasPermi="['finance:invoice:generate']" v-hasPermi="['finance:invoice:generate']"
>生成票单</el-button> >生成票单</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>

View File

@ -5,7 +5,7 @@
<!-- Left Side: Form Data --> <!-- Left Side: Form Data -->
<el-col :span="12"> <el-col :span="12">
<div class="form-tip">请选择客户的支付方式并确认客户打款的账户信息提交至财务审批</div> <div class="form-tip">请选择客户的支付方式并确认客户打款的账户信息提交至财务审批</div>
<el-form ref="form" :model="form" label-width="120px" size="small"> <el-form ref="form" :model="form" :rules="rules" label-width="120px" size="small">
<el-form-item label="支付方式" prop="receiptMethod"> <el-form-item label="支付方式" prop="receiptMethod">
<el-select v-model="form.receiptMethod" placeholder="请选择支付方式" style="width: 100%"> <el-select v-model="form.receiptMethod" placeholder="请选择支付方式" style="width: 100%">
<el-option <el-option
@ -19,7 +19,7 @@
<el-form-item label="账户名称" prop="receiptAccountName"> <el-form-item label="账户名称" prop="receiptAccountName">
<el-input v-model="form.receiptAccountName" placeholder="请输入账户名称"/> <el-input v-model="form.receiptAccountName" placeholder="请输入账户名称"/>
</el-form-item> </el-form-item>
<el-form-item label="银行账号" prop="payBankNumber"> <el-form-item label="银行账号" prop="receiptBankNumber">
<el-input v-model="form.receiptBankNumber" placeholder="请输入银行账号"/> <el-input v-model="form.receiptBankNumber" placeholder="请输入银行账号"/>
</el-form-item> </el-form-item>
<el-form-item label="银行开户行" prop="receiptBankOpenAddress"> <el-form-item label="银行开户行" prop="receiptBankOpenAddress">
@ -117,6 +117,29 @@ export default {
}, },
data() { data() {
return { return {
rules: {
receiptMethod: [
{ required: true, message: "请选择支付方式", trigger: "change" }
],
receiptAccountName: [
{ required: true, message: "请输入账户名称", trigger: "blur" }
],
receiptBankNumber: [
{ required: true, message: "请输入银行账号", trigger: "blur" }
],
receiptBankOpenAddress: [
{ required: true, message: "请输入银行开户行", trigger: "blur" }
],
bankNumber: [
{ required: true, message: "请输入银行行号", trigger: "blur" }
],
file: [
{ required: true, message: "请上传客户付款图", trigger: "change" }
],
confirmAmount: [
{ required: true, message: "请输入确认收款金额", trigger: "blur" }
]
},
form: { form: {
receiptMethod: null, receiptMethod: null,
receiptAccountName: null, receiptAccountName: null,
@ -196,11 +219,13 @@ export default {
this.form.fileName = file.name; this.form.fileName = file.name;
this.isPreviewPdf = file.raw.type === 'application/pdf'; this.isPreviewPdf = file.raw.type === 'application/pdf';
this.previewUrl = URL.createObjectURL(file.raw); this.previewUrl = URL.createObjectURL(file.raw);
this.$refs.form.validateField('file');
}, },
handleFileRemove() { handleFileRemove() {
this.form.file = null; this.form.file = null;
this.form.fileName = ''; this.form.fileName = '';
this.previewUrl = ''; this.previewUrl = '';
this.$refs.form.validateField('file');
}, },
handleSubmit() { handleSubmit() {
if (this.$calc.sub(this.form.totalPriceWithTax,this.form.confirmAmount)!=0){ if (this.$calc.sub(this.form.totalPriceWithTax,this.form.confirmAmount)!=0){

View File

@ -2,7 +2,7 @@
<el-dialog title="申请退款" :visible.sync="visible" width="600px" append-to-body :before-close="handleClose" <el-dialog title="申请退款" :visible.sync="visible" width="600px" append-to-body :before-close="handleClose"
custom-class="apply-refund-dialog"> custom-class="apply-refund-dialog">
<div class="form-tip">请选择客户的退款方式并确认客户收款的账户信息提交至财务审批</div> <div class="form-tip">请选择客户的退款方式并确认客户收款的账户信息提交至财务审批</div>
<el-form ref="form" :model="form" label-width="120px" size="small"> <el-form ref="form" :model="form" :rules="rules" label-width="120px" size="small">
<el-form-item label="退款方式" prop="receiptMethod"> <el-form-item label="退款方式" prop="receiptMethod">
<el-select v-model="form.receiptMethod" placeholder="请选择退款方式" style="width: 100%"> <el-select v-model="form.receiptMethod" placeholder="请选择退款方式" style="width: 100%">
<el-option <el-option
@ -80,6 +80,26 @@ export default {
confirmAmount: null, confirmAmount: null,
remark: null, remark: null,
id: this.receiptData.id id: this.receiptData.id
},
rules: {
receiptMethod: [
{ required: true, message: "请选择退款方式", trigger: "change" }
],
receiptAccountName: [
{ required: true, message: "请输入账户名称", trigger: "blur" }
],
receiptBankNumber: [
{ required: true, message: "请输入银行账号", trigger: "blur" }
],
receiptBankOpenAddress: [
{ required: true, message: "请输入银行开户行", trigger: "blur" }
],
bankNumber: [
{ required: true, message: "请输入银行行号", trigger: "blur" }
],
confirmAmount: [
{ required: true, message: "请输入确认退款金额", trigger: "blur" }
]
} }
}; };
}, },
@ -124,14 +144,51 @@ export default {
handleSubmit() { handleSubmit() {
this.$refs["form"].validate(valid => { this.$refs["form"].validate(valid => {
if (valid) { if (valid) {
// Send as JSON since no file upload const checkFields = ['receiptMethod', 'receiptAccountName', 'receiptBankNumber', 'receiptBankOpenAddress', 'bankNumber'];
submitRefund(this.form).then(response => { let isDiff = false;
this.$modal.msgSuccess("申请退款提交成功"); let diffMsg = [];
this.$emit("submit");
this.handleClose(); checkFields.forEach(field => {
}).catch(error => { // Use loose equality to handle null vs undefined or number vs string issues if necessary,
console.error("申请退款提交失败", error); // but stricter is better if types are consistent.
// Given Vue forms often use strings, and receiptData might be from API,
// we'll try to match somewhat loosely or ensure strings.
const formVal = this.form[field];
const originVal = this.receiptData[field];
// Simple comparison
if (formVal != originVal) {
isDiff = true;
// Get label for friendly message
let label = "";
switch(field) {
case 'receiptMethod': label = "退款方式"; break;
case 'receiptAccountName': label = "账户名称"; break;
case 'receiptBankNumber': label = "银行账号"; break;
case 'receiptBankOpenAddress': label = "银行开户行"; break;
case 'bankNumber': label = "银行行号"; break;
}
diffMsg.push(label);
}
}); });
const doSubmit = () => {
submitRefund(this.form).then(response => {
this.$modal.msgSuccess("申请退款提交成功");
this.$emit("submit");
this.handleClose();
}).catch(error => {
console.error("申请退款提交失败", error);
});
};
if (isDiff) {
this.$modal.confirm(`检测到以下信息与原收款信息不一致:${diffMsg.join('、')}。确认要提交吗?`).then(() => {
doSubmit();
}).catch(() => {});
} else {
doSubmit();
}
} }
}); });
} }

View File

@ -1,6 +1,6 @@
<template> <template>
<el-drawer <el-drawer
title="收款单详情" :title="detail.receiptBillType==='REFUND'?'退款单详情':'收款单详情'"
:visible.sync="visible" :visible.sync="visible"
direction="rtl" direction="rtl"
size="70%" size="70%"
@ -24,13 +24,13 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">含税总价(): {{ detail.totalPriceWithTax }}</div> <div class="detail-item">含税总价():<span :class="{'red-text':detail.receiptBillType==='REFUND'}"> {{ detail.totalPriceWithTax }} </span></div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">未税总价(): {{ detail.totalPriceWithoutTax }}</div> <div class="detail-item">未税总价(): <span :class="{'red-text':detail.receiptBillType==='REFUND'}">{{ detail.totalPriceWithoutTax }} </span></div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div class="detail-item">税额(): {{ detail.taxAmount }}</div> <div class="detail-item">税额(): <span :class="{'red-text':detail.receiptBillType==='REFUND'}">{{ detail.taxAmount }} </span></div>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
@ -107,8 +107,20 @@
<el-table-column property="projectName" label="项目名称"></el-table-column> <el-table-column property="projectName" label="项目名称"></el-table-column>
<el-table-column property="receivableBillCode" label="应收单编号"></el-table-column> <el-table-column property="receivableBillCode" label="应收单编号"></el-table-column>
<el-table-column property="totalPriceWithTax" label="含税总价(元)"></el-table-column> <el-table-column property="totalPriceWithTax" label="含税总价(元)"></el-table-column>
<el-table-column property="receiptAmount" label="本次收款金额"></el-table-column> <el-table-column property="receiptAmount" label="本次收款金额">
<el-table-column property="receiptRate" label="本次收款比例(%)"></el-table-column> <template slot-scope="scope">
<span >
{{ Math.abs(scope.row.receiptAmount) }}
</span>
</template>
</el-table-column>
<el-table-column property="receiptRate" label="本次收款比例(%)">
<template slot-scope="scope">
<span >
{{ Math.abs(scope.row.receiptRate) }}
</span>
</template>
</el-table-column>
</el-table> </el-table>
</div> </div>
@ -177,6 +189,9 @@ export default {
align-items: center; align-items: center;
} }
.red-text{
color: red;
}
.section { .section {
margin-bottom: 20px; margin-bottom: 20px;
} }

View File

@ -130,7 +130,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="进货商名称" align="center" prop="partnerName" width="230" /> <el-table-column label="进货商名称" align="center" prop="partnerName" width="230" />
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="180" /> <el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="180" >
<template slot-scope="scope">
<span><span :style="scope.row.totalPriceWithTax<0?{color:'red'}:{}">{{ scope.row.totalPriceWithTax }} </span></span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="receiptBillType" width="180"> <el-table-column label="备注" align="center" prop="receiptBillType" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :options="dict.type.receipt_bill_type" :value="scope.row.receiptBillType"/> <dict-tag :options="dict.type.receipt_bill_type" :value="scope.row.receiptBillType"/>