KMLoginWindowController.swift 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. //
  2. // KMLoginWindowController.swift
  3. // PDF Office
  4. //
  5. // Created by lizhe on 2023/2/22.
  6. //
  7. import Cocoa
  8. var loginWindowController: KMLoginWindowController?
  9. class KMLoginWindowController: NSWindowController {
  10. @IBOutlet weak var noNetworkView: KMLightNoNetworkView!
  11. @IBOutlet weak var loginView: KMLoginView!
  12. @IBOutlet weak var leftView: KMLoginLeftImageView!
  13. @IBOutlet weak var registerView: KMRegisterView!
  14. @IBOutlet weak var verificationCodeView: KMVerificationCodeView!
  15. @IBOutlet weak var loginInputPasswordView: KMLoginInputPasswordView!
  16. @IBOutlet weak var registerSuccessView: KMRegisterSuccessView!
  17. @IBOutlet weak var resetPasswordView: KMResetPasswordView!
  18. @IBOutlet weak var rightContentView: NSView!
  19. var inputType: DataNavigationViewButtonActionType?
  20. var model: KMRegisterModel = KMRegisterModel()
  21. var currentView: NSView?
  22. var logType: KMRegisterLogType = .login {
  23. didSet {
  24. self.reloadData()
  25. }
  26. }
  27. deinit {
  28. print("KMLoginWindowController 释放")
  29. }
  30. override func windowDidLoad() {
  31. super.windowDidLoad()
  32. // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
  33. self.setup()
  34. }
  35. //MARK: 打开文件
  36. static func show(window: NSWindow, _ type: DataNavigationViewButtonActionType = .Batch, _ logType: KMRegisterLogType = .login) -> KMLoginWindowController? {
  37. var logType = logType
  38. let count = UserDefaults.standard.value(forKey: "kFirstOpenAppCount")
  39. if (count as? Int == 1) {
  40. if logType == .login {
  41. logType = .register
  42. }
  43. }
  44. let controller: KMLoginWindowController = KMLoginWindowController.init(windowNibName: "KMLoginWindowController")
  45. controller.inputType = type
  46. controller.logType = logType
  47. window.beginSheet(controller.window!)
  48. loginWindowController = controller
  49. return controller
  50. }
  51. override func mouseDown(with event: NSEvent) {
  52. super.mouseDown(with: event)
  53. self.window?.makeFirstResponder(self)
  54. }
  55. func setup() {
  56. KMRequestServer.requestServer.reachabilityStatusChange { [weak self] status in
  57. if status == .notReachable {
  58. print("无网络")
  59. self?.noNetworkView.isHidden = false
  60. } else {
  61. print("有网络")
  62. self?.noNetworkView.isHidden = true
  63. }
  64. }
  65. self.window?.contentView?.backgroundColor(NSColor(hex: "#FFFFFF"))
  66. self.leftView.cancelAction = { view in
  67. NSApp.mainWindow!.endSheet(view.window!)
  68. view.window!.close()
  69. loginWindowController = nil
  70. }
  71. //loginView
  72. //登录界面点击注册按钮
  73. self.loginView.registerAction = { [unowned self] (view, data) in
  74. self.logType = .register
  75. }
  76. //登录界面点击下一步按钮
  77. self.loginView.nextAction = { [unowned self] (view, data, sender) in
  78. KMRequestServerManager.manager.verificationEmail(userName: data.email, verifyEmailType: .login) { [unowned self] success, result in
  79. if success {
  80. self.model.email = data.email
  81. self.logType = .loginInputPassword
  82. } else {
  83. if result?.code == 318 {
  84. let alert = NSAlert()
  85. alert.messageText = NSLocalizedString("Unable to log", comment: "")
  86. alert.informativeText = NSLocalizedString("Your account is currently being logged out and cannot be logged in.If you have questions, you can contact customer service", comment: "")
  87. alert.addButton(withTitle: NSLocalizedString("Contact Customer", comment: ""))
  88. alert.addButton(withTitle: NSLocalizedString("Cancel", comment: ""))
  89. alert.beginSheetModal(for: view.window!) { result in
  90. if (result == .alertFirstButtonReturn) {
  91. // KMMailHelper.newEmail(withContacts: "support@pdfreaderpro.com", andSubjects: "")
  92. // NSWorkspace.shared.launchApplication("Mailto:support@pdfreaderpro.com")
  93. NSWorkspace.shared.open(URL(string: "mailto:support@pdfreaderpro.com")!)
  94. // let service = NSSharingService(named: NSSharingService.Name.composeEmail)
  95. // service?.recipients = ["support@pdfreaderpro.com"]
  96. // service?.subject = "Test Mail"
  97. // service?.perform(withItems: ["Test Mail body"])
  98. } else if result == .alertSecondButtonReturn {
  99. return
  100. }
  101. }
  102. } else {
  103. self.loginView.showAlert(result: result)
  104. }
  105. }
  106. sender.isEnabled = true
  107. sender.alphaValue = 1
  108. }
  109. }
  110. //registerView
  111. //注册界面点击登录按钮
  112. self.registerView.loginAction = { [unowned self] (view, data) in
  113. self.logType = .login
  114. }
  115. //注册界面点击下一步按钮
  116. self.registerView.nextAction = { [unowned self] (view, data, sender) in
  117. KMRequestServerManager.manager.verificationEmail(userName: data.email, verifyEmailType: .register) { success, result in
  118. if success {
  119. KMRequestServerManager.manager.getVerifyCode(verifyCodeType: .register, email: data.email) { success, result in
  120. if success {
  121. self.verificationCodeView.inputType = .register
  122. self.verificationCodeView.model.email = data.email
  123. self.verificationCodeView.model.password = data.password
  124. self.verificationCodeView.beginTimer()
  125. self.logType = .verificationCode
  126. } else {
  127. self.registerView.showEmailAlert(result: result!)
  128. }
  129. }
  130. } else {
  131. self.registerView.showEmailAlert(result: result!)
  132. }
  133. sender.isEnabled = true
  134. sender.alphaValue = 1
  135. }
  136. }
  137. //注册成功界面点击完成按钮
  138. self.registerSuccessView.doneAction = { [unowned self] view in
  139. NSApp.mainWindow!.endSheet(view.window!)
  140. view.window!.close()
  141. loginWindowController = nil
  142. print("注册成功")
  143. }
  144. //verificationCodeView
  145. //验证码界面点击取消按钮
  146. self.verificationCodeView.cancelAction = { [unowned self] view in
  147. self.logType = view.inputType
  148. }
  149. //验证码界面点击完成按钮
  150. self.verificationCodeView.doneAction = { [unowned self] (view, data, sender) in
  151. if view.inputType == .register {
  152. KMRequestServerManager.manager.register(userName: data.email, password: data.password, verifyCode: data.verifyCode) { [unowned self] (success, requestData, result) in
  153. if success {
  154. if data.logType == .register {
  155. }
  156. self.logType = .registerSuccess
  157. } else {
  158. self.verificationCodeView.showAlert(result: result)
  159. }
  160. sender.isEnabled = true
  161. sender.alphaValue = 1
  162. }
  163. } else if view.inputType == .loginInputPassword {
  164. KMRequestServerManager.manager.verificationCode(account: data.email, verifyCode: data.verifyCode, verifyCodeType: .resetPassword) { success, result in
  165. if success {
  166. self.resetPasswordView.model.verifyCode = data.verifyCode
  167. self.resetPasswordView.model.email = data.email
  168. self.logType = .resetPassword
  169. } else {
  170. self.verificationCodeView.showAlert(result: result)
  171. }
  172. sender.isEnabled = true
  173. sender.alphaValue = 1
  174. }
  175. }
  176. }
  177. //验证码界面点击重新发送验证码按钮
  178. self.verificationCodeView.reSendAction = { [unowned self] (view, textView) in
  179. KMRequestServerManager.manager.getVerifyCode(verifyCodeType: self.verificationCodeView.verifyCodeType, email: self.verificationCodeView.model.email) { success, result in
  180. if success {
  181. self.verificationCodeView.resetTimer()
  182. } else {
  183. self.verificationCodeView.showAlert(result: result!)
  184. }
  185. textView.isSelectable = true
  186. textView.alphaValue = 1
  187. }
  188. }
  189. //loginInputPasswordView
  190. //登录输入密码界面点击登录按钮
  191. self.loginInputPasswordView.loginAction = { [unowned self] (view, data, sender) in
  192. KMRequestServerManager.manager.login(email: data.email, password: data.password) { success, requestData, result in
  193. if success {
  194. KMRequestServerManager.manager.getUserInfo { success, data, error in
  195. if success {
  196. NSApp.mainWindow!.endSheet(view.window!)
  197. view.window!.close()
  198. loginWindowController = nil
  199. }
  200. }
  201. } else {
  202. self.loginInputPasswordView.showAlert(result: result)
  203. }
  204. sender.isEnabled = true
  205. sender.alphaValue = 1
  206. }
  207. }
  208. //登录输入密码界面点击忘记密码按钮
  209. self.loginInputPasswordView.forgotPasswordAction = { [unowned self] (view, data) in
  210. KMRequestServerManager.manager.getVerifyCode(verifyCodeType: .resetPassword, email: data.email) { success, result in
  211. if success {
  212. self.verificationCodeView.inputType = .loginInputPassword
  213. self.verificationCodeView.model.email = data.email
  214. self.verificationCodeView.beginTimer()
  215. self.logType = .verificationCode
  216. } else {
  217. self.loginInputPasswordView.showAlert(result: result)
  218. }
  219. }
  220. }
  221. //登录输入密码界面点击调整邮箱按钮
  222. self.loginInputPasswordView.changeEmailAction = { [unowned self] view in
  223. self.logType = .login
  224. }
  225. //resetPasswordView
  226. //重置密码界面点击完成按钮
  227. self.resetPasswordView.doneAction = { [unowned self] (view, data, sender) in
  228. KMRequestServerManager.manager.resetPassword(account: data.email, firstPassword: data.password, secondPassword: data.rePassword, verifyCode: data.verifyCode) {[unowned self] (success, result) in
  229. if success {
  230. self.model.email = data.email
  231. self.logType = .login
  232. } else {
  233. self.verificationCodeView.showAlert(result: result!)
  234. }
  235. sender.isEnabled = true
  236. sender.alphaValue = 1
  237. }
  238. }
  239. self.reloadData()
  240. }
  241. func reloadData() {
  242. guard self.rightContentView != nil else {
  243. return
  244. }
  245. for view in self.rightContentView.subviews {
  246. view.isHidden = true
  247. }
  248. switch self.logType {
  249. case .login:
  250. self.loginView.isHidden = false
  251. self.loginView.model.email = self.model.email
  252. self.window?.makeFirstResponder(self.loginView.emailTextField)
  253. case .register:
  254. self.registerView.isHidden = false
  255. self.window?.makeFirstResponder(self.registerView.emailTextField)
  256. case .resetPassword:
  257. self.resetPasswordView.resetData()
  258. self.resetPasswordView.email = self.model.email
  259. self.resetPasswordView.isHidden = false
  260. case .verificationCode:
  261. self.verificationCodeView.isHidden = false
  262. self.window?.makeFirstResponder(self.verificationCodeView.code1TextField.textField)
  263. case .registerSuccess:
  264. self.registerSuccessView.isHidden = false
  265. case .loginInputPassword:
  266. self.loginInputPasswordView.email = self.model.email
  267. self.loginInputPasswordView.isHidden = false
  268. default:
  269. break
  270. }
  271. }
  272. }
  273. protocol KMLoginWindowControllerNetworking: KMLoginWindowController {}
  274. extension KMLoginWindowController: KMLoginWindowControllerNetworking {
  275. }