按目的国家统计

This commit is contained in:
wuteng 2025-11-13 17:25:01 +08:00
parent 2529c15a3d
commit 3f2a740aba
3 changed files with 319 additions and 248 deletions

View File

@ -2,12 +2,12 @@
<div class="app-container">
<div class="el-tabs-container">
<el-tabs slot="pageTabs" v-model="activeTab" @tab-click="handleTabsClick">
<el-tab-pane label="出货统计" name="shipment" >
<el-tab-pane label="按运输方式统计" name="shipment" >
<MonthlyShipmentStatQuery @onSelect="onSelect"> </MonthlyShipmentStatQuery>
</el-tab-pane>
<!-- <el-tab-pane label="按目的国家统计" name="receiveCountry" >
<el-tab-pane label="按目的国家统计" name="receiveCountry" >
<monthlyShipmentStatReceiveCountryQuery @onSelect="onSelect"> </monthlyShipmentStatReceiveCountryQuery>
</el-tab-pane> -->
</el-tab-pane>
<el-tab-pane label="明细列表" v-if="showDtlList" name="dtlList" >
<!-- <PayBackRecordList :queryType="queryType" :queryInfo="queryInfo"></PayBackRecordList> -->
</el-tab-pane>

View File

@ -4,30 +4,30 @@
<el-row :gutter="0" style="display: flex;flex-wrap: wrap;">
<!-- 查询条件:客户名称、寄件公司、销售联系人、回款联系人、运单号、账单号、账期月、收款时间、收款登记人、 -->
<el-col :span="6">
<el-form-item label="寄件时间" prop="createTime" label-width="68px">
<el-form-item label="寄件时间" prop="createTime" label-width="68px">
<elDateAdvPicker v-model="dateTimeRange" style="z-index:9999;width:260px" ></elDateAdvPicker>
</el-form-item>
<el-form-item label="客户名称" prop="custNo" label-width="68px">
<AllMonthpayAccountPicker v-model="queryParams.custNo" style="width:260px"></AllMonthpayAccountPicker>
</el-form-item>
</el-col>
<el-col :span="18">
<el-form-item label="客户名称" prop="custNo">
<AllMonthpayAccountPicker v-model="queryParams.custNo" style="width:100%" ></AllMonthpayAccountPicker>
</el-form-item>
<el-form-item label="寄件国家" prop="sendCountry">
<CountryPicker1 v-model="queryParams.sendCountry" :placeholder="$t('寄件国家')" ></CountryPicker1>
</el-form-item>
<el-form-item label="目的国家" prop="receiveCountry">
<CountryPicker2 v-model="queryParams.receiveCountry" :placeholder="$t('目的国家')" ></CountryPicker2>
</el-form-item>
<el-form-item label="寄件国家" prop="sendCountry">
<CountryPicker1 v-model="queryParams.sendCountry" :placeholder="$t('寄件国家')" ></CountryPicker1>
</el-form-item>
<el-form-item label="目的国家" prop="receiveCountry">
<CountryPicker2 v-model="queryParams.receiveCountry" :placeholder="$t('目的国家')" ></CountryPicker2>
</el-form-item>
<el-form-item label="销售主管" prop="salesExecutive" >
<EmpNamePicker1 :placeholder="$t('销售主管')" v-model="queryParams.salesExecutive" ></EmpNamePicker1>
</el-form-item>
<el-form-item label="销售联系人" prop="salesmen" >
<EmpNamePicker2 :placeholder="$t('销售联系人')" v-model="queryParams.salesmen" ></EmpNamePicker2>
</el-form-item>
<el-form-item label="销售支持" prop="salesSupport" >
<EmpNamePicker3 :placeholder="$t('销售支持')" v-model="queryParams.salesSupport" ></EmpNamePicker3>
</el-form-item>
<el-form-item label="销售主管" prop="salesExecutive" >
<EmpNamePicker1 :placeholder="$t('销售主管')" v-model="queryParams.salesExecutive" ></EmpNamePicker1>
</el-form-item>
<el-form-item label="销售联系人" prop="salesmen" >
<EmpNamePicker2 :placeholder="$t('销售联系人')" v-model="queryParams.salesmen" ></EmpNamePicker2>
</el-form-item>
<el-form-item label="销售支持" prop="salesSupport" >
<EmpNamePicker3 :placeholder="$t('销售支持')" v-model="queryParams.salesSupport" ></EmpNamePicker3>
</el-form-item>
</el-col>
</el-row>
</SearchForm>
@ -41,7 +41,7 @@
border
size="mini"
storageName="PayBackStatList_main_2505_05"
storageName="MonthlyShipmentStatList_main_2511_13"
:data="emisStatList"
:showSearch.sync="showSearch"
@ -205,7 +205,7 @@ export default {
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
pageSize: 20,
custNo: null,
sendCountry: null,
receiveCountry: null,
@ -215,6 +215,7 @@ export default {
params: {
beginSendDate: null,
endSendDate: null,
statType:'1'
}
},
// 表单参数

View File

@ -7,11 +7,11 @@
<el-form-item label="寄件时间" prop="createTime" label-width="68px">
<elDateAdvPicker v-model="dateTimeRange" style="z-index:9999;width:260px" ></elDateAdvPicker>
</el-form-item>
<el-form-item label="客户名称" prop="custNo" label-width="68px">
<AllMonthpayAccountPicker v-model="queryParams.custNo" style="width:260px" ></AllMonthpayAccountPicker>
</el-form-item>
</el-col>
<el-col :span="18">
<el-form-item label="客户名称" prop="custNo">
<AllMonthpayAccountPicker v-model="queryParams.custNo" style="width:100%" ></AllMonthpayAccountPicker>
</el-form-item>
<el-form-item label="寄件国家" prop="sendCountry">
<CountryPicker1 v-model="queryParams.sendCountry" :placeholder="$t('寄件国家')" ></CountryPicker1>
</el-form-item>
@ -41,7 +41,7 @@
border
size="mini"
storageName="PayBackStatList_main_2505_05"
storageName="MonthlyShipmentStatReceiveCountryList_main_2511_13"
:data="emisStatList"
:showSearch.sync="showSearch"
@ -78,45 +78,61 @@
</el-table-column>
<el-table-column :label="$t('总重量')" align="center" prop="totalWeight" min-width="100" />
<el-table-column :label="$t('销售联系人')" align="center" prop="salesmen" min-width="120" />
<el-table-column :label="$t('越南')" align="center" prop="express" min-width="120" >
<el-table-column :label="$t('票数')" align="center" prop="expressTickets" min-width="120" >
<el-table-column :label="$t('中国')" align="center" prop="china" min-width="120" >
<el-table-column :label="$t('票数')" align="center" prop="chinaTickets" min-width="120" >
<template slot-scope="scope">
<span @click="handleShowBillList(scope.row,1)">{{ scope.row.expressTickets }}</span>
<span @click="handleShowBillList(scope.row,'0086')">{{ scope.row.chinaTickets }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('实际重量')" align="center" prop="expressWeight" min-width="120" />
<el-table-column :label="$t('实际重量')" align="center" prop="chinaWeight" min-width="120" />
</el-table-column>
<el-table-column :label="$t('空运')" align="center" prop="air" width="100" >
<el-table-column :label="$t('票数')" align="center" prop="airTickets" min-width="120" >
<el-table-column :label="$t('越南')" align="center" prop="vietnam" min-width="120" >
<el-table-column :label="$t('票数')" align="center" prop="vietnamTickets" min-width="120" >
<template slot-scope="scope">
<span @click="handleShowBillList(scope.row,2)">{{ scope.row.airTickets }}</span>
<span @click="handleShowBillList(scope.row,'0084')">{{ scope.row.vietnamTickets }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('实际重量')" align="center" prop="airWeight" min-width="120" />
<el-table-column :label="$t('实际重量')" align="center" prop="vietnamWeight" min-width="120" />
</el-table-column>
<el-table-column :label="$t('陆运')" align="center" prop="land" width="100" >
<el-table-column :label="$t('票数')" align="center" prop="landTickets" min-width="120" >
<el-table-column :label="$t('柬埔寨')" align="center" prop="cambodia" width="100" >
<el-table-column :label="$t('票数')" align="center" prop="cambodiaTickets" min-width="120" >
<template slot-scope="scope">
<span @click="handleShowBillList(scope.row,'0855')">{{ scope.row.cambodiaTickets }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('实际重量')" align="center" prop="cambodiaWeight" min-width="120" />
</el-table-column>
<el-table-column :label="$t('缅甸票')" align="center" prop="myanmar" width="100" >
<el-table-column :label="$t('票数')" align="center" prop="myanmarTickets" min-width="120" >
<template slot-scope="scope">
<span @click="handleShowBillList(scope.row,'3,5')">{{ scope.row.landTickets }}</span>
<span @click="handleShowBillList(scope.row,'0095')">{{ scope.row.myanmarTickets }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('实际重量')" align="center" prop="landWeight" min-width="120" />
<el-table-column :label="$t('实际重量')" align="center" prop="myanmarWeight" min-width="120" />
</el-table-column>
<el-table-column :label="$t('进口')" align="center" prop="import" width="100" >
<el-table-column :label="$t('票数')" align="center" prop="importTickets" min-width="120" >
<el-table-column :label="$t('孟加拉')" align="center" prop="bangladesh" width="100" >
<el-table-column :label="$t('票数')" align="center" prop="bangladeshTickets" min-width="120" >
<template slot-scope="scope">
<span @click="handleShowBillList(scope.row,'import')">{{ scope.row.importTickets }}</span>
<span @click="handleShowBillList(scope.row,'0880')">{{ scope.row.bangladeshTickets }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('实际重量')" align="center" prop="importWeight" min-width="120" />
<el-table-column :label="$t('实际重量')" align="center" prop="bangladeshWeight" min-width="120" />
</el-table-column>
<el-table-column :label="$t('海运')" align="center" prop="sea" width="100" >
<el-table-column :label="$t('票数')" align="center" prop="seaTickets" min-width="120" >
<el-table-column :label="$t('老挝')" align="center" prop="lao" width="100" >
<el-table-column :label="$t('票数')" align="center" prop="laoTickets" min-width="120" >
<template slot-scope="scope">
<span @click="handleShowBillList(scope.row,4)">{{ scope.row.seaTickets }}</span>
<span @click="handleShowBillList(scope.row,'0856')">{{ scope.row.laoTickets }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('实际重量')" align="center" prop="seaWeight" min-width="120" />
<el-table-column :label="$t('实际重量')" align="center" prop="laoWeight" min-width="120" />
</el-table-column>
<el-table-column :label="$t('泰国')" align="center" prop="thailand" width="100" >
<el-table-column :label="$t('票数')" align="center" prop="thailandTickets" min-width="120" >
<template slot-scope="scope">
<span @click="handleShowBillList(scope.row,'0066')">{{ scope.row.thailandTickets }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('实际重量')" align="center" prop="thailandWeight" min-width="120" />
</el-table-column>
<el-table-column :label="$t('其他')" align="center" prop="other" width="100" >
<el-table-column :label="$t('票数')" align="center" prop="otherTickets" min-width="120" >
@ -205,7 +221,7 @@ export default {
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
pageSize: 20,
custNo: null,
sendCountry: null,
receiveCountry: null,
@ -215,6 +231,7 @@ export default {
params: {
beginSendDate: null,
endSendDate: null,
statType:'2'
}
},
// 表单参数
@ -239,7 +256,7 @@ export default {
end = new Date(nextMonthFirstDay - oneDay)
end.setHours(23, 59, 59, 0)
this.dateTimeRange = [timeFormat(start), timeFormat(end)]
// this.getList();
this.getList();
},
methods: {
initQueryParams(){
@ -248,10 +265,10 @@ export default {
return thisQueryParams;
},
handleShowBillList(row, transType) {
handleShowBillList(row, receiveCountry) {
let params = {
...this.queryParams,
transType: transType,
receiveCountry: receiveCountry,
custNo: row.custNo,
};
console.log("====>params====>", params);
@ -330,208 +347,261 @@ export default {
},
//指定列求和
getSummaries(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计';
return;
}
if (
column.property === 'totalTickets'
) {
const values = data.map(item => Number(item.totalTickets));
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);
}
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计';
return;
}
if (
column.property === 'totalTickets'
) {
const values = data.map(item => Number(item.totalTickets));
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 === 'totalWeight'
else if (
column.property === 'totalWeight'
) {
const values = data.map(item => Number(item.totalWeight));
) {
const values = data.map(item => Number(item.totalWeight));
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 === 'expressTickets'
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 === 'chinaTickets'
) {
const values = data.map(item => Number(item.expressTickets));
) {
const values = data.map(item => Number(item.chinaTickets));
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);
}
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 === 'expressWeight'
) {
const values = data.map(item => Number(item.expressWeight));
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 === 'airTickets'
){
const values = data.map(item => Number(item.airTickets));
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 === 'airWeight'
){
const values = data.map(item => Number(item.airWeight));
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 === 'landTickets'
){
const values = data.map(item => Number(item.landTickets));
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 === 'landWeight'
){
const values = data.map(item => Number(item.landWeight));
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 === 'importTickets'
){
const values = data.map(item => Number(item.importTickets));
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 === 'importWeight'
){
const values = data.map(item => Number(item.importWeight));
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 === 'seaTickets'
){
const values = data.map(item => Number(item.seaTickets));
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 === 'seaWeight'
){
const values = data.map(item => Number(item.seaWeight));
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 === 'otherTickets'
){
const values = data.map(item => Number(item.otherTickets));
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 === 'otherWeight'
){
const values = data.map(item => Number(item.otherWeight));
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);
}
});
return sums
},
else if (
column.property === 'chinaWeight'
) {
const values = data.map(item => Number(item.chinaWeight));
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 === 'vietnamTickets'
) {
const values = data.map(item => Number(item.vietnamTickets));
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 === 'vietnamWeight'
) {
const values = data.map(item => Number(item.vietnamWeight));
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 === 'cambodiaTickets'
) {
const values = data.map(item => Number(item.cambodiaTickets));
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 === 'cambodiaWeight'
) {
const values = data.map(item => Number(item.cambodiaWeight));
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 === 'myanmarTickets'
) {
const values = data.map(item => Number(item.myanmarTickets));
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 === 'myanmarWeight'
) {
const values = data.map(item => Number(item.myanmarWeight));
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 === 'bangladeshTickets'
) {
const values = data.map(item => Number(item.bangladeshTickets));
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 === 'bangladeshWeight'
) {
const values = data.map(item => Number(item.bangladeshWeight));
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 === 'otherTickets'
) {
const values = data.map(item => Number(item.otherTickets));
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 === 'otherWeight'
) {
const values = data.map(item => Number(item.otherWeight));
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 === 'laosTickets'
) {
const values = data.map(item => Number(item.laosTickets));
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 === 'laosWeight'
) {
const values = data.map(item => Number(item.laosWeight));
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 === 'thailandTickets'
) {
const values = data.map(item => Number(item.thailandTickets));
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 === 'thailandWeight'
) {
const values = data.map(item => Number(item.thailandWeight));
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);
}
});
return sums
},
handleExportDtl(){
},