feat(工单管理): 增强库存查询功能并添加分页支持

- 在物料领料、成品入库和出货对话框中添加分页功能
- 增加"隐藏0库存"开关和库存类别选择器
- 修改API接口为POST方式并支持分页参数
- 优化删除工单的条件判断
This commit is contained in:
2026-03-02 19:19:20 +08:00
parent 99b1a96936
commit b08d8c6f7f
5 changed files with 190 additions and 47 deletions

View File

@@ -290,17 +290,6 @@ export function getShipmentList(workorder) {
}) })
} }
/**
* 根据工单号查询物料库存
* @param {工单号} workorder
*/
export function getMaterialInventoryList(workorder) {
return request({
url: 'mes/productManagement/ProWorkorder/GetMaterialInventoryList/' + workorder,
method: 'get'
})
}
/** /**
* 领料操作 * 领料操作
* @param {领料请求参数} data * @param {领料请求参数} data
@@ -336,36 +325,55 @@ export function shipProduct(data) {
data: data data: data
}) })
} }
/**
* 根据工单号查询物料库存
* @param {工单号} data.workorder
* @param {是否隐藏为0记录} data.isHideZero
* @param {搜索方式} data.searchType
*/
export function getMaterialInventoryList(data) {
return request({
url: 'mes/productManagement/ProWorkorder/GetMaterialInventoryList',
method: 'post',
data
})
}
/** /**
* 根据工单号获取可领料工单清单 * 根据工单号获取可领料工单清单
* @param {工单号} workorder * @param {工单号} data.workorder
* @param {是否隐藏为0记录} data.isHideZero
* @param {查询范围 1-物料库 2-转用库} data.searchType
*/ */
export function getPickableWorkordersByWorkorder(workorder) { export function getPickableWorkordersByWorkorder(data) {
return request({ return request({
url: 'mes/productManagement/ProWorkorder/GetPickableWorkordersByWorkorder/' + workorder, url: 'mes/productManagement/ProWorkorder/GetPickableWorkordersByWorkorder',
method: 'get' method: 'post',
data
}) })
} }
/** /**
* 根据工单号获取可出货订单清单 * 根据工单号获取可出货订单清单
* @param {工单号} workorder * @param {工单号} data.workorder
* @param {是否隐藏为0记录} data.isHideZero
*/ */
export function getShippableOrdersByWorkorder(workorder) { export function getShippableOrdersByWorkorder(data) {
return request({ return request({
url: 'mes/productManagement/ProWorkorder/GetShippableOrdersByWorkorder/' + workorder, url: 'mes/productManagement/ProWorkorder/GetShippableOrdersByWorkorder',
method: 'get' method: 'post',
data
}) })
} }
/** /**
* 根据工单号查询成品库存 * 根据工单号查询成品库存
* @param {工单号} workorder * @param {工单号} data.workorder
* @param {是否隐藏为0记录} data.isHideZero
*/ */
export function getProductInventoryList(workorder) { export function getProductInventoryList(data) {
return request({ return request({
url: 'mes/productManagement/ProWorkorder/GetProductInventoryList/' + workorder, url: 'mes/productManagement/ProWorkorder/GetProductInventoryList',
method: 'get' method: 'post',
data
}) })
} }

View File

