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 <noreply@anthropic.com>
This commit is contained in:
Misaka_Company
2026-02-24 14:41:17 +08:00
parent ac94b1cb82
commit 88b2216db0

View File

@@ -385,10 +385,10 @@ class MaterialTypeManagementDialog(tk.Toplevel):
main_container = ttk.Frame(self, padding=10) main_container = ttk.Frame(self, padding=10)
main_container.pack(fill=tk.BOTH, expand=True) main_container.pack(fill=tk.BOTH, expand=True)
# 顶部:筛选区域 # 顶部:筛选区域 - 仅管理员可见
if self.session_manager.is_admin():
filter_frame = ttk.LabelFrame(main_container, text="筛选(按负责人)", padding=10) filter_frame = ttk.LabelFrame(main_container, text="筛选(按负责人)", padding=10)
filter_frame.pack(fill=tk.X, pady=(0, 10)) filter_frame.pack(fill=tk.X, pady=(0, 10))
self._create_filter_area(filter_frame) self._create_filter_area(filter_frame)
# 中部:数据表格 # 中部:数据表格
@@ -513,19 +513,16 @@ class MaterialTypeManagementDialog(tk.Toplevel):
def _create_filter_checkboxes(self): 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(): for widget in self.filter_frame.winfo_children():
widget.destroy() widget.destroy()
self.manager_checkboxes.clear() 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 from db.materials_to_be_deleted_dao import MaterialsTypeToBeDeletedDAO
dao = MaterialsTypeToBeDeletedDAO() dao = MaterialsTypeToBeDeletedDAO()