iOS-study
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LoginView.swift 7.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. //
  2. // ContentView.swift
  3. // iOSFirst
  4. //
  5. // Created by 孙宇峰 on 2023/1/31.
  6. //
  7. import SwiftUI
  8. import RxSwift
  9. import RxCocoa
  10. import RxRelay
  11. struct LoginView: View {
  12. private var viewModel = LoginViewModel()
  13. var bag = DisposeBag()
  14. @State private var inputAccountMessage:String = ""
  15. @State private var isPresent:Bool = false
  16. @State private var checked:Bool = true
  17. @State private var inputPasswordMessage:String = ""
  18. @Environment(\.presentationMode) var presentationMode;
  19. var body: some View {
  20. VStack(alignment:.leading,spacing: 0) {
  21. HStack{
  22. Spacer()
  23. Image("ic_setting")
  24. .imageScale(.large)
  25. .foregroundColor(.accentColor)
  26. Text("设置").font(.system(size: 14))
  27. }
  28. Text("欢迎来到")
  29. .foregroundColor(.gray)
  30. .font(.system(size: 30))
  31. .multilineTextAlignment(.center)
  32. .bold()
  33. .padding(.top,20)
  34. HStack{
  35. Image("app_logo")
  36. .resizable()
  37. .imageScale(.large)
  38. .foregroundColor(.accentColor)
  39. .scaledToFill()
  40. .frame(width: 50,height: 50)
  41. Image("txtlogo")
  42. .imageScale(.large)
  43. .foregroundColor(.accentColor)
  44. .frame(width: 240,height: 35)
  45. }.frame(height: 40)
  46. .padding(.top,20)
  47. .padding(.bottom,100)
  48. VStack(alignment: .leading, spacing: 400) {
  49. HStack(alignment: .center, spacing: 15) {
  50. Image("ic_person")
  51. .imageScale(.large)
  52. .foregroundColor(.accentColor)
  53. TextField("请输入手机号",text:$inputAccountMessage)
  54. .keyboardType(UIKeyboardType.namePhonePad)
  55. .font(.system(size: 16))
  56. .frame(maxWidth: .infinity,alignment: .center)
  57. }
  58. }
  59. .frame(height: 80)
  60. Divider()
  61. VStack(alignment: .leading, spacing: 400) {
  62. HStack(alignment: .center, spacing: 15) {
  63. Image("ic_pwd")
  64. .imageScale(.large)
  65. .foregroundColor(.accentColor)
  66. SecureField("请输入密码",text:$inputPasswordMessage)
  67. .textContentType(.oneTimeCode)
  68. .keyboardType(UIKeyboardType.namePhonePad)
  69. .font(.system(size: 16))
  70. .frame(maxWidth: .infinity,alignment: .center)
  71. }
  72. }.frame(height: 80)
  73. Divider().padding(.bottom,20)
  74. VStack(alignment: .trailing, spacing: 400) {
  75. VStack(alignment: .trailing, spacing: 15) {
  76. HStack {
  77. CheckBoxView(checked: $checked)
  78. Text("我已阅读并同意")
  79. .foregroundColor(.black)
  80. .font(.system(size: 15))
  81. Text("《星火云鸽用户协议》")
  82. .foregroundColor(.blue)
  83. .font(.system(size: 15))
  84. Spacer()
  85. }
  86. Spacer().frame(height: 15)
  87. Button(action: {
  88. if(inputAccountMessage.isEmpty){
  89. SUIToast.show(messageItem: .init(
  90. message: "账号不能为空",
  91. bgColor: .gray,
  92. messageColor: .white
  93. ))
  94. }else if(inputPasswordMessage.isEmpty){
  95. SUIToast.show(messageItem: .init(
  96. message: "密码不能为空",
  97. bgColor: .gray,
  98. messageColor: .white
  99. ))
  100. }else {
  101. viewModel.loginUser(username: inputAccountMessage, password: inputPasswordMessage)
  102. if (!viewModel.userResponse.hasObservers){
  103. viewModel.userResponse.subscribe { event in
  104. isPresent=true
  105. print("接收到的token值\(String(describing: event.element?.token_value))")
  106. // 这里需要返回首页,登陆成功后销毁本页面
  107. self.presentationMode.wrappedValue.dismiss()
  108. }
  109. }
  110. }
  111. }){
  112. Text("登录")
  113. .font(.system(size: 17))
  114. .bold()
  115. .frame(minWidth: 0, maxWidth: .infinity)
  116. .padding()
  117. .foregroundColor(.white)
  118. .background(.blue)
  119. .cornerRadius(30)
  120. }.fullScreenCover(isPresented: $isPresent) {
  121. TestView(settingPagePresented: $isPresent)
  122. }
  123. }
  124. }
  125. HStack{
  126. Text("验证码登录").font(.system(size:15)).onTapGesture {
  127. let msg="点击了验证码登录"
  128. print(msg)
  129. SUIToast.show(messageItem: .init(
  130. message: msg,
  131. bgColor: .gray,
  132. messageColor: .white
  133. ))
  134. }
  135. Spacer ()
  136. Text("忘记密码?").font(.system(size:15)).onTapGesture {
  137. let msg="点击了密码"
  138. print(msg)
  139. SUIToast.show(messageItem: .init(
  140. message: msg,
  141. bgColor: .gray,
  142. messageColor: .white
  143. ))
  144. }.padding(.vertical,20).font(.system(size: 15))
  145. }
  146. Spacer()
  147. }.padding()
  148. .frame(width: .infinity,height: .infinity)
  149. }
  150. }
  151. struct ContentView_Previews: PreviewProvider {
  152. static var previews: some View {
  153. LoginView()
  154. }
  155. }
  156. struct CheckBoxView: View {
  157. @Binding var checked: Bool
  158. var body: some View {
  159. Image(systemName: checked ? "checkmark.square.fill" : "square")
  160. .foregroundColor(checked ? Color(UIColor.systemBlue) : Color.secondary)
  161. .onTapGesture {
  162. self.checked.toggle()
  163. }
  164. }
  165. }