@@ -41,6 +41,13 @@
<template #header> <template #header>
<div class="card-header"> <div class="card-header">
<span>可领料库存清单</span> <span>可领料库存清单</span>
<div class="card-header-right">
<el-select v-model="searchType" placeholder="选择库存类别" size="small" style="width: 150px; margin-right: 10px">
<el-option label="物料库" :value="1" />
<el-option label="转用库" :value="2" />
</el-select>
<el-switch v-model="isHideZero" active-text="隐藏0库存" inactive-text="显示0库存" size="small" @change="loadInventoryList" />
</div>
</div> </div>
</template> </template>
<el-table :data="inventoryList" stripe size="small" border v-loading="inventoryLoading"> <el-table :data="inventoryList" stripe size="small" border v-loading="inventoryLoading">
@@ -60,6 +67,17 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页组件 -->
<div class="pagination-container" v-if="inventoryTotal > 0">
<el-pagination
v-model:current-page="pagination.currentPage"
v-model:page-size="pagination.pageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="inventoryTotal"
@size-change="handleSizeChange"
@current-change="handleCurrentChange" />
</div>
</el-card> </el-card>
<!-- 可领料工单选择对话框 --> <!-- 可领料工单选择对话框 -->
@@ -202,6 +220,16 @@ const pickableWorkorders = ref([])
const showWorkorderSelectDialog = ref(false) const showWorkorderSelectDialog = ref(false)
const workorderSelectLoading = ref(false) const workorderSelectLoading = ref(false)
// 新增变量控制是否显示0库存
const isHideZero = ref(true)
const searchType = ref(1)
// 分页变量
const pagination = reactive({
currentPage: 1,
pageSize: 10
})
// 表格数据 // 表格数据
const pickRecords = ref([]) const pickRecords = ref([])
const inventoryList = ref([]) const inventoryList = ref([])
@@ -319,13 +347,19 @@ function loadInventoryList() {
} }
inventoryLoading.value = true inventoryLoading.value = true
// 调用后端API // 调用后端API传递isHideZero、searchType和分页参数
getMaterialInventoryList(props.workorderInfo.workorder) getMaterialInventoryList({
workorder: props.workorderInfo.workorder,
isHideZero: isHideZero.value,
searchType: searchType.value,
pageNum: pagination.currentPage,
pageSize: pagination.pageSize
})
.then((response) => { .then((response) => {
if (response.code === 200) { if (response.code === 200) {
// 转换后端返回的数据格式为前端需要的格式 // 转换后端返回的数据格式为前端需要的格式
inventoryList.value = response.data inventoryList.value = response.data.result || []
inventoryTotal.value = inventoryList.value.length inventoryTotal.value = response.data.totalNum || 0
} else { } else {
proxy.$message.error('获取库存清单失败: ' + response.msg) proxy.$message.error('获取库存清单失败: ' + response.msg)
inventoryList.value = [] inventoryList.value = []
@@ -342,6 +376,17 @@ function loadInventoryList() {
}) })
} }
// 分页相关方法
function handleSizeChange(val) {
pagination.pageSize = val
loadInventoryList()
}
function handleCurrentChange(val) {
pagination.currentPage = val
loadInventoryList()
}
// 加载库位选项 // 加载库位选项
function loadLocationOptions() { function loadLocationOptions() {
// 这里应该调用实际的API接口获取库位列表 // 这里应该调用实际的API接口获取库位列表
@@ -436,12 +481,18 @@ function handlePickMaterial(material) {
// 加载可领料工单列表 // 加载可领料工单列表
function loadPickableWorkorders() { function loadPickableWorkorders() {
workorderSelectLoading.value = true workorderSelectLoading.value = true
// 调用后端API获取可领料工单列表 // 调用后端API获取可领料工单列表传递isHideZero和searchType参数
getPickableWorkordersByWorkorder(props.workorderInfo.workorder) getPickableWorkordersByWorkorder({
Workorder: props.workorderInfo.workorder,
IsHideZero: isHideZero.value,
SearchType: searchType.value,
Page: 1,
PageSize: 100
})
.then((response) => { .then((response) => {
if (response.code === 200) { if (response.code === 200) {
// 计算每个工单的可领料数量 // 计算每个工单的可领料数量
pickableWorkorders.value = response.data pickableWorkorders.value = response.data.result || []
// 显示工单选择对话框 // 显示工单选择对话框
showWorkorderSelectDialog.value = true showWorkorderSelectDialog.value = true
} else { } else {

View File

@@ -37,6 +37,14 @@
<template #header> <template #header>
<div class="card-header"> <div class="card-header">
<span>库存清单</span> <span>库存清单</span>
<div class="card-header-right">
<el-switch
v-model="isHideZero"
active-text="隐藏0库存"
inactive-text="显示0库存"
size="small"
@change="loadInventoryList"
style="margin-right: 10px" />
<el-button <el-button
type="primary" type="primary"
size="small" size="small"
@@ -45,6 +53,7 @@
入库 入库
</el-button> </el-button>
</div> </div>
</div>
</template> </template>
<el-table :data="inventoryList" stripe size="small" border v-loading="inventoryLoading"> <el-table :data="inventoryList" stripe size="small" border v-loading="inventoryLoading">
<el-table-column prop="materialCode" label="产品型号" width="120" /> <el-table-column prop="materialCode" label="产品型号" width="120" />
@@ -53,6 +62,17 @@
<el-table-column prop="currentQuantity" label="当前库存" width="100" /> <el-table-column prop="currentQuantity" label="当前库存" width="100" />
<!-- <el-table-column prop="locationCode" label="库位" width="120" /> --> <!-- <el-table-column prop="locationCode" label="库位" width="120" /> -->
</el-table> </el-table>
<!-- 分页组件 -->
<div class="pagination-container" v-if="inventoryTotal > 0">
<el-pagination
v-model:current-page="pagination.currentPage"
v-model:page-size="pagination.pageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="inventoryTotal"
@size-change="handleSizeChange"
@current-change="handleCurrentChange" />
</div>
</el-card> </el-card>
<!-- 入库单据弹窗 --> <!-- 入库单据弹窗 -->
@@ -134,6 +154,15 @@ const showStorageForm = ref(false)
const recordsLoading = ref(false) const recordsLoading = ref(false)
const inventoryLoading = ref(false) const inventoryLoading = ref(false)
// 新增变量控制是否显示0库存
const isHideZero = ref(true)
// 分页变量
const pagination = reactive({
currentPage: 1,
pageSize: 10
})
// 表格数据 // 表格数据
const storageRecords = ref([]) const storageRecords = ref([])
const inventoryList = ref([]) const inventoryList = ref([])
@@ -240,13 +269,18 @@ function loadInventoryList() {
} }
inventoryLoading.value = true inventoryLoading.value = true
// 调用后端API // 调用后端API传递isHideZero和分页参数
getProductInventoryList(props.workorderInfo.workorder) getProductInventoryList({
workorder: props.workorderInfo.workorder,
isHideZero: isHideZero.value,
pageNum: pagination.currentPage,
pageSize: pagination.pageSize
})
.then((response) => { .then((response) => {
if (response.code === 200) { if (response.code === 200) {
// 转换后端返回的数据格式为前端需要的格式 // 转换后端返回的数据格式为前端需要的格式
inventoryList.value = response.data inventoryList.value = response.data.result || []
inventoryTotal.value = inventoryList.value.length inventoryTotal.value = response.data.totalNum || 0
} else { } else {
proxy.$message.error('获取库存清单失败: ' + response.msg) proxy.$message.error('获取库存清单失败: ' + response.msg)
inventoryList.value = [] inventoryList.value = []
@@ -263,6 +297,17 @@ function loadInventoryList() {
}) })
} }
// 分页相关方法
function handleSizeChange(val) {
pagination.pageSize = val
loadInventoryList()
}
function handleCurrentChange(val) {
pagination.currentPage = val
loadInventoryList()
}
// 获取操作员列表 // 获取操作员列表
function getOperatorList() { function getOperatorList() {
try { try {

View File

@@ -41,6 +41,7 @@
<template #header> <template #header>
<div class="card-header"> <div class="card-header">
<span>可出货订单</span> <span>可出货订单</span>
<el-switch v-model="isHideZero" active-text="隐藏0库存" inactive-text="显示0库存" size="small" @change="loadInventoryList" />
</div> </div>
</template> </template>
<el-table :data="inventoryList" stripe size="small" border v-loading="inventoryLoading"> <el-table :data="inventoryList" stripe size="small" border v-loading="inventoryLoading">
@@ -62,6 +63,17 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页组件 -->
<div class="pagination-container" v-if="inventoryTotal > 0">
<el-pagination
v-model:current-page="pagination.currentPage"
v-model:page-size="pagination.pageSize"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
:total="inventoryTotal"
@size-change="handleSizeChange"
@current-change="handleCurrentChange" />
</div>
</el-card> </el-card>
<!-- 出货单据弹窗 --> <!-- 出货单据弹窗 -->
@@ -147,6 +159,15 @@ const showShipmentForm = ref(false)
const recordsLoading = ref(false) const recordsLoading = ref(false)
const inventoryLoading = ref(false) const inventoryLoading = ref(false)
// 新增变量控制是否显示0库存
const isHideZero = ref(true)
// 分页变量
const pagination = reactive({
currentPage: 1,
pageSize: 10
})
// 表格数据 // 表格数据
const shipmentRecords = ref([]) const shipmentRecords = ref([])
const inventoryList = ref([]) const inventoryList = ref([])
@@ -260,13 +281,18 @@ function loadInventoryList() {
} }
inventoryLoading.value = true inventoryLoading.value = true
// 调用后端API // 调用后端API传递isHideZero和分页参数
getShippableOrdersByWorkorder(props.workorderInfo.workorder) getShippableOrdersByWorkorder({
workorder: props.workorderInfo.workorder,
isHideZero: isHideZero.value,
pageNum: pagination.currentPage,
pageSize: pagination.pageSize
})
.then((response) => { .then((response) => {
if (response.code === 200) { if (response.code === 200) {
// 直接使用后端返回的数据 // 直接使用后端返回的数据
inventoryList.value = response.data || [] inventoryList.value = response.data.result || []
inventoryTotal.value = inventoryList.value.length inventoryTotal.value = response.data.totalNum || 0
} else { } else {
proxy.$message.error('获取库存清单失败: ' + response.msg) proxy.$message.error('获取库存清单失败: ' + response.msg)
inventoryList.value = [] inventoryList.value = []
@@ -283,6 +309,17 @@ function loadInventoryList() {
}) })
} }
// 分页相关方法
function handleSizeChange(val) {
pagination.pageSize = val
loadInventoryList()
}
function handleCurrentChange(val) {
pagination.currentPage = val
loadInventoryList()
}
// 获取操作员列表 // 获取操作员列表
function getOperatorList() { function getOperatorList() {
try { try {

View File

@@ -174,7 +174,9 @@
<el-dropdown-item @click="handleMove(scope.row, 1)"><el-text type="info">上移</el-text></el-dropdown-item> <el-dropdown-item @click="handleMove(scope.row, 1)"><el-text type="info">上移</el-text></el-dropdown-item>
<el-dropdown-item @click="handleMove(scope.row, 2)"><el-text type="info">下移</el-text></el-dropdown-item> <el-dropdown-item @click="handleMove(scope.row, 2)"><el-text type="info">下移</el-text></el-dropdown-item>
<!-- <el-dropdown-item @click="handleUpdate(scope.row)"><el-text type="success">编辑</el-text></el-dropdown-item> --> <!-- <el-dropdown-item @click="handleUpdate(scope.row)"><el-text type="success">编辑</el-text></el-dropdown-item> -->
<el-dropdown-item v-if="scope.row.planNum == 0" @click="handleDelete(scope.row)" <el-dropdown-item
v-if="scope.row.planNum == 0 && (scope.row.feedOrder == null || scope.row.feedOrder == '')"
@click="handleDelete(scope.row)"
><el-text type="danger">删除</el-text></el-dropdown-item ><el-text type="danger">删除</el-text></el-dropdown-item
> >
</el-dropdown-menu> </el-dropdown-menu>