This commit is contained in:
2025-12-23 00:30:36 +08:00
parent 192c05707a
commit 033a1acef3
16 changed files with 2870 additions and 1342 deletions

162
login_dialog.py Normal file
View 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, "错误", "密码错误,请重试!")