module_login.py 8.7 KB

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