Files
real-e-party-iOS/YuMi/E-P/NewLogin/Models/EPLoginConfig.swift
edwinQQQ 809cc44ca5 feat: 添加新的登录模块及相关组件
主要变更:
1. 新增 EPLoginViewController 和 EPLoginTypesViewController,提供新的登录界面和功能。
2. 引入 EPLoginInputView 和 EPLoginButton 组件,支持输入框和按钮的自定义。
3. 实现 EPLoginService 和 EPLoginManager,封装登录逻辑和 API 请求。
4. 添加 EPLoginConfig 和 EPLoginState,统一配置和状态管理。
5. 更新 Bridging Header,确保 Swift 和 Objective-C 代码的互操作性。

此更新旨在提升用户登录体验,简化登录流程,并提供更好的代码结构和可维护性。
2025-10-13 15:40:43 +08:00

289 lines
9.2 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// EPLoginConfig.swift
// YuMi
//
// Created by AI on 2025-01-27.
// -
//
import UIKit
///
struct EPLoginConfig {
// MARK: - Layout
struct Layout {
///
static let buttonWidth: CGFloat = 294
///
static let buttonHeight: CGFloat = 46
///
static let loginButtonHeight: CGFloat = 56
///
static let loginButtonSpacing: CGFloat = 24
///
static let loginButtonHorizontalPadding: CGFloat = 30
/// /
static let cornerRadius: CGFloat = 23
/// Logo
static let logoHeight: CGFloat = 400
/// Logo
static let logoTopOffset: CGFloat = 80
/// E-PARTI
static let epartiTitleFontSize: CGFloat = 56
/// E-PARTI view leading
static let epartiTitleLeading: CGFloat = 40
/// E-PARTI logoImage bottom
static let epartiTitleBottomOffset: CGFloat = -30
///
static let inputVerticalSpacing: CGFloat = 16
///
static let inputTitleSpacing: CGFloat = 60
///
static let buttonTopSpacing: CGFloat = 40
///
static let horizontalPadding: CGFloat = 40
///
static let compactHorizontalPadding: CGFloat = 16
///
static let titleFontSize: CGFloat = 28
///
static let buttonFontSize: CGFloat = 16
///
static let inputFontSize: CGFloat = 14
///
static let smallFontSize: CGFloat = 12
///
static let iconSize: CGFloat = 24
///
static let loginButtonIconSize: CGFloat = 30
///
static let loginButtonIconLeading: CGFloat = 33
///
static let iconLeading: CGFloat = 15
///
static let iconTextSpacing: CGFloat = 12
/// Checkbox
static let checkboxSize: CGFloat = 18
///
static let backButtonSize: CGFloat = 44
/// Feedback
static let feedbackButtonHeight: CGFloat = 22
static let feedbackButtonCornerRadius: CGFloat = 10.5
///
static let inputHeight: CGFloat = 52
///
static let inputCornerRadius: CGFloat = 26
///
static let inputHorizontalPadding: CGFloat = 24
/// icon
static let inputIconSize: CGFloat = 20
///
static let codeButtonWidth: CGFloat = 102
///
static let codeButtonHeight: CGFloat = 38
}
// MARK: - Colors
struct Colors {
///
static let primary = UIColor.systemPurple
///
static let background = UIColor.white
static let backgroundTransparent = UIColor.white.withAlphaComponent(0.5)
///
static let text = UIColor.darkText
static let textSecondary = UIColor.darkGray
static let textLight = UIColor.white
///
static let icon = UIColor.darkGray
static let iconDisabled = UIColor.gray
///
static let inputBackground = UIColor(red: 0xF3/255.0, green: 0xF5/255.0, blue: 0xFA/255.0, alpha: 1.0)
static let inputText = UIColor(red: 0x1F/255.0, green: 0x1B/255.0, blue: 0x4F/255.0, alpha: 1.0)
static let inputBorder = UIColor.lightGray.withAlphaComponent(0.3)
static let inputBorderFocused = UIColor.systemPurple
///
static let codeButtonBackground = UIColor(red: 0x91/255.0, green: 0x68/255.0, blue: 0xFA/255.0, alpha: 1.0)
///
static let buttonEnabled = UIColor.systemPurple
static let buttonDisabled = UIColor.lightGray
///
static let error = UIColor.systemRed
static let success = UIColor.systemGreen
///
static let link = UIColor.black
static let linkUnderline = UIColor.black
}
// MARK: - Animation
struct Animation {
///
static let duration: TimeInterval = 0.3
///
static let shortDuration: TimeInterval = 0.15
///
static let longDuration: TimeInterval = 0.5
///
static let springDamping: CGFloat = 0.75
///
static let springVelocity: CGFloat = 0.5
///
static let buttonPressScale: CGFloat = 0.95
///
static let shakeOffset: CGFloat = 10
///
static let shakeCount: Int = 3
}
// MARK: - Validation
struct Validation {
///
static let passwordMinLength = 6
///
static let passwordMaxLength = 16
///
static let codeLength = 6
///
static let phoneMinLength = 10
///
static let phoneMaxLength = 15
///
static let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"
///
static let phoneRegex = "^[0-9]{10,15}$"
}
// MARK: - Timing
struct Timing {
///
static let codeCountdownSeconds = 60
/// Toast
static let toastDuration: TimeInterval = 2.0
///
static let requestTimeout: TimeInterval = 30.0
}
// MARK: - API
struct API {
/// Client Secret
static let clientSecret = "uyzjdhds"
/// Client ID
static let clientId = "1"
/// Grant Type
static let grantType = "sms_code"
///
static let version = "1.0.31"
///
static let codeTypeLogin = 1
///
static let codeTypeReset = 2
}
// MARK: - UserDefaults Keys
struct Keys {
///
static let policyAgreed = "HadAgreePrivacy"
///
static let hasLaunchedBefore = "HasLaunchedBefore"
}
// MARK: - Images
struct Images {
///
static let background = "vc_bg"
/// Logo
static let loginBg = "login_bg"
/// - ID
static let iconLoginId = "icon_login_id"
/// - Email
static let iconLoginEmail = "icon_login_email"
/// -
static let iconPerson = "person.circle"
static let iconPersonFill = "person"
/// -
static let iconEmail = "envelope.circle"
static let iconEmailFill = "envelope"
/// -
static let iconPhone = "phone.circle"
static let iconPhoneFill = "phone"
/// - Apple
static let iconApple = "apple.logo"
/// -
static let iconLock = "lock"
/// -
static let iconNumber = "number"
/// -
static let iconBack = "chevron.left"
/// -
static let iconEyeSlash = "eye.slash"
/// -
static let iconEye = "eye"
/// Checkbox -
static let checkboxEmpty = "circle"
/// Checkbox -
static let checkboxFilled = "checkmark.circle"
}
// MARK: - Localized Strings Keys
struct LocalizedKeys {
/// ID
static let idLogin = "1.0.37_text_26"
///
static let emailLogin = "20.20.51_text_1"
///
static let policyFullText = "XPLoginViewController6"
///
static let userAgreement = "XPLoginViewController7"
///
static let privacyPolicy = "XPLoginViewController9"
///
static let feedback = "XPMineFeedbackViewController0"
}
}