Commit 819406fa authored by Steven杜宇's avatar Steven杜宇
parents ad06babc 916f235d
......@@ -72,6 +72,8 @@
0436713D2D6470A400E8D9BA /* YHMemberCenterActionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0436713C2D6470A400E8D9BA /* YHMemberCenterActionCell.swift */; };
0436713F2D64817500E8D9BA /* YHMemberCenterFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0436713E2D64817500E8D9BA /* YHMemberCenterFooterView.swift */; };
043671412D64935200E8D9BA /* YHMemberCenterCellContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 043671402D64935200E8D9BA /* YHMemberCenterCellContent.swift */; };
043671432D66DDB500E8D9BA /* YHMemberCenterInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 043671422D66DDB500E8D9BA /* YHMemberCenterInfo.swift */; };
043671452D66FBEE00E8D9BA /* YHMemberCenterViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 043671442D66FBEE00E8D9BA /* YHMemberCenterViewModel.swift */; };
045C0F7F2D12CA5F00BD2DC0 /* submit_page_scroll.gif in Resources */ = {isa = PBXBuildFile; fileRef = 045C0F4F2D12CA5E00BD2DC0 /* submit_page_scroll.gif */; };
045C0F802D12CA5F00BD2DC0 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 045C0F762D12CA5E00BD2DC0 /* Localizable.xcstrings */; };
045C0F812D12CA5F00BD2DC0 /* img_0.png in Resources */ = {isa = PBXBuildFile; fileRef = 045C0F5E2D12CA5E00BD2DC0 /* img_0.png */; };
......@@ -1310,6 +1312,8 @@
0436713C2D6470A400E8D9BA /* YHMemberCenterActionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMemberCenterActionCell.swift; sourceTree = "<group>"; };
0436713E2D64817500E8D9BA /* YHMemberCenterFooterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMemberCenterFooterView.swift; sourceTree = "<group>"; };
043671402D64935200E8D9BA /* YHMemberCenterCellContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMemberCenterCellContent.swift; sourceTree = "<group>"; };
043671422D66DDB500E8D9BA /* YHMemberCenterInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMemberCenterInfo.swift; sourceTree = "<group>"; };
043671442D66FBEE00E8D9BA /* YHMemberCenterViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMemberCenterViewModel.swift; sourceTree = "<group>"; };
045C0A142D12CA5E00BD2DC0 /* YHBaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHBaseViewController.swift; sourceTree = "<group>"; };
045C0A152D12CA5E00BD2DC0 /* YHBaseViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHBaseViewModel.swift; sourceTree = "<group>"; };
045C0A162D12CA5E00BD2DC0 /* YHNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHNavigationController.swift; sourceTree = "<group>"; };
......@@ -5736,6 +5740,7 @@
045C0EE22D12CA5E00BD2DC0 /* YHCollectionModel.swift */,
048D6AE02D5F17C400BC6F4C /* YHMembershipLevel.swift */,
043671402D64935200E8D9BA /* YHMemberCenterCellContent.swift */,
043671422D66DDB500E8D9BA /* YHMemberCenterInfo.swift */,
);
path = Model;
sourceTree = "<group>";
......@@ -5819,6 +5824,7 @@
isa = PBXGroup;
children = (
045C0EFB2D12CA5E00BD2DC0 /* YHMyLikeViewModel.swift */,
043671442D66FBEE00E8D9BA /* YHMemberCenterViewModel.swift */,
);
path = ViewModel;
sourceTree = "<group>";
......@@ -7124,6 +7130,7 @@
045C109A2D12CA5F00BD2DC0 /* YhCacheTool.swift in Sources */,
045C109B2D12CA5F00BD2DC0 /* YHHomeInfoDetailViewController.swift in Sources */,
045C109C2D12CA5F00BD2DC0 /* YHAdopterChinaViewController.swift in Sources */,
043671452D66FBEE00E8D9BA /* YHMemberCenterViewModel.swift in Sources */,
04AE20332D13B72F00891D24 /* YHGCChildPrimaryInfoVC.swift in Sources */,
045C109D2D12CA5F00BD2DC0 /* YHHKRecordsSectionItemBaseCell.swift in Sources */,
045C109E2D12CA5F00BD2DC0 /* YHResignMaterialViewModel.swift in Sources */,
......@@ -7295,6 +7302,7 @@
045C113B2D12CA5F00BD2DC0 /* YHButlerServiceMessageHandler.swift in Sources */,
045C113C2D12CA5F00BD2DC0 /* YHResignScheduleLineCollectCell.swift in Sources */,
04AE20502D19425900891D24 /* YHGCCertificateListVC.swift in Sources */,
043671432D66DDB500E8D9BA /* YHMemberCenterInfo.swift in Sources */,
045C113D2D12CA5F00BD2DC0 /* YHMyFileListCell.swift in Sources */,
045C113E2D12CA5F00BD2DC0 /* YHLookResignResultModel.swift in Sources */,
045C113F2D12CA5F00BD2DC0 /* YHIncomeTypeSelectCell.swift in Sources */,
......
......@@ -10,7 +10,7 @@ import Foundation
enum YHMemberCenterCellContent: String, CaseIterable {
case kidsBay = "kidsbay高端早教盒子"
case luxury = "北上港深奢华体验中心"
case luxury = "奢华体验中心"
case crossBorder = "深港跨境出行预约"
case hkTravel = "香港境内出行预约"
case drivingLicense = "国际驾照续期"
......
//
// YHMemberCenterInfo.swift
// galaxy
//
// Created by alexzzw on 2025/2/20.
// Copyright © 2025 https://www.galaxy-immi.com. All rights reserved.
//
import SmartCodable
import UIKit
class YHMemberCenterInfo: SmartCodable {
var answerConsult: YHMemberGiftModel = YHMemberGiftModel()
var brandStrategy: YHMemberGiftModel = YHMemberGiftModel()
var carTransfer: YHMemberGiftModel = YHMemberGiftModel()
var currentLevel: Int = 0
var dedicatedAdviser: YHMemberGiftModel = YHMemberGiftModel()
var exchangeCount: Int = 0
var exchangedCount: Int = 0
var experienceCenter: YHMemberGiftModel = YHMemberGiftModel()
var growthValue: Int = 0
var highEndPrivilege: YHMemberGiftModel = YHMemberGiftModel()
var highTeaBox: YHMemberGiftModel = YHMemberGiftModel()
var hkCarTransfer: YHMemberGiftModel = YHMemberGiftModel()
var hongkongSchoolPlanning: YHMemberGiftModel = YHMemberGiftModel()
var internationalDrivingLicense: YHMemberGiftModel = YHMemberGiftModel()
var luxuryTea: YHMemberGiftModel = YHMemberGiftModel()
var maxGrowth: Int = 0
var offlineSalon: YHMemberGiftModel = YHMemberGiftModel()
var specialIntegralConsumption: YHMemberGiftModel = YHMemberGiftModel()
enum CodingKeys: String, CodingKey {
case answerConsult = "answer_consult"
case brandStrategy = "brand_strategy"
case carTransfer = "car_transfer"
case currentLevel = "current_level"
case dedicatedAdviser = "dedicated_adviser"
case exchangeCount = "exchange_count"
case exchangedCount = "exchanged_count"
case experienceCenter = "experience_center"
case growthValue = "growth_value"
case highEndPrivilege = "high_end_privilege"
case highTeaBox = "high_tea_box"
case hkCarTransfer = "hk_car_transfer"
case hongkongSchoolPlanning = "hongkong_school_planning"
case internationalDrivingLicense = "international_driving_license"
case luxuryTea = "luxury_tea"
case maxGrowth = "max_growth"
case offlineSalon = "offline_salon"
case specialIntegralConsumption = "special_integral_consumption"
}
required init() {
}
}
// MARK: - YHMemberAnswerConsult
class YHMemberGiftModel: SmartCodable {
var giftId: String = ""
var minLevel: Int = 0
var name: String = ""
var num: Int = 0
enum CodingKeys: String, CodingKey {
case giftId = "gift_id"
case minLevel = "min_level"
case name
case num
}
required init() {
}
}
......@@ -8,15 +8,24 @@
import Foundation
enum YHMembershipLevel: String, CaseIterable {
case normal = "大众会员"
case gold = "黄金会员"
case platinum = "铂金会员"
case diamond = "钻石会员"
enum YHMembershipLevel: Int, CaseIterable {
case normal = 10
case gold = 20
case platinum = 30
case diamond = 40
// 可以添加其他属性或方法
var description: String {
return rawValue
switch self {
case .normal:
return "大众会员"
case .gold:
return "黄金会员"
case .platinum:
return "铂金会员"
case .diamond:
return "钻石会员"
}
}
// 示例:获取会员等级对应的权益
......
......@@ -36,6 +36,7 @@ class YHMemberCenterActionCell: YHResignDocumentCell {
private lazy var actionButton: YHMemberCenterActionButton = {
let button = YHMemberCenterActionButton(type: .custom)
button.update(state: .redeemable)
button.addTarget(self, action: #selector(actionButtonClicked), for: .touchUpInside)
return button
}()
......@@ -48,6 +49,10 @@ class YHMemberCenterActionCell: YHResignDocumentCell {
fatalError("init(coder:) has not been implemented")
}
@objc private func actionButtonClicked() {
actionButtonEvent?()
}
private func setupUI() {
updateCellCorner(.single)
subContainerView.addSubview(leftLabel)
......
......@@ -34,6 +34,8 @@ class YHMemberCenterHeaderBannerCell: FSPagerViewCell {
private lazy var upgradeButton: UIButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 12)
button.clipsToBounds = true
button.layer.cornerRadius = 17
return button
}()
......@@ -130,22 +132,24 @@ class YHMemberCenterHeaderBannerCell: FSPagerViewCell {
}
}
func setupData(level: YHMembershipLevel, levelString: String, countFrom: Int, countTo: Int, tips: String, upgradeTitle: String) {
func setupData(level: YHMembershipLevel, levelString: String, tips: String, upgradeTitle: String, showProgress: Bool, ratioString: String, ratio: CGFloat, showRatio: Bool, showTips: Bool) {
bannerImagV.image = UIImage(named: level.cardIconTitle())
bannerTitleLabel.text = level.description
bannerTitleLabel.textColor = level.levelTitleColor()
levelButton.setTitleColor(level.levelButtonTitleColor(), for: .normal)
levelButton.setTitle(levelString, for: .normal)
countLabel.textColor = level.countTitleColor()
countLabel.text = countTo == 0 ? "\(countFrom)" : "\(countFrom)/\(countTo)"
progressView.progress = Float(Double(countFrom) * 1.0 / Double(countTo))
countLabel.text = ratioString
countLabel.isHidden = !showRatio
progressView.progress = Float(ratio)
tipsLabel.textColor = level.tipsTitleColor()
tipsLabel.text = tips
tipsLabel.isHidden = !showTips
upgradeButton.setTitle(upgradeTitle, for: .normal)
upgradeButton.setTitleColor(level.upgradeButtonTitleColor(), for: .normal)
upgradeButton.backgroundColor = level.upgradeButtonBackgroundColor()
if level == .normal || level == .diamond {
if !showProgress {
progressView.isHidden = true
countLabel.snp.remakeConstraints { make in
make.left.equalTo(bannerTitleLabel)
......
......@@ -13,18 +13,26 @@ class YHMemberCenterHeaderView: UIView {
class BannerData {
var level: YHMembershipLevel = .normal
var levelString: String = ""
var countFrom: Int = 0
var countTo: Int = 0
var tips: String = ""
var upgradeTitle: String = ""
var showProgress: Bool = false
var ratioString: String = ""
var ratio: CGFloat = 0
var showRatio: Bool = false
var showTips: Bool = false
init(level: YHMembershipLevel, levelString: String, countFrom: Int, countTo: Int, tips: String, upgradeTitle: String) {
init(level: YHMembershipLevel, levelString: String, tips: String, upgradeTitle: String, showProgress: Bool, ratioString: String, ratio: CGFloat, showRatio: Bool, showTips: Bool) {
self.level = level
self.levelString = levelString
self.countFrom = countFrom
self.countTo = countTo
self.tips = tips
self.upgradeTitle = upgradeTitle
self.showProgress = showProgress
self.ratioString = ratioString
self.ratio = ratio
self.showRatio = showRatio
self.showTips = showTips
}
}
......@@ -57,12 +65,122 @@ class YHMemberCenterHeaderView: UIView {
return view
}()
var datas: [BannerData] {
let normal = BannerData(level: .normal, levelString: "当前等级", countFrom: 0, countTo: 0, tips: "消费即升至黄金会员", upgradeTitle: "去升级")
let gold = BannerData(level: .gold, levelString: "您未达到该等级", countFrom: 1000, countTo: 60000, tips: "距铂金会员还需60000成长值", upgradeTitle: "去升级")
let platinum = BannerData(level: .platinum, levelString: "您未达到该等级", countFrom: 0, countTo: 150000, tips: "距钻石会员还需150000成长值", upgradeTitle: "去升级")
let diamond = BannerData(level: .diamond, levelString: "您未达到该等级", countFrom: 0, countTo: 0, tips: "当前成长值", upgradeTitle: "去升级")
return [normal, gold, platinum, diamond]
var datas: [BannerData] = []
func updateDatas(_ memberCenterInfo: YHMemberCenterInfo) {
datas = YHMembershipLevel.allCases.map({ level in
var levelString = "您未达到该等级"
var upgradeTitle = "去升级"
var countFrom: Int = 0
var countTo: Int = 0
var tips: String = ""
var showProgress: Bool = false
var ratioString: String = ""
var ratio: CGFloat = 0
var showRatio: Bool = false
var showTips: Bool = false
switch level {
case .normal:
countFrom = 0
countTo = 0
if memberCenterInfo.currentLevel == level.rawValue {
levelString = "当前等级"
upgradeTitle = "已达成"
tips = "消费即升至黄金会员"
ratioString = "0"
ratio = 0
showRatio = true
showTips = true
} else if memberCenterInfo.currentLevel > level.rawValue {
levelString = "您已高于该等级"
upgradeTitle = "已达成"
tips = "当前成长值"
ratioString = "\(memberCenterInfo.growthValue)"
ratio = 0
showRatio = false
showTips = false
}
case .gold:
countFrom = 0
countTo = 60000
if memberCenterInfo.currentLevel < level.rawValue {
levelString = "您未达到该等级"
upgradeTitle = "去升级"
tips = "消费即升至黄金会员"
ratioString = "0"
ratio = 0
showRatio = true
showTips = true
} else if memberCenterInfo.currentLevel == level.rawValue {
levelString = "当前等级"
upgradeTitle = "已达成"
tips = "距铂金会员还需\(countTo - memberCenterInfo.growthValue)成长值"
ratioString = "\(memberCenterInfo.growthValue)/(countTo)"
let value = Double(memberCenterInfo.growthValue) / Double(countTo)
ratio = value < 0 ? 0 : value
showProgress = true
showRatio = true
showTips = true
} else if memberCenterInfo.currentLevel > level.rawValue {
levelString = "您已高于该等级"
upgradeTitle = "已达成"
tips = "当前成长值"
ratioString = "\(memberCenterInfo.growthValue)"
ratio = 0
}
case .platinum:
countFrom = 60000
countTo = 150000
if memberCenterInfo.currentLevel < level.rawValue {
levelString = "您未达到该等级"
upgradeTitle = "去升级"
tips = "\(countFrom)成长值升至铂金会员"
ratioString = "\(countFrom)/(countTo)"
ratio = 0
showTips = true
} else if memberCenterInfo.currentLevel == level.rawValue {
levelString = "当前等级"
upgradeTitle = "已达成"
tips = "距钻石会员还需\(countTo - memberCenterInfo.growthValue)成长值"
ratioString = "\(memberCenterInfo.growthValue)/(countTo)"
let value = Double(memberCenterInfo.growthValue) / Double(countTo)
ratio = value < 0 ? 0 : value
showProgress = true
showRatio = true
showTips = true
} else if memberCenterInfo.currentLevel > level.rawValue {
levelString = "您已高于该等级"
upgradeTitle = "已达成"
tips = "当前成长值"
ratioString = "\(memberCenterInfo.growthValue)"
ratio = 0
}
case .diamond:
countFrom = 150000
countTo = Int.max
if memberCenterInfo.currentLevel < level.rawValue {
levelString = "您未达到该等级"
upgradeTitle = "去升级"
tips = "\(countFrom)成长值升至钻石会员"
ratioString = "\(memberCenterInfo.growthValue)"
ratio = 0
showTips = true
} else if memberCenterInfo.currentLevel == level.rawValue {
levelString = "当前等级"
upgradeTitle = "已达成"
tips = "当前成长值"
ratioString = "\(memberCenterInfo.growthValue)"
ratio = 0
showRatio = true
showTips = true
}
}
return BannerData(level: level, levelString: levelString, tips: tips, upgradeTitle: upgradeTitle, showProgress: showProgress, ratioString: ratioString, ratio: ratio, showRatio: showRatio, showTips: showTips)
})
bannerView.reloadData()
}
override init(frame: CGRect) {
......@@ -96,7 +214,7 @@ extension YHMemberCenterHeaderView: FSPagerViewDataSource, FSPagerViewDelegate {
}
if let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "YHMemberCenterHeaderBannerCell", at: index) as? YHMemberCenterHeaderBannerCell {
let model = datas[index]
cell.setupData(level: model.level, levelString: model.levelString, countFrom: model.countFrom, countTo: model.countTo, tips: model.tips, upgradeTitle: model.upgradeTitle)
cell.setupData(level: model.level, levelString: model.levelString, tips: model.tips, upgradeTitle: model.upgradeTitle, showProgress: model.showProgress, ratioString: model.ratioString, ratio: model.ratio, showRatio: model.showRatio, showTips: model.showTips)
return cell
}
return FSPagerViewCell()
......
//
// YHMemberCenterViewModel.swift
// galaxy
//
// Created by alexzzw on 2025/2/20.
// Copyright © 2025 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHMemberCenterViewModel: YHBaseViewModel {
var memberCenterInfo: YHMemberCenterInfo?
func getMemberInfo(_ callBack: @escaping (_ success: Bool,_ error: YHErrorModel?)->()) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Member.memberBenefits
let _ = YHNetRequest.getRequest(url: strUrl) {
[weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
if json.code == 200 {
guard let dic = json.data?.peel as? [String : Any], let resultModel = YHMemberCenterInfo.deserialize(from:dic) else {
let err = YHErrorModel(errorCode: YHErrorCode.dictParseError.rawValue, errorMsg: YHErrorCode.dictParseError.description())
callBack(false, err)
return
}
self.memberCenterInfo = resultModel
callBack(true, nil)
} else {
let error : YHErrorModel = YHErrorModel(errorCode:Int32(json.code), errorMsg: json.msg)
callBack(false, error)
}
} failBlock: { err in
callBack(false, err)
}
}
}
......@@ -752,6 +752,7 @@ class YHAllApiName {
// 会员
struct Member {
static let memberInfoApi = "super-app/h5-points/member-info"
static let memberBenefits = "super-app/h5-points/member-benefits"
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment