Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
galaxy-iOS
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mobile-group
galaxy-iOS
Commits
819406fa
Commit
819406fa
authored
Feb 21, 2025
by
Steven杜宇
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'vip' of
http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS
into vip
parents
ad06babc
916f235d
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
435 additions
and
38 deletions
+435
-38
project.pbxproj
galaxy/galaxy.xcodeproj/project.pbxproj
+8
-0
YHMemberCenterViewController.swift
...ses/Modules/Mine(我的)/C/YHMemberCenterViewController.swift
+143
-14
YHMemberCenterCellContent.swift
...es/Modules/Mine(我的)/Model/YHMemberCenterCellContent.swift
+1
-1
YHMemberCenterInfo.swift
...y/Classes/Modules/Mine(我的)/Model/YHMemberCenterInfo.swift
+82
-0
YHMembershipLevel.swift
...xy/Classes/Modules/Mine(我的)/Model/YHMembershipLevel.swift
+15
-6
YHMemberCenterActionCell.swift
...Classes/Modules/Mine(我的)/V/YHMemberCenterActionCell.swift
+5
-0
YHMemberCenterHeaderBannerCell.swift
...s/Modules/Mine(我的)/V/YHMemberCenterHeaderBannerCell.swift
+9
-5
YHMemberCenterHeaderView.swift
...Classes/Modules/Mine(我的)/V/YHMemberCenterHeaderView.swift
+130
-12
YHMemberCenterViewModel.swift
.../Modules/Mine(我的)/ViewModel/YHMemberCenterViewModel.swift
+41
-0
YHAllApiName.swift
galaxy/galaxy/Classes/Tools/NetWork/YHAllApiName.swift
+1
-0
No files found.
galaxy/galaxy.xcodeproj/project.pbxproj
View file @
819406fa
...
...
@@ -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 */
,
...
...
galaxy/galaxy/Classes/Modules/Mine(我的)/C/YHMemberCenterViewController.swift
View file @
819406fa
...
...
@@ -12,11 +12,15 @@ class YHMemberCenterViewController: YHBaseViewController {
enum
TableRow
{
case
currentPrivilege
(
_
curLevel
:
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
viewModel
=
YHMemberCenterViewModel
()
private
var
firstEnter
=
true
var
datas
:
[
TableRow
]
=
[]
private
lazy
var
tableView
:
UITableView
=
{
...
...
@@ -49,7 +53,9 @@ class YHMemberCenterViewController: YHBaseViewController {
}
self
.
bgIcon
.
image
=
UIImage
(
named
:
level
.
bgIconTitle
())
self
.
currentLevel
=
level
self
.
setupDatas
()
if
let
info
=
self
.
viewModel
.
memberCenterInfo
{
self
.
updateDatas
(
info
)
}
}
return
view
}()
...
...
@@ -62,7 +68,17 @@ class YHMemberCenterViewController: YHBaseViewController {
override
func
viewDidLoad
()
{
super
.
viewDidLoad
()
setupUI
()
setupDatas
()
}
override
func
viewWillAppear
(
_
animated
:
Bool
)
{
super
.
viewWillAppear
(
animated
)
if
firstEnter
{
firstEnter
=
false
requestData
(
isNeedLoading
:
true
)
}
else
{
requestData
(
isNeedLoading
:
false
)
}
}
private
func
setupUI
()
{
...
...
@@ -92,64 +108,160 @@ class YHMemberCenterViewController: YHBaseViewController {
tableView
.
tableHeaderView
=
headerView
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
()
switch
currentLevel
{
case
.
normal
:
datas
.
append
(
.
myPrivilege
(
.
normal
,
5
))
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
buttonTitles
:
[
String
]
=
[
"立即联系"
,
"了解更多"
,
"立即兑换"
,
"了解更多"
,
"了解更多"
]
let
buttonStates
:
[
YHMemberCenterActionButton
.
ButtonState
]
=
[
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
]
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
)
}
case
.
gold
:
datas
.
append
(
.
currentPrivilege
(
.
gold
,
7
))
datas
.
append
(
.
myPrivilege
(
.
normal
,
5
))
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
buttonTitles
:
[
String
]
=
[
"了解更多"
,
"了解更多"
,
"立即兑换"
,
"了解更多"
,
"了解更多"
,
"立即联系"
,
"了解更多"
]
let
buttonStates
:
[
YHMemberCenterActionButton
.
ButtonState
]
=
[
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
]
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
)
}
case
.
platinum
:
datas
.
append
(
.
currentPrivilege
(
.
platinum
,
8
))
datas
.
append
(
.
myPrivilege
(
.
normal
,
5
))
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
buttonTitles
:
[
String
]
=
[
"了解更多"
,
"了解更多"
,
"了解更多"
,
"立即兑换"
,
"了解更多"
,
"了解更多"
,
"立即联系"
,
"了解更多"
]
let
buttonStates
:
[
YHMemberCenterActionButton
.
ButtonState
]
=
[
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
]
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
)
}
case
.
diamond
:
datas
.
append
(
.
currentPrivilege
(
.
diamond
,
13
))
datas
.
append
(
.
myPrivilege
(
.
normal
,
5
))
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
buttonTitles
:
[
String
]
=
[
"了解更多"
,
"了解更多"
,
"暂无库存"
,
"了解更多"
,
"了解更多"
,
"了解更多"
,
"了解更多"
,
"了解更多"
,
"立即兑换"
,
"了解更多"
,
"了解更多"
,
"立即联系"
,
"了解更多"
]
let
buttonStates
:
[
YHMemberCenterActionButton
.
ButtonState
]
=
[
.
redeemable
,
.
redeemable
,
.
outOfStock
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
,
.
redeemable
]
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
)
}
}
tableView
.
reloadData
()
}
@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
+
"¶m="
+
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
()
{
//
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
+
"¶m="
+
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
cell
.
setupCell
(
right
:
"
\(
count
)
项"
)
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
{
cell
.
setupCell
(
title
:
title
,
detail
:
detail
,
imgStr
:
imageStr
,
imageRatio
:
ratio
,
buttonStr
:
buttonStr
,
buttonState
:
buttonState
)
cell
.
actionButtonEvent
=
{
[
weak
self
]
in
self
?
.
serviceDidClick
(
id
)
}
return
cell
}
}
...
...
@@ -206,7 +321,21 @@ extension YHMemberCenterViewController: UITableViewDelegate, UITableViewDataSour
}
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
{
...
...
galaxy/galaxy/Classes/Modules/Mine(我的)/Model/YHMemberCenterCellContent.swift
View file @
819406fa
...
...
@@ -10,7 +10,7 @@ import Foundation
enum
YHMemberCenterCellContent
:
String
,
CaseIterable
{
case
kidsBay
=
"kidsbay高端早教盒子"
case
luxury
=
"
北上港深
奢华体验中心"
case
luxury
=
"奢华体验中心"
case
crossBorder
=
"深港跨境出行预约"
case
hkTravel
=
"香港境内出行预约"
case
drivingLicense
=
"国际驾照续期"
...
...
galaxy/galaxy/Classes/Modules/Mine(我的)/Model/YHMemberCenterInfo.swift
0 → 100644
View file @
819406fa
//
// 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
()
{
}
}
galaxy/galaxy/Classes/Modules/Mine(我的)/Model/YHMembershipLevel.swift
View file @
819406fa
...
...
@@ -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
"钻石会员"
}
}
// 示例:获取会员等级对应的权益
...
...
galaxy/galaxy/Classes/Modules/Mine(我的)/V/YHMemberCenterActionCell.swift
View file @
819406fa
...
...
@@ -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
}()
...
...
@@ -47,6 +48,10 @@ class YHMemberCenterActionCell: YHResignDocumentCell {
required
init
?(
coder
:
NSCoder
)
{
fatalError
(
"init(coder:) has not been implemented"
)
}
@objc
private
func
actionButtonClicked
()
{
actionButtonEvent
?()
}
private
func
setupUI
()
{
updateCellCorner
(
.
single
)
...
...
galaxy/galaxy/Classes/Modules/Mine(我的)/V/YHMemberCenterHeaderBannerCell.swift
View file @
819406fa
...
...
@@ -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
}()
...
...
@@ -129,23 +131,25 @@ class YHMemberCenterHeaderBannerCell: FSPagerViewCell {
make
.
right
.
lessThanOrEqualTo
(
upgradeButton
.
snp
.
left
)
.
offset
(
-
26
)
}
}
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
)
...
...
galaxy/galaxy/Classes/Modules/Mine(我的)/V/YHMemberCenterHeaderView.swift
View file @
819406fa
...
...
@@ -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
()
...
...
galaxy/galaxy/Classes/Modules/Mine(我的)/ViewModel/YHMemberCenterViewModel.swift
0 → 100644
View file @
819406fa
//
// 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
)
}
}
}
galaxy/galaxy/Classes/Tools/NetWork/YHAllApiName.swift
View file @
819406fa
...
...
@@ -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"
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment