From 89816f367b24de32ee52e78c5352e944370691fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=87=E5=B3=B0?= Date: Wed, 29 Apr 2026 19:09:51 +0800 Subject: [PATCH] =?UTF-8?q?fix=20some=20=20bug=20Signed-off-by:=20?= =?UTF-8?q?=E5=90=B4=E6=96=87=E5=B3=B0=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/my_work/routers/apiWarehouse.go | 101 +++++++++++++++++- frontend/ops_vue_js/package.json | 2 +- .../warehouse/WarehouseContainerDetail.vue | 2 +- .../warehouse/WarehouseContainerList.vue | 36 ++++++- .../src/views/warehouse/WarehouseItemList.vue | 12 ++- .../src/views/warehouse/WarehouseOverview.vue | 78 +++++++++----- 6 files changed, 196 insertions(+), 35 deletions(-) diff --git a/backend/my_work/routers/apiWarehouse.go b/backend/my_work/routers/apiWarehouse.go index 3836c7b..85a231a 100644 --- a/backend/my_work/routers/apiWarehouse.go +++ b/backend/my_work/routers/apiWarehouse.go @@ -449,9 +449,108 @@ func ApiWarehouse(r *gin.RouterGroup) { canModifyContainers[i] = canModifyWarehouse(user.ID, c.CreatorID) } + // 收集所有容器ID + containerIDs := make([]uint, len(containers)) + for i, c := range containers { + containerIDs[i] = c.ID + } + + // 批量查询容器下的物品(只查直接子物品,不递归) + type ItemInfo struct { + ID uint + ContainerID uint + } + var allItems []ItemInfo + models.DB.Table("tab_warehouse_item").Select("id, container_id").Where("container_id IN ?", containerIDs).Scan(&allItems) + + // 构建容器ID → 物品ID列表的映射 + containerItems := make(map[uint][]uint) + allItemIDs := make([]uint, 0) + for _, item := range allItems { + containerItems[item.ContainerID] = append(containerItems[item.ContainerID], item.ID) + allItemIDs = append(allItemIDs, item.ID) + } + + // 批量查询工单绑定数量 + itemWorkOrderCount := make(map[uint]int) + if len(allItemIDs) > 0 { + var woBinds []TabWarehouseItemWorkOrderBind + models.DB.Where("item_id IN ?", allItemIDs).Find(&woBinds) + for _, bind := range woBinds { + itemWorkOrderCount[bind.ItemID]++ + } + } + + // 批量查询客户关联 + type CustomerInfo struct { + ID uint `json:"id"` + FirstName string `json:"first_name"` + LastName string `json:"last_name"` + Title string `json:"title"` + } + itemCustomers := make(map[uint][]CustomerInfo) + if len(allItemIDs) > 0 { + var customerBinds []TabWarehouseItemCustomerBind + models.DB.Where("item_id IN ?", allItemIDs).Find(&customerBinds) + customerIDSet := make(map[uint]bool) + for _, bind := range customerBinds { + customerIDSet[bind.CustomerID] = true + } + customerIDs := make([]uint, 0) + for id := range customerIDSet { + customerIDs = append(customerIDs, id) + } + customerMap := make(map[uint]TabCustomer) + if len(customerIDs) > 0 { + var customers []TabCustomer + models.DB.Where("id IN ?", customerIDs).Find(&customers) + for _, c := range customers { + customerMap[c.ID] = c + } + } + for _, bind := range customerBinds { + if c, ok := customerMap[bind.CustomerID]; ok { + itemCustomers[bind.ItemID] = append(itemCustomers[bind.ItemID], CustomerInfo{ + ID: c.ID, + FirstName: c.FirstName, + LastName: c.LastName, + Title: c.Title, + }) + } + } + } + + // 构建容器统计 + type ContainerWithStats struct { + TabWarehouseContainer + WorkOrderCount int `json:"WorkOrderCount"` + Customers []CustomerInfo `json:"Customers"` + } + containersWithStats := make([]ContainerWithStats, len(containers)) + for i, c := range containers { + // 计算该容器下所有物品的工单总数 + workOrderCount := 0 + customersMap := make(map[uint]CustomerInfo) + for _, itemID := range containerItems[c.ID] { + workOrderCount += itemWorkOrderCount[itemID] + for _, ci := range itemCustomers[itemID] { + customersMap[ci.ID] = ci + } + } + customers := make([]CustomerInfo, 0, len(customersMap)) + for _, ci := range customersMap { + customers = append(customers, ci) + } + containersWithStats[i] = ContainerWithStats{ + TabWarehouseContainer: c, + WorkOrderCount: workOrderCount, + Customers: customers, + } + } + ReturnJson(ctx, "apiOK", gin.H{ "all_count": count, - "containers": containers, + "containers": containersWithStats, "canModifyContainers": canModifyContainers, }) }) diff --git a/frontend/ops_vue_js/package.json b/frontend/ops_vue_js/package.json index 6d96be2..b742121 100644 --- a/frontend/ops_vue_js/package.json +++ b/frontend/ops_vue_js/package.json @@ -1,6 +1,6 @@ { "name": "ops_vue_js", - "version": "1.3.2", + "version": "1.3.5", "private": true, "type": "module", "engines": { diff --git a/frontend/ops_vue_js/src/views/warehouse/WarehouseContainerDetail.vue b/frontend/ops_vue_js/src/views/warehouse/WarehouseContainerDetail.vue index af6a6e4..cfa9c1b 100644 --- a/frontend/ops_vue_js/src/views/warehouse/WarehouseContainerDetail.vue +++ b/frontend/ops_vue_js/src/views/warehouse/WarehouseContainerDetail.vue @@ -609,7 +609,7 @@ onMounted(async () => { diff --git a/frontend/ops_vue_js/src/views/warehouse/WarehouseContainerList.vue b/frontend/ops_vue_js/src/views/warehouse/WarehouseContainerList.vue index 1442185..7f83768 100644 --- a/frontend/ops_vue_js/src/views/warehouse/WarehouseContainerList.vue +++ b/frontend/ops_vue_js/src/views/warehouse/WarehouseContainerList.vue @@ -1,6 +1,6 @@