// // 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" } }