From 00a722f407c6928e70c734f61ab6f52e58305212 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Thu, 19 Mar 2026 21:48:06 +0800 Subject: [PATCH] fix register view --- punchnet/Views/Register/RegisterModel.swift | 2 + punchnet/Views/Register/RegisterView.swift | 67 ++++++++------------- punchnet/punchnetApp.swift | 2 +- 3 files changed, 29 insertions(+), 42 deletions(-) diff --git a/punchnet/Views/Register/RegisterModel.swift b/punchnet/Views/Register/RegisterModel.swift index 933f963..3a3148e 100644 --- a/punchnet/Views/Register/RegisterModel.swift +++ b/punchnet/Views/Register/RegisterModel.swift @@ -7,6 +7,7 @@ import Foundation import Observation +import SwiftUI @Observable class RegisterModel { @@ -18,6 +19,7 @@ class RegisterModel { } var stage: Stage = .requestVerifyCode(username: nil) + var transitionEdge: Edge = .trailing // 默认从右进入 private let baseParams: [String: Any] = [ "client_id": SystemConfig.getClientId(), diff --git a/punchnet/Views/Register/RegisterView.swift b/punchnet/Views/Register/RegisterView.swift index 0bae27d..07e8945 100644 --- a/punchnet/Views/Register/RegisterView.swift +++ b/punchnet/Views/Register/RegisterView.swift @@ -27,8 +27,10 @@ struct RegisterRootView: View { RegisterSetPasswordView(username: username) } } - .transition(.asymmetric(insertion: .move(edge: .trailing).combined(with: .opacity), - removal: .move(edge: .leading).combined(with: .opacity))) + .transition(.asymmetric( + insertion: .move(edge: registerModel.transitionEdge).combined(with: .opacity), + removal: .move(edge: registerModel.transitionEdge == .trailing ? .leading : .trailing).combined(with: .opacity) + )) } .environment(registerModel) .frame(width: 400, height: 450) @@ -90,14 +92,9 @@ struct RegisterRequestVerifyCodeView: View { Button(action: { self.requestVerifyCode() }) { - if isProcessing { - ProgressView() - .controlSize(.small) - } else { - Text("获取验证码") - .fontWeight(.medium) - .frame(maxWidth: .infinity) - } + Text("获取验证码") + .fontWeight(.medium) + .frame(maxWidth: .infinity) } .buttonStyle(.borderedProminent) .controlSize(.large) @@ -125,10 +122,10 @@ struct RegisterRequestVerifyCodeView: View { switch SDLUtil.identifyContact(username) { case .email, .phone: do { - let result = try await self.registerModel.requestVerifyCode(username: username) - print("send verify code result: \(result)") - withAnimation(.spring()) { + _ = try await self.registerModel.requestVerifyCode(username: username) + withAnimation(.spring(duration: 0.6, bounce: 0.2)) { self.registerModel.stage = .submitVerifyCode(username: username) + self.registerModel.transitionEdge = .trailing } } catch { self.showAlert = true @@ -159,6 +156,11 @@ struct RegisterSubmitVerifyCodeView: View { @State private var isEnabled: Bool = false @State private var remainingSeconds = 60 @State private var timer: Timer? = nil + + // 判断验证码是否正确 + var validInputCode: Bool { + return !self.code.isEmpty && self.code.count == 4 && self.code.allSatisfy {$0.isNumber} + } var body: some View { VStack(spacing: 24) { @@ -186,21 +188,18 @@ struct RegisterSubmitVerifyCodeView: View { Button(action: { self.submitVerifyCode() }) { - if isProcessing { - ProgressView() - .controlSize(.small) - } else { - Text("验证并设置密码") - .fontWeight(.medium) - .frame(maxWidth: .infinity) - } + Text("验证并设置密码") + .fontWeight(.medium) + .frame(maxWidth: .infinity) } .buttonStyle(.borderedProminent) .controlSize(.large) + .disabled(!self.validInputCode) Button("返回上一步") { - withAnimation { - registerModel.stage = .requestVerifyCode(username: self.username) + withAnimation(.spring(duration: 0.6, bounce: 0.2)) { + self.registerModel.stage = .requestVerifyCode(username: self.username) + self.registerModel.transitionEdge = .leading } } .buttonStyle(.plain) @@ -248,25 +247,11 @@ struct RegisterSubmitVerifyCodeView: View { private func submitVerifyCode() { self.isProcessing = true Task { @MainActor in - if self.code.isEmpty { - self.showAlert = true - self.errorMessage = "请输入验证码" - self.isProcessing = false - return - } - - if self.code.count != 4 { - self.showAlert = true - self.errorMessage = "验证码错误" - self.isProcessing = false - return - } - do { - let result = try await self.registerModel.submitVerifyCode(username: username, verifyCode: self.code) - print("submit verify code result: \(result)") - withAnimation(.spring()) { - registerModel.stage = .setPassword(username: username) + _ = try await self.registerModel.submitVerifyCode(username: username, verifyCode: self.code) + withAnimation(.spring(duration: 0.6, bounce: 0.2)) { + self.registerModel.stage = .setPassword(username: username) + self.registerModel.transitionEdge = .trailing } } catch { self.showAlert = true diff --git a/punchnet/punchnetApp.swift b/punchnet/punchnetApp.swift index 71b0d3a..c4ea239 100644 --- a/punchnet/punchnetApp.swift +++ b/punchnet/punchnetApp.swift @@ -43,7 +43,7 @@ struct punchnetApp: App { var body: some Scene { WindowGroup(id: "mainWindow") { // RootView() - ResetPasswordRootView() + RegisterRootView() .navigationTitle("") .environment(self.appContext) .environment(self.userContext)