import time from UI.login import Ui_Form from PySide6.QtWidgets import * import json import requests import settings from PySide6.QtCore import * import threading from module.other.rsa import RSAService from .MineQWidget import MineQWidget class LoginWindow(MineQWidget, Ui_Form): get_verification_code_last_time = 0 def __init__(self, windows=None, call_back=None, par=None): super().__init__() self.windows = windows self.call_back = call_back self.par = par self.setupUi(self) self.setFixedSize(self.width(), self.height()) self.setWindowTitle("惠利玛系统登录") self.init() self.setWindowModality(Qt.ApplicationModal) self.show() def init(self): self.scrollArea = None self.group = QButtonGroup(self) self.group.setObjectName("radioButtonGroup") self.group.addButton(self.radioButton) self.group.addButton(self.radioButton_2) # 设置为单选 self.group.setExclusive(True) self.radioButton.toggled.connect(self.radioButton_clicked) self.radioButton_2.toggled.connect(self.radioButton_clicked) self.lineEdit.setText(settings.Account) self.pushButton.clicked.connect(self.login) self.pushButton_2.clicked.connect(self.get_verification_code) self.change_mode("短信验证码登录") def radioButton_clicked(self, *args): if self.radioButton.isChecked(): self.change_mode("短信验证码登录") else: self.change_mode("账号密码登录") def change_mode(self, mode_name): self.radioButton.setChecked(False) self.radioButton_2.setChecked(False) self.pushButton_2.hide() self.lineEdit_2.setText("") if mode_name == "短信验证码登录": self.pushButton_2.setText("获取验证码") self.radioButton.setChecked(True) self.pushButton_2.show() self.label_3.setText("验证码:") self.lineEdit_2.setEchoMode(QLineEdit.Normal) self.lineEdit_2.resize(161, 41) if mode_name == "账号密码登录": self.lineEdit_2.resize(271, 41) self.radioButton_2.setChecked(True) self.label_3.setText("密码:") self.lineEdit_2.setEchoMode(QLineEdit.Password) def show_companies(self, company_list): self.scrollArea = QScrollArea(parent=self) self.scrollArea.resize(self.size()) self.widget_2 = QWidget() self.widget_2.setStyleSheet("background-color: rgb(245, 245, 245)") self.widget_2.setMinimumSize(self.width(), self.height() * 3) self.scrollArea.setWidget(self.widget_2) self.setWindowModality(Qt.ApplicationModal) self.scrollArea.show() x, y = 0, 10 for company in company_list: company_widget = SelectCompany(self.widget_2, data=company) company_widget.signal_data.connect(self.select_company) company_widget.move(int((self.width() - company_widget.width()) / 2), y) y += 45 def get_verification_code(self): self.pushButton_2.setEnabled(False) if time.time() - LoginWindow.get_verification_code_last_time < 60: self.pushButton_2.setEnabled(True) return False, "60秒内只允许发送一次" phone = self.lineEdit.text() print("phone", phone) if phone == "": self.WaringMessage("请输入手机号") self.pushButton_2.setEnabled(True) return False, "请输入手机号" try: phone = int(phone) if len(str(phone)) != 11: self.WaringMessage("手机号码长度错误") self.pushButton_2.setEnabled(True) return False except: self.WaringMessage("手机号码格式错误") self.pushButton_2.setEnabled(True) return False, "手机号码格式错误" url = "{domain}/api/auth/send_code".format( domain=settings.DOMAIN ) post_data = {"phone": str(phone), "_params_": RSAService().encrypt_public(phone=str(phone)), } _s = requests.post(url=url, headers=settings.Headers, data=json.dumps(post_data)) threading.Thread(target=self.show_countdown, args=()).start() return True, "成功" def show_countdown(self, *args): n = 60 self.pushButton_2.setEnabled(False) while n: n -= 1 self.pushButton_2.setText("{}秒后重试".format(n)) time.sleep(1) self.pushButton_2.setEnabled(True) self.pushButton_2.setText("获取验证码") pass def select_company(self, data): if self.scrollArea is not None: self.scrollArea.hide() company_id = data["id"] url = "{domain}/api/backend/account/select_company".format( domain=settings.DOMAIN ) post_data = { "id": company_id } _s = self.s.post(url=url, headers=settings.Headers, data=json.dumps(post_data)) response_data = _s.json() print(response_data["message"]) self.label_4.setText(response_data["message"]) if response_data["code"] == 0: authorization = "Bearer {}".format(self.token) settings.Headers["Authorization"] = authorization data_dict = {"account": self.lineEdit.text(), } settings.set_config(data_dict) settings.set_key(authorization) self.close() if self.call_back: self.call_back() else: self.label_4.setText(response_data["message"]) return def login(self): login_mode = "短信验证码登录" if self.radioButton.isChecked() else "账号密码登录" self.label_4.setText("") if login_mode == "账号密码登录": login_type = 0 else: login_type = 1 url = "{domain}/api/auth/login".format( domain=settings.DOMAIN ) post_data = { "device": "backend", "platform": "image_cutout", "password": self.lineEdit_2.text(), "type": login_type, "username": self.lineEdit.text(), } self.s = requests.session() _s = self.s.post(url=url, headers=settings.Headers, data=json.dumps(post_data)) print(_s) response_data = _s.json() code = response_data["code"] print(response_data) self.label_4.setText(response_data["message"]) if code != 0: return self.token = response_data["data"]["token"] authorization = "Bearer {}".format(self.token) settings.Headers["Authorization"] = authorization is_need_select_company = response_data["data"]["is_need_select_company"] if is_need_select_company == 0: data_dict = {"account": self.lineEdit.text(), } settings.set_config(data_dict) settings.set_key(authorization) self.close() if self.call_back: self.call_back() return url = "{domain}/api/backend/account/get_account_company".format( domain=settings.DOMAIN ) _s = self.s.get(url=url, headers=settings.Headers) response_data = _s.json() print(response_data) company_list = [] if len(response_data["data"]) == 1: company_id = response_data["data"]["id"] self.select_company({"id": company_id}) else: for i in response_data["data"]: company_list.append(i) self.show_companies(company_list=company_list) class SelectCompany(QLabel): signal_data = Signal(dict) is_clicked = Signal() def __init__(self, parent, data): super().__init__(parent=parent) self.parent = parent self.data = data self.resize(270, 40) self.setStyleSheet(""" background-color: rgb(235, 241, 247)); color: #666666; border-radius: 5px; border: 0px groove gray; """) self.init() self.show() def init(self): self.setText(self.data["name"]) def mousePressEvent(self, ev): self.is_clicked.emit() a = QMessageBox.question(self, '确认', '是否选择该企业身份登录?', QMessageBox.Yes | QMessageBox.No) if a == QMessageBox.No: return # self.setStyleSheet(""" # background-color: rgb(60, 63, 65); # """) self.setEnabled(False) self.signal_data.emit({"id": self.data["id"]})