feat(wms): 仓库选择框添加清空功能并优化库存报警功能

- 在多个组件的仓库选择框中添加 clearable 属性,支持清空选择
- 在库存报警页面添加库存数量的红色高亮和提示功能
-修复部分组件中的仓库 ID 绑定错误
master
zangch@mesnac.com 5 months ago
parent 915cb0e8ab
commit 21b7598896

@ -21,7 +21,7 @@
</el-select> </el-select>
</el-form-item>--> </el-form-item>-->
<el-form-item label="仓库" prop="warehouseId"> <el-form-item label="仓库" prop="warehouseId">
<el-select v-model="queryForm.warehouseId" placeholder="请选择所属仓库"> <el-select v-model="queryForm.warehouseId" placeholder="请选择所属仓库" clearable>
<el-option <el-option
v-for="item in baseStoreList" v-for="item in baseStoreList"
:key="item.warehouseId" :key="item.warehouseId"
@ -186,7 +186,7 @@
<el-input v-model="dialogForm.orderNo" placeholder="请输入订单编号" /> <el-input v-model="dialogForm.orderNo" placeholder="请输入订单编号" />
</el-form-item> </el-form-item>
<el-form-item label="采购订单" v-if="state.showPurchaseOrderSelect"> <el-form-item label="采购订单" v-if="state.showPurchaseOrderSelect">
<el-select v-model="state.selectedPurchaseOrder" placeholder="请选择采购订单" value-key="poId" style="width: 200px"> <el-select v-model="state.selectedPurchaseOrder" placeholder="请选择采购订单" value-key="poId" style="width: 200px" clearable>
<el-option v-for="item in state.purchaseOrders" :key="item.poId" :label="item.poNo" :value="item" /> <el-option v-for="item in state.purchaseOrders" :key="item.poId" :label="item.poNo" :value="item" />
</el-select> </el-select>
<el-button type="primary" @click="handleAssociatePurchaseOrder" style="margin-left: 10px" :disabled="!state.selectedPurchaseOrder"> <el-button type="primary" @click="handleAssociatePurchaseOrder" style="margin-left: 10px" :disabled="!state.selectedPurchaseOrder">
@ -194,7 +194,7 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
<el-form-item label="生产订单" v-if="state.showProductionOrderSelect"> <el-form-item label="生产订单" v-if="state.showProductionOrderSelect">
<el-select v-model="state.selectedProductionOrder" placeholder="请选择生产订单" @change="handleProductionOrderSelect" value-key="productOrderId"> <el-select v-model="state.selectedProductionOrder" placeholder="请选择生产订单" @change="handleProductionOrderSelect" value-key="productOrderId" clearable>
<el-option v-for="item in state.productionOrders" :key="item.productOrderId" :label="item.orderCode" :value="item" /> <el-option v-for="item in state.productionOrders" :key="item.productOrderId" :label="item.orderCode" :value="item" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -209,7 +209,7 @@
</el-select> </el-select>
</el-form-item> --> </el-form-item> -->
<el-form-item label="仓库" prop="warehouseId" > <el-form-item label="仓库" prop="warehouseId" >
<el-select v-model="dialogForm.warehouseId" placeholder="请选择所属仓库"> <el-select v-model="dialogForm.warehouseId" placeholder="请选择所属仓库" clearable>
<el-option <el-option
v-for="item in baseStoreList" v-for="item in baseStoreList"
:key="item.warehouseId" :key="item.warehouseId"

