完成注册流程

This commit is contained in:
anlicheng 2026-03-20 11:23:40 +08:00
parent b99f8031e4
commit 803737b574
2 changed files with 40 additions and 30 deletions

View File

@ -14,8 +14,17 @@ class RegisterModel {
enum Stage {
case requestVerifyCode(username: String?)
case submitVerifyCode(username: String)
case setPassword(username: String)
case submitVerifyCode(username: String, sessionId: Int)
case setPassword(sessionId: Int)
}
//
struct RegisterSession: Codable {
let sessionId: Int
enum CodingKeys: String, CodingKey {
case sessionId = "session_id"
}
}
var stage: Stage = .requestVerifyCode(username: nil)
@ -26,35 +35,33 @@ class RegisterModel {
"mac": SystemConfig.macAddressString(mac: SystemConfig.getMacAddress())
]
func requestVerifyCode(username: String) async throws -> String {
func requestVerifyCode(username: String) async throws -> RegisterSession {
var params: [String: Any] = [
"username": username
]
params.merge(baseParams) {$1}
return try await SDLAPIClient.doPost(path: "/auth/sendVerifyCode", params: params, as: String.self)
return try await SDLAPIClient.doPost(path: "/register/sendVerfiyCode", params: params, as: RegisterSession.self)
}
func submitVerifyCode(username: String, verifyCode: String) async throws -> String {
func submitVerifyCode(sessionId: Int, verifyCode: String) async throws -> String {
var params: [String: Any] = [
"username": username,
"verify_code": verifyCode,
"session_id": sessionId,
"code": verifyCode,
]
params.merge(baseParams) {$1}
return try await SDLAPIClient.doPost(path: "/auth/submitVerifyCode", params: params, as: String.self)
return try await SDLAPIClient.doPost(path: "/register/verfiyCode", params: params, as: String.self)
}
func register(username: String, password: String) async throws -> String {
func register(sessionId: Int, password: String) async throws -> String {
var params: [String: Any] = [
"username": username,
"password": password,
"version": SystemConfig.version_name,
"system": SystemConfig.systemInfo
"session_id": sessionId,
"password": password
]
params.merge(baseParams) {$1}
return try await SDLAPIClient.doPost(path: "/auth/register", params: params, as: String.self)
return try await SDLAPIClient.doPost(path: "/register/submit", params: params, as: String.self)
}
}

View File

@ -21,10 +21,10 @@ struct RegisterRootView: View {
switch registerModel.stage {
case .requestVerifyCode(let username):
RegisterRequestVerifyCodeView(username: username ?? "")
case .submitVerifyCode(let username):
RegisterSubmitVerifyCodeView(username: username)
case .setPassword(let username):
RegisterSetPasswordView(username: username)
case .submitVerifyCode(let username, let sessionId):
RegisterSubmitVerifyCodeView(username: username, sessionId: sessionId)
case .setPassword(let sessionId):
RegisterSetPasswordView(sessionId: sessionId)
}
}
.transition(.asymmetric(
@ -81,10 +81,10 @@ struct RegisterRequestVerifyCodeView: View {
var body: some View {
VStack(spacing: 24) {
headerSection(title: "创建个人网络", subtitle: "输入手机号或邮箱开始注册")
headerSection(title: "创建个人网络", subtitle: "输入邮箱开始注册")
VStack(spacing: 16) {
PunchTextField(icon: "person.crop.circle", placeholder: "手机号 / 邮箱", text: $username)
PunchTextField(icon: "person.crop.circle", placeholder: "邮箱", text: $username)
}
.frame(width: 280)
@ -113,26 +113,26 @@ struct RegisterRequestVerifyCodeView: View {
Task { @MainActor in
if username.isEmpty {
self.showAlert = true
self.errorMessage = "手机号/邮箱为空"
self.errorMessage = "邮箱为空"
self.isProcessing = false
return
}
switch SDLUtil.identifyContact(username) {
case .email, .phone:
case .email:
do {
//_ = try await self.registerModel.requestVerifyCode(username: username)
let registerSession = try await self.registerModel.requestVerifyCode(username: username)
withAnimation(.spring(duration: 0.6, bounce: 0.2)) {
self.registerModel.stage = .submitVerifyCode(username: username)
self.registerModel.stage = .submitVerifyCode(username: username, sessionId: registerSession.sessionId)
self.registerModel.transitionEdge = .trailing
}
} catch {
self.showAlert = true
self.errorMessage = error.localizedDescription
}
case .invalid:
default:
self.showAlert = true
self.errorMessage = "手机号/邮箱格式错误"
self.errorMessage = "邮箱格式错误"
}
self.isProcessing = false
}
@ -143,7 +143,10 @@ struct RegisterRequestVerifyCodeView: View {
// MARK: -
struct RegisterSubmitVerifyCodeView: View {
@Environment(RegisterModel.self) var registerModel
let username: String
let sessionId: Int
@State private var code: String = ""
@State private var isProcessing = false
@ -247,9 +250,9 @@ struct RegisterSubmitVerifyCodeView: View {
self.isProcessing = true
Task { @MainActor in
do {
//_ = try await self.registerModel.submitVerifyCode(username: username, verifyCode: self.code)
let result = try await self.registerModel.submitVerifyCode(sessionId: sessionId, verifyCode: self.code)
withAnimation(.spring(duration: 0.6, bounce: 0.2)) {
self.registerModel.stage = .setPassword(username: username)
self.registerModel.stage = .setPassword(sessionId: sessionId)
self.registerModel.transitionEdge = .trailing
}
} catch {
@ -264,7 +267,7 @@ struct RegisterSubmitVerifyCodeView: View {
// MARK: -
struct RegisterSetPasswordView: View {
@Environment(RegisterModel.self) var registerModel
let username: String
let sessionId: Int
@State private var password = ""
@State private var confirm = ""
@State private var isProcessing = false
@ -329,7 +332,7 @@ struct RegisterSetPasswordView: View {
self.isProcessing = true
Task { @MainActor in
do {
// _ = try await self.registerModel.register(username: username, password: self.password)
let result = try await self.registerModel.register(sessionId: sessionId, password: self.password)
} catch {
self.errorMessage = error.localizedDescription
}