refactor: optimize settings and validation tabs for User users
Material Validation Tab: - Remove file selection area (file_group and related frames) - Move output file path configuration to settings - For User users: hide data source selection, only show shared production IDs Settings Tab: - Add "validation output file" configuration to path settings group - Show "save settings" button for User users - Add User-only mode to only show path settings group Changes: - material_validation_tab.py: Restructure control panel, update export_paths - settings_tab.py: Add validation output filename, add save button for users Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -28,6 +28,10 @@ class SettingsTab(ttk.Frame):
|
||||
super().__init__(parent)
|
||||
self.config = config
|
||||
self.session_manager = session_manager
|
||||
|
||||
# 初始化物料校验输出文件名变量
|
||||
self.validation_output_filename_var = tk.StringVar()
|
||||
|
||||
self.create_widgets()
|
||||
self.load_settings()
|
||||
|
||||
@@ -58,19 +62,25 @@ class SettingsTab(ttk.Frame):
|
||||
self._create_extraction_group(scrollable_frame)
|
||||
self._create_validation_group(scrollable_frame)
|
||||
self._create_ui_group(scrollable_frame)
|
||||
else:
|
||||
# User 用户:只显示路径配置
|
||||
self._create_paths_group(scrollable_frame)
|
||||
|
||||
# 按钮区域 - 根据用户类型显示不同按钮
|
||||
button_frame = ttk.Frame(scrollable_frame)
|
||||
button_frame.grid(row=7, column=0, columnspan=2, pady=20, sticky="ew")
|
||||
|
||||
if is_user_only:
|
||||
# 普通用户只显示测试按钮
|
||||
# User 用户:显示测试按钮和保存设置按钮
|
||||
ttk.Button(
|
||||
button_frame, text="测试 ERP 连接", command=self.test_erp_connection
|
||||
).pack(side="left", padx=5)
|
||||
ttk.Button(
|
||||
button_frame, text="测试数据库连接", command=self.test_db_connection
|
||||
).pack(side="left", padx=5)
|
||||
ttk.Button(button_frame, text="保存设置", command=self.save_settings).pack(
|
||||
side="left", padx=5
|
||||
)
|
||||
else:
|
||||
# 管理员显示所有按钮
|
||||
ttk.Button(
|
||||
@@ -234,7 +244,13 @@ class SettingsTab(ttk.Frame):
|
||||
ttk.Label(group, text="默认输出文件:").grid(row=2, column=0, sticky="w", pady=5)
|
||||
self.default_output_var = tk.StringVar()
|
||||
ttk.Entry(group, textvariable=self.default_output_var, width=40).grid(
|
||||
row=3, column=0, columnspan=2, sticky="ew", pady=5
|
||||
row=2, column=1, columnspan=2, sticky="ew", pady=5
|
||||
)
|
||||
|
||||
# 校验输出文件
|
||||
ttk.Label(group, text="校验输出文件:").grid(row=3, column=0, sticky="w", pady=5)
|
||||
ttk.Entry(group, textvariable=self.validation_output_filename_var, width=40).grid(
|
||||
row=3, column=1, columnspan=2, sticky="ew", pady=5
|
||||
)
|
||||
|
||||
group.columnconfigure(0, weight=1)
|
||||
@@ -298,15 +314,21 @@ class SettingsTab(ttk.Frame):
|
||||
group, text="使用数据库作为数据源", variable=self.validation_use_database_var
|
||||
).grid(row=1, column=0, columnspan=2, sticky="w", pady=5)
|
||||
|
||||
# 输出文件名
|
||||
ttk.Label(group, text="输出文件名:").grid(row=2, column=0, sticky="w", pady=5)
|
||||
ttk.Entry(group, textvariable=self.validation_output_filename_var, width=30).grid(
|
||||
row=2, column=1, sticky="w", pady=5
|
||||
)
|
||||
|
||||
# 批次大小
|
||||
ttk.Label(group, text="数据库批次大小:").grid(row=2, column=0, sticky="w", pady=5)
|
||||
ttk.Label(group, text="数据库批次大小:").grid(row=3, column=0, sticky="w", pady=5)
|
||||
self.validation_batch_size_var = tk.IntVar(value=2000)
|
||||
ttk.Spinbox(
|
||||
group, from_=100, to=2000, textvariable=self.validation_batch_size_var, width=10
|
||||
).grid(row=2, column=1, sticky="w", pady=5)
|
||||
).grid(row=3, column=1, sticky="w", pady=5)
|
||||
|
||||
# 匹配模式
|
||||
ttk.Label(group, text="匹配模式:").grid(row=3, column=0, sticky="w", pady=5)
|
||||
ttk.Label(group, text="匹配模式:").grid(row=4, column=0, sticky="w", pady=5)
|
||||
self.validation_match_mode_var = tk.StringVar()
|
||||
match_mode_combo = ttk.Combobox(
|
||||
group,
|
||||
@@ -315,19 +337,19 @@ class SettingsTab(ttk.Frame):
|
||||
state="readonly",
|
||||
width=30,
|
||||
)
|
||||
match_mode_combo.grid(row=3, column=1, sticky="w", pady=5)
|
||||
match_mode_combo.grid(row=4, column=1, sticky="w", pady=5)
|
||||
|
||||
# CRUD 操作
|
||||
self.validation_enable_crud_var = tk.BooleanVar()
|
||||
ttk.Checkbutton(
|
||||
group, text="启用 CRUD 操作(管理待删除物料)", variable=self.validation_enable_crud_var
|
||||
).grid(row=4, column=0, columnspan=2, sticky="w", pady=5)
|
||||
).grid(row=5, column=0, columnspan=2, sticky="w", pady=5)
|
||||
|
||||
# 默认负责人
|
||||
ttk.Label(group, text="默认负责人:").grid(row=5, column=0, sticky="w", pady=5)
|
||||
ttk.Label(group, text="默认负责人:").grid(row=6, column=0, sticky="w", pady=5)
|
||||
self.validation_default_manager_var = tk.StringVar()
|
||||
ttk.Entry(group, textvariable=self.validation_default_manager_var, width=30).grid(
|
||||
row=5, column=1, sticky="w", pady=5
|
||||
row=6, column=1, sticky="w", pady=5
|
||||
)
|
||||
|
||||
group.columnconfigure(1, weight=1)
|
||||
@@ -371,8 +393,11 @@ class SettingsTab(ttk.Frame):
|
||||
is_user_only = self.session_manager and self.session_manager.get_user_type() == 'User'
|
||||
|
||||
if is_user_only:
|
||||
# 普通用户模式 - 只需要加载测试连接所需的配置
|
||||
# 不需要加载设置到界面,因为界面没有配置输入框
|
||||
# User 用户模式 - 只需要加载路径设置到界面
|
||||
# 路径设置
|
||||
self.data_dir_selector.set(self.config.get("paths.data_dir", ""))
|
||||
self.default_output_var.set(self.config.get("paths.default_output", ""))
|
||||
self.validation_output_filename_var.set(self.config.get("paths.validation_output", ""))
|
||||
return
|
||||
|
||||
# 管理员模式 - 加载所有配置
|
||||
@@ -420,6 +445,7 @@ class SettingsTab(ttk.Frame):
|
||||
# 校验设置
|
||||
self.validation_data_source_var.set(self.config.get("validation.data_source", "database_full"))
|
||||
self.validation_use_database_var.set(self.config.get("validation.use_database", True))
|
||||
self.validation_output_filename_var.set(self.config.get("paths.validation_output", "物料状态校验结果.xlsx"))
|
||||
self.validation_batch_size_var.set(self.config.get("validation.batch_size", 2000))
|
||||
self.validation_match_mode_var.set(self.config.get("validation.match_mode", "substring"))
|
||||
self.validation_enable_crud_var.set(self.config.get("validation.enable_crud_operations", False))
|
||||
@@ -432,6 +458,25 @@ class SettingsTab(ttk.Frame):
|
||||
|
||||
def save_settings(self):
|
||||
"""保存界面设置到配置"""
|
||||
# 判断是否为仅测试用户模式
|
||||
is_user_only = self.session_manager and self.session_manager.get_user_type() == 'User'
|
||||
|
||||
if is_user_only:
|
||||
# User 用户模式 - 只保存路径设置
|
||||
self.config.set("paths.data_dir", self.data_dir_selector.get())
|
||||
self.config.set("paths.default_output", self.default_output_var.get())
|
||||
self.config.set("paths.validation_output", self.validation_output_filename_var.get())
|
||||
|
||||
# 保存到文件
|
||||
if self.config.save():
|
||||
messagebox.showinfo("成功", "设置已保存")
|
||||
# 通知其他标签页重新加载配置
|
||||
self._notify_config_reload()
|
||||
else:
|
||||
messagebox.showerror("错误", "保存设置失败")
|
||||
return
|
||||
|
||||
# 管理员模式 - 加载所有配置
|
||||
# ERP 设置
|
||||
self.config.set("erp.url", self.erp_url_var.get())
|
||||
self.config.set("erp.username", self.erp_username_var.get())
|
||||
@@ -473,6 +518,7 @@ class SettingsTab(ttk.Frame):
|
||||
# 校验设置
|
||||
self.config.set("validation.data_source", self.validation_data_source_var.get())
|
||||
self.config.set("validation.use_database", self.validation_use_database_var.get())
|
||||
self.config.set("paths.validation_output", self.validation_output_filename_var.get())
|
||||
self.config.set("validation.batch_size", self.validation_batch_size_var.get())
|
||||
self.config.set("validation.match_mode", self.validation_match_mode_var.get())
|
||||
self.config.set("validation.enable_crud_operations", self.validation_enable_crud_var.get())
|
||||
|
||||
Reference in New Issue
Block a user