1223
This commit is contained in:
162
login_dialog.py
Normal file
162
login_dialog.py
Normal file
@@ -0,0 +1,162 @@
|
||||
"""
|
||||
登录对话框模块 - 处理用户登录和密码管理
|
||||
"""
|
||||
|
||||
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("<b>请选择登录模式(默认密码均为 123456)</b>"))
|
||||
|
||||
# 管理员登录区域
|
||||
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, "错误", "密码错误,请重试!")
|
||||
Reference in New Issue
Block a user