@ -21,7 +21,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="仓库" prop="warehouseId"> <el-form-item label="仓库" prop="warehouseId">
<el-select v-model="queryForm.warehouseId" placeholder="请选择所属仓库"> <el-select v-model="queryForm.warehouseId" placeholder="请选择所属仓库" clearable>
<el-option <el-option
v-for="item in baseStoreList" v-for="item in baseStoreList"
:key="item.warehouseId" :key="item.warehouseId"
@ -173,7 +173,7 @@
<!-- </el-select>--> <!-- </el-select>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<el-form-item label="工单类型" prop="instockType"> <el-form-item label="工单类型" prop="instockType">
<el-select v-model="dialogForm.instockType" placeholder="请选择工单类型"> <el-select v-model="dialogForm.instockType" placeholder="请选择工单类型" clearable>
<el-option <el-option
v-for="dict in wms_instock_type" v-for="dict in wms_instock_type"
:key="dict.value" :key="dict.value"
@ -186,7 +186,7 @@
<el-input v-model="dialogForm.orderNo" placeholder="请输入订单编号" /> <el-input v-model="dialogForm.orderNo" placeholder="请输入订单编号" />
</el-form-item> </el-form-item>
<el-form-item label="采购订单" v-if="state.showPurchaseOrderSelect"> <el-form-item label="采购订单" v-if="state.showPurchaseOrderSelect">
<el-select v-model="state.selectedPurchaseOrder" placeholder="请选择采购订单" value-key="poId" style="width: 200px"> <el-select v-model="state.selectedPurchaseOrder" placeholder="请选择采购订单" value-key="poId" style="width: 200px" clearable>
<el-option v-for="item in state.purchaseOrders" :key="item.poId" :label="item.poNo" :value="item" /> <el-option v-for="item in state.purchaseOrders" :key="item.poId" :label="item.poNo" :value="item" />
</el-select> </el-select>
<el-button type="primary" @click="handleAssociatePurchaseOrder" style="margin-left: 10px" :disabled="!state.selectedPurchaseOrder"> <el-button type="primary" @click="handleAssociatePurchaseOrder" style="margin-left: 10px" :disabled="!state.selectedPurchaseOrder">
@ -194,7 +194,7 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
<el-form-item label="生产订单" v-if="state.showProductionOrderSelect"> <el-form-item label="生产订单" v-if="state.showProductionOrderSelect">
<el-select v-model="state.selectedProductionOrder" placeholder="请选择生产订单" @change="handleProductionOrderSelect" value-key="productOrderId"> <el-select v-model="state.selectedProductionOrder" placeholder="请选择生产订单" @change="handleProductionOrderSelect" value-key="productOrderId" clearable>
<el-option v-for="item in state.productionOrders" :key="item.productOrderId" :label="item.orderCode" :value="item" /> <el-option v-for="item in state.productionOrders" :key="item.productOrderId" :label="item.orderCode" :value="item" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -209,7 +209,7 @@
</el-select> </el-select>
</el-form-item> --> </el-form-item> -->
<el-form-item label="仓库" prop="warehouseId"> <el-form-item label="仓库" prop="warehouseId">
<el-select v-model="dialogForm.warehouseId" placeholder="请选择所属仓库"> <el-select v-model="dialogForm.warehouseId" placeholder="请选择所属仓库" clearable>
<el-option <el-option
v-for="item in baseStoreList" v-for="item in baseStoreList"
:key="item.warehouseId" :key="item.warehouseId"

