""" 登录对话框模块 - 处理用户登录和密码管理 """ from PyQt5.QtWidgets import ( QDialog, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox, QInputDialog ) from PyQt5.QtCore import Qt from database import get_db_connection class LoginDialog(QDialog): def __init__(self, db_path): super().__init__() self.db_path = db_path self.is_admin = False self.setWindowTitle("选择模式并登录") self.resize(450, 350) self.setModal(True) self.setup_ui() def setup_ui(self): """设置用户界面""" layout = QVBoxLayout(self) layout.addWidget(QLabel("请选择登录模式(默认密码均为 123456)")) # 管理员登录区域 admin_layout = QHBoxLayout() admin_layout.addWidget(QLabel("管理员模式密码:")) self.admin_input = QLineEdit() self.admin_input.setEchoMode(QLineEdit.Password) self.admin_input.setPlaceholderText("默认 123456") admin_layout.addWidget(self.admin_input) admin_login = QPushButton("登录管理员模式") admin_login.clicked.connect(lambda: self.login_mode(True)) admin_layout.addWidget(admin_login) admin_change = QPushButton("修改管理员密码") admin_change.clicked.connect(self.change_admin_password) admin_layout.addWidget(admin_change) layout.addLayout(admin_layout) # 普通用户登录区域 user_layout = QHBoxLayout() user_layout.addWidget(QLabel("普通用户模式密码:")) self.user_input = QLineEdit() self.user_input.setEchoMode(QLineEdit.Password) self.user_input.setPlaceholderText("默认 123456") user_layout.addWidget(self.user_input) user_login = QPushButton("登录普通用户模式") user_login.clicked.connect(lambda: self.login_mode(False)) user_layout.addWidget(user_login) user_change = QPushButton("修改普通用户密码") user_change.clicked.connect(self.change_user_password) user_layout.addWidget(user_change) layout.addLayout(user_layout) layout.addStretch() # 退出按钮 exit_btn = QPushButton("退出程序") exit_btn.clicked.connect(self.reject) layout.addWidget(exit_btn) def get_conn(self): """获取数据库连接""" return get_db_connection(self.db_path) def get_stored_password(self, password_type): """获取存储的密码""" try: with self.get_conn() as conn: cursor = conn.execute("SELECT value FROM admin_settings WHERE key = ?", (f"{password_type}_password",)) row = cursor.fetchone() return row[0] if row else "123456" except: return "123456" def set_password(self, password_type, new_password): """设置新密码""" try: with self.get_conn() as conn: conn.execute("INSERT OR REPLACE INTO admin_settings (key, value) VALUES (?, ?)", (f"{password_type}_password", new_password)) conn.commit() return True except Exception as e: QMessageBox.critical(self, "错误", f"密码保存失败: {str(e)}") return False def change_admin_password(self): """修改管理员密码""" old_pwd = self.get_stored_password("admin") old_input, ok1 = QInputDialog.getText( self, "修改管理员密码", "请输入当前管理员密码:", QLineEdit.Password ) if not ok1 or old_input != old_pwd: QMessageBox.warning(self, "错误", "当前密码错误!") return new_pwd1, ok2 = QInputDialog.getText( self, "新密码", "请输入新管理员密码:", QLineEdit.Password ) if not ok2 or len(new_pwd1) < 4: QMessageBox.warning(self, "错误", "新密码至少4位!") return new_pwd2, ok3 = QInputDialog.getText( self, "确认新密码", "请再次输入新管理员密码:", QLineEdit.Password ) if not ok3 or new_pwd1 != new_pwd2: QMessageBox.warning(self, "错误", "两次输入的密码不一致!") return if self.set_password("admin", new_pwd1): QMessageBox.information(self, "成功", "管理员密码修改成功!") def change_user_password(self): """修改普通用户密码""" old_pwd = self.get_stored_password("user") old_input, ok1 = QInputDialog.getText( self, "修改普通用户密码", "请输入当前普通用户密码:", QLineEdit.Password ) if not ok1 or old_input != old_pwd: QMessageBox.warning(self, "错误", "当前密码错误!") return new_pwd1, ok2 = QInputDialog.getText( self, "新密码", "请输入新普通用户密码:", QLineEdit.Password ) if not ok2 or len(new_pwd1) < 4: QMessageBox.warning(self, "错误", "新密码至少4位!") return new_pwd2, ok3 = QInputDialog.getText( self, "确认新密码", "请再次输入新普通用户密码:", QLineEdit.Password ) if not ok3 or new_pwd1 != new_pwd2: QMessageBox.warning(self, "错误", "两次输入的密码不一致!") return if self.set_password("user", new_pwd1): QMessageBox.information(self, "成功", "普通用户密码修改成功!") def login_mode(self, is_admin): """登录验证""" password_type = "admin" if is_admin else "user" input_pwd = self.admin_input.text().strip() if is_admin else self.user_input.text().strip() correct_pwd = self.get_stored_password(password_type) if input_pwd == correct_pwd: self.is_admin = is_admin self.accept() else: QMessageBox.warning(self, "错误", "密码错误,请重试!")