md
This commit is contained in:
parent
18a2813d97
commit
26fef56ade
@ -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({
|
||||
|
||||
@ -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({
|
||||
|
||||
Loading…
Reference in New Issue
Block a user