@ -10,9 +10,9 @@
<!-- <el-form-item label="批次码" prop="batchCode"> <!-- <el-form-item label="批次码" prop="batchCode">
<el-input v-model="queryParams.batchCode" placeholder="请输入批次码" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.batchCode" placeholder="请输入批次码" clearable @keyup.enter="handleQuery" />
</el-form-item> --> </el-form-item> -->
<el-form-item label="物料" prop="materialCode"> <!-- <el-form-item label="物料" prop="materialCode" clearable>
<el-input v-model="queryParams.materialCode" placeholder="请输入物料" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.materialCode" placeholder="请输入物料" clearable @keyup.enter="handleQuery" />
</el-form-item> </el-form-item>-->
<!-- <el-form-item label="库位编码" prop="locationCode"> <!-- <el-form-item label="库位编码" prop="locationCode">
<el-input v-model="queryParams.locationCode" placeholder="请输入库位编码" clearable @keyup.enter="handleQuery" /> <el-input v-model="queryParams.locationCode" placeholder="请输入库位编码" clearable @keyup.enter="handleQuery" />
</el-form-item> --> </el-form-item> -->
@ -39,7 +39,7 @@
</el-select> </el-select>
</el-form-item> --> </el-form-item> -->
<el-form-item label="仓库" prop="storeId"> <el-form-item label="仓库" prop="storeId">
<el-select v-model="form.warehouseId" placeholder="请选择所属仓库"> <el-select v-model="queryParams.storeId" placeholder="请选择所属仓库" clearable>
<el-option <el-option
v-for="item in baseStoreList" v-for="item in baseStoreList"
:key="item.warehouseId" :key="item.warehouseId"
@ -76,17 +76,25 @@
</el-row> </el-row>
</template> </template>
<el-table v-loading="loading" :data="inventoryList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="inventoryList" @selection-change="handleSelectionChange" :row-class-name="getRowClass">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="表主键" align="center" prop="inventoryId" v-if="columns[0].visible"/> --> <!-- <el-table-column label="表主键" align="center" prop="inventoryId" v-if="columns[0].visible"/> -->
<el-table-column label="批次码" align="center" prop="batchCode" v-if="columns[2].visible"/> <el-table-column label="批次码" align="center" prop="batchCode" v-if="columns[2].visible"/>
<!-- <el-table-column label="物料id" align="center" prop="materialId" v-if="columns[3].visible"/> --> <!-- <el-table-column label="物料id" align="center" prop="materialId" v-if="columns[3].visible"/> -->
<el-table-column label="库位编码" align="center" prop="locationCode" v-if="columns[4].visible"/> <el-table-column label="库位编码" align="center" prop="locationCode" v-if="columns[4].visible"/>
<el-table-column label="物料大类" align="center" prop="materialCategoryName" v-if="columns[5].visible">
</el-table-column>
<el-table-column label="物料" align="center" prop="materialName" v-if="columns[6].visible"/> <el-table-column label="物料" align="center" prop="materialName" v-if="columns[6].visible"/>
<el-table-column label="库存数量" align="center" prop="inventoryQty" v-if="columns[6].visible"/> <el-table-column label="库存数量" align="center" prop="inventoryQty" v-if="columns[6].visible">
<template #default="scope">
<el-tooltip
v-if="scope.row.inventoryQty > scope.row.maxStockAmount || scope.row.inventoryQty < scope.row.minStockAmount"
:content="scope.row.inventoryQty > scope.row.maxStockAmount ? '库存高于上限' : '库存低于下限'"
placement="top"
>
<span :class="{ 'text-red-500': true }">{{ scope.row.inventoryQty }}</span>
</el-tooltip>
<span v-else>{{ scope.row.inventoryQty }}</span>
</template>
</el-table-column>
<el-table-column label="锁定状态" align="center" prop="lockState" v-if="columns[8].visible"> <el-table-column label="锁定状态" align="center" prop="lockState" v-if="columns[8].visible">
<template #default="scope"> <template #default="scope">
<dict-tag :options="lock_state" :value="scope.row.lockState"/> <dict-tag :options="lock_state" :value="scope.row.lockState"/>
@ -97,7 +105,7 @@
<dict-tag :options="inventory_status" :value="scope.row.inventoryStatus"/> <dict-tag :options="inventory_status" :value="scope.row.inventoryStatus"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="仓库" align="center" prop="warehouseCode" v-if="columns[10].visible"/> <el-table-column label="仓库" align="center" prop="warehouseName" v-if="columns[10].visible"/>
<el-table-column label="上限" align="center" prop="maxStockAmount"/> <el-table-column label="上限" align="center" prop="maxStockAmount"/>
<el-table-column label="下限" align="center" prop="minStockAmount"/> <el-table-column label="下限" align="center" prop="minStockAmount"/>
<!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@ -147,8 +155,8 @@
>{{dict.label}}</el-radio> >{{dict.label}}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> --> </el-form-item> -->
<el-form-item label="仓库" prop="storeId"> <el-form-item label="仓库" prop="storeId" clearable>
<el-select v-model="form.warehouseId" placeholder="请选择所属仓库"> <el-select v-model="form.storeId" placeholder="请选择所属仓库" >
<el-option <el-option
v-for="item in baseStoreList" v-for="item in baseStoreList"
:key="item.warehouseId" :key="item.warehouseId"
@ -218,11 +226,12 @@ const initFormData: InventoryForm = {
materialId: undefined, materialId: undefined,
locationCode: undefined, locationCode: undefined,
materialCategoryId: undefined, materialCategoryId: undefined,
materialCategoryName: undefined,//
inventoryQty: undefined, inventoryQty: undefined,
lockState: undefined, lockState: undefined,
inventoryStatus: undefined, inventoryStatus: undefined,
storeId: undefined, storeId: undefined,
warehouseId: undefined,
} }
const data = reactive<PageData<InventoryForm, InventoryQuery>>({ const data = reactive<PageData<InventoryForm, InventoryQuery>>({
form: {...initFormData}, form: {...initFormData},
@ -234,13 +243,12 @@ const data = reactive<PageData<InventoryForm, InventoryQuery>>({
materialId: undefined, materialId: undefined,
locationCode: undefined, locationCode: undefined,
materialCategoryId: undefined, materialCategoryId: undefined,
materialCategoryName: undefined,//
inventoryQty: undefined, inventoryQty: undefined,
lockState: undefined, lockState: undefined,
inventoryStatus: undefined, inventoryStatus: undefined,
storeId: undefined, storeId: undefined,
params: { warehouseId: undefined,
} params: {}
}, },
rules: { rules: {
inventoryId: [ inventoryId: [
@ -309,6 +317,7 @@ const handleQuery = () => {
/** 重置按钮操作 */ /** 重置按钮操作 */
const resetQuery = () => { const resetQuery = () => {
reset()
queryFormRef.value?.resetFields(); queryFormRef.value?.resetFields();
handleQuery(); handleQuery();
} }
@ -377,6 +386,13 @@ const getMaterialCategorySelect = async () => {
mategoryOptions.value = res.data; mategoryOptions.value = res.data;
}; };
const getRowClass = (row: any) => {
if (row.row.inventoryQty > row.row.maxStockAmount || row.row.inventoryQty < row.row.minStockAmount) {
return 'alarm-row';
}
return '';
};
onMounted(() => { onMounted(() => {
getMaterialCategorySelect(); getMaterialCategorySelect();
@ -384,3 +400,9 @@ onMounted(() => {
getList(); getList();
}); });
</script> </script>
<style scoped>
.alarm-row {
background-color: #ffebee !important;
}
</style>

Loading…
Cancel
Save