From a8d694d5d987892afee5a1bb8f6c01d612e6b2a3 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 14 五月 2026 11:23:23 +0800
Subject: [PATCH] 浪潮 1.入库管理、出库管理添加库位相关字段和逻辑
---
src/views/inventoryManagement/dispatchLog/Record.vue | 169 +++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 125 insertions(+), 44 deletions(-)
diff --git a/src/views/inventoryManagement/dispatchLog/Record.vue b/src/views/inventoryManagement/dispatchLog/Record.vue
index 724f561..7ba8dfd 100644
--- a/src/views/inventoryManagement/dispatchLog/Record.vue
+++ b/src/views/inventoryManagement/dispatchLog/Record.vue
@@ -68,6 +68,7 @@
show-overflow-tooltip
/>
<el-table-column label="瑙勬牸鍨嬪彿" prop="model" show-overflow-tooltip />
+ <el-table-column label="搴撲綅" prop="warehouseName" show-overflow-tooltip />
<el-table-column label="鎵瑰彿" prop="batchNo" show-overflow-tooltip />
<el-table-column label="鍗曚綅" prop="unit" show-overflow-tooltip />
<el-table-column
@@ -148,48 +149,26 @@
prop="unit">
<el-input v-model="formState.unit" disabled />
</el-form-item>
- <el-form-item label="搴撳瓨绫诲瀷"
- prop="type"
+ <el-form-item label="浠撳簱"
+ prop="warehouseId"
:rules="[
{
required: true,
- message: '璇烽�夋嫨搴撳瓨绫诲瀷',
+ message: '璇烽�夋嫨浠撳簱',
trigger: 'change',
}
]">
- <el-select v-model="formState.type"
- placeholder="璇烽�夋嫨搴撳瓨绫诲瀷"
- :disabled="isEdit">
- <el-option label="鍚堟牸搴撳瓨"
- value="qualified" />
- <el-option label="涓嶅悎鏍煎簱瀛�"
- value="unqualified" />
+ <el-select v-model="formState.warehouseId"
+ placeholder="璇烽�夋嫨浠撳簱"
+ clearable
+ :disabled="isEdit || !formState.productId"
+ @change="handleWarehouseChange"
+ style="width: 100%">
+ <el-option v-for="warehouse in warehouseList"
+ :key="warehouse.id"
+ :label="warehouse.name"
+ :value="warehouse.id" />
</el-select>
- </el-form-item>
- <el-form-item label="鍑哄簱鏁伴噺"
- prop="qualitity"
- :rules="[
- {
- required: true,
- message: '璇疯緭鍏ュ嚭搴撴暟閲�',
- trigger: 'blur',
- },
- {
- validator: (rule, value, callback) => {
- if (formState.maxStock > 0 && value > formState.maxStock) {
- callback('鍑哄簱鏁伴噺涓嶈兘瓒呰繃褰撳墠鎵瑰彿搴撳瓨 ' + formState.maxStock);
- } else {
- callback();
- }
- },
- trigger: 'blur',
- }
- ]">
- <el-input-number v-model="formState.qualitity"
- :step="1"
- :min="1"
- :max="formState.maxStock > 0 ? formState.maxStock : undefined"
- style="width: 100%" />
</el-form-item>
<el-form-item label="鎵瑰彿"
prop="batchNo"
@@ -217,6 +196,31 @@
prop="currentStock">
<el-input v-model="batchNoStockMap[formState.batchNo]" disabled />
</el-form-item>
+ <el-form-item label="鍑哄簱鏁伴噺"
+ prop="qualitity"
+ :rules="[
+ {
+ required: true,
+ message: '璇疯緭鍏ュ嚭搴撴暟閲�',
+ trigger: 'blur',
+ },
+ {
+ validator: (rule, value, callback) => {
+ if (formState.maxStock > 0 && value > formState.maxStock) {
+ callback('鍑哄簱鏁伴噺涓嶈兘瓒呰繃褰撳墠鎵瑰彿搴撳瓨 ' + formState.maxStock);
+ } else {
+ callback();
+ }
+ },
+ trigger: 'blur',
+ }
+ ]">
+ <el-input-number v-model="formState.qualitity"
+ :step="1"
+ :min="1"
+ :max="formState.maxStock > 0 ? formState.maxStock : undefined"
+ style="width: 100%" />
+ </el-form-item>
<el-form-item v-if="isEdit"
label="鏉ユ簮"
prop="recordType">
@@ -227,6 +231,24 @@
:key="item.value"
:label="item.label"
:value="item.value" />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="搴撳瓨绫诲瀷"
+ prop="type"
+ :rules="[
+ {
+ required: true,
+ message: '璇烽�夋嫨搴撳瓨绫诲瀷',
+ trigger: 'change',
+ }
+ ]">
+ <el-select v-model="formState.type"
+ placeholder="璇烽�夋嫨搴撳瓨绫诲瀷"
+ :disabled="isEdit">
+ <el-option label="鍚堟牸搴撳瓨"
+ value="qualified" />
+ <el-option label="涓嶅悎鏍煎簱瀛�"
+ value="unqualified" />
</el-select>
</el-form-item>
<el-form-item label="澶囨敞"
@@ -270,6 +292,7 @@
} from "@/api/basicData/enum.js";
import { addStockOutRecordOnly } from "@/api/inventoryManagement/stockInventory.js";
import { addUnqualifiedStockOutRecordOnly } from "@/api/inventoryManagement/stockUninventory.js";
+import { getWarehouseList } from "@/api/inventoryManagement/warehouse.js";
const userStore = useUserStore();
const { proxy } = getCurrentInstance();
@@ -282,6 +305,10 @@
const batchNoList = ref([]);
// 鎵瑰彿搴撳瓨鏄犲皠
const batchNoStockMap = ref({});
+// 浠撳簱鍒楄〃
+const warehouseList = ref([]);
+// 鍘熷batchNoMaps鏁版嵁
+const rawBatchNoMaps = ref({});
const page = reactive({
current: 1,
size: 100,
@@ -330,6 +357,7 @@
productName: "",
productModelName: "",
unit: "",
+ warehouseId: null, // 浠撳簱ID
type: undefined,
qualitity: 0,
batchNo: null,
@@ -476,6 +504,7 @@
productName: "",
productModelName: "",
unit: "",
+ warehouseId: null,
type: undefined,
qualitity: 0,
batchNo: null,
@@ -483,14 +512,29 @@
remark: "",
maxStock: 0,
};
+ warehouseList.value = [];
batchNoList.value = [];
batchNoStockMap.value = {};
+ rawBatchNoMaps.value = {};
};
// 鍏抽棴瀵硅瘽妗�
const closeDialog = () => {
dialogVisible.value = false;
resetForm();
+};
+
+// 鍔犺浇浠撳簱鍒楄〃
+const loadWarehouseList = async () => {
+ try {
+ const res = await getWarehouseList();
+ if (res.code === 200) {
+ return res.data || [];
+ }
+ } catch (error) {
+ console.error('鍔犺浇浠撳簱鍒楄〃澶辫触', error);
+ }
+ return [];
};
// 浜у搧閫夋嫨澶勭悊
@@ -502,23 +546,60 @@
formState.value.productModelName = product.model;
formState.value.productModelId = product.id;
formState.value.unit = product.unit;
- // 浠巄atchNoMaps鑾峰彇鎵瑰彿鍒楄〃鍜屽簱瀛�
- if (product.batchNoMaps && Object.keys(product.batchNoMaps).length > 0) {
- batchNoList.value = Object.keys(product.batchNoMaps);
- batchNoStockMap.value = product.batchNoMaps;
- } else {
- batchNoList.value = [];
- batchNoStockMap.value = {};
- }
- // 娓呯┖宸查�夋嫨鐨勬壒鍙峰拰鏈�澶у簱瀛�
+ // 瑙f瀽batchNoMaps鏁版嵁锛屾牸寮忎负锛歿 浠撳簱ID: [{鎵瑰彿: 搴撳瓨}, {鎵瑰彿: 搴撳瓨}] }
+ warehouseList.value = [];
+ batchNoList.value = [];
+ batchNoStockMap.value = {};
+ rawBatchNoMaps.value = {};
+ formState.value.warehouseId = null;
formState.value.batchNo = null;
formState.value.maxStock = 0;
+
+ if (product.batchNoMaps && Object.keys(product.batchNoMaps).length > 0) {
+ rawBatchNoMaps.value = product.batchNoMaps;
+ // 鑾峰彇鎵�鏈変粨搴撲俊鎭敤浜庡弽鏄惧悕绉�
+ const allWarehouses = await loadWarehouseList();
+ const warehouseMap = {};
+ allWarehouses.forEach(w => {
+ warehouseMap[w.id] = w.warehouseName || w.name || w.warehouseCode || `浠撳簱${w.id}`;
+ });
+ // 鏋勫缓浠撳簱鍒楄〃
+ warehouseList.value = Object.keys(product.batchNoMaps).map(warehouseId => ({
+ id: warehouseId,
+ name: warehouseMap[warehouseId] || `浠撳簱${warehouseId}`
+ }));
+ }
showProductSelect.value = false;
// 瑙﹀彂琛ㄥ崟楠岃瘉鏇存柊
proxy.$refs["formRef"]?.validateField("productModelId");
}
};
+// 浠撳簱閫夋嫨鍙樺寲澶勭悊
+const handleWarehouseChange = (warehouseId) => {
+ batchNoList.value = [];
+ batchNoStockMap.value = {};
+ formState.value.batchNo = null;
+ formState.value.maxStock = 0;
+
+ if (warehouseId && rawBatchNoMaps.value[warehouseId]) {
+ // 瑙f瀽璇ヤ粨搴撲笅鐨勬壒鍙锋暟鎹紝鏍煎紡涓猴細[{鎵瑰彿: 搴撳瓨}, {鎵瑰彿: 搴撳瓨}]
+ const batchArray = rawBatchNoMaps.value[warehouseId];
+ const batchMap = {};
+ const batches = [];
+
+ batchArray.forEach(item => {
+ const batchNo = Object.keys(item)[0];
+ const stock = item[batchNo];
+ batches.push(batchNo);
+ batchMap[batchNo] = stock;
+ });
+
+ batchNoList.value = batches;
+ batchNoStockMap.value = batchMap;
+ }
+};
+
// 鎵瑰彿閫夋嫨鍙樺寲澶勭悊
const handleBatchNoChange = (batchNo) => {
if (batchNo && batchNoStockMap.value[batchNo]) {
--
Gitblit v1.9.3