module_login.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. import time
  2. from UI.login import Ui_Form
  3. from PySide6.QtWidgets import *
  4. import json
  5. import requests
  6. import settings
  7. from PySide6.QtCore import *
  8. import threading
  9. from module.other.rsa import RSAService
  10. class LoginWindow(QWidget, Ui_Form):
  11. get_verification_code_last_time = 0
  12. def __init__(self, windows=None, call_back=None, par=None):
  13. super().__init__()
  14. self.windows = windows
  15. self.call_back = call_back
  16. self.par = par
  17. self.setupUi(self)
  18. self.setFixedSize(self.width(), self.height())
  19. self.setWindowTitle("惠利玛系统登录")
  20. self.init()
  21. self.setWindowModality(Qt.ApplicationModal)
  22. self.show()
  23. def init(self):
  24. self.scrollArea = None
  25. self.group = QButtonGroup(self)
  26. self.group.setObjectName("radioButtonGroup")
  27. self.group.addButton(self.radioButton)
  28. self.group.addButton(self.radioButton_2)
  29. # 设置为单选
  30. self.group.setExclusive(True)
  31. self.radioButton.toggled.connect(self.radioButton_clicked)
  32. self.radioButton_2.toggled.connect(self.radioButton_clicked)
  33. self.lineEdit.setText(settings.Account)
  34. self.pushButton.clicked.connect(self.login)
  35. self.pushButton_2.clicked.connect(self.get_verification_code)
  36. self.change_mode("短信验证码登录")
  37. def radioButton_clicked(self, *args):
  38. if self.radioButton.isChecked():
  39. self.change_mode("短信验证码登录")
  40. else:
  41. self.change_mode("账号密码登录")
  42. def change_mode(self, mode_name):
  43. self.radioButton.setChecked(False)
  44. self.radioButton_2.setChecked(False)
  45. self.pushButton_2.hide()
  46. self.lineEdit_2.setText("")
  47. if mode_name == "短信验证码登录":
  48. self.pushButton_2.setText("获取验证码")
  49. self.radioButton.setChecked(True)
  50. self.pushButton_2.show()
  51. self.label_3.setText("验证码:")
  52. self.lineEdit_2.setEchoMode(QLineEdit.Normal)
  53. self.lineEdit_2.resize(161, 41)
  54. if mode_name == "账号密码登录":
  55. self.lineEdit_2.resize(271, 41)
  56. self.radioButton_2.setChecked(True)
  57. self.label_3.setText("密码:")
  58. self.lineEdit_2.setEchoMode(QLineEdit.Password)
  59. def show_companies(self, company_list):
  60. self.scrollArea = QScrollArea(parent=self)
  61. self.scrollArea.resize(self.size())
  62. self.widget_2 = QWidget()
  63. self.widget_2.setStyleSheet("background-color: rgb(245, 245, 245)")
  64. self.widget_2.setMinimumSize(self.width(), self.height() * 3)
  65. self.scrollArea.setWidget(self.widget_2)
  66. self.setWindowModality(Qt.ApplicationModal)
  67. self.scrollArea.show()
  68. x, y = 0, 10
  69. for company in company_list:
  70. company_widget = SelectCompany(self.widget_2, data=company)
  71. company_widget.signal_data.connect(self.select_company)
  72. company_widget.move(int((self.width() - company_widget.width()) / 2), y)
  73. y += 45
  74. def get_verification_code(self):
  75. self.pushButton_2.setEnabled(False)
  76. if time.time() - LoginWindow.get_verification_code_last_time < 60:
  77. self.pushButton_2.setEnabled(True)
  78. return False, "60秒内只允许发送一次"
  79. phone = self.lineEdit.text()
  80. print("phone", phone)
  81. if phone == "":
  82. reply = QMessageBox.question(self, '确认', "请输入手机号", QMessageBox.Yes)
  83. self.pushButton_2.setEnabled(True)
  84. return False, "请输入手机号"
  85. try:
  86. phone = int(phone)
  87. if len(str(phone)) != 11:
  88. reply = QMessageBox.question(self, '确认', "手机号码长度错误", QMessageBox.Yes)
  89. self.pushButton_2.setEnabled(True)
  90. return False
  91. except:
  92. reply = QMessageBox.question(self, '确认', "手机号码格式错误", QMessageBox.Yes)
  93. self.pushButton_2.setEnabled(True)
  94. return False, "手机号码格式错误"
  95. url = "{domain}/api/auth/send_code".format(
  96. domain=settings.DOMAIN
  97. )
  98. post_data = {"phone": str(phone),
  99. "_params_": RSAService().encrypt_public(phone=str(phone)),
  100. }
  101. _s = requests.post(url=url, headers=settings.Headers, data=json.dumps(post_data))
  102. threading.Thread(target=self.show_countdown, args=()).start()
  103. return True, "成功"
  104. def show_countdown(self, *args):
  105. n = 60
  106. self.pushButton_2.setEnabled(False)
  107. while n:
  108. n -= 1
  109. self.pushButton_2.setText("{}秒后重试".format(n))
  110. time.sleep(1)
  111. self.pushButton_2.setEnabled(True)
  112. self.pushButton_2.setText("获取验证码")
  113. pass
  114. def select_company(self, data):
  115. if self.scrollArea is not None:
  116. self.scrollArea.hide()
  117. company_id = data["id"]
  118. url = "{domain}/api/backend/account/select_company".format(
  119. domain=settings.DOMAIN
  120. )
  121. post_data = {
  122. "id": company_id
  123. }
  124. _s = self.s.post(url=url, headers=settings.Headers, data=json.dumps(post_data))
  125. response_data = _s.json()
  126. print(response_data["message"])
  127. self.label_4.setText(response_data["message"])
  128. if response_data["code"] == 0:
  129. authorization = "Bearer {}".format(self.token)
  130. settings.Headers["Authorization"] = authorization
  131. data_dict = {"account": self.lineEdit.text(), }
  132. settings.set_config(data_dict)
  133. settings.set_key(authorization)
  134. self.close()
  135. if self.call_back:
  136. self.call_back()
  137. else:
  138. self.label_4.setText(response_data["message"])
  139. return
  140. def login(self):
  141. login_mode = "短信验证码登录" if self.radioButton.isChecked() else "账号密码登录"
  142. self.label_4.setText("")
  143. if login_mode == "账号密码登录":
  144. login_type = 0
  145. else:
  146. login_type = 1
  147. url = "{domain}/api/auth/login".format(
  148. domain=settings.DOMAIN
  149. )
  150. post_data = {
  151. "device": "backend",
  152. "platform": "image_cutout",
  153. "password": self.lineEdit_2.text(),
  154. "type": login_type,
  155. "username": self.lineEdit.text(),
  156. }
  157. self.s = requests.session()
  158. _s = self.s.post(url=url, headers=settings.Headers, data=json.dumps(post_data))
  159. print(_s)
  160. response_data = _s.json()
  161. code = response_data["code"]
  162. print(response_data)
  163. self.label_4.setText(response_data["message"])
  164. if code != 0:
  165. return
  166. self.token = response_data["data"]["token"]
  167. authorization = "Bearer {}".format(self.token)
  168. settings.Headers["Authorization"] = authorization
  169. is_need_select_company = response_data["data"]["is_need_select_company"]
  170. if is_need_select_company == 0:
  171. data_dict = {"account": self.lineEdit.text(), }
  172. settings.set_config(data_dict)
  173. settings.set_key(authorization)
  174. self.close()
  175. if self.call_back:
  176. self.call_back()
  177. return
  178. url = "{domain}/api/backend/account/get_account_company".format(
  179. domain=settings.DOMAIN
  180. )
  181. _s = self.s.get(url=url, headers=settings.Headers)
  182. response_data = _s.json()
  183. print(response_data)
  184. company_list = []
  185. if len(response_data["data"]) == 1:
  186. company_id = response_data["data"]["id"]
  187. self.select_company({"id": company_id})
  188. else:
  189. for i in response_data["data"]:
  190. company_list.append(i)
  191. self.show_companies(company_list=company_list)
  192. class SelectCompany(QLabel):
  193. signal_data = Signal(dict)
  194. is_clicked = Signal()
  195. def __init__(self, parent, data):
  196. super().__init__(parent=parent)
  197. self.parent = parent
  198. self.data = data
  199. self.resize(270, 40)
  200. self.setStyleSheet("""
  201. background-color: rgb(235, 241, 247));
  202. color: #666666;
  203. border-radius: 5px;
  204. border: 0px groove gray;
  205. """)
  206. self.init()
  207. self.show()
  208. def init(self):
  209. self.setText(self.data["name"])
  210. def mousePressEvent(self, ev):
  211. self.is_clicked.emit()
  212. a = QMessageBox.question(self, '确认', '是否选择该企业身份登录?',
  213. QMessageBox.Yes | QMessageBox.No)
  214. if a == QMessageBox.No:
  215. return
  216. # self.setStyleSheet("""
  217. # background-color: rgb(60, 63, 65);
  218. # """)
  219. self.setEnabled(False)
  220. self.signal_data.emit({"id": self.data["id"]})