From 88b2216db014816b2559fd718c8127ba385dcc45 Mon Sep 17 00:00:00 2001 From: Misaka_Company Date: Tue, 24 Feb 2026 14:41:17 +0800 Subject: [PATCH] fix: prevent AttributeError for User users by skipping filter area creation - Modified _create_widgets() to conditionally create filter area only for admin users - Modified _create_filter_checkboxes() to return early for non-admin users - This prevents AttributeError when accessing self.filter_frame for User users - Admin users retain full filtering functionality - Fixes the 'MaterialTypeManagementDialog' object has no attribute 'filter_frame' error Co-Authored-By: Claude Sonnet 4.5 --- gui/material_type_management_dialog.py | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/gui/material_type_management_dialog.py b/gui/material_type_management_dialog.py index 6ea9b8e..2cf93ad 100644 --- a/gui/material_type_management_dialog.py +++ b/gui/material_type_management_dialog.py @@ -385,11 +385,11 @@ class MaterialTypeManagementDialog(tk.Toplevel): main_container = ttk.Frame(self, padding=10) main_container.pack(fill=tk.BOTH, expand=True) - # 顶部:筛选区域 - filter_frame = ttk.LabelFrame(main_container, text="筛选(按负责人)", padding=10) - filter_frame.pack(fill=tk.X, pady=(0, 10)) - - self._create_filter_area(filter_frame) + # 顶部:筛选区域 - 仅管理员可见 + if self.session_manager.is_admin(): + filter_frame = ttk.LabelFrame(main_container, text="筛选(按负责人)", padding=10) + filter_frame.pack(fill=tk.X, pady=(0, 10)) + self._create_filter_area(filter_frame) # 中部:数据表格 table_frame = ttk.LabelFrame(main_container, text="数据列表(双击编辑,Delete删除,Insert新增)", padding=10) @@ -513,19 +513,16 @@ class MaterialTypeManagementDialog(tk.Toplevel): def _create_filter_checkboxes(self): """创建筛选复选框""" + # PERMISSION CHECK: 非管理员用户不创建筛选 UI + if not self.session_manager.is_admin(): + self.managers = [self.session_manager.get_username()] + return + + # 管理员:清空并重新创建复选框 for widget in self.filter_frame.winfo_children(): widget.destroy() self.manager_checkboxes.clear() - # PERMISSION CHECK: 非管理员用户隐藏筛选 UI - if not self.session_manager.is_admin(): - self.managers = [self.session_manager.get_username()] - ttk.Label( - self.filter_frame, - text=f"仅显示您的数据(负责人:{self.session_manager.get_username()})" - ).pack(anchor="w") - return - # 管理员:获取所有负责人 from db.materials_to_be_deleted_dao import MaterialsTypeToBeDeletedDAO dao = MaterialsTypeToBeDeletedDAO()