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
f028ccbc
Commit
f028ccbc
authored
Mar 06, 2025
by
Alex朱枝文
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加续签申请缴费页面
parent
4f6f4949
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
632 additions
and
0 deletions
+632
-0
project.pbxproj
galaxy/galaxy.xcodeproj/project.pbxproj
+8
-0
YHHKVisaRenewalApplicationVC.swift
...newalPayment(续签在港缴费)/C/YHHKVisaRenewalApplicationVC.swift
+585
-0
YHHKVisaRenewalApplicationHeader.swift
...lPayment(续签在港缴费)/V/YHHKVisaRenewalApplicationHeader.swift
+39
-0
No files found.
galaxy/galaxy.xcodeproj/project.pbxproj
View file @
f028ccbc
...
...
@@ -75,6 +75,8 @@
043671432D66DDB500E8D9BA
/* YHMemberCenterInfo.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
043671422D66DDB500E8D9BA
/* YHMemberCenterInfo.swift */
;
};
043671452D66FBEE00E8D9BA
/* YHMemberCenterViewModel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
043671442D66FBEE00E8D9BA
/* YHMemberCenterViewModel.swift */
;
};
043671472D6C3ED100E8D9BA
/* YHMembershipGrowthGuideView.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
043671462D6C3ED100E8D9BA
/* YHMembershipGrowthGuideView.swift */
;
};
045647572D7976880001D831
/* YHHKVisaRenewalApplicationVC.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
045647562D7976880001D831
/* YHHKVisaRenewalApplicationVC.swift */
;
};
045647592D79877E0001D831
/* YHHKVisaRenewalApplicationHeader.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
045647582D79877E0001D831
/* YHHKVisaRenewalApplicationHeader.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 */
;
};
...
...
@@ -1323,6 +1325,8 @@
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>"
;
};
043671462D6C3ED100E8D9BA
/* YHMembershipGrowthGuideView.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHMembershipGrowthGuideView.swift
;
sourceTree
=
"<group>"
;
};
045647562D7976880001D831
/* YHHKVisaRenewalApplicationVC.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHHKVisaRenewalApplicationVC.swift
;
sourceTree
=
"<group>"
;
};
045647582D79877E0001D831
/* YHHKVisaRenewalApplicationHeader.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHHKVisaRenewalApplicationHeader.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>"
;
};
...
...
@@ -4320,6 +4324,7 @@
isa
=
PBXGroup
;
children
=
(
045C0CB02D12CA5E00BD2DC0
/* YHHKVisaRenewalPaymentVC.swift */
,
045647562D7976880001D831
/* YHHKVisaRenewalApplicationVC.swift */
,
045C0CB12D12CA5E00BD2DC0
/* YHVisaRenewalGuideVC.swift */
,
045C0CB22D12CA5E00BD2DC0
/* YHVisaRenewalTroubleshootingGuideVC.swift */
,
);
...
...
@@ -4363,6 +4368,7 @@
045C0CCD2D12CA5E00BD2DC0
/* YHVisaRenewalTipsCell.swift */
,
045C0CCE2D12CA5E00BD2DC0
/* YHVisaRenewalTroubleshootingGuideHeaderCell.swift */
,
045C0CCF2D12CA5E00BD2DC0
/* YHVisaRenewalWorkflowCell.swift */
,
045647582D79877E0001D831
/* YHHKVisaRenewalApplicationHeader.swift */
,
);
path
=
V
;
sourceTree
=
"<group>"
;
...
...
@@ -7792,6 +7798,7 @@
045C12D62D12CA5F00BD2DC0
/* YHAIGreetCollectionReusableView.swift in Sources */
,
045C12D72D12CA5F00BD2DC0
/* YHMainChannelDelegate.swift in Sources */
,
045C12D82D12CA5F00BD2DC0
/* YHSubmitAllInfoSuccessAlertView.swift in Sources */
,
045647572D7976880001D831
/* YHHKVisaRenewalApplicationVC.swift in Sources */
,
045C12D92D12CA5F00BD2DC0
/* YHPayMemberSectionItem.swift in Sources */
,
045C12DA2D12CA5F00BD2DC0
/* YHPickTimeHoldView.swift in Sources */
,
04307B9F2D1D4B3600ED8E8D
/* YHGCIncomeTypeSelectViewController.swift in Sources */
,
...
...
@@ -8026,6 +8033,7 @@
045C13AA2D12CA5F00BD2DC0
/* YHServiceCenterProgressModel.swift in Sources */
,
0436713D2D6470A400E8D9BA
/* YHMemberCenterActionCell.swift in Sources */
,
045C13AB2D12CA5F00BD2DC0
/* Dictionary+Extension.swift in Sources */
,
045647592D79877E0001D831
/* YHHKVisaRenewalApplicationHeader.swift in Sources */
,
045C13AC2D12CA5F00BD2DC0
/* YHHomePageViewController.swift in Sources */
,
045C13AD2D12CA5F00BD2DC0
/* YHIncomeRecordFromCell.swift in Sources */
,
045C13AE2D12CA5F00BD2DC0
/* YHHKImmigrationRecordsStatisticsModel.swift in Sources */
,
...
...
galaxy/galaxy/Classes/Modules/IntelligentService(服务中心)/QMAS(优才)/Resign(续签)/HongKongVisaRenewalPayment(续签在港缴费)/C/YHHKVisaRenewalApplicationVC.swift
0 → 100644
View file @
f028ccbc
//
// YHHKVisaRenewalApplicationVC.swift
// galaxy
//
// Created by alexzzw on 2025/3/6.
// Copyright © 2025 https://www.galaxy-immi.com. All rights reserved.
//
import
UIKit
import
UIKit
import
AttributedString
import
SafariServices
import
Photos
class
YHHKVisaRenewalApplicationVC
:
YHBaseViewController
{
private
lazy
var
headerView
:
YHHKVisaRenewalApplicationHeader
=
{
let
view
=
YHHKVisaRenewalApplicationHeader
(
frame
:
CGRect
(
x
:
0
,
y
:
0
,
width
:
KScreenWidth
,
height
:
YHHKVisaRenewalApplicationHeader
.
viewHeight
))
return
view
}()
private
lazy
var
tableView
:
UITableView
=
{
let
view
=
UITableView
(
frame
:
.
zero
,
style
:
.
grouped
)
view
.
estimatedSectionHeaderHeight
=
16.0
view
.
estimatedSectionFooterHeight
=
0.01
view
.
sectionHeaderHeight
=
16.0
view
.
sectionFooterHeight
=
0.01
view
.
contentInsetAdjustmentBehavior
=
.
never
view
.
backgroundColor
=
.
clear
view
.
separatorStyle
=
.
none
view
.
rowHeight
=
UITableView
.
automaticDimension
view
.
estimatedRowHeight
=
52.0
view
.
dataSource
=
self
view
.
delegate
=
self
view
.
showsVerticalScrollIndicator
=
false
view
.
register
(
YHVisaRenewalSectionHeaderCell
.
self
,
forCellReuseIdentifier
:
YHVisaRenewalSectionHeaderCell
.
cellReuseIdentifier
)
view
.
register
(
YHVisaRenewalTipsCell
.
self
,
forCellReuseIdentifier
:
YHVisaRenewalTipsCell
.
cellReuseIdentifier
)
view
.
register
(
YHVisaRenewalResidenceActionCell
.
self
,
forCellReuseIdentifier
:
YHVisaRenewalResidenceActionCell
.
cellReuseIdentifier
)
view
.
register
(
YHVisaRenewalPayMethodUrlCell
.
self
,
forCellReuseIdentifier
:
YHVisaRenewalPayMethodUrlCell
.
cellReuseIdentifier
)
view
.
register
(
YHVisaRenewalPayMethodQrcodeCell
.
self
,
forCellReuseIdentifier
:
YHVisaRenewalPayMethodQrcodeCell
.
cellReuseIdentifier
)
view
.
register
(
YHVisaRenewalPayOccupyingSpaceCell
.
self
,
forCellReuseIdentifier
:
YHVisaRenewalPayOccupyingSpaceCell
.
cellReuseIdentifier
)
view
.
register
(
YHVisaRenewalPayStatusCell
.
self
,
forCellReuseIdentifier
:
YHVisaRenewalPayStatusCell
.
cellReuseIdentifier
)
view
.
register
(
YHVisaRenewalPayInfoCell
.
self
,
forCellReuseIdentifier
:
YHVisaRenewalPayInfoCell
.
cellReuseIdentifier
)
view
.
register
(
YHVisaRenewalPayContentCell
.
self
,
forCellReuseIdentifier
:
YHVisaRenewalPayContentCell
.
cellReuseIdentifier
)
view
.
register
(
YHVisaRenewalPayTipsCell
.
self
,
forCellReuseIdentifier
:
YHVisaRenewalPayTipsCell
.
cellReuseIdentifier
)
return
view
}()
private
lazy
var
guideButton
:
UIControl
=
{
let
button
=
UIControl
()
let
titleLabel
=
UILabel
()
titleLabel
.
text
=
"领取续签指引"
titleLabel
.
textColor
=
.
mainTextColor
titleLabel
.
textAlignment
=
.
center
titleLabel
.
font
=
UIFont
.
PFSC_R
(
ofSize
:
11
)
let
image
=
UIImage
(
named
:
"resign_visa_pay_guide"
)
let
imageView
=
UIImageView
(
image
:
image
)
button
.
addSubview
(
titleLabel
)
button
.
addSubview
(
imageView
)
imageView
.
snp
.
makeConstraints
{
make
in
make
.
top
.
equalToSuperview
()
.
offset
(
12
)
make
.
centerX
.
equalToSuperview
()
make
.
width
.
height
.
equalTo
(
24
)
}
titleLabel
.
snp
.
makeConstraints
{
make
in
make
.
top
.
equalTo
(
imageView
.
snp
.
bottom
)
make
.
centerX
.
equalTo
(
imageView
)
}
button
.
addTarget
(
self
,
action
:
#selector(
clickGuideButton
)
,
for
:
.
touchUpInside
)
return
button
}()
private
lazy
var
sureButton
:
UIButton
=
{
let
button
=
UIButton
(
type
:
.
custom
)
button
.
titleLabel
?
.
font
=
UIFont
.
PFSC_M
(
ofSize
:
16
)
button
.
setTitle
(
"去上传旅行证件"
,
for
:
.
normal
)
button
.
setTitle
(
"去上传旅行证件"
,
for
:
.
highlighted
)
button
.
setTitleColor
(
UIColor
(
hex
:
0xffffff
),
for
:
.
normal
)
button
.
setTitleColor
(
UIColor
(
hex
:
0xffffff
),
for
:
.
highlighted
)
button
.
setTitleColor
(
UIColor
(
hex
:
0xffffff
),
for
:
.
disabled
)
button
.
addTarget
(
self
,
action
:
#selector(
clickSureButton
)
,
for
:
.
touchUpInside
)
button
.
layer
.
cornerRadius
=
kCornerRadius3
button
.
clipsToBounds
=
true
button
.
backgroundColor
=
.
brandMainColor
button
.
alpha
=
0.3
button
.
isEnabled
=
false
return
button
}()
private
lazy
var
bottomView
:
UIView
=
{
let
view
=
UIView
()
view
.
backgroundColor
=
.
white
return
view
}()
private
lazy
var
datas
:
[[
YHVisaRenewalItemDetailType
]]
=
[]
private
var
didShowGuideVC
=
false
private
lazy
var
viewModel
=
YHHKVisaRenewalPaymentViewModel
()
private
let
orderId
:
Int
private
let
renewalId
:
Int
init
(
orderId
:
Int
,
renewalId
:
Int
)
{
self
.
orderId
=
orderId
self
.
renewalId
=
renewalId
super
.
init
(
nibName
:
nil
,
bundle
:
nil
)
}
required
init
?(
coder
:
NSCoder
)
{
fatalError
(
"init(coder:) has not been implemented"
)
}
override
func
viewDidLoad
()
{
super
.
viewDidLoad
()
setupUI
()
}
override
func
viewWillAppear
(
_
animated
:
Bool
)
{
super
.
viewWillAppear
(
animated
)
requestData
()
}
override
func
viewDidAppear
(
_
animated
:
Bool
)
{
super
.
viewDidAppear
(
animated
)
if
!
didShowGuideVC
{
didShowGuideVC
=
true
let
didShowGuide
=
YHVisaRenewalGuideVC
.
didShowGuide
if
!
didShowGuide
{
showGuideVC
()
}
}
}
}
extension
YHHKVisaRenewalApplicationVC
{
@objc
private
func
clickGuideButton
()
{
showGuideVC
()
}
@objc
private
func
clickSureButton
()
{
let
vc
=
YHResignUploadTravelCardListViewController
()
vc
.
orderId
=
orderId
vc
.
batchId
=
renewalId
navigationController
?
.
pushViewController
(
vc
)
}
private
func
setupUI
()
{
gk_navTitle
=
"续签申请缴费"
gk_navBarAlpha
=
1.0
gk_navBackgroundColor
=
.
white
view
.
backgroundColor
=
UIColor
.
contentBkgColor
view
.
addSubview
(
tableView
)
view
.
addSubview
(
bottomView
)
bottomView
.
addSubview
(
sureButton
)
bottomView
.
addSubview
(
guideButton
)
bottomView
.
snp
.
makeConstraints
{
make
in
make
.
left
.
right
.
equalToSuperview
()
make
.
bottom
.
equalToSuperview
()
make
.
top
.
equalTo
(
view
.
safeAreaLayoutGuide
.
snp
.
bottom
)
.
offset
(
-
64
)
}
guideButton
.
snp
.
makeConstraints
{
make
in
make
.
left
.
equalToSuperview
()
make
.
top
.
equalToSuperview
()
make
.
height
.
equalTo
(
64
)
make
.
width
.
equalTo
(
106
)
}
sureButton
.
snp
.
makeConstraints
{
make
in
make
.
left
.
equalTo
(
guideButton
.
snp
.
right
)
make
.
right
.
equalToSuperview
()
.
offset
(
-
20
)
make
.
top
.
equalToSuperview
()
.
offset
(
8
)
make
.
height
.
equalTo
(
48
)
}
tableView
.
snp
.
makeConstraints
{
make
in
make
.
left
.
equalToSuperview
()
make
.
right
.
equalToSuperview
()
make
.
top
.
equalTo
(
k_Height_NavigationtBarAndStatuBar
)
make
.
bottom
.
equalTo
(
bottomView
.
snp
.
top
)
}
tableView
.
tableFooterView
=
UIView
(
frame
:
CGRect
.
init
(
x
:
0
,
y
:
0
,
width
:
KScreenWidth
,
height
:
kMargin
))
tableView
.
tableHeaderView
=
headerView
}
private
func
requestData
(
isNeedLoading
:
Bool
=
false
)
{
if
isNeedLoading
{
YHHUD
.
show
(
.
progress
(
message
:
"加载中..."
))
}
viewModel
.
getPaymentList
(
orderId
:
orderId
,
renewalId
:
renewalId
)
{
[
weak
self
]
paymentListModel
,
error
in
guard
let
self
=
self
else
{
return
}
if
isNeedLoading
{
YHHUD
.
hide
()
}
guard
let
paymentListModel
=
paymentListModel
else
{
printLog
(
"YHHKVisaRenewalApplicationVC: 请求失败"
)
if
let
errorMsg
=
error
?
.
errorMsg
,
errorMsg
.
count
>
0
{
YHHUD
.
flash
(
message
:
errorMsg
)
}
self
.
datas
=
[]
self
.
tableView
.
reloadData
()
return
}
//let approvalPendingMsg = "申请人暂未获批,无法在港缴费"
//let confirmedPresenceMsg = "申请人已在港"
var
sections
:
[[
YHVisaRenewalItemDetailType
]]
=
[]
//let confirmingPresenceTips: ASAttributedString = .init(string: "提示:", .foreground(UIColor.yhOrangeColor)) + .init(string: "缴费前请先确认涉及到的") + .init(string: "申请人在香港", .foreground(UIColor.yhOrangeColor))
//var confirmingPresenceSection: [YHVisaRenewalItemDetailType] = [.sectionHeader("确认申请人在港", nil), .tips(confirmingPresenceTips)]
//var actionMembers: [YHVisaRenewalItemDetailType] = []
var
paymentMembers
:
[
YHVisaRenewalItemDetailType
]
=
[]
self
.
updateSureButtonState
(
false
)
paymentListModel
.
list
.
forEach
{
[
weak
self
]
person
in
guard
let
self
=
self
else
{
return
}
guard
let
presenceStatus
=
YHVisaRenewalPresenceStatus
(
rawValue
:
person
.
confirm_hk_status
)
else
{
return
}
// let member = YHVisaRenewalItemDetailType.residenceAction(person.name, presenceStatus, .mid) { [weak self] in
// guard let self = self else {
// return
// }
// switch presenceStatus {
// case .approvalPending:
// YHHUD.flash(message: approvalPendingMsg)
// case .confirmingPresence:
// self.showAlertView(confirmBlock: { [weak self] in
// guard let self = self else {
// return
// }
// YHHUD.show(.progress(message: "确认中..."))
// self.viewModel.confirmInHK(orderId: self.orderId, renewalId: self.renewalId, uid: person.id, type: person.type) { [weak self] success, error in
// guard let self = self else {
// return
// }
// YHHUD.hide()
// if success {
// YHHUD.flash(message: "已确认在港")
// self.requestData(isNeedLoading: true)
// } else {
// if let errorMsg = error?.errorMsg, errorMsg.count > 0 {
// YHHUD.flash(message: errorMsg)
// }
// }
// }
// })
// case .confirmedPresence:
// YHHUD.flash(message: confirmedPresenceMsg)
// }
// }
// actionMembers.append(member)
guard
let
paymentStatus
=
YHVisaRenewalPaymentStatus
(
rawValue
:
person
.
pay_status
)
else
{
return
}
switch
paymentStatus
{
case
.
pendingPayment
:
paymentMembers
.
append
(
.
occupyingSpace
)
paymentMembers
.
append
(
.
subHeader
(
person
.
name
,
.
pendingPayment
))
switch
presenceStatus
{
case
.
approvalPending
:
paymentMembers
.
append
(
.
subRemark
(
"续签申请暂未正式获批,请耐心等待"
))
case
.
confirmingPresence
:
paymentMembers
.
append
(
.
subInfo
(
"档案号:"
,
"-"
,
nil
))
paymentMembers
.
append
(
.
subInfo
(
"可缴费时间段:"
,
"
\(
person
.
min_pay_time
)
-
\(
person
.
max_pay_time
)
"
,
nil
))
paymentMembers
.
append
(
.
subInfo
(
"缴费金额:"
,
"
\(
person
.
fee_hkd
)
港币(≈
\(
person
.
fee_rmb
)
人民币)"
,
nil
))
paymentMembers
.
append
(
.
subRemark
(
"请先确认用户完成确认在港"
))
case
.
confirmedPresence
:
paymentMembers
.
append
(
.
subInfo
(
"档案号:"
,
person
.
file_num
,
"复制"
,
.
mid
,
nil
,
false
,
{
[
weak
self
]
in
guard
let
self
=
self
else
{
return
}
self
.
copyToPasteBoard
(
person
.
file_num
,
message
:
"已复制档案号"
)
}))
paymentMembers
.
append
(
.
subInfo
(
"可缴费时间段:"
,
"
\(
person
.
min_pay_time
)
-
\(
person
.
max_pay_time
)
"
,
nil
))
paymentMembers
.
append
(
.
subInfo
(
"缴费金额:"
,
"
\(
person
.
fee_hkd
)
港币(≈
\(
person
.
fee_rmb
)
人民币)"
,
nil
))
paymentMembers
.
append
(
.
subRemark
(
"请复制档案号去港府官网缴费"
))
}
case
.
paid
:
var
fileName
=
person
.
receipt
if
fileName
.
count
>
0
,
let
url
=
URL
(
string
:
fileName
)
{
fileName
=
url
.
lastPathComponent
}
paymentMembers
.
append
(
.
occupyingSpace
)
paymentMembers
.
append
(
.
subHeader
(
person
.
name
,
.
paid
))
paymentMembers
.
append
(
.
subInfo
(
"档案号:"
,
person
.
file_num
,
"复制"
,
.
mid
,
12
,
true
,
{
[
weak
self
]
in
guard
let
self
=
self
else
{
return
}
self
.
copyToPasteBoard
(
person
.
file_num
,
message
:
"已复制档案号"
)
}))
paymentMembers
.
append
(
.
subInfo
(
"缴费金额:"
,
"
\(
person
.
fee_hkd
)
港币(≈
\(
person
.
fee_rmb
)
人民币)"
,
nil
))
paymentMembers
.
append
(
.
subContent
(
"缴费电子签证:"
,
fileName
,
"查看"
,
.
bottom
,
{
[
weak
self
]
in
guard
let
self
=
self
else
{
return
}
self
.
gotoPreview
(
person
.
receipt
)
}))
self
.
updateSureButtonState
(
true
)
case
.
expired
:
paymentMembers
.
append
(
.
occupyingSpace
)
paymentMembers
.
append
(
.
subHeader
(
person
.
name
,
.
expired
))
paymentMembers
.
append
(
.
subInfo
(
"档案号:"
,
person
.
file_num
,
"复制"
,
.
mid
,
nil
,
false
,
{
[
weak
self
]
in
guard
let
self
=
self
else
{
return
}
self
.
copyToPasteBoard
(
person
.
file_num
,
message
:
"已复制档案号"
)
}))
paymentMembers
.
append
(
.
subInfo
(
"可缴费时间段:"
,
"
\(
person
.
min_pay_time
)
-
\(
person
.
max_pay_time
)
"
,
nil
))
paymentMembers
.
append
(
.
subInfo
(
"缴费金额:"
,
"
\(
person
.
fee_hkd
)
港币(≈
\(
person
.
fee_rmb
)
人民币)"
,
nil
))
case
.
pendingApproval
:
paymentMembers
.
append
(
.
occupyingSpace
)
paymentMembers
.
append
(
.
subHeader
(
person
.
name
,
.
pendingApproval
))
paymentMembers
.
append
(
.
subRemark
(
"续签申请暂未正式获批,请耐心等待"
))
}
}
// if let lastMember = actionMembers.last, case let.residenceAction(name, status, _, action) = lastMember {
// actionMembers[actionMembers.count - 1] = .residenceAction(name, status, .bottom, action)
// confirmingPresenceSection.append(contentsOf: actionMembers)
// }
if
paymentMembers
.
count
>
0
{
paymentMembers
.
append
(
.
occupyingSpace
)
}
//sections.append(confirmingPresenceSection)
let
payMethodTips
:
ASAttributedString
=
.
init
(
string
:
"提示:"
,
.
foreground
(
UIColor
.
yhOrangeColor
))
+
.
init
(
string
:
"请先到下方“缴费成员”处"
)
+
.
init
(
string
:
"复制档案号"
,
.
foreground
(
UIColor
.
yhOrangeColor
))
+
.
init
(
string
:
"再缴费"
)
let
webPageUrl
=
paymentListModel
.
payment_url
if
webPageUrl
.
count
>
0
,
URL
(
string
:
webPageUrl
)
!=
nil
{
let
payMethodSection
:
[
YHVisaRenewalItemDetailType
]
=
[
.
sectionHeader
(
"港府官网缴费方式"
,
"缴费遇到问题?"
,
{
[
weak
self
]
in
guard
let
self
=
self
else
{
return
}
printLog
(
"缴费遇到问题"
)
self
.
showTroubleshootingGuideVC
()
}),
.
tips
(
payMethodTips
),
.
payMethodUrl
(
"方式一"
,
"点击下方链接,跳转浏览器,进入港府官网操作缴费"
,
webPageUrl
,
{
[
weak
self
]
in
guard
let
self
=
self
else
{
return
}
printLog
(
"点击下方链接,跳转浏览器"
)
self
.
gotoWebVC
(
webPageUrl
)
}),
.
payMethodQrcode
(
"方式二"
,
"用其他设备直接扫码,或长按保存图片,通过微信识别打开"
,
webPageUrl
)]
sections
.
append
(
payMethodSection
)
}
var
payMembersSection
:
[
YHVisaRenewalItemDetailType
]
=
[
.
sectionHeader
(
"缴费成员"
,
"电子签证范例"
,
{
[
weak
self
]
in
guard
let
self
=
self
else
{
return
}
self
.
gotoPreview
(
paymentListModel
.
evisa_example_url
)
})]
payMembersSection
.
append
(
contentsOf
:
paymentMembers
)
sections
.
append
(
payMembersSection
)
self
.
datas
=
sections
self
.
tableView
.
reloadData
()
}
}
private
func
updateSureButtonState
(
_
isEnabled
:
Bool
=
false
)
{
sureButton
.
alpha
=
isEnabled
?
1
:
0.3
sureButton
.
isEnabled
=
isEnabled
}
private
func
showAlertView
(
confirmBlock
:
(()
->
Void
)?)
{
let
alert
=
YHVisaRenewalPayConfirmingPresenceAlertView
.
alertView
()
alert
.
confirmBlock
=
{
confirmBlock
?()
}
alert
.
show
()
}
private
func
showGuideVC
()
{
let
vc
=
YHVisaRenewalGuideVC
()
let
pc
=
YHBottomPresentationController
(
presentedViewController
:
vc
,
presenting
:
self
)
pc
.
customRadius
=
16.0
vc
.
transitioningDelegate
=
pc
vc
.
sureButtonEvent
=
{
[
weak
vc
]
in
vc
?
.
dismiss
(
animated
:
true
)
}
present
(
vc
,
animated
:
true
,
completion
:
nil
)
}
private
func
gotoWebVC
(
_
urlString
:
String
)
{
guard
let
url
=
URL
(
string
:
urlString
)
else
{
printLog
(
"无法打开链接"
)
return
}
if
UIApplication
.
shared
.
canOpenURL
(
url
)
{
UIApplication
.
shared
.
open
(
url
,
options
:
[:],
completionHandler
:
nil
)
}
else
{
// 显示一个提示,告知用户无法打开链接
printLog
(
"无法打开链接"
)
YHHUD
.
flash
(
message
:
"无法打开链接"
)
}
}
private
func
gotoPreview
(
_
urlString
:
String
)
{
YHHUD
.
show
(
.
progress
(
message
:
"加载中..."
))
viewModel
.
getRealUsefulUrl
(
urlString
)
{
[
weak
self
]
resultUrl
in
YHHUD
.
hide
()
guard
let
self
=
self
,
let
url
=
URL
(
string
:
resultUrl
)
else
{
return
}
let
safariViewController
=
SFSafariViewController
(
url
:
url
)
safariViewController
.
dismissButtonStyle
=
.
close
safariViewController
.
modalPresentationStyle
=
.
fullScreen
self
.
present
(
safariViewController
,
animated
:
true
,
completion
:
nil
)
}
}
private
func
showTroubleshootingGuideVC
()
{
let
vc
=
YHVisaRenewalTroubleshootingGuideVC
()
let
pc
=
YHBottomPresentationController
(
presentedViewController
:
vc
,
presenting
:
self
)
pc
.
customRadius
=
16.0
vc
.
transitioningDelegate
=
pc
vc
.
sureButtonEvent
=
{
[
weak
vc
]
in
vc
?
.
dismiss
(
animated
:
true
)
}
present
(
vc
,
animated
:
true
,
completion
:
nil
)
}
private
func
copyToPasteBoard
(
_
text
:
String
,
message
:
String
=
"复制成功"
)
{
let
pasteBoard
=
UIPasteboard
.
general
pasteBoard
.
string
=
text
YHHUD
.
flash
(
message
:
message
)
}
private
func
saveImage
(
_
image
:
UIImage
)
{
// 确保应用有权访问相册
PHPhotoLibrary
.
requestAuthorization
{
status
in
if
status
==
.
authorized
{
// 保存UIImage对象到相册
DispatchQueue
.
main
.
async
{
UIImageWriteToSavedPhotosAlbum
(
image
,
self
,
#selector(
self.image(_:didFinishSavingWithError:contextInfo:)
)
,
nil
)
}
}
else
{
DispatchQueue
.
main
.
async
{
YHHUD
.
flash
(
message
:
"保存失败,请检查系统权限"
)
}
}
}
}
@objc
func
image
(
_
image
:
UIImage
,
didFinishSavingWithError
error
:
Error
?,
contextInfo
:
UnsafeMutableRawPointer
?)
{
// 保存完成后的处理逻辑
if
let
error
=
error
{
printLog
(
"保存照片失败:
\(
error
.
localizedDescription
)
"
)
YHHUD
.
flash
(
message
:
"保存失败"
)
}
else
{
printLog
(
"保存照片成功"
)
YHHUD
.
flash
(
message
:
"保存成功"
)
}
}
}
extension
YHHKVisaRenewalApplicationVC
:
UITableViewDelegate
,
UITableViewDataSource
{
func
numberOfSections
(
in
tableView
:
UITableView
)
->
Int
{
return
datas
.
count
}
func
tableView
(
_
tableView
:
UITableView
,
numberOfRowsInSection
section
:
Int
)
->
Int
{
guard
datas
.
count
>
section
else
{
return
0
}
let
sectionArr
=
datas
[
section
]
return
sectionArr
.
count
}
func
tableView
(
_
tableView
:
UITableView
,
cellForRowAt
indexPath
:
IndexPath
)
->
UITableViewCell
{
guard
datas
.
count
>
indexPath
.
section
else
{
return
UITableViewCell
()
}
let
sectionArr
=
datas
[
indexPath
.
section
]
guard
sectionArr
.
count
>
indexPath
.
row
else
{
return
UITableViewCell
()
}
let
row
=
sectionArr
[
indexPath
.
row
]
switch
row
{
case
let
.
sectionHeader
(
title
,
actionTitle
,
action
):
if
let
cell
=
tableView
.
dequeueReusableCell
(
withIdentifier
:
YHVisaRenewalSectionHeaderCell
.
cellReuseIdentifier
)
as?
YHVisaRenewalSectionHeaderCell
{
cell
.
setupCellInfo
(
title
:
title
,
buttonTitle
:
actionTitle
)
cell
.
rightButtonEvent
=
{
action
?()
}
return
cell
}
case
let
.
tips
(
detail
):
if
let
cell
=
tableView
.
dequeueReusableCell
(
withIdentifier
:
YHVisaRenewalTipsCell
.
cellReuseIdentifier
)
as?
YHVisaRenewalTipsCell
{
cell
.
setupCellInfo
(
detail
:
detail
)
return
cell
}
case
let
.
residenceAction
(
title
,
status
,
cellType
,
action
):
if
let
cell
=
tableView
.
dequeueReusableCell
(
withIdentifier
:
YHVisaRenewalResidenceActionCell
.
cellReuseIdentifier
)
as?
YHVisaRenewalResidenceActionCell
{
cell
.
setupCellInfo
(
title
:
title
,
presenceStatus
:
status
,
cellType
:
cellType
)
cell
.
rightButtonEvent
=
{
action
?()
}
return
cell
}
case
let
.
payMethodUrl
(
title
,
detail
,
url
,
action
):
if
let
cell
=
tableView
.
dequeueReusableCell
(
withIdentifier
:
YHVisaRenewalPayMethodUrlCell
.
cellReuseIdentifier
)
as?
YHVisaRenewalPayMethodUrlCell
{
cell
.
setupCellInfo
(
title
:
title
,
tips
:
detail
,
url
:
url
)
cell
.
urlClicked
=
{
_
in
action
?()
}
return
cell
}
case
let
.
payMethodQrcode
(
title
,
detail
,
qrCodeUrl
):
if
let
cell
=
tableView
.
dequeueReusableCell
(
withIdentifier
:
YHVisaRenewalPayMethodQrcodeCell
.
cellReuseIdentifier
)
as?
YHVisaRenewalPayMethodQrcodeCell
{
cell
.
setupCellInfo
(
title
:
title
,
tips
:
detail
,
qrCode
:
qrCodeUrl
)
cell
.
onLongPressEvent
=
{
[
weak
self
]
image
in
self
?
.
saveImage
(
image
)
}
return
cell
}
case
let
.
subHeader
(
title
,
status
):
if
let
cell
=
tableView
.
dequeueReusableCell
(
withIdentifier
:
YHVisaRenewalPayStatusCell
.
cellReuseIdentifier
)
as?
YHVisaRenewalPayStatusCell
{
cell
.
setupCellInfo
(
title
:
title
,
status
:
status
)
return
cell
}
case
let
.
subInfo
(
title
,
detail
,
actionTitle
,
cellType
,
defaultMargin
,
showBottomLine
,
action
):
if
let
cell
=
tableView
.
dequeueReusableCell
(
withIdentifier
:
YHVisaRenewalPayInfoCell
.
cellReuseIdentifier
)
as?
YHVisaRenewalPayInfoCell
{
cell
.
setupCellInfo
(
title
:
title
,
detail
:
detail
,
rightButtonTitle
:
actionTitle
,
cellType
:
cellType
,
defaultMargin
:
defaultMargin
,
showBottomLine
:
showBottomLine
)
cell
.
rightButtonEvent
=
{
action
?()
}
return
cell
}
case
let
.
subContent
(
title
,
detail
,
actionTitle
,
cellType
,
action
):
if
let
cell
=
tableView
.
dequeueReusableCell
(
withIdentifier
:
YHVisaRenewalPayContentCell
.
cellReuseIdentifier
)
as?
YHVisaRenewalPayContentCell
{
cell
.
setupCellInfo
(
title
:
title
,
detail
:
detail
,
rightButtonTitle
:
actionTitle
,
cellType
:
cellType
)
cell
.
rightButtonEvent
=
{
action
?()
}
return
cell
}
case
let
.
subRemark
(
detail
):
if
let
cell
=
tableView
.
dequeueReusableCell
(
withIdentifier
:
YHVisaRenewalPayTipsCell
.
cellReuseIdentifier
)
as?
YHVisaRenewalPayTipsCell
{
cell
.
setupCellInfo
(
detail
:
detail
)
return
cell
}
case
.
occupyingSpace
:
if
let
cell
=
tableView
.
dequeueReusableCell
(
withIdentifier
:
YHVisaRenewalPayOccupyingSpaceCell
.
cellReuseIdentifier
)
as?
YHVisaRenewalPayOccupyingSpaceCell
{
let
isBottom
=
indexPath
.
row
==
sectionArr
.
count
-
1
cell
.
setupCellInfo
(
isBottom
:
isBottom
)
return
cell
}
}
return
UITableViewCell
()
}
func
tableView
(
_
tableView
:
UITableView
,
heightForRowAt
indexPath
:
IndexPath
)
->
CGFloat
{
return
UITableView
.
automaticDimension
}
func
tableView
(
_
tableView
:
UITableView
,
didSelectRowAt
indexPath
:
IndexPath
)
{
}
private
func
tableView
(
_
tableView
:
UITableView
,
viewForHeaderInSection
section
:
Int
)
->
CGFloat
{
return
16.0
}
private
func
tableView
(
_
tableView
:
UITableView
,
viewForFooterInSection
section
:
Int
)
->
CGFloat
{
return
0.01
}
func
tableView
(
_
tableView
:
UITableView
,
viewForHeaderInSection
section
:
Int
)
->
UIView
?
{
let
view
=
UIView
()
return
view
}
func
tableView
(
_
tableView
:
UITableView
,
viewForFooterInSection
section
:
Int
)
->
UIView
?
{
let
view
=
UIView
()
return
view
}
}
galaxy/galaxy/Classes/Modules/IntelligentService(服务中心)/QMAS(优才)/Resign(续签)/HongKongVisaRenewalPayment(续签在港缴费)/V/YHHKVisaRenewalApplicationHeader.swift
0 → 100644
View file @
f028ccbc
//
// YHHKVisaRenewalApplicationHeader.swift
// galaxy
//
// Created by alexzzw on 2025/3/6.
// Copyright © 2025 https://www.galaxy-immi.com. All rights reserved.
//
import
UIKit
class
YHHKVisaRenewalApplicationHeader
:
UIView
{
private
static
let
ratio
=
436.0
/
686.0
private
static
let
margin
:
CGFloat
=
20
static
var
viewHeight
:
CGFloat
{
return
(
KScreenWidth
-
margin
*
2
)
*
ratio
+
margin
}
private
lazy
var
infoTipsImageView
:
UIImageView
=
{
let
imageView
=
UIImageView
(
image
:
UIImage
(
named
:
"visalPay_tips"
))
imageView
.
contentMode
=
.
scaleAspectFit
return
imageView
}()
override
init
(
frame
:
CGRect
)
{
super
.
init
(
frame
:
frame
)
addSubview
(
infoTipsImageView
)
infoTipsImageView
.
snp
.
makeConstraints
{
make
in
make
.
top
.
equalToSuperview
()
.
offset
(
YHHKVisaRenewalApplicationHeader
.
margin
)
make
.
bottom
.
equalToSuperview
()
make
.
left
.
equalToSuperview
()
.
offset
(
YHHKVisaRenewalApplicationHeader
.
margin
)
make
.
right
.
equalToSuperview
()
.
offset
(
-
YHHKVisaRenewalApplicationHeader
.
margin
)
}
}
required
init
?(
coder
:
NSCoder
)
{
fatalError
(
"init(coder:) has not been implemented"
)
}
}
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