From fd47c5ebbe3725a4ab426f70db181a4bb304ba0d Mon Sep 17 00:00:00 2001 From: DXC Date: Tue, 24 Mar 2026 09:42:57 +0800 Subject: [PATCH] fix: resolve func undefined in menu init and slice error on undefined array in kitting vue --- inventory-backend/app/services/permission_service.py | 8 +++++--- inventory-web/src/views/basic/kitting/index.vue | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/inventory-backend/app/services/permission_service.py b/inventory-backend/app/services/permission_service.py index 224901e..6c8e874 100644 --- a/inventory-backend/app/services/permission_service.py +++ b/inventory-backend/app/services/permission_service.py @@ -1,5 +1,6 @@ from app.models.system import SysMenu, SysElement, SysRolePermission from app.extensions import db +from sqlalchemy import func from sqlalchemy.exc import SQLAlchemyError @@ -401,7 +402,7 @@ class PermissionService: # 定义菜单结构 (code, name, path, parent_code, sort_order) menu_defs = [ # 顶级菜单 (按侧边栏顺序) - ('material_mgmt', '基础信息管理', '/material', None, 10), + ('material_mgmt', '基础信息管理', '/basic', None, 10), ('inventory_mgmt', '入库管理', '/inventory', None, 20), ('stocktake_mgmt', '盘点管理', '/stocktake', None, 30), ('outbound_mgmt', '出库管理', '/outbound', None, 40), @@ -410,8 +411,9 @@ class PermissionService: ('scrap_mgmt', '报废管理', '/scrap', None, 70), ('system_mgmt', '系统管理', '/system', None, 80), - # 基础信息子菜单 - ('material_base', '基础信息', '/material/index', 'material_mgmt', 1), + # 基础信息子菜单(/basic 父级下的两个子路由) + ('material_base', '物料基础信息', '/basic/material', 'material_mgmt', 1), + ('basic_kitting', '产能与齐套分析', '/basic/kitting', 'material_mgmt', 2), # 入库管理子菜单 ('inbound_buy', '采购入库', '/inventory/buy', 'inventory_mgmt', 1), diff --git a/inventory-web/src/views/basic/kitting/index.vue b/inventory-web/src/views/basic/kitting/index.vue index e47478a..9c76ab6 100644 --- a/inventory-web/src/views/basic/kitting/index.vue +++ b/inventory-web/src/views/basic/kitting/index.vue @@ -302,7 +302,7 @@ const pageSize = ref(20) const filteredTableData = computed(() => { if (!searchKeyword.value.trim()) return paginatedData.value const kw = searchKeyword.value.trim().toLowerCase() - return tableData.value.filter(item => + return (tableData.value || []).filter((item: any) => (item.bom_no || '').toLowerCase().includes(kw) || (item.parent_name || '').toLowerCase().includes(kw) ) @@ -310,7 +310,7 @@ const filteredTableData = computed(() => { const paginatedData = computed(() => { const start = (page.value - 1) * pageSize.value - return filteredTableData.value.slice(start, start + pageSize.value) + return (filteredTableData.value || []).slice(start, start + pageSize.value) }) const handleFilter = () => { @@ -330,7 +330,7 @@ const loadData = async () => { try { // 1. 读取用户监控列表 const prefRes: any = await getUserPreferences() - const watchlist: any[] = prefRes.data?.bom_kitting_watchlist || [] + const watchlist: any[] = (prefRes.data?.bom_kitting_watchlist) || [] if (!watchlist.length) { tableData.value = [] loading.value = false