应付管理页面统计
This commit is contained in:
parent
bbaccb76e8
commit
d4368b3559
@ -9,7 +9,7 @@ export const fenToYuanFormat = (_, __, cellValue: any, ___) => {
|
|||||||
/** 数字格式化为两位小数 */
|
/** 数字格式化为两位小数 */
|
||||||
// 格式化金额:保留两位小数,加千分位逗号
|
// 格式化金额:保留两位小数,加千分位逗号
|
||||||
export const formatAmount = (row, column, cellValue) => {
|
export const formatAmount = (row, column, cellValue) => {
|
||||||
if (cellValue == null || cellValue === '') return ''
|
if (cellValue == null || cellValue === '') return '0.00'
|
||||||
|
|
||||||
// 转为数字
|
// 转为数字
|
||||||
const num = Number(cellValue)
|
const num = Number(cellValue)
|
||||||
|
|||||||
@ -90,7 +90,7 @@
|
|||||||
|
|
||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list" :stripe="true" class="hl-table" :show-overflow-tooltip="true">
|
<el-table v-loading="loading" :data="list" :stripe="true" class="hl-table" :show-overflow-tooltip="true" border show-summary :summary-method="getSummaries">
|
||||||
<el-table-column label="主键" align="center" prop="id" v-if="false"/>
|
<el-table-column label="主键" align="center" prop="id" v-if="false"/>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
label="创建时间"
|
label="创建时间"
|
||||||
@ -109,9 +109,18 @@
|
|||||||
<!-- width="180px"-->
|
<!-- width="180px"-->
|
||||||
<!-- />-->
|
<!-- />-->
|
||||||
<el-table-column label="供应商名称" align="center" prop="cgGysname"/>
|
<el-table-column label="供应商名称" align="center" prop="cgGysname"/>
|
||||||
<el-table-column label="应付金额(元)" align="center" prop="cgYf" />
|
<el-table-column label="应付金额(元)" align="center" prop="cgYf" :formatter="formatAmount"/>
|
||||||
<el-table-column label="已付金额(元)" align="center" prop="cgYifu" />
|
<el-table-column label="已付金额(元)" align="center" prop="cgYifu" :formatter="formatAmount"/>
|
||||||
<el-table-column label="已付款比例" align="center" >
|
<el-table-column label="剩余金额(元)" align="center">
|
||||||
|
<template #default="scope">
|
||||||
|
{{
|
||||||
|
scope.row.cgYf !== null && scope.row.cgYifu !== null
|
||||||
|
? Math.max(0, (Number(scope.row.cgYf) - (Number(scope.row.cgYifu) || 0))).toFixed(2)
|
||||||
|
: Number(scope.row.cgYf) >= 0 ? Number(scope.row.cgYf).toFixed(2) : '0.00'
|
||||||
|
}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="已付款比例" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{
|
{{
|
||||||
scope.row.cgYifu&&scope.row.cgYf
|
scope.row.cgYifu&&scope.row.cgYf
|
||||||
@ -120,8 +129,20 @@
|
|||||||
}}%
|
}}%
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="已开票金额(元)" align="center" prop="amount" />
|
|
||||||
<el-table-column label="已开票比例" align="center" >
|
<el-table-column label="已开票金额(元)" align="center" prop="amount" :formatter="formatAmount"/>
|
||||||
|
<el-table-column label="剩余开票金额(元)" align="center" min-width="90">
|
||||||
|
<template #default="scope">
|
||||||
|
{{
|
||||||
|
scope.row.cgYf && scope.row.amount
|
||||||
|
? Math.max(0, (Number(scope.row.cgYf) - Number(scope.row.amount))).toFixed(2)
|
||||||
|
: scope.row.cgYf
|
||||||
|
? Math.max(0, Number(scope.row.cgYf)).toFixed(2)
|
||||||
|
: '0.00'
|
||||||
|
}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="已开票比例" align="center" prop="invoicedRatio">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{
|
{{
|
||||||
scope.row.cgYf&&scope.row.cgYf
|
scope.row.cgYf&&scope.row.cgYf
|
||||||
@ -160,6 +181,7 @@
|
|||||||
<!-- 删除-->
|
<!-- 删除-->
|
||||||
<!-- </el-button>-->
|
<!-- </el-button>-->
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<!-- 分页 -->
|
<!-- 分页 -->
|
||||||
@ -181,6 +203,9 @@ import download from '@/utils/download'
|
|||||||
import * as OrderYfApi from '@/api/heli/orderyf'
|
import * as OrderYfApi from '@/api/heli/orderyf'
|
||||||
import OrderYfForm from './OrderYfForm.vue'
|
import OrderYfForm from './OrderYfForm.vue'
|
||||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
|
import {ElTable} from "element-plus";
|
||||||
|
import type { SummaryMethodProps } from 'element-plus'
|
||||||
|
import {formatAmount} from '@/utils/formatter'
|
||||||
defineOptions({ name: 'orderyf' })
|
defineOptions({ name: 'orderyf' })
|
||||||
|
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
@ -262,6 +287,66 @@ const handleExport = async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const getSummaries = (param: SummaryMethodProps) => {
|
||||||
|
const { columns, data } = param;
|
||||||
|
const sums = [];
|
||||||
|
|
||||||
|
columns.forEach((column, index) => {
|
||||||
|
if (index === 0) {
|
||||||
|
sums[index] = '合计';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.log(index);
|
||||||
|
console.log(column);
|
||||||
|
console.log(column.content);
|
||||||
|
// 通过column获取value
|
||||||
|
|
||||||
|
|
||||||
|
// 计算剩余金额(应付金额 - 已付金额)
|
||||||
|
if (column.label.includes('剩余金额')) {
|
||||||
|
const remainingAmounts = data.map(item => Math.max(0, (Number(item.cgYf) || 0) - (Number(item.cgYifu) || 0)));
|
||||||
|
sums[index] = remainingAmounts.reduce((sum, amount) => sum + amount, 0).toFixed(2);
|
||||||
|
return; }
|
||||||
|
|
||||||
|
// 计算剩余开票金额(应付金额 - 已开票金额)
|
||||||
|
if (column.label.includes('剩余开票金额')) {
|
||||||
|
const yfSum = data.reduce((sum, item) => sum + (Number(item.cgYf) || 0), 0);
|
||||||
|
const amountSum = data.reduce((sum, item) => sum + (Number(item.amount) || 0), 0);
|
||||||
|
sums[index] = Number(yfSum - amountSum).toFixed(2);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 需要直接汇总的字段
|
||||||
|
const summaryFields = {
|
||||||
|
'cgYf': '应付金额',
|
||||||
|
'cgYifu': '已付金额',
|
||||||
|
'amount': '已开票金额'
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!summaryFields[column.property]) {
|
||||||
|
sums[index] = '';
|
||||||
|
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] = Number(sums[index]).toFixed(2);
|
||||||
|
} else {
|
||||||
|
sums[index] = '';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return sums;
|
||||||
|
}
|
||||||
|
|
||||||
/** 初始化 **/
|
/** 初始化 **/
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getList()
|
getList()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user