fix
This commit is contained in:
parent
4af8993c8f
commit
9cde9f1f38
@ -53,9 +53,9 @@ struct AuthService {
|
|||||||
return try await SDLAPIClient.doPost(path: "/auth/token", params: params, as: NetworkSession.self)
|
return try await SDLAPIClient.doPost(path: "/auth/token", params: params, as: NetworkSession.self)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func requestRegisterVerifyCode(username: String) async throws -> RegisterSession {
|
static func requestRegisterVerifyCode(phoneNumber: String) async throws -> RegisterSession {
|
||||||
var params: [String: Any] = [
|
var params: [String: Any] = [
|
||||||
"username": username
|
"username": phoneNumber
|
||||||
]
|
]
|
||||||
params.merge(baseParams) {$1}
|
params.merge(baseParams) {$1}
|
||||||
|
|
||||||
@ -82,9 +82,9 @@ struct AuthService {
|
|||||||
return try await SDLAPIClient.doPost(path: "/register/submit", params: params, as: String.self)
|
return try await SDLAPIClient.doPost(path: "/register/submit", params: params, as: String.self)
|
||||||
}
|
}
|
||||||
|
|
||||||
static func requestResetPasswordVerifyCode(username: String) async throws -> ResetPasswordSession {
|
static func requestResetPasswordVerifyCode(phoneNumber: String) async throws -> ResetPasswordSession {
|
||||||
var params: [String: Any] = [
|
var params: [String: Any] = [
|
||||||
"username": username
|
"username": phoneNumber
|
||||||
]
|
]
|
||||||
params.merge(baseParams) {$1}
|
params.merge(baseParams) {$1}
|
||||||
|
|
||||||
|
|||||||
@ -20,14 +20,14 @@ class RegisterModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 保存临时变量
|
// 保存临时变量
|
||||||
var username: String = ""
|
var phoneNumber: String = ""
|
||||||
var sessionId: Int = 0
|
var sessionId: Int = 0
|
||||||
|
|
||||||
var stage: Stage = .requestVerifyCode
|
var stage: Stage = .requestVerifyCode
|
||||||
var transitionEdge: Edge = .trailing // 默认从右进入
|
var transitionEdge: Edge = .trailing // 默认从右进入
|
||||||
|
|
||||||
func requestVerifyCode(username: String) async throws -> AuthService.RegisterSession {
|
func requestVerifyCode(phoneNumber: String) async throws -> AuthService.RegisterSession {
|
||||||
return try await AuthService.requestRegisterVerifyCode(username: username)
|
return try await AuthService.requestRegisterVerifyCode(phoneNumber: phoneNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
func submitVerifyCode(sessionId: Int, verifyCode: String) async throws -> String {
|
func submitVerifyCode(sessionId: Int, verifyCode: String) async throws -> String {
|
||||||
|
|||||||
@ -23,11 +23,11 @@ class ResetPasswordModel {
|
|||||||
var transitionEdge: Edge = .trailing // 默认从右进入
|
var transitionEdge: Edge = .trailing // 默认从右进入
|
||||||
|
|
||||||
// 保存内部状态
|
// 保存内部状态
|
||||||
var username: String = ""
|
var phoneNumber: String = ""
|
||||||
var sessionId: Int = 0
|
var sessionId: Int = 0
|
||||||
|
|
||||||
func requestVerifyCode(username: String) async throws -> AuthService.ResetPasswordSession {
|
func requestVerifyCode(phoneNumber: String) async throws -> AuthService.ResetPasswordSession {
|
||||||
return try await AuthService.requestResetPasswordVerifyCode(username: username)
|
return try await AuthService.requestResetPasswordVerifyCode(phoneNumber: phoneNumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
func submitVerifyCode(sessionId: Int, verifyCode: String) async throws -> String {
|
func submitVerifyCode(sessionId: Int, verifyCode: String) async throws -> String {
|
||||||
|
|||||||
@ -111,16 +111,16 @@ struct RegisterRequestVerifyCodeView: View {
|
|||||||
@Bindable var model = registerModel
|
@Bindable var model = registerModel
|
||||||
|
|
||||||
VStack(spacing: 24) {
|
VStack(spacing: 24) {
|
||||||
headerSection(title: "创建个人网络", subtitle: "输入邮箱开始注册")
|
headerSection(title: "创建个人网络", subtitle: "输入手机号开始注册")
|
||||||
|
|
||||||
VStack(spacing: 16) {
|
VStack(spacing: 16) {
|
||||||
PunchTextField(icon: "person.crop.circle", placeholder: "邮箱", text: $model.username)
|
PunchTextField(icon: "phone.fill", placeholder: "手机号", text: $model.phoneNumber)
|
||||||
}
|
}
|
||||||
.frame(width: 280)
|
.frame(width: 280)
|
||||||
|
|
||||||
Button(action: {
|
Button(action: {
|
||||||
Task { @MainActor in
|
Task { @MainActor in
|
||||||
await self.requestVerifyCode(username: model.username)
|
await self.requestVerifyCode(phoneNumber: model.phoneNumber)
|
||||||
}
|
}
|
||||||
}) {
|
}) {
|
||||||
Text("获取验证码")
|
Text("获取验证码")
|
||||||
@ -130,7 +130,7 @@ struct RegisterRequestVerifyCodeView: View {
|
|||||||
.buttonStyle(.borderedProminent)
|
.buttonStyle(.borderedProminent)
|
||||||
.controlSize(.large)
|
.controlSize(.large)
|
||||||
.frame(width: 280)
|
.frame(width: 280)
|
||||||
.disabled(!SDLUtil.isValidIdentifyContact(model.username) || isProcessing)
|
.disabled(SDLUtil.identifyContact(model.phoneNumber) != .phone || isProcessing)
|
||||||
}
|
}
|
||||||
.padding(40)
|
.padding(40)
|
||||||
.alert(isPresented: $showAlert) {
|
.alert(isPresented: $showAlert) {
|
||||||
@ -138,25 +138,25 @@ struct RegisterRequestVerifyCodeView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func requestVerifyCode(username: String) async {
|
private func requestVerifyCode(phoneNumber: String) async {
|
||||||
self.isProcessing = true
|
self.isProcessing = true
|
||||||
defer {
|
defer {
|
||||||
self.isProcessing = false
|
self.isProcessing = false
|
||||||
}
|
}
|
||||||
|
|
||||||
if username.isEmpty {
|
if phoneNumber.isEmpty {
|
||||||
self.showAlert = true
|
self.showAlert = true
|
||||||
self.errorMessage = "邮箱为空"
|
self.errorMessage = "手机号为空"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
switch SDLUtil.identifyContact(username) {
|
switch SDLUtil.identifyContact(phoneNumber) {
|
||||||
case .email:
|
case .phone:
|
||||||
do {
|
do {
|
||||||
let registerSession = try await self.registerModel.requestVerifyCode(username: username)
|
let registerSession = try await self.registerModel.requestVerifyCode(phoneNumber: phoneNumber)
|
||||||
withAnimation(.spring(duration: 0.6, bounce: 0.2)) {
|
withAnimation(.spring(duration: 0.6, bounce: 0.2)) {
|
||||||
self.registerModel.stage = .submitVerifyCode
|
self.registerModel.stage = .submitVerifyCode
|
||||||
self.registerModel.username = username
|
self.registerModel.phoneNumber = phoneNumber
|
||||||
self.registerModel.sessionId = registerSession.sessionId
|
self.registerModel.sessionId = registerSession.sessionId
|
||||||
|
|
||||||
self.registerModel.transitionEdge = .trailing
|
self.registerModel.transitionEdge = .trailing
|
||||||
@ -170,7 +170,7 @@ struct RegisterRequestVerifyCodeView: View {
|
|||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
self.showAlert = true
|
self.showAlert = true
|
||||||
self.errorMessage = "邮箱格式错误"
|
self.errorMessage = "手机号格式错误"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,14 +199,14 @@ struct RegisterSubmitVerifyCodeView: View {
|
|||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack(spacing: 24) {
|
VStack(spacing: 24) {
|
||||||
headerSection(title: "身份验证", subtitle: "验证码已发送至 \(registerModel.username)")
|
headerSection(title: "身份验证", subtitle: "验证码已发送至 \(registerModel.phoneNumber)")
|
||||||
|
|
||||||
VStack(alignment: .trailing, spacing: 16) {
|
VStack(alignment: .trailing, spacing: 16) {
|
||||||
PunchTextField(icon: "envelope.badge", placeholder: "输入 6 位验证码", text: $code)
|
PunchTextField(icon: "envelope.badge", placeholder: "输入 6 位验证码", text: $code)
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
Task { @MainActor in
|
Task { @MainActor in
|
||||||
await self.resendVerifyCodeAction(username: registerModel.username)
|
await self.resendVerifyCodeAction(phoneNumber: registerModel.phoneNumber)
|
||||||
}
|
}
|
||||||
} label: {
|
} label: {
|
||||||
if isEnabled {
|
if isEnabled {
|
||||||
@ -257,9 +257,9 @@ struct RegisterSubmitVerifyCodeView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 重新发送验证码
|
// 重新发送验证码
|
||||||
private func resendVerifyCodeAction(username: String) async {
|
private func resendVerifyCodeAction(phoneNumber: String) async {
|
||||||
do {
|
do {
|
||||||
let result = try await self.registerModel.requestVerifyCode(username: username)
|
let result = try await self.registerModel.requestVerifyCode(phoneNumber: phoneNumber)
|
||||||
print("send verify code result: \(result)")
|
print("send verify code result: \(result)")
|
||||||
} catch let err {
|
} catch let err {
|
||||||
print("resend verify get error: \(err)")
|
print("resend verify get error: \(err)")
|
||||||
@ -439,7 +439,7 @@ struct RegisterSuccessView: View {
|
|||||||
Button(action: {
|
Button(action: {
|
||||||
// 关闭当前注册窗口
|
// 关闭当前注册窗口
|
||||||
withAnimation(.spring(duration: 0.6, bounce: 0.2)) {
|
withAnimation(.spring(duration: 0.6, bounce: 0.2)) {
|
||||||
self.appContext.appScene = .login(username: registerModel.username)
|
self.appContext.appScene = .login(username: registerModel.phoneNumber)
|
||||||
}
|
}
|
||||||
}) {
|
}) {
|
||||||
Text("立即开始使用")
|
Text("立即开始使用")
|
||||||
|
|||||||
@ -72,14 +72,14 @@ struct GetVerifyCodeView: View {
|
|||||||
@Bindable var model = resetPasswordModel
|
@Bindable var model = resetPasswordModel
|
||||||
|
|
||||||
VStack(spacing: 24) {
|
VStack(spacing: 24) {
|
||||||
headerSection(title: "重置密码", subtitle: "请输入关联的邮箱来验证身份")
|
headerSection(title: "重置密码", subtitle: "请输入关联的手机号来验证身份")
|
||||||
|
|
||||||
PunchTextField(icon: "person.crop.circle", placeholder: "邮箱", text: $model.username)
|
PunchTextField(icon: "phone.fill", placeholder: "手机号", text: $model.phoneNumber)
|
||||||
.frame(width: 280)
|
.frame(width: 280)
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
Task { @MainActor in
|
Task { @MainActor in
|
||||||
await self.sendVerifyCode(username: model.username)
|
await self.sendVerifyCode(phoneNumber: model.phoneNumber)
|
||||||
}
|
}
|
||||||
} label: {
|
} label: {
|
||||||
Text("获取验证码")
|
Text("获取验证码")
|
||||||
@ -89,7 +89,7 @@ struct GetVerifyCodeView: View {
|
|||||||
.buttonStyle(.borderedProminent)
|
.buttonStyle(.borderedProminent)
|
||||||
.controlSize(.large)
|
.controlSize(.large)
|
||||||
.frame(width: 280)
|
.frame(width: 280)
|
||||||
.disabled(!SDLUtil.isValidIdentifyContact(model.username) || isProcessing)
|
.disabled(SDLUtil.identifyContact(model.phoneNumber) != .phone || isProcessing)
|
||||||
}
|
}
|
||||||
.padding(40)
|
.padding(40)
|
||||||
.alert(isPresented: $showAlert) {
|
.alert(isPresented: $showAlert) {
|
||||||
@ -98,16 +98,17 @@ struct GetVerifyCodeView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 发送验证码
|
// 发送验证码
|
||||||
private func sendVerifyCode(username: String) async {
|
private func sendVerifyCode(phoneNumber: String) async {
|
||||||
self.isProcessing = true
|
self.isProcessing = true
|
||||||
defer {
|
defer {
|
||||||
self.isProcessing = false
|
self.isProcessing = false
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
let resetSession = try await resetPasswordModel.requestVerifyCode(username: username)
|
let resetSession = try await resetPasswordModel.requestVerifyCode(phoneNumber: phoneNumber)
|
||||||
withAnimation(.spring(duration: 0.6, bounce: 0.2)) {
|
withAnimation(.spring(duration: 0.6, bounce: 0.2)) {
|
||||||
self.resetPasswordModel.stage = .submitVerifyCode
|
self.resetPasswordModel.stage = .submitVerifyCode
|
||||||
|
self.resetPasswordModel.phoneNumber = phoneNumber
|
||||||
self.resetPasswordModel.sessionId = resetSession.sessionId
|
self.resetPasswordModel.sessionId = resetSession.sessionId
|
||||||
|
|
||||||
self.resetPasswordModel.transitionEdge = .trailing
|
self.resetPasswordModel.transitionEdge = .trailing
|
||||||
@ -141,14 +142,14 @@ struct SubmitVerifyCodeView: View {
|
|||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack(spacing: 24) {
|
VStack(spacing: 24) {
|
||||||
headerSection(title: "身份验证", subtitle: "验证码已发送至 \(self.resetPasswordModel.username)")
|
headerSection(title: "身份验证", subtitle: "验证码已发送至 \(self.resetPasswordModel.phoneNumber)")
|
||||||
|
|
||||||
VStack(alignment: .trailing, spacing: 16) {
|
VStack(alignment: .trailing, spacing: 16) {
|
||||||
PunchTextField(icon: "envelope.badge", placeholder: "输入 6 位验证码", text: $code)
|
PunchTextField(icon: "envelope.badge", placeholder: "输入 6 位验证码", text: $code)
|
||||||
|
|
||||||
Button(isResendEnabled ? "重新获取" : "重新获取 (\(remainingSeconds)s)") {
|
Button(isResendEnabled ? "重新获取" : "重新获取 (\(remainingSeconds)s)") {
|
||||||
Task { @MainActor in
|
Task { @MainActor in
|
||||||
await self.resendAction(username: self.resetPasswordModel.username)
|
await self.resendAction(phoneNumber: self.resetPasswordModel.phoneNumber)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.buttonStyle(.link)
|
.buttonStyle(.link)
|
||||||
@ -191,8 +192,8 @@ struct SubmitVerifyCodeView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func resendAction(username: String) async {
|
private func resendAction(phoneNumber: String) async {
|
||||||
_ = try? await resetPasswordModel.requestVerifyCode(username: username)
|
_ = try? await resetPasswordModel.requestVerifyCode(phoneNumber: phoneNumber)
|
||||||
await startCountdown()
|
await startCountdown()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,7 +267,7 @@ struct ResetPasswordView: View {
|
|||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack(spacing: 24) {
|
VStack(spacing: 24) {
|
||||||
headerSection(title: "设置新密码", subtitle: "请为账号 \(self.resetPasswordModel.username) 设置一个强密码")
|
headerSection(title: "设置新密码", subtitle: "请为手机号 \(self.resetPasswordModel.phoneNumber) 设置一个强密码")
|
||||||
|
|
||||||
VStack(spacing: 12) {
|
VStack(spacing: 12) {
|
||||||
PunchTextField(icon: "lock.shield", placeholder: "新密码 (至少8位)", text: $password, isSecure: true)
|
PunchTextField(icon: "lock.shield", placeholder: "新密码 (至少8位)", text: $password, isSecure: true)
|
||||||
@ -362,7 +363,7 @@ struct ResetPasswordSuccessView: View {
|
|||||||
|
|
||||||
Button(action: {
|
Button(action: {
|
||||||
withAnimation(.spring(duration: 0.6, bounce: 0.2)) {
|
withAnimation(.spring(duration: 0.6, bounce: 0.2)) {
|
||||||
self.appContext.appScene = .login(username: self.resetPasswordModel.username)
|
self.appContext.appScene = .login(username: self.resetPasswordModel.phoneNumber)
|
||||||
}
|
}
|
||||||
}) {
|
}) {
|
||||||
Text("返回登录")
|
Text("返回登录")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user