Example #1
0
class Login_UI(QDialog):
    def __init__(self, parent=None):
        super(Login_UI, self).__init__(parent)
        self.initParas()
        self.initUI()

    def initParas(self):
        # 验证方式
        self.login_title = gol.get_value('login_title', '明州体检')
        self.lgoin_width = gol.get_value('login_width', 500)
        self.login_height = gol.get_value('login_height', 400)
        self.login_bg = file_ico("login.png")
        self.login_style = "font: 75 14pt \"微软雅黑\";" \
                      "color:  rgb(45, 135, 66);" \
                      "background-image: url(:/resource/image/login.png);"
        self.login_font = "font: 75 8pt;color:  #CD0000"
        # 获取用户名
        self.session = gol.get_value("tjxt_session_local")
        self.log = gol.get_value("log")

    def initUI(self):
        self.setWindowTitle(self.login_title)
        self.setFixedSize(self.lgoin_width, self.login_height)
        self.setWindowIcon(Icon("mztj"))
        self.setStyleSheet(self.login_style)
        self.setWindowFlags(Qt.FramelessWindowHint)  #窗口模式,去掉标题栏

        # 给窗体再加一个widget控件,对widget设置背景图片
        self.widget = QWidget(self)
        self.widget.setFixedSize(self.lgoin_width, self.login_height)
        palette = QPalette()
        palette.setBrush(self.backgroundRole(), QBrush(QPixmap(self.login_bg)))
        self.widget.setPalette(palette)
        self.widget.setAutoFillBackground(True)

        lt_main = QVBoxLayout(self)
        lt_main.setAlignment(Qt.AlignCenter)
        layout = QFormLayout()
        layout.setLabelAlignment(Qt.AlignRight)
        layout.setFormAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
        # 用户ID
        self.lb_user_id = LineEdit(None, "", LineEdit.SUCCESS_STYLE)
        regx = QRegExp("[a-zA-Z0-9]+$")
        validator = QRegExpValidator(regx, self.lb_user_id)
        self.lb_user_id.setValidator(validator)  #根据正则做限制,只能输入数字
        self.lb_user_id.setMaximumWidth(200)
        # self.lb_user_id.setFocusPolicy(Qt.ClickFocus)
        # 用户姓名
        self.lb_user_name = LineEdit(None, "", LineEdit.SUCCESS_STYLE)
        self.lb_user_name.setDisabled(True)
        self.lb_user_name.setMaximumWidth(200)
        # 用户密码
        self.lb_user_pd = LineEdit(None, "", LineEdit.SUCCESS_STYLE)
        self.lb_user_pd.setMaximumWidth(200)
        self.lb_user_pd.setEchoMode(QLineEdit.Password)
        # 是否自动填充
        self.is_rem = QCheckBox("记住最近登录")
        self.is_rem.setStyleSheet(self.login_font)
        # 进入主界面还是接口界面
        self.is_equip = QCheckBox("进入设备接口")
        self.is_equip.setStyleSheet(self.login_font)

        # 版本号
        self.lb_version = QLabel(self)
        self.lb_version.setText('当前版本:%s' %
                                str(gol.get_value('system_version', '读取失败')))
        self.lb_version.setStyleSheet(self.login_font)
        self.lb_version.setGeometry(QRect(400, 360, 100, 30))

        if not gol.get_value('login_auto_record', 0):
            self.is_rem.setChecked(False)
        else:
            self.is_rem.setChecked(True)
            # 自动填充最近登录信息
            self.lb_user_id.setText(str(gol.get_value('login_user_id',
                                                      'BSSA')))
            self.lb_user_name.setText(gol.get_value('login_user_name', '管理员'))

        if not gol.get_value('system_is_equip', 0):
            self.is_equip.setChecked(False)
        else:
            self.is_equip.setChecked(True)

        ######################添加布局##########################################
        layout0 = QHBoxLayout()
        layout0.addWidget(self.is_rem)
        layout0.addWidget(self.is_equip)
        layout0.addStretch()
        login_user = "******"
        layout.addWidget(QLabel(""))
        layout.addRow(QLabel("账户:"), self.lb_user_id)
        layout.addRow(login_user, self.lb_user_name)
        layout.addRow(QLabel("密码:"), self.lb_user_pd)
        layout.addRow(QLabel(""), layout0)
        layout.setHorizontalSpacing(10)
        layout.setVerticalSpacing(10)

        self.buttonBox = QDialogButtonBox()
        self.buttonBox.addButton("登录", QDialogButtonBox.YesRole)
        self.buttonBox.addButton("取消", QDialogButtonBox.NoRole)
        self.buttonBox.setCenterButtons(True)
        self.buttonBox.buttons()[0].setEnabled(False)
        # 失去焦点
        # self.buttonBox.buttons()[0].setFocusPolicy(Qt.ClickFocus)
        # self.buttonBox.buttons()[1].setFocusPolicy(Qt.NoFocus)

        # 对登录进行限制
        if self.lb_user_name.text():
            self.buttonBox.buttons()[0].setEnabled(True)
        else:
            self.buttonBox.buttons()[0].setEnabled(False)

        self.lb_user_id.textEdited.connect(self.set_empty)
        self.lb_user_id.editingFinished.connect(self.user_get)
        self.is_equip.stateChanged.connect(self.on_equip_change)
        self.buttonBox.accepted.connect(self.login)
        self.buttonBox.rejected.connect(self.reject)

        lt_main.addSpacing(30)
        lt_main.addLayout(layout)
        lt_main.addSpacing(20)
        lt_main.addWidget(self.buttonBox)
        self.setLayout(lt_main)

    def on_equip_change(self, p_int):
        gol.set_value("system_is_equip", p_int)

    def user_get(self):
        user_id = self.lb_user_id.text()
        if not user_id:
            mes_about(self, "请输入账户!")
            return
        try:
            result = self.session.query(MT_TJ_USER).filter(
                MT_TJ_USER.xtsb == '101', MT_TJ_USER.yhdm == user_id).scalar()
            if result:
                self.lb_user_name.setText(str2(result.yhmc))
                self.buttonBox.buttons()[0].setEnabled(True)
        except Exception as e:
            mes_about(self, "读取数据库失败!错误信息:%s" % e)

    def set_empty(self, p_str):
        self.lb_user_id.setText(p_str.upper())
        self.lb_user_name.setText("")
        self.buttonBox.buttons()[0].setEnabled(False)

    # 验证密码
    def login(self):
        _user_id = self.lb_user_id.text()
        _user_name = self.lb_user_name.text()
        _user_pwd = self.lb_user_pd.text()
        if not _user_id:
            mes_about("请输入账户!!")
            return
        try:
            result = self.session.query(MT_TJ_USER).filter(
                MT_TJ_USER.xtsb == '101', MT_TJ_USER.yhdm == _user_id).filter(
                    or_(MT_TJ_USER.yhkl == _user_pwd,
                        MT_TJ_USER.yhkl == None)).scalar()
        except Exception as e:
            mes_about(self, "从数据库中验收密码失败!错误信息:%s" % e)
            return
        if not result:
            mes_warn(self,
                     "您输入的账户:%s,密码:%s,有误!\n请确认后重新登陆!" % (_user_id, _user_pwd))
            return
        results = self.session.query(MT_TJ_YGQSKS).filter(
            MT_TJ_YGQSKS.yggh == _user_id).all()
        ksbms = [result.ksbm.rstrip() for result in results]
        gol.set_value('login_user_ksbms', ksbms)
        gol.set_value('login_user_id', _user_id)
        gol.set_value('login_user_name', _user_name)
        gol.set_value('login_user_pwd', _user_pwd)
        gol.set_value('login_time', cur_datetime())
        ############### 写入配置 #########################
        if self.is_rem.isChecked():
            auto_record = 1
        else:
            auto_record = 0
        if self.is_equip.isChecked():
            is_equip = 1
        else:
            is_equip = 0
        login = {
            "auto_record": auto_record,
            "user_id": _user_id,
            "user_name": _user_name
        }
        system = {"is_equip": is_equip}
        config_write("custom.ini", "login", login)
        config_write("custom.ini", "system", system)
        self.log.info('写入配置(custom.ini)文件成功')
        self.log.info("用户:%s(%s) 登陆成功!" % (_user_name, _user_id))
        # 写入登录记录,获取主键ID
        login_obj = MT_TJ_LOGIN(login_id=_user_id,
                                login_name=_user_name,
                                login_area=gol.get_value('login_area', ''),
                                login_ip=gol.get_value('host_ip', ''),
                                login_host=gol.get_value('host_name', ''),
                                login_in=gol.get_value('login_time', ''))
        try:
            self.session.add(login_obj)
            # 先写入数据库,但是不提交 ,此时可获取自增ID
            self.session.flush()
            gol.set_value('login_lid', login_obj.lid)
            self.session.commit()
        except Exception as e:
            self.session.rollback()
            mes_about(self, '执行发生错误:%s' % e)
            return
        # 跳转
        self.accept()