This commit is contained in:
linfso 2024-09-27 21:49:04 +08:00
parent 18a2813d97
commit 26fef56ade
2 changed files with 416 additions and 34 deletions

View File

@ -1,5 +1,5 @@
<template>
<XdPageContainer >
<XdPageContainer id="BillPayOpenBillSumQuery1">
<SearchForm slot="pageHeader" :model="queryParams" ref="queryForm" size="mini" :maxShow="20" label-width="68px" v-show="showSearch" @search="handleQuery" @reset="resetQuery">
<el-form-item label="账单月份" prop="billMonth">
<el-date-picker size="mini" style="width:100%" v-model="queryParams.billMonth" type="month" placeholder="账单月份" value-format="yyyy-MM"></el-date-picker>
@ -63,6 +63,10 @@
@sort-change="handleSortChange"
@row-dblclick="onDblClick"
highlight-current-row
show-summary
:summary-method="getSummaries"
>
<div slot="toolbar">
<el-row :gutter="10" class="mb8">
@ -77,24 +81,23 @@
</el-col>
</el-row>
</div>
<!-- 销售联系人 账单总数量 已开票账单数量 未开票账单数量 不开票账单数量 部分开票账单数量 正常开票数量 超时开票数量 超时未开票账单数量 正常开票率 超期开票率 -->
<el-table-column type="selection" width="55" align="center" />
<el-table-column :label="$t('销售联系人')" align="center" prop="salesmen" min-width="100" />
<el-table-column :label="$t('账期')" align="center" prop="billMonth" min-width="100" />
<el-table-column :label="$t('账单总数量')" align="center" prop="totalBillCount" min-width="150" />
<el-table-column :label="$t('账单总数')" align="center" prop="totalBillCount" min-width="120" :sortable="true"/>
<el-table-column :label="$t('已开票账单数量')" align="center" prop="hasOpenBillCount" min-width="150" />
<el-table-column :label="$t('部分开票账单数量')" align="center" prop="someOpenBillCount" min-width="150" />
<el-table-column :label="$t('未开票账单数量')" align="center" prop="noOpenBillCount" min-width="150" />
<el-table-column :label="$t('已开票账单数')" align="center" prop="hasOpenBillCount" min-width="150" :sortable="true"/>
<el-table-column :label="$t('部分开票账单数')" align="center" prop="someOpenBillCount" min-width="150" :sortable="true"/>
<el-table-column :label="$t('未开票账单数')" align="center" prop="noOpenBillCount" min-width="150" :sortable="true"/>
<el-table-column :label="$t('不开票账单数量')" align="center" prop="noNeedOpenBillCount" min-width="150" />
<el-table-column :label="$t('不开票账单数')" align="center" prop="noNeedOpenBillCount" min-width="150" :sortable="true"/>
<el-table-column :label="$t('正常开票数量')" align="center" prop="normalOpenBillCount" min-width="150" />
<el-table-column :label="$t('正常开票数')" align="center" prop="normalOpenBillCount" min-width="150" :sortable="true"/>
<el-table-column :label="$t('超时开票数量')" align="center" prop="expiredOpenBillCount" min-width="150" />
<el-table-column :label="$t('超时未开票账单数量')" align="center" prop="expiredNoOpenBillCount" min-width="150" />
<el-table-column :label="$t('超时开票数')" align="center" prop="expiredOpenBillCount" min-width="150" :sortable="true"/>
<el-table-column :label="$t('超时未开票账单数')" align="center" prop="expiredNoOpenBillCount" min-width="160" :sortable="true"/>
<el-table-column :label="$t('正常开票率')" align="center" prop="normalOpenBillRate" min-width="150">
<template slot-scope="scope">
@ -117,7 +120,6 @@
import { queryOpenBillStatInfoList } from "@/api/emis/emisSettleBill";
import SalemanPicker from '@/views/emis/EmisBaseTools/SalemanPicker.vue';
export default {
@ -238,13 +240,171 @@ export default {
this.single = selection.length!==1
this.multiple = !selection.length
},
// 排序 查询字段是表格中字段名字 动态取值排序顺序
handleSortChange(column) {
this.queryParams.orderByColumn = column.prop;
this.queryParams.isAsc = column.order;
this.getList();
// 排序 查询字段是表格中字段名字 动态取值排序顺序
getProperty(obj, str) {
str = str.replace(/\[(\w+)\]/g, ".$1"); // 处理数组下标
let arr = str.split(".");
for (let i in arr) {
obj = obj[arr[i]] || "";
}
return obj;
},
sortFun: function (attr, rev) {
//第一个参数传入info里的prop表示排的是哪一列,第二个参数是升还是降排序
if (rev == undefined||rev==null) {
rev = 1;
} else {
rev = (rev) ? 1 : -1;
}
let that=this;
return function (a, b) {
a = that.getProperty(a,attr);
b = that.getProperty(b,attr);
if (a < b) {
return rev * -1;
}
if (a > b) {
return rev * 1;
}
return 0;
}
},
// 排序 查询字段是表格中字段名字 动态取值排序顺序
handleSortChange(column) {
this.emisStatList = this.emisStatList.sort(
this.sortFun(column.prop, column.order === 'ascending')
);
},
//指定列求和
getSummaries(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计';
return;
}
else if (
column.property === 'totalBillCount'
) {
const values = data.map(item => Number(item.totalBillCount));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(0);
}
else if(
column.property === 'hasOpenBillCount'
){
const values = data.map(item => Number(item.hasOpenBillCount));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(0);
}
else if(
column.property === 'someOpenBillCount'
){
const values = data.map(item => Number(item.someOpenBillCount));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(0);
}
else if(
column.property === 'noOpenBillCount'
){
const values = data.map(item => Number(item.noOpenBillCount));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(0);
}
else if(
column.property === 'noNeedOpenBillCount'
){
const values = data.map(item => Number(item.noNeedOpenBillCount));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(0);
}
else if(
column.property === 'normalOpenBillCount'
){
const values = data.map(item => Number(item.normalOpenBillCount));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(0);
}
else if(
column.property === 'expiredOpenBillCount'
){
const values = data.map(item => Number(item.expiredOpenBillCount));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(0);
}
else if(
column.property === 'expiredNoOpenBillCount'
){
const values = data.map(item => Number(item.expiredNoOpenBillCount));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(0);
}
});
console.log(sums);
return sums
},
/** 导出按钮操作 */
handleExport() {
const loadingInstance = this.$loading({

View File

@ -1,5 +1,5 @@
<template>
<XdPageContainer >
<XdPageContainer id="BillPaybackSumQuery1" >
<SearchForm slot="pageHeader" :model="queryParams" ref="queryForm" size="mini" :maxShow="20" label-width="68px" v-show="showSearch" @search="handleQuery" @reset="resetQuery">
<!-- 账单月份 开票状态 收款状态 账期内回款率 超期回款率 超期未回款率 销售联系人 -->
<el-form-item label="账单月份" prop="billMonth">
@ -63,6 +63,10 @@
@selection-change="handleSelectionChange"
@sort-change="handleSortChange"
@row-dblclick="onDblClick"
show-summary
:summary-method="getSummaries"
highlight-current-row
>
<div slot="toolbar">
@ -81,34 +85,37 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column :label="$t('销售联系人')" align="center" prop="salesmen" min-width="100" />
<el-table-column :label="$t('账期')" align="center" prop="billMonth" min-width="100" />
<el-table-column :label="$t('账期')" align="center" prop="billMonth" min-width="80" />
<el-table-column :label="$t('应收总金额')" align="center" prop="recPayMoney" min-width="150" />
<el-table-column :label="$t('账单总数量')" align="center" prop="totalBillCount" min-width="150" />
<el-table-column :label="$t('已收款账单数量')" align="center" prop="hasPayBillCount" min-width="150" />
<el-table-column :label="$t('部分收款账单数量')" align="center" prop="somePayBillCount" min-width="150" />
<el-table-column :label="$t('未收款账单数量')" align="center" prop="noPayBillCount" min-width="150" />
<el-table-column :label="$t('总应收(¥)')" align="center" prop="recPayMoney" min-width="120" :sortable="true"/>
<el-table-column :label="$t('总已收(¥)')" align="center" prop="totalRecdPayMoney" min-width="120" :sortable="true"/>
<el-table-column :label="$t('总未收(¥)')" align="center" prop="totalNoRecdPayMoney" min-width="120" :sortable="true"/>
<el-table-column :label="$t('账期内已收金额')" align="center" prop="recdPayMoney" min-width="150" />
<el-table-column :label="$t('账期内未收金额')" align="center" prop="noRecdPayMoney" min-width="150" />
<el-table-column :label="$t('账单数')" align="center" prop="totalBillCount" min-width="120" :sortable="true"/>
<el-table-column :label="$t('已收账单数')" align="center" prop="hasPayBillCount" min-width="120" :sortable="true"/>
<el-table-column :label="$t('部分收账单数')" align="center" prop="somePayBillCount" min-width="130" :sortable="true"/>
<el-table-column :label="$t('未收账单数')" align="center" prop="noPayBillCount" min-width="130" :sortable="true"/>
<el-table-column :label="$t('超期已收金额')" align="center" prop="expiredRecdPayMoney" min-width="150" />
<el-table-column :label="$t('超期未收金额')" align="center" prop="expiredNoRecdPayMoney" min-width="150" />
<el-table-column :label="$t('账期内已收(¥)')" align="center" prop="recdPayMoney" min-width="140" :sortable="true"/>
<el-table-column :label="$t('账期内未收(¥)')" align="center" prop="noRecdPayMoney" min-width="140" :sortable="true"/>
<el-table-column :label="$t('账期内回款率')" align="center" prop="billPayRate" min-width="150">
<el-table-column :label="$t('超期已收(¥)')" align="center" prop="expiredRecdPayMoney" min-width="130" :sortable="true"/>
<el-table-column :label="$t('超期未收(¥)')" align="center" prop="expiredNoRecdPayMoney" min-width="130" :sortable="true"/>
<el-table-column :label="$t('账期内回款率')" align="center" prop="billPayRate" min-width="130" >
<template slot-scope="scope">
<span>{{ ((scope.row.recdPayMoney / scope.row.recPayMoney) * 100).toFixed(2) + '%' }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('超期回款率')" align="center" prop="expireBillPayRate" min-width="150">
<el-table-column :label="$t('超期回款率')" align="center" prop="expireBillPayRate" min-width="120" >
<template slot-scope="scope">
<span>{{ ((scope.row.expiredRecdPayMoney / scope.row.recPayMoney) * 100).toFixed(2) + '%' }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('超期未回款率')" align="center" prop="expireBillNoPayRate" min-width="150">
<el-table-column :label="$t('超期未回款率')" align="center" prop="expireBillNoPayRate" min-width="150" >
<template slot-scope="scope">
<span>{{ ((scope.row.expiredNoRecdPayMoney / scope.row.recPayMoney) * 100).toFixed(2) + '%' }}</span>
</template>
@ -246,12 +253,227 @@ export default {
this.multiple = !selection.length
},
// 排序 查询字段是表格中字段名字 动态取值排序顺序
handleSortChange(column) {
this.queryParams.orderByColumn = column.prop;
this.queryParams.isAsc = column.order;
this.getList();
getProperty(obj, str) {
str = str.replace(/\[(\w+)\]/g, ".$1"); // 处理数组下标
let arr = str.split(".");
for (let i in arr) {
obj = obj[arr[i]] || "";
}
return obj;
},
sortFun: function (attr, rev) {
//第一个参数传入info里的prop表示排的是哪一列,第二个参数是升还是降排序
if (rev == undefined||rev==null) {
rev = 1;
} else {
rev = (rev) ? 1 : -1;
}
let that=this;
return function (a, b) {
a = that.getProperty(a,attr);
b = that.getProperty(b,attr);
if (a < b) {
return rev * -1;
}
if (a > b) {
return rev * 1;
}
return 0;
}
},
// 排序 查询字段是表格中字段名字 动态取值排序顺序
handleSortChange(column) {
this.emisStatList = this.emisStatList.sort(
this.sortFun(column.prop, column.order === 'ascending')
);
},
//指定列求和
getSummaries(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计';
return;
}
if (
column.property === 'recPayMoney'
) {
const values = data.map(item => Number(item.recPayMoney));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(2);
}
else if (
column.property === 'hasRecdPayMoney'
) {
const values = data.map(item => Number(item.hasRecdPayMoney));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(2);
}
else if (
column.property === 'hasPayBillCount'
) {
const values = data.map(item => Number(item.hasPayBillCount));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(0);
}
else if (
column.property === 'totalBillCount'
) {
const values = data.map(item => Number(item.totalBillCount));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(0);
}
else if(
column.property === 'somePayBillCount'
){
const values = data.map(item => Number(item.somePayBillCount));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(0);
}
else if(
column.property === 'noPayBillCount'
){
const values = data.map(item => Number(item.noPayBillCount));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(0);
}
else if(
column.property === 'recdPayMoney'
){
const values = data.map(item => Number(item.recdPayMoney));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(2);
}
else if(
column.property === 'noRecdPayMoney'
){
const values = data.map(item => Number(item.noRecdPayMoney));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(2);
}
else if(
column.property === 'expiredRecdPayMoney'
){
const values = data.map(item => Number(item.expiredRecdPayMoney));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(2);
}
else if(
column.property === 'expiredNoRecdPayMoney'
){
const values = data.map(item => Number(item.expiredNoRecdPayMoney));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(2);
}
else if(
column.property === 'totalRecdPayMoney'
){
const values = data.map(item => Number(item.totalRecdPayMoney));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(2);
}
else if(
column.property === 'totalNoRecdPayMoney'
){
const values = data.map(item => Number(item.totalNoRecdPayMoney));
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(2);
}
});
console.log(sums);
return sums
},
/** 导出按钮操作 */
handleExport() {
const loadingInstance = this.$loading({