| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- 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"]})
|