Commit 819406fa authored by Steven杜宇's avatar Steven杜宇
parents ad06babc 916f235d
...@@ -72,6 +72,8 @@ ...@@ -72,6 +72,8 @@
0436713D2D6470A400E8D9BA /* YHMemberCenterActionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0436713C2D6470A400E8D9BA /* YHMemberCenterActionCell.swift */; }; 0436713D2D6470A400E8D9BA /* YHMemberCenterActionCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0436713C2D6470A400E8D9BA /* YHMemberCenterActionCell.swift */; };
0436713F2D64817500E8D9BA /* YHMemberCenterFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0436713E2D64817500E8D9BA /* YHMemberCenterFooterView.swift */; }; 0436713F2D64817500E8D9BA /* YHMemberCenterFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0436713E2D64817500E8D9BA /* YHMemberCenterFooterView.swift */; };
043671412D64935200E8D9BA /* YHMemberCenterCellContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 043671402D64935200E8D9BA /* YHMemberCenterCellContent.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 */; }; 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 */; }; 045C0F802D12CA5F00BD2DC0 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 045C0F762D12CA5E00BD2DC0 /* Localizable.xcstrings */; };
045C0F812D12CA5F00BD2DC0 /* img_0.png in Resources */ = {isa = PBXBuildFile; fileRef = 045C0F5E2D12CA5E00BD2DC0 /* img_0.png */; }; 045C0F812D12CA5F00BD2DC0 /* img_0.png in Resources */ = {isa = PBXBuildFile; fileRef = 045C0F5E2D12CA5E00BD2DC0 /* img_0.png */; };
...@@ -1310,6 +1312,8 @@ ...@@ -1310,6 +1312,8 @@
0436713C2D6470A400E8D9BA /* YHMemberCenterActionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMemberCenterActionCell.swift; sourceTree = "<group>"; }; 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>"; }; 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>"; }; 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>"; }; 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>"; }; 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>"; }; 045C0A162D12CA5E00BD2DC0 /* YHNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHNavigationController.swift; sourceTree = "<group>"; };
...@@ -5736,6 +5740,7 @@ ...@@ -5736,6 +5740,7 @@
045C0EE22D12CA5E00BD2DC0 /* YHCollectionModel.swift */, 045C0EE22D12CA5E00BD2DC0 /* YHCollectionModel.swift */,
048D6AE02D5F17C400BC6F4C /* YHMembershipLevel.swift */, 048D6AE02D5F17C400BC6F4C /* YHMembershipLevel.swift */,
043671402D64935200E8D9BA /* YHMemberCenterCellContent.swift */, 043671402D64935200E8D9BA /* YHMemberCenterCellContent.swift */,
043671422D66DDB500E8D9BA /* YHMemberCenterInfo.swift */,
); );
path = Model; path = Model;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -5819,6 +5824,7 @@ ...@@ -5819,6 +5824,7 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
045C0EFB2D12CA5E00BD2DC0 /* YHMyLikeViewModel.swift */, 045C0EFB2D12CA5E00BD2DC0 /* YHMyLikeViewModel.swift */,
043671442D66FBEE00E8D9BA /* YHMemberCenterViewModel.swift */,
); );
path = ViewModel; path = ViewModel;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -7124,6 +7130,7 @@ ...@@ -7124,6 +7130,7 @@
045C109A2D12CA5F00BD2DC0 /* YhCacheTool.swift in Sources */, 045C109A2D12CA5F00BD2DC0 /* YhCacheTool.swift in Sources */,
045C109B2D12CA5F00BD2DC0 /* YHHomeInfoDetailViewController.swift in Sources */, 045C109B2D12CA5F00BD2DC0 /* YHHomeInfoDetailViewController.swift in Sources */,
045C109C2D12CA5F00BD2DC0 /* YHAdopterChinaViewController.swift in Sources */, 045C109C2D12CA5F00BD2DC0 /* YHAdopterChinaViewController.swift in Sources */,
043671452D66FBEE00E8D9BA /* YHMemberCenterViewModel.swift in Sources */,
04AE20332D13B72F00891D24 /* YHGCChildPrimaryInfoVC.swift in Sources */, 04AE20332D13B72F00891D24 /* YHGCChildPrimaryInfoVC.swift in Sources */,
045C109D2D12CA5F00BD2DC0 /* YHHKRecordsSectionItemBaseCell.swift in Sources */, 045C109D2D12CA5F00BD2DC0 /* YHHKRecordsSectionItemBaseCell.swift in Sources */,
045C109E2D12CA5F00BD2DC0 /* YHResignMaterialViewModel.swift in Sources */, 045C109E2D12CA5F00BD2DC0 /* YHResignMaterialViewModel.swift in Sources */,
...@@ -7295,6 +7302,7 @@ ...@@ -7295,6 +7302,7 @@
045C113B2D12CA5F00BD2DC0 /* YHButlerServiceMessageHandler.swift in Sources */, 045C113B2D12CA5F00BD2DC0 /* YHButlerServiceMessageHandler.swift in Sources */,
045C113C2D12CA5F00BD2DC0 /* YHResignScheduleLineCollectCell.swift in Sources */, 045C113C2D12CA5F00BD2DC0 /* YHResignScheduleLineCollectCell.swift in Sources */,
04AE20502D19425900891D24 /* YHGCCertificateListVC.swift in Sources */, 04AE20502D19425900891D24 /* YHGCCertificateListVC.swift in Sources */,
043671432D66DDB500E8D9BA /* YHMemberCenterInfo.swift in Sources */,
045C113D2D12CA5F00BD2DC0 /* YHMyFileListCell.swift in Sources */, 045C113D2D12CA5F00BD2DC0 /* YHMyFileListCell.swift in Sources */,
045C113E2D12CA5F00BD2DC0 /* YHLookResignResultModel.swift in Sources */, 045C113E2D12CA5F00BD2DC0 /* YHLookResignResultModel.swift in Sources */,
045C113F2D12CA5F00BD2DC0 /* YHIncomeTypeSelectCell.swift in Sources */, 045C113F2D12CA5F00BD2DC0 /* YHIncomeTypeSelectCell.swift in Sources */,
......
...@@ -12,11 +12,15 @@ class YHMemberCenterViewController: YHBaseViewController { ...@@ -12,11 +12,15 @@ class YHMemberCenterViewController: YHBaseViewController {
enum TableRow { enum TableRow {
case currentPrivilege(_ curLevel: YHMembershipLevel, _ count: Int) case currentPrivilege(_ curLevel: YHMembershipLevel, _ count: Int)
case myPrivilege(_ myLevel: YHMembershipLevel, _ count: Int) case myPrivilege(_ myLevel: YHMembershipLevel, _ count: Int)
case action(_ title: String, _ detail: String, _ imageStr: String, _ ratio: CGFloat, _ buttonStr: String, _ buttonState: YHMemberCenterActionButton.ButtonState) case action(_ title: String, _ detail: String, _ imageStr: String, _ ratio: CGFloat, _ buttonStr: String, _ buttonState: YHMemberCenterActionButton.ButtonState, _ id: String)
} }
private var currentLevel: YHMembershipLevel = .normal private var currentLevel: YHMembershipLevel = .normal
private var viewModel = YHMemberCenterViewModel()
private var firstEnter = true
var datas: [TableRow] = [] var datas: [TableRow] = []
private lazy var tableView: UITableView = { private lazy var tableView: UITableView = {
...@@ -49,7 +53,9 @@ class YHMemberCenterViewController: YHBaseViewController { ...@@ -49,7 +53,9 @@ class YHMemberCenterViewController: YHBaseViewController {
} }
self.bgIcon.image = UIImage(named: level.bgIconTitle()) self.bgIcon.image = UIImage(named: level.bgIconTitle())
self.currentLevel = level self.currentLevel = level
self.setupDatas() if let info = self.viewModel.memberCenterInfo {
self.updateDatas(info)
}
} }
return view return view
}() }()
...@@ -62,7 +68,17 @@ class YHMemberCenterViewController: YHBaseViewController { ...@@ -62,7 +68,17 @@ class YHMemberCenterViewController: YHBaseViewController {
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
setupUI() setupUI()
setupDatas() }
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if firstEnter {
firstEnter = false
requestData(isNeedLoading: true)
} else {
requestData(isNeedLoading: false)
}
} }
private func setupUI() { private func setupUI() {
...@@ -93,63 +109,159 @@ class YHMemberCenterViewController: YHBaseViewController { ...@@ -93,63 +109,159 @@ class YHMemberCenterViewController: YHBaseViewController {
tableView.tableFooterView = footerView tableView.tableFooterView = footerView
} }
private func setupDatas() { private func requestData(isNeedLoading: Bool = false) {
if isNeedLoading {
YHHUD.show(.progress(message: "加载中..."))
}
viewModel.getMemberInfo { [weak self] success, error in
guard let self = self else {
return
}
if isNeedLoading {
YHHUD.hide()
}
if success, let memberCenterInfo = viewModel.memberCenterInfo {
self.headerView.updateDatas(memberCenterInfo)
self.updateDatas(memberCenterInfo)
} else {
var errorMsg = "获取会员信息失败,请重试!"
if let error = error, error.errorMsg.count > 0 {
errorMsg = error.errorMsg
}
YHHUD.flash(message: errorMsg)
self.navigationController?.popViewController(animated: true)
}
}
}
private func updateDatas(_ memberCenterInfo: YHMemberCenterInfo) {
datas.removeAll() datas.removeAll()
switch currentLevel { switch currentLevel {
case .normal: case .normal:
datas.append(.myPrivilege(.normal, 5)) datas.append(.myPrivilege(.normal, 5))
let services: [YHMemberCenterCellContent] = [.customerService, .pointsConsumption, .afternoonTea, .offlineSalons, .onSiteConsultation] let services: [YHMemberCenterCellContent] = [.customerService, .pointsConsumption, .afternoonTea, .offlineSalons, .onSiteConsultation]
let ids: [String] = [memberCenterInfo.dedicatedAdviser.giftId, memberCenterInfo.specialIntegralConsumption.giftId, memberCenterInfo.luxuryTea.giftId, memberCenterInfo.offlineSalon.giftId, memberCenterInfo.answerConsult.giftId]
let details: [String] = ["不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换"] let details: [String] = ["不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换"]
let buttonTitles: [String] = ["立即联系", "了解更多", "立即兑换", "了解更多", "了解更多"] let buttonTitles: [String] = ["立即联系", "了解更多", "立即兑换", "了解更多", "了解更多"]
let buttonStates: [YHMemberCenterActionButton.ButtonState] = [.redeemable, .redeemable, .redeemable, .redeemable, .redeemable] let buttonStates: [YHMemberCenterActionButton.ButtonState] = [.redeemable, .redeemable, .redeemable, .redeemable, .redeemable]
services.enumerated().forEach { index, service in services.enumerated().forEach { index, service in
let row: TableRow = .action(service.rawValue, details[index], service.imageUrl(), service.imageRatio(), buttonTitles[index], buttonStates[index]) let row: TableRow = .action(service.rawValue, details[index], service.imageUrl(), service.imageRatio(), buttonTitles[index], buttonStates[index], ids[index])
datas.append(row) datas.append(row)
} }
case .gold: case .gold:
datas.append(.currentPrivilege(.gold, 7)) datas.append(.currentPrivilege(.gold, 7))
datas.append(.myPrivilege(.normal, 5)) datas.append(.myPrivilege(.normal, 5))
let services: [YHMemberCenterCellContent] = [.kidsBay, .luxury, .afternoonTea, .offlineSalons, .onSiteConsultation, .customerService, .pointsConsumption] let services: [YHMemberCenterCellContent] = [.kidsBay, .luxury, .afternoonTea, .offlineSalons, .onSiteConsultation, .customerService, .pointsConsumption]
let ids: [String] = [memberCenterInfo.highTeaBox.giftId, memberCenterInfo.experienceCenter.giftId,
memberCenterInfo.luxuryTea.giftId,
memberCenterInfo.offlineSalon.giftId, memberCenterInfo.answerConsult.giftId, memberCenterInfo.dedicatedAdviser.giftId,
memberCenterInfo.specialIntegralConsumption.giftId]
let details: [String] = ["本月剩余兑换数量:20", "本月剩余兑换数量:20", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换"] let details: [String] = ["本月剩余兑换数量:20", "本月剩余兑换数量:20", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换"]
let buttonTitles: [String] = ["了解更多", "了解更多", "立即兑换", "了解更多", "了解更多", "立即联系", "了解更多"] let buttonTitles: [String] = ["了解更多", "了解更多", "立即兑换", "了解更多", "了解更多", "立即联系", "了解更多"]
let buttonStates: [YHMemberCenterActionButton.ButtonState] = [.redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable] let buttonStates: [YHMemberCenterActionButton.ButtonState] = [.redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable]
services.enumerated().forEach { index, service in services.enumerated().forEach { index, service in
let row: TableRow = .action(service.rawValue, details[index], service.imageUrl(), service.imageRatio(), buttonTitles[index], buttonStates[index]) let row: TableRow = .action(service.rawValue, details[index], service.imageUrl(), service.imageRatio(), buttonTitles[index], buttonStates[index], ids[index])
datas.append(row) datas.append(row)
} }
case .platinum: case .platinum:
datas.append(.currentPrivilege(.platinum, 8)) datas.append(.currentPrivilege(.platinum, 8))
datas.append(.myPrivilege(.normal, 5)) datas.append(.myPrivilege(.normal, 5))
let services: [YHMemberCenterCellContent] = [.kidsBay, .luxury, .hkTravel, .afternoonTea, .offlineSalons, .onSiteConsultation, .customerService, .pointsConsumption] let services: [YHMemberCenterCellContent] = [.kidsBay, .luxury, .hkTravel, .afternoonTea, .offlineSalons, .onSiteConsultation, .customerService, .pointsConsumption]
let ids: [String] = [memberCenterInfo.highTeaBox.giftId, memberCenterInfo.experienceCenter.giftId,
memberCenterInfo.hkCarTransfer.giftId,
memberCenterInfo.luxuryTea.giftId,
memberCenterInfo.offlineSalon.giftId, memberCenterInfo.answerConsult.giftId, memberCenterInfo.dedicatedAdviser.giftId,
memberCenterInfo.specialIntegralConsumption.giftId]
let details: [String] = ["本月剩余兑换数量:20", "本月剩余兑换数量:20", "本月剩余兑换数量:20", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换"] let details: [String] = ["本月剩余兑换数量:20", "本月剩余兑换数量:20", "本月剩余兑换数量:20", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换"]
let buttonTitles: [String] = ["了解更多", "了解更多", "了解更多", "立即兑换", "了解更多", "了解更多", "立即联系", "了解更多"] let buttonTitles: [String] = ["了解更多", "了解更多", "了解更多", "立即兑换", "了解更多", "了解更多", "立即联系", "了解更多"]
let buttonStates: [YHMemberCenterActionButton.ButtonState] = [.redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable] let buttonStates: [YHMemberCenterActionButton.ButtonState] = [.redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable]
services.enumerated().forEach { index, service in services.enumerated().forEach { index, service in
let row: TableRow = .action(service.rawValue, details[index], service.imageUrl(), service.imageRatio(), buttonTitles[index], buttonStates[index]) let row: TableRow = .action(service.rawValue, details[index], service.imageUrl(), service.imageRatio(), buttonTitles[index], buttonStates[index], ids[index])
datas.append(row) datas.append(row)
} }
case .diamond: case .diamond:
datas.append(.currentPrivilege(.diamond, 13)) datas.append(.currentPrivilege(.diamond, 13))
datas.append(.myPrivilege(.normal, 5)) datas.append(.myPrivilege(.normal, 5))
let services: [YHMemberCenterCellContent] = [.kidsBay, .luxury, .crossBorder, .hkTravel, .drivingLicense, .schoolSelection, .brandPlanning, .highEndMeeting, .afternoonTea, .offlineSalons, .onSiteConsultation, .customerService, .pointsConsumption] let services: [YHMemberCenterCellContent] = [.kidsBay, .luxury, .crossBorder, .hkTravel, .drivingLicense, .schoolSelection, .brandPlanning, .highEndMeeting, .afternoonTea, .offlineSalons, .onSiteConsultation, .customerService, .pointsConsumption]
let ids: [String] = [memberCenterInfo.highTeaBox.giftId, memberCenterInfo.experienceCenter.giftId,
memberCenterInfo.carTransfer.giftId,
memberCenterInfo.hkCarTransfer.giftId,
memberCenterInfo.internationalDrivingLicense.giftId,
memberCenterInfo.hongkongSchoolPlanning.giftId,
memberCenterInfo.brandStrategy.giftId,
memberCenterInfo.highEndPrivilege.giftId,
memberCenterInfo.luxuryTea.giftId,
memberCenterInfo.offlineSalon.giftId, memberCenterInfo.answerConsult.giftId, memberCenterInfo.dedicatedAdviser.giftId,
memberCenterInfo.specialIntegralConsumption.giftId]
let details: [String] = ["本月剩余兑换数量:20", "本月剩余兑换数量:20", "本月已兑换完毕,次月更新", "本月剩余兑换数量:20", "本月剩余兑换数量:20", "本月剩余兑换数量:20", "本月剩余兑换数量:20", "本月剩余兑换数量:20", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换"] let details: [String] = ["本月剩余兑换数量:20", "本月剩余兑换数量:20", "本月已兑换完毕,次月更新", "本月剩余兑换数量:20", "本月剩余兑换数量:20", "本月剩余兑换数量:20", "本月剩余兑换数量:20", "本月剩余兑换数量:20", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换", "不限次数兑换"]
let buttonTitles: [String] = ["了解更多", "了解更多", "暂无库存", "了解更多", "了解更多", "了解更多", "了解更多", "了解更多", "立即兑换", "了解更多", "了解更多", "立即联系", "了解更多"] let buttonTitles: [String] = ["了解更多", "了解更多", "暂无库存", "了解更多", "了解更多", "了解更多", "了解更多", "了解更多", "立即兑换", "了解更多", "了解更多", "立即联系", "了解更多"]
let buttonStates: [YHMemberCenterActionButton.ButtonState] = [.redeemable, .redeemable, .outOfStock, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable] let buttonStates: [YHMemberCenterActionButton.ButtonState] = [.redeemable, .redeemable, .outOfStock, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable, .redeemable]
services.enumerated().forEach { index, service in services.enumerated().forEach { index, service in
let row: TableRow = .action(service.rawValue, details[index], service.imageUrl(), service.imageRatio(), buttonTitles[index], buttonStates[index]) let row: TableRow = .action(service.rawValue, details[index], service.imageUrl(), service.imageRatio(), buttonTitles[index], buttonStates[index], ids[index])
datas.append(row) datas.append(row)
} }
} }
tableView.reloadData() tableView.reloadData()
} }
@objc private func didHistoryButtonClicked() { @objc private func didHistoryButtonClicked() {
// var url = YHBaseUrlManager.shared.curH5URL() + "superAppBridge.html#/vip/order"
if YHLoginManager.shared.isLogin() {
let token = YHLoginManager.shared.h5Token
let urlHasParam = String.hasQueryParameters(urlString: url)
if urlHasParam {
url = url + "&param=" + token
} else {
url = url + "?param=" + token
}
}
var tUrl = url
if !url.contains("navigationH=") {
tUrl = url + "?navigationH=\(k_Height_NavigationtBarAndStatuBar)"
if url.contains("?") {
tUrl = url + "&navigationH=\(k_Height_NavigationtBarAndStatuBar)"
}
}
let vc = YHH5WebViewVC()
vc.url = tUrl
vc.isFullScreenFlag = false
navigationController?.pushViewController(vc)
} }
@objc private func didShareButtonClicked() { @objc private func didShareButtonClicked() {
// let url = YHBaseUrlManager.shared.curH5URL() + "superAppBridge.html#/vip/center"
YHShareManager.shared.sendLinkContent("分享会员中心", "", UIImage(named: "AppIcon") ?? UIImage(), link: url)
}
private func serviceDidClick(_ id: String) {
var url = YHBaseUrlManager.shared.curH5URL() + "superAppBridge.html#/vip/detail?exchange_support_type=2&source=vip&id=\(id)"
if YHLoginManager.shared.isLogin() {
let token = YHLoginManager.shared.h5Token
let urlHasParam = String.hasQueryParameters(urlString: url)
if urlHasParam {
url = url + "&param=" + token
} else {
url = url + "?param=" + token
}
}
var tUrl = url
if !url.contains("navigationH=") {
tUrl = url + "?navigationH=\(k_Height_NavigationtBarAndStatuBar)"
if url.contains("?") {
tUrl = url + "&navigationH=\(k_Height_NavigationtBarAndStatuBar)"
}
}
let vc = YHH5WebViewVC()
vc.url = tUrl
vc.isFullScreenFlag = true
navigationController?.pushViewController(vc)
}
private func gotoPrivilegePage() {
YHHUD.flash(message: "进特权页,待完善!!")
} }
} }
...@@ -181,9 +293,12 @@ extension YHMemberCenterViewController: UITableViewDelegate, UITableViewDataSour ...@@ -181,9 +293,12 @@ extension YHMemberCenterViewController: UITableViewDelegate, UITableViewDataSour
cell.setupCell(right: "\(count)项") cell.setupCell(right: "\(count)项")
return cell return cell
} }
case let .action(title, detail, imageStr, ratio, buttonStr, buttonState): case let .action(title, detail, imageStr, ratio, buttonStr, buttonState, id):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHMemberCenterActionCell.cellReuseIdentifier) as? YHMemberCenterActionCell { if let cell = tableView.dequeueReusableCell(withIdentifier: YHMemberCenterActionCell.cellReuseIdentifier) as? YHMemberCenterActionCell {
cell.setupCell(title: title, detail: detail, imgStr: imageStr, imageRatio: ratio, buttonStr: buttonStr, buttonState: buttonState) cell.setupCell(title: title, detail: detail, imgStr: imageStr, imageRatio: ratio, buttonStr: buttonStr, buttonState: buttonState)
cell.actionButtonEvent = { [weak self] in
self?.serviceDidClick(id)
}
return cell return cell
} }
} }
...@@ -206,7 +321,21 @@ extension YHMemberCenterViewController: UITableViewDelegate, UITableViewDataSour ...@@ -206,7 +321,21 @@ extension YHMemberCenterViewController: UITableViewDelegate, UITableViewDataSour
} }
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// tableView.deselectRow(at: indexPath, animated: true)
guard datas.count > indexPath.section else {
return
}
let section = datas[indexPath.section]
switch section {
case .currentPrivilege:
// 跳特权页
gotoPrivilegePage()
case .myPrivilege:
// 跳特权页
gotoPrivilegePage()
case .action:
break
}
} }
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
......
...@@ -10,7 +10,7 @@ import Foundation ...@@ -10,7 +10,7 @@ import Foundation
enum YHMemberCenterCellContent: String, CaseIterable { enum YHMemberCenterCellContent: String, CaseIterable {
case kidsBay = "kidsbay高端早教盒子" case kidsBay = "kidsbay高端早教盒子"
case luxury = "北上港深奢华体验中心" case luxury = "奢华体验中心"
case crossBorder = "深港跨境出行预约" case crossBorder = "深港跨境出行预约"
case hkTravel = "香港境内出行预约" case hkTravel = "香港境内出行预约"
case drivingLicense = "国际驾照续期" 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 @@ ...@@ -8,15 +8,24 @@
import Foundation import Foundation
enum YHMembershipLevel: String, CaseIterable { enum YHMembershipLevel: Int, CaseIterable {
case normal = "大众会员" case normal = 10
case gold = "黄金会员" case gold = 20
case platinum = "铂金会员" case platinum = 30
case diamond = "钻石会员" case diamond = 40
// 可以添加其他属性或方法 // 可以添加其他属性或方法
var description: String { 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 { ...@@ -36,6 +36,7 @@ class YHMemberCenterActionCell: YHResignDocumentCell {
private lazy var actionButton: YHMemberCenterActionButton = { private lazy var actionButton: YHMemberCenterActionButton = {
let button = YHMemberCenterActionButton(type: .custom) let button = YHMemberCenterActionButton(type: .custom)
button.update(state: .redeemable) button.update(state: .redeemable)
button.addTarget(self, action: #selector(actionButtonClicked), for: .touchUpInside)
return button return button
}() }()
...@@ -48,6 +49,10 @@ class YHMemberCenterActionCell: YHResignDocumentCell { ...@@ -48,6 +49,10 @@ class YHMemberCenterActionCell: YHResignDocumentCell {
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
} }
@objc private func actionButtonClicked() {
actionButtonEvent?()
}
private func setupUI() { private func setupUI() {
updateCellCorner(.single) updateCellCorner(.single)
subContainerView.addSubview(leftLabel) subContainerView.addSubview(leftLabel)
......
...@@ -34,6 +34,8 @@ class YHMemberCenterHeaderBannerCell: FSPagerViewCell { ...@@ -34,6 +34,8 @@ class YHMemberCenterHeaderBannerCell: FSPagerViewCell {
private lazy var upgradeButton: UIButton = { private lazy var upgradeButton: UIButton = {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 12) button.titleLabel?.font = UIFont.PFSC_M(ofSize: 12)
button.clipsToBounds = true
button.layer.cornerRadius = 17
return button return button
}() }()
...@@ -130,22 +132,24 @@ class YHMemberCenterHeaderBannerCell: FSPagerViewCell { ...@@ -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()) bannerImagV.image = UIImage(named: level.cardIconTitle())
bannerTitleLabel.text = level.description bannerTitleLabel.text = level.description
bannerTitleLabel.textColor = level.levelTitleColor() bannerTitleLabel.textColor = level.levelTitleColor()
levelButton.setTitleColor(level.levelButtonTitleColor(), for: .normal) levelButton.setTitleColor(level.levelButtonTitleColor(), for: .normal)
levelButton.setTitle(levelString, for: .normal) levelButton.setTitle(levelString, for: .normal)
countLabel.textColor = level.countTitleColor() countLabel.textColor = level.countTitleColor()
countLabel.text = countTo == 0 ? "\(countFrom)" : "\(countFrom)/\(countTo)" countLabel.text = ratioString
progressView.progress = Float(Double(countFrom) * 1.0 / Double(countTo)) countLabel.isHidden = !showRatio
progressView.progress = Float(ratio)
tipsLabel.textColor = level.tipsTitleColor() tipsLabel.textColor = level.tipsTitleColor()
tipsLabel.text = tips tipsLabel.text = tips
tipsLabel.isHidden = !showTips
upgradeButton.setTitle(upgradeTitle, for: .normal) upgradeButton.setTitle(upgradeTitle, for: .normal)
upgradeButton.setTitleColor(level.upgradeButtonTitleColor(), for: .normal) upgradeButton.setTitleColor(level.upgradeButtonTitleColor(), for: .normal)
upgradeButton.backgroundColor = level.upgradeButtonBackgroundColor() upgradeButton.backgroundColor = level.upgradeButtonBackgroundColor()
if level == .normal || level == .diamond { if !showProgress {
progressView.isHidden = true progressView.isHidden = true
countLabel.snp.remakeConstraints { make in countLabel.snp.remakeConstraints { make in
make.left.equalTo(bannerTitleLabel) make.left.equalTo(bannerTitleLabel)
......
...@@ -13,18 +13,26 @@ class YHMemberCenterHeaderView: UIView { ...@@ -13,18 +13,26 @@ class YHMemberCenterHeaderView: UIView {
class BannerData { class BannerData {
var level: YHMembershipLevel = .normal var level: YHMembershipLevel = .normal
var levelString: String = "" var levelString: String = ""
var countFrom: Int = 0
var countTo: Int = 0
var tips: String = "" var tips: String = ""
var upgradeTitle: 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.level = level
self.levelString = levelString self.levelString = levelString
self.countFrom = countFrom
self.countTo = countTo
self.tips = tips self.tips = tips
self.upgradeTitle = upgradeTitle 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 { ...@@ -57,12 +65,122 @@ class YHMemberCenterHeaderView: UIView {
return view return view
}() }()
var datas: [BannerData] { 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: "去升级") func updateDatas(_ memberCenterInfo: YHMemberCenterInfo) {
let platinum = BannerData(level: .platinum, levelString: "您未达到该等级", countFrom: 0, countTo: 150000, tips: "距钻石会员还需150000成长值", upgradeTitle: "去升级") datas = YHMembershipLevel.allCases.map({ level in
let diamond = BannerData(level: .diamond, levelString: "您未达到该等级", countFrom: 0, countTo: 0, tips: "当前成长值", upgradeTitle: "去升级") var levelString = "您未达到该等级"
return [normal, gold, platinum, diamond] 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) { override init(frame: CGRect) {
...@@ -96,7 +214,7 @@ extension YHMemberCenterHeaderView: FSPagerViewDataSource, FSPagerViewDelegate { ...@@ -96,7 +214,7 @@ extension YHMemberCenterHeaderView: FSPagerViewDataSource, FSPagerViewDelegate {
} }
if let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "YHMemberCenterHeaderBannerCell", at: index) as? YHMemberCenterHeaderBannerCell { if let cell = pagerView.dequeueReusableCell(withReuseIdentifier: "YHMemberCenterHeaderBannerCell", at: index) as? YHMemberCenterHeaderBannerCell {
let model = datas[index] 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 cell
} }
return FSPagerViewCell() 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 { ...@@ -752,6 +752,7 @@ class YHAllApiName {
// 会员 // 会员
struct Member { struct Member {
static let memberInfoApi = "super-app/h5-points/member-info" 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