feat(库存汇总报表-新):新增存汇总报表-新

This commit is contained in:
chengzhaofeng 2025-03-13 15:17:32 +08:00
parent 925ecf51f6
commit 457c6d6ab0
2 changed files with 603 additions and 0 deletions

View File

@ -16,4 +16,28 @@ export function pageInventorySummaryReport(obj, params) {
params: params
});
}
export function pageInventorySummaryReportNewOne(obj, params) {
return request({
url: '/mom-wms/inventory-query-report/pageInventorySummaryReportNewOne',
method: 'post',
data: obj,
params: params
});
}
export function pageInventorySummaryReportNewTwo(obj, params) {
return request({
url: '/mom-wms/inventory-query-report/pageInventorySummaryReportNewTwo',
method: 'post',
data: obj,
params: params
});
}
export function pageInventorySummaryReportNewThree(obj, params) {
return request({
url: '/mom-wms/inventory-query-report/pageInventorySummaryReportNewThree',
method: 'post',
data: obj,
params: params
});
}

View File

@ -0,0 +1,579 @@
<template>
<div class="execution">
<!-- 仓库弹出框 -->
<input-select-dialog
:modal-obj="warehouseDialog"
:modal-show.sync="warehouseDialog.visible"
:modal-fetch-fun="warehouseDialog.fetchFun"
@inputDialogSelected="(row) => {dialogSelected(row, 'warehouse')}"
></input-select-dialog>
<!-- 物料出框 -->
<input-select-dialog
:modal-obj="itemDialog"
:modal-show.sync="itemDialog.visible"
:modal-fetch-fun="itemDialog.fetchFun"
@inputDialogSelected="(row) => {dialogSelected(row, 'item')}"
></input-select-dialog>
<!-- 三级弹出框 -->
<el-dialog
title="条码信息"
:visible.sync="threeFormObj.threeDialogVisible"
width="70%">
<!-- 按钮 -->
<c-top-bar :offset="50">
<el-button type="text" icon="el-icon-document" disabled>规格:{{threeFormObj.specifications}}</el-button>
<el-divider direction="vertical"></el-divider>
<el-button type="text" icon="el-icon-document" disabled>总米数:{{threeFormObj.qtySum}}</el-button>
<el-divider direction="vertical"></el-divider>
<el-button type="text" icon="el-icon-document" @click="doThreeExport">导出</el-button>
<el-divider style="margin-top: 0px;"></el-divider>
</c-top-bar>
<!-- 表单 -->
<el-form ref="threeFormObj" :model="threeFormObj" label-width="120px">
<el-row :gutter="24">
<el-col :span="24">
<el-table size="mini" :data="threeFormObj.threeTableList" border style="width: 100%" height="550px"
highlight-current-row>
<el-table-column align="center" prop="erpStorageLocation" label="仓库"></el-table-column>
<el-table-column align="center" prop="inventoryId" width="200" label="卷号/托"></el-table-column>
<el-table-column align="center" prop="statusDescription" label="状态"></el-table-column>
<el-table-column align="center" prop="item" label="物料"></el-table-column>
<el-table-column align="center" prop="itemDescription" label="物料描述"></el-table-column>
<el-table-column align="center" prop="qualityInspectionStatusDesc" label="等级"></el-table-column>
<el-table-column align="center" prop="qty" label="米数"></el-table-column>
<el-table-column align="center" prop="unitOfMeasure" label="单位"></el-table-column>
</el-table>
<div style="width: 100%;display: flex;flex-direction: column;align-items: center;justify-content: center;">
<el-pagination @current-change="handleThreeCurrentChange"
@size-change="handleThreeSizeChange"
:current-page.sync="threeFormObj.threePage.current"
:page-sizes="[10, 20, 50, 100, 200]"
:page-size="threeFormObj.threePage.size"
layout="total, sizes, prev, pager, next, jumper"
:total="threeFormObj.threePage.total">
</el-pagination>
</div>
</el-col>
</el-row>
</el-form>
</el-dialog>
<!-- 二级弹出框 -->
<el-dialog
title="详细信息"
:visible.sync="twoFormObj.twoDialogVisible"
width="70%">
<!-- 按钮 -->
<c-top-bar :offset="50">
<el-button type="text" icon="el-icon-document" disabled>仓库:{{twoFormObj.erpStorageLocation}}</el-button>
<el-divider direction="vertical"></el-divider>
<el-button type="text" icon="el-icon-document" disabled>状态:{{twoFormObj.statusDescription}}</el-button>
<el-divider direction="vertical"></el-divider>
<el-button type="text" icon="el-icon-document" disabled>物料:{{twoFormObj.item}}</el-button>
<el-divider direction="vertical"></el-divider>
<el-button type="text" icon="el-icon-document" disabled>物料描述:{{twoFormObj.itemDescription}}</el-button>
<el-divider direction="vertical"></el-divider>
<el-button type="text" icon="el-icon-document" disabled>总支数:{{twoFormObj.branchSum}}</el-button>
<el-divider direction="vertical"></el-divider>
<el-button type="text" icon="el-icon-document" disabled>总米数:{{twoFormObj.qtySum}}</el-button>
<el-divider direction="vertical"></el-divider>
<el-button type="text" icon="el-icon-search" @click="doTwoRetrieve(true)">检索</el-button>
<el-divider direction="vertical"></el-divider>
<el-button type="text" icon="el-icon-circle-close" @click="doTwoClear()">清除</el-button>
<el-divider direction="vertical"></el-divider>
<el-button type="text" icon="el-icon-export" @click="doTwoExport">导出</el-button>
<el-divider style="margin-top: 0px;"></el-divider>
</c-top-bar>
<!-- 表单 -->
<el-form ref="twoFormObj" :model="twoFormObj" label-width="80px">
<el-row :gutter="24">
<!-- 等级 -->
<el-col :span="8">
<el-form-item label="等级:" prop="qualityInspectionStatus">
<el-select v-model="twoFormObj.qualityInspectionStatus" placeholder="请选择等级" clearable>
<el-option v-for="item in levelList" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
</el-form-item>
</el-col>
<!-- 米数 -->
<el-col :span="8">
<el-form-item label="长度:" prop="qty">
<el-input placeHolder="请输入长度" v-model="twoFormObj.qty"></el-input>
</el-form-item>
</el-col>
<!-- 数量 -->
<el-col :span="8">
<el-form-item label="支数:" prop="branch">
<el-input placeHolder="请输入数量" v-model="twoFormObj.branch"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-table size="mini" :data="twoFormObj.twoTableList" border style="width: 100%" height="550px" @row-click="handleTwoRowClick"
highlight-current-row>
<el-table-column align="center" prop="erpStorageLocation" label="仓库"></el-table-column>
<el-table-column align="center" prop="statusDescription" label="状态"></el-table-column>
<el-table-column align="center" prop="item" label="物料"></el-table-column>
<el-table-column align="center" prop="itemDescription" label="物料描述"></el-table-column>
<el-table-column align="center" prop="qualityInspectionStatusDesc" label="等级"></el-table-column>
<el-table-column align="center" prop="specifications" label="规格(长度)"></el-table-column>
<el-table-column align="center" prop="qtySum" label="汇总米数"></el-table-column>
<el-table-column align="center" prop="unitOfMeasure" label="单位"></el-table-column>
</el-table>
<div style="width: 100%;display: flex;flex-direction: column;align-items: center;justify-content: center;">
<el-pagination @current-change="handleTwoCurrentChange"
@size-change="handleTwoSizeChange"
:current-page.sync="twoFormObj.twoPage.current"
:page-sizes="[10, 20, 50, 100, 200]"
:page-size="twoFormObj.twoPage.size"
layout="total, sizes, prev, pager, next, jumper"
:total="twoFormObj.twoPage.total">
</el-pagination>
</div>
</el-col>
</el-row>
</el-form>
</el-dialog>
<!-- 一级界面 -->
<basic-container style="margin-top: -20px">
<!-- 按钮 -->
<c-top-bar :offset="50">
<el-button type="text" icon="el-icon-search" @click="doRetrieve(true)">检索</el-button>
<el-divider direction="vertical"></el-divider>
<el-button type="text" icon="el-icon-circle-close" @click="doClear()">清除</el-button>
<el-divider direction="vertical"></el-divider>
<el-button type="text" icon="el-icon-document" @click="doExport">导出</el-button>
<el-divider style="margin-top: 0px;"></el-divider>
</c-top-bar>
<!-- 搜索框 -->
<el-form ref="mainFormObj" :model="mainFormObj" label-width="120px">
<el-row :gutter="24">
<!-- 站点 -->
<el-col :span="6">
<el-form-item label="站点:" prop="site">
<el-input placeHolder="站点" v-model="site" :disabled="true"></el-input>
</el-form-item>
</el-col>
<!-- 仓库 -->
<el-col :span="6">
<el-form-item label="仓库:" prop="erpStorageLocation">
<el-input placeHolder="请选择仓库" v-model="mainFormObj.erpStorageLocation">
<i slot="suffix" class="el-input__icon el-icon-copy-document"
@click.stop="openDialog('warehouse')"></i>
</el-input>
</el-form-item>
</el-col>
<!-- 物料 -->
<el-col :span="6">
<el-form-item label="物料:" prop="item">
<el-input placeHolder="请选择物料" v-model="mainFormObj.item">
<i slot="suffix" class="el-input__icon el-icon-copy-document"
@click.stop="openDialog('item')"></i>
</el-input>
</el-form-item>
</el-col>
<!-- 状态 -->
<el-col :span="6">
<el-form-item label="状态:" prop="status">
<el-select v-model="mainFormObj.status" placeholder="请选择状态" clearable>
<el-option v-for="item in statusList" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 表格 -->
<el-tabs v-model="tabActiveName">
<el-tab-pane label="查询结果" name="main">
<el-table size="mini" :data="mainFormObj.mainTableList" border style="width: 100%" height="550"
@row-click="handleMainRowClick"
highlight-current-row>
<el-table-column align="center" prop="erpStorageLocation" label="仓库"></el-table-column>
<el-table-column align="center" prop="statusDescription" label="状态"></el-table-column>
<el-table-column align="center" prop="item" label="物料"></el-table-column>
<el-table-column align="center" prop="itemDescription" label="物料描述"></el-table-column>
<el-table-column align="center" prop="branchSum" label="汇总支数"></el-table-column>
<el-table-column align="center" prop="qtySum" label="汇总米数"></el-table-column>
<el-table-column align="center" prop="unitOfMeasure" label="单位"></el-table-column>
</el-table>
<div style="width: 100%;display: flex;flex-direction: column;align-items: center;justify-content: center;">
<el-pagination @current-change="handleCurrentChange"
@size-change="handleSizeChange"
:current-page.sync="mainFormObj.mainPage.current"
:page-sizes="[10, 20, 50, 100, 200]"
:page-size="mainFormObj.mainPage.size"
layout="total, sizes, prev, pager, next, jumper"
:total="mainFormObj.mainPage.total">
</el-pagination>
</div>
</el-tab-pane>
</el-tabs>
</basic-container>
</div>
</template>
<script>
import {
pageInventorySummaryReportNewOne,
pageInventorySummaryReportNewThree,
pageInventorySummaryReportNewTwo
} from '@/api/wms/inventoryQueryReport';
import {fetchList as fetchItemList} from '@/api/mes/prd/item';
import {fetchList as fetchWarehouse} from '@/api/wms/warehouse'
import {hideLoading, showLoading} from '@/const/loading';
import {mapGetters} from 'vuex';
import {getStore} from "@/util/store";
import {remote as fetchDictItemList} from "@/api/admin/dict";
export default {
data() {
return {
tabActiveName: "main",
site: getStore({name: 'tenantId'}),
mainFormObj: {
notAllowZero: true,
erpStorageLocation: '',
item: '',
status: '',
mainTableList: [],
mainPage: {
total: 0,
current: 1,
size: 20
},
},
twoFormObj: {
notAllowZero: true,
erpStorageLocation: '',
site: '',
item: '',
status: '',
statusDescription: '',
qtySum: '',
branch: '',
unitOfMeasure: '',
qty: '',
branchSum: '',
qualityInspectionStatus: '',
twoTableList: [],
twoPage: {
total: 0,
current: 1,
size: 20
},
twoDialogVisible: false,
},
threeFormObj: {
notAllowZero: true,
erpStorageLocation: '',
site: '',
item: '',
status: '',
unitOfMeasure: '',
qty: '',
qualityInspectionStatus: '',
threeTableList: [],
threePage: {
total: 0,
current: 1,
size: 20
},
threeDialogVisible: false,
},
itemDialog: {
callBackKey: "item",
regex: " ",
condition: "item",
tableColumn: [
{prop: "item", label: "物料"},
{prop: "description", label: "描述"},
],
visible: false,
fetchFun: fetchItemList,
},
warehouseDialog: {
callBackKey: "warehouse",
regex: " ",
condition: "warehouse",
tableColumn: [
{prop: "warehouse", label: "仓库"},
{prop: "description", label: "描述"},
],
visible: false,
fetchFun: fetchWarehouse,
},
statusList: [],
levelList: [],
};
},
created() {
fetchDictItemList("INVENTORY_ID_STATUS").then(response => {
this.statusList = response.data.data;
})
fetchDictItemList("INSPEC_LEVEL").then(response => {
this.levelList = response.data.data;
})
},
computed: {
...mapGetters(['permissions']),
permissionList() {
return {};
}
},
methods: {
// 三级界面-检索
doThreeRetrieve(flag) {
let me = this;
if (flag) {
me.threeFormObj.threePage.current = 1;
}
let obj = {
erpStorageLocation: me.threeFormObj.erpStorageLocation,
item: me.threeFormObj.item,
itemDescription: me.threeFormObj.itemDescription,
unitOfMeasure: me.threeFormObj.unitOfMeasure,
status: me.threeFormObj.status,
qualityInspectionStatus: me.threeFormObj.qualityInspectionStatus,
qty: me.threeFormObj.qty,
};
showLoading();
pageInventorySummaryReportNewThree(obj, me.threeFormObj.threePage).then(response => {
if (!response.data.data || response.data.data.length === 0) {
this.$message.error('检索无数据');
this.doClear();
} else {
let data = response.data.data;
me.threeFormObj.threeTableList = data.records;
me.threeFormObj.threePage.total = data.total;
me.threeFormObj.threePage.current = data.current;
}
}).finally(() => {
hideLoading();
});
},
// 三级界面-页面大小改变
handleThreeSizeChange(val) {
this.threeFormObj.threePage.size = val;
this.threeFormObj.threePage.current = 1;
this.doThreeRetrieve();
},
// 三级界面-页面切换
handleThreeCurrentChange(val) {
this.threeFormObj.threePage.current = val;
this.doThreeRetrieve();
},
// 三级界面-导出
doThreeExport() {
let me = this;
let search = {
site: me.site,
erpStorageLocation: me.threeFormObj.erpStorageLocation,
item: me.threeFormObj.item,
itemDescription: me.threeFormObj.itemDescription,
unitOfMeasure: me.threeFormObj.unitOfMeasure,
status: me.threeFormObj.status,
qualityInspectionStatus: me.threeFormObj.qualityInspectionStatus,
qty: me.threeFormObj.qty,
};
this.downBlobFile("/mom-wms/inventory-query-report/exportThree", search, "库存汇总表3.xlsx");
},
// 二级界面-检索
doTwoRetrieve(flag) {
let me = this;
if (flag) {
me.twoFormObj.twoPage.current = 1;
}
let obj = {
erpStorageLocation: me.twoFormObj.erpStorageLocation,
item: me.twoFormObj.item,
itemDescription: me.twoFormObj.itemDescription,
unitOfMeasure: me.twoFormObj.unitOfMeasure,
status: me.twoFormObj.status,
qualityInspectionStatus: me.twoFormObj.qualityInspectionStatus,
qty: me.twoFormObj.qty,
branch: me.twoFormObj.branch,
};
showLoading();
pageInventorySummaryReportNewTwo(obj, me.twoFormObj.twoPage).then(response => {
if (!response.data.data || response.data.data.length === 0) {
this.$message.error('检索无数据');
this.doClear();
} else {
let data = response.data.data;
me.twoFormObj.twoTableList = data.records;
me.twoFormObj.twoPage.total = data.total;
me.twoFormObj.twoPage.current = data.current;
}
}).finally(() => {
hideLoading();
});
},
// 二级界面-页面大小改变
handleTwoSizeChange(val) {
this.twoFormObj.twoPage.size = val;
this.twoFormObj.twoPage.current = 1;
this.doTwoRetrieve();
},
// 二级界面-页面切换
handleTwoCurrentChange(val) {
this.twoFormObj.twoPage.current = val;
this.doTwoRetrieve();
},
// 二级界面-单击事件
handleTwoRowClick(row) {
this.threeFormObj.site = this.site;
this.threeFormObj.qualityInspectionStatus = row.qualityInspectionStatus
this.threeFormObj.erpStorageLocation = row.erpStorageLocation;
this.threeFormObj.item = row.item;
this.threeFormObj.itemDescription = row.itemDescription;
this.threeFormObj.unitOfMeasure = row.unitOfMeasure;
this.threeFormObj.specifications = row.specifications;
this.threeFormObj.qtySum = row.qtySum;
this.threeFormObj.qty = row.qty;
this.threeFormObj.status = row.status;
this.threeFormObj.threeTableList = [];
this.threeFormObj.threeDialogVisible = true;
this.doThreeRetrieve();
},
// 二级界面-清除
doTwoClear() {
this.twoFormObj.branch = ''
this.twoFormObj.qty = ''
this.twoFormObj.qualityInspectionStatus = ''
this.twoFormObj.twoTableList = []
this.twoFormObj.twoPage = {
total: 0,
current: 1,
size: 20
}
},
// 二级界面-导出
doTwoExport() {
let me = this;
let search = {
site: me.site,
erpStorageLocation: me.twoFormObj.erpStorageLocation,
item: me.twoFormObj.item,
itemDescription: me.twoFormObj.itemDescription,
unitOfMeasure: me.twoFormObj.unitOfMeasure,
status: me.twoFormObj.status,
qualityInspectionStatus: me.twoFormObj.qualityInspectionStatus,
qty: me.twoFormObj.qty,
branch: me.twoFormObj.branch,
};
this.downBlobFile("/mom-wms/inventory-query-report/exportTwo", search, "库存汇总表2.xlsx");
},
// 主界面-检索
doRetrieve(flag) {
let me = this;
if (flag) {
me.mainFormObj.mainPage.current = 1;
}
let obj = {
erpStorageLocation: me.mainFormObj.erpStorageLocation,
item: me.mainFormObj.item,
status: me.mainFormObj.status,
};
showLoading();
pageInventorySummaryReportNewOne(obj, me.mainFormObj.mainPage).then(response => {
if (!response.data.data || response.data.data.length === 0) {
this.$message.error('检索无数据');
this.doClear();
} else {
let data = response.data.data;
me.mainFormObj.mainTableList = data.records;
me.mainFormObj.mainPage.total = data.total;
me.mainFormObj.mainPage.current = data.current;
}
}).finally(() => {
hideLoading();
});
},
// 主界面-页面大小改变
handleSizeChange(val) {
this.mainFormObj.mainPage.size = val;
this.mainFormObj.mainPage.current = 1;
this.doRetrieve();
},
// 主界面-页面切换
handleCurrentChange(val) {
this.mainFormObj.mainPage.current = val;
this.doRetrieve();
},
// 主界面-单击事件
handleMainRowClick(row) {
this.twoFormObj.site = this.site;
this.twoFormObj.erpStorageLocation = row.erpStorageLocation;
this.twoFormObj.item = row.item;
this.twoFormObj.itemDescription = row.itemDescription;
this.twoFormObj.unitOfMeasure = row.unitOfMeasure;
this.twoFormObj.status = row.status;
this.twoFormObj.statusDescription = row.statusDescription;
this.twoFormObj.qtySum = row.qtySum;
this.twoFormObj.branchSum = row.branchSum;
this.twoFormObj.qty = '';
this.twoFormObj.branch = '';
this.twoFormObj.twoTableList = [];
this.twoFormObj.twoDialogVisible = true;
this.doTwoRetrieve();
},
// 主界面-清除
doClear() {
let me = this;
me.mainFormObj.erpStorageLocation = ''
me.mainFormObj.item = ''
me.mainFormObj.status = ''
me.mainFormObj.mainTableList = []
this.mainFormObj.mainPage = {
total: 0,
current: 1,
size: 20
}
},
// 主界面-导出
doExport() {
let me = this;
let search = {
site: me.site,
erpStorageLocation: me.mainFormObj.erpStorageLocation,
item: me.mainFormObj.item,
status: me.mainFormObj.status,
};
this.downBlobFile("/mom-wms/inventory-query-report/exportOne", search, "库存汇总表1.xlsx");
},
// 弹出框通用选择
dialogSelected(row, type) {
switch (type) {
case 'item':
this.mainFormObj.item = row.item;
break;
case 'warehouse':
this.mainFormObj.erpStorageLocation = row.warehouse;
break;
}
},
// 弹出框通用打开
openDialog(type) {
switch (type) {
case 'item':
this.itemDialog.visible = true;
break;
case 'warehouse':
this.warehouseDialog.visible = true;
break;
}
}
}
};
</script>
<style>
</style>