import json from PyQt6 import * from PyQt6.QtCore import * from PyQt6.QtGui import * from PyQt6.QtWidgets import * from ui.Ui_userForm import Ui_userForm from userModel.userManager import userManager from createUserDlg import CreateUserDlg from common import common from common import AlignDelegate class UserForm(QWidget): def __init__(self, parent=None): super().__init__(parent) self.ui = Ui_userForm() self.ui.setupUi(self) self.userModel = QStandardItemModel() self.createUserDlg = CreateUserDlg() self.createUserDlg.createFinished.connect(self.createuserFinished) self.createUserDlg.editFinished.connect(self.edituserFinished) self.ui.tableViewUser.doubleClicked.connect(self.editUser) self.ui.tableViewUser.setModel(self.userModel) self.ui.pbCreateUser.clicked.connect(self.createUser) self.ui.pbEditUser.clicked.connect(self.editUser) self.ui.pbDeleteUser.clicked.connect(self.deleteUser) self.loadUser() self.batchSetItemDelegate() def batchSetItemDelegate(self): self.ui.tableViewUser.horizontalHeader().setDefaultAlignment(Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) self.ui.tableViewUser.setItemDelegate(AlignDelegate(self.ui.tableViewUser)) def createUser(self): self.createUserDlg.showCreateDlg() def editUser(self): if self.ui.tableViewUser.selectionModel().hasSelection(): row = self.ui.tableViewUser.selectionModel().currentIndex().row() row_index = self.userModel.index(row, 0, QModelIndex()) userId = self.userModel.data(row_index, Qt.ItemDataRole.DisplayRole) data = userManager.getInfo(userId) if data: self.createUserDlg.showEditDlg(data) def refreshSelect(self): self.loadUser() def deleteUser(self): if self.ui.tableViewUser.selectionModel().hasSelection(): indexs = self.ui.tableViewUser.selectionModel().selectedRows() if len(indexs) == 1: row = indexs[0].row() row_userName_index = self.userModel.index(row, 1, QModelIndex()) reply = QMessageBox.question(self, '删除用户', f'是否删除 {self.userModel.data(row_userName_index, Qt.ItemDataRole.DisplayRole)}?', QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No, QMessageBox.StandardButton.No) if reply == QMessageBox.StandardButton.Yes: row_index = self.userModel.index(row, 0, QModelIndex()) userId = self.userModel.data(row_index, Qt.ItemDataRole.DisplayRole) if userManager.delete(userId): self.userModel.removeRow(row) else: QMessageBox.warning(self, '警告', '请选择要删除的用户', QMessageBox.StandardButton.Ok) return def resizeEvent(self, event): # 在窗口或控件的尺寸发生变化时调用 super().resizeEvent(event) self.setAllColumnWidth() # 创建完成 def createuserFinished(self): self.loadUser() if self.userModel.rowCount() > 0: self.ui.tableViewUser.selectRow(self.userModel.rowCount()-1) # 编辑完成 def edituserFinished(self): if len(self.ui.tableViewUser.selectionModel().selectedRows())== 1: row = self.ui.tableViewUser.selectionModel().selectedRows()[0].row() self.loadUser() if self.userModel.rowCount() > 0: self.ui.tableViewUser.selectRow(row) # 加载用户 def loadUser(self): users = userManager.getInfo() if len(users) > 0: self.userModel.clear() for user in users: index = self.userModel.rowCount() self.userModel.setItem(index, 0, QStandardItem(str(user["id"]))) self.userModel.setItem(index, 1, QStandardItem(user["name"])) self.userModel.setItem(index, 2, QStandardItem(user["password"])) self.userModel.setItem(index, 3, QStandardItem(user["role_name"])) self.batchOperation() # 批量操作 def batchOperation(self): self.setAllHorizontalHeaderLabels() self.hideAllColumn() self.setAllColumnWidth() # 批量设置列宽 def setAllColumnWidth(self): common.resizeDefTableView(self.ui.tableViewUser, [1,2,3]) # 批量设置标题 def setAllHorizontalHeaderLabels(self): self.userModel.setHorizontalHeaderLabels(["ID"," 用户名"," 密码"," 角色"]) # 隐藏指定列 def hideAllColumn(self): self.ui.tableViewUser.setColumnHidden(0, True)