diff --git a/gui/material_validation_tab.py b/gui/material_validation_tab.py index af3fe49..6d0652b 100644 --- a/gui/material_validation_tab.py +++ b/gui/material_validation_tab.py @@ -400,6 +400,9 @@ class MaterialValidationTab(ttk.Frame): """创建负责人筛选区域""" # PERMISSION CHECK: 非管理员用户不显示筛选区域 if not self.session_manager.is_admin(): + # 创建空的 filter_frame 以避免后续代码访问属性时报错 + self.filter_frame = ttk.Frame(parent) + self.filter_canvas = None return # 创建复选框容器 @@ -520,7 +523,15 @@ class MaterialValidationTab(ttk.Frame): self._apply_manager_filter() def _get_selected_managers(self) -> List[str]: - """获取选中的负责人列表""" + """获取选中的负责人列表 + + PERMISSION CHECK: 非管理员用户返回当前用户名 + """ + # PERMISSION CHECK: 非管理员用户直接返回当前用户名 + if not self.session_manager.is_admin(): + return [self.session_manager.get_username()] + + # 管理员:从复选框获取选中的负责人 return [ manager for manager, var in self.manager_checkboxes.items() if var.get() @@ -897,8 +908,17 @@ class MaterialValidationTab(ttk.Frame): self._update_log(f"初始化筛选器失败:{str(e)}", "ERROR") def _restore_manager_filter_state(self, selected_managers: List[str]): - """恢复负责人筛选状态""" + """恢复负责人筛选状态 + + PERMISSION CHECK: 非管理员用户直接应用筛选(不需要操作复选框) + """ try: + # PERMISSION CHECK: 非管理员用户直接应用筛选 + if not self.session_manager.is_admin(): + self._apply_manager_filter() + return + + # 管理员:恢复复选框状态 for manager in selected_managers: if manager in self.manager_checkboxes: self.manager_checkboxes[manager].set(True)