162 lines
6.1 KiB
Python
162 lines
6.1 KiB
Python
"""
|
||
登录对话框模块 - 处理用户登录和密码管理
|
||
"""
|
||
|
||
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, "错误", "密码错误,请重试!") |