Files
real-e-party-iOS/YuMi/E-P/NewLogin/Models/EPLoginConfig.swift
edwinQQQ 02a8335d70 feat: 更新登录模块以支持验证码和渐变背景
主要变更:
1. 在 EPLoginTypesViewController 中添加了渐变背景到 actionButton,提升视觉效果。
2. 实现了输入框状态检查功能,确保在输入有效信息时启用登录按钮。
3. 更新了输入框配置,支持不同类型的键盘输入(如数字键盘和邮箱键盘)。
4. 在 EPLoginService 中添加了对手机号和邮箱的 DES 加密,增强安全性。
5. 更新了 EPLoginConfig,统一输入框和按钮的样式设置。

此更新旨在提升用户体验,确保登录过程的安全性和流畅性。
2025-10-13 17:49:09 +08:00

306 lines
9.9 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 uniformHeight: CGFloat = 56
/// /
static let uniformHorizontalPadding: CGFloat = 29
/// /
static let uniformCornerRadius: CGFloat = 28
/// /
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 = 56
///
static let inputCornerRadius: CGFloat = 28
///
static let inputHorizontalPadding: CGFloat = 24
/// icon
static let inputIconSize: CGFloat = 20
///
static let inputBorderWidth: CGFloat = 1
///
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.white.withAlphaComponent(0.1)
static let inputText = UIColor(red: 0x1F/255.0, green: 0x1B/255.0, blue: 0x4F/255.0, alpha: 1.0)
static let inputBorder = UIColor.white
static let inputBorderFocused = UIColor.systemPurple
/// Login/Confirm
static let gradientStart = UIColor(red: 0xF8/255.0, green: 0x54/255.0, blue: 0xFC/255.0, alpha: 1.0) // #F854FC
static let gradientEnd = UIColor(red: 0x50/255.0, green: 0x0F/255.0, blue: 0xFF/255.0, alpha: 1.0) // #500FFF
///
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 = "erban-client"
/// Grant Type
static let grantType = "password"
///
static let version = "1"
///
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 iconPasswordSee = "icon_password_see"
static let iconPasswordUnsee = "icon_password_unsee"
/// -
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"
}
}