Commit 5f12e6f8 authored by Alex朱枝文's avatar Alex朱枝文

Merge branch '4.25' into 'develop'

4.25

See merge request !8
parents 1d915dfa 9671277b
......@@ -33,7 +33,7 @@ platform :ios do
sc_105_branch = "sc-1.0.5"
main_fix = "main-fix"
jiaofei = "jiaofei"
plan = "plan"
plan = "4.25"
#打包正使用的分支
myPack_branch = plan
......
......@@ -1267,6 +1267,7 @@
04D8FFB02D9A3CF200703C75 /* YHPlanShareImageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04D8FFAF2D9A3CF200703C75 /* YHPlanShareImageCell.swift */; };
04D8FFB22DA5007A00703C75 /* YHPictureBrowserViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04D8FFB12DA5007A00703C75 /* YHPictureBrowserViewController.swift */; };
04D8FFB42DA61DA300703C75 /* YHPlanTestViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04D8FFB32DA61DA200703C75 /* YHPlanTestViewController.swift */; };
04D8FFB62DAE489A00703C75 /* YHVisitHKAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04D8FFB52DAE489A00703C75 /* YHVisitHKAlertView.swift */; };
04E4CF3E2D5C6D32004D4013 /* YHCountryMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04E4CF3D2D5C6D32004D4013 /* YHCountryMessageView.swift */; };
04E4CF402D5C83AE004D4013 /* YHSelectPhoneCountryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04E4CF3F2D5C83AE004D4013 /* YHSelectPhoneCountryViewController.swift */; };
04E507D62D6EE856005F758B /* YHUserLevelAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04E507D52D6EE856005F758B /* YHUserLevelAlertView.swift */; };
......@@ -2576,6 +2577,7 @@
04D8FFAF2D9A3CF200703C75 /* YHPlanShareImageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHPlanShareImageCell.swift; sourceTree = "<group>"; };
04D8FFB12DA5007A00703C75 /* YHPictureBrowserViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHPictureBrowserViewController.swift; sourceTree = "<group>"; };
04D8FFB32DA61DA200703C75 /* YHPlanTestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHPlanTestViewController.swift; sourceTree = "<group>"; };
04D8FFB52DAE489A00703C75 /* YHVisitHKAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHVisitHKAlertView.swift; sourceTree = "<group>"; };
04E4CF3D2D5C6D32004D4013 /* YHCountryMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHCountryMessageView.swift; sourceTree = "<group>"; };
04E4CF3F2D5C83AE004D4013 /* YHSelectPhoneCountryViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHSelectPhoneCountryViewController.swift; sourceTree = "<group>"; };
04E507D52D6EE856005F758B /* YHUserLevelAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHUserLevelAlertView.swift; sourceTree = "<group>"; };
......@@ -3627,6 +3629,7 @@
045C0B882D12CA5E00BD2DC0 /* YHServiceItemCell.swift */,
045C0B892D12CA5E00BD2DC0 /* YHServiceSelectAlertView.swift */,
045C0B8A2D12CA5E00BD2DC0 /* YHWaitAppointMembersCell.swift */,
04D8FFB52DAE489A00703C75 /* YHVisitHKAlertView.swift */,
);
path = V;
sourceTree = "<group>";
......@@ -7208,6 +7211,7 @@
045C0FC52D12CA5F00BD2DC0 /* YHMainInformationTableViewCell.swift in Sources */,
045C0FC62D12CA5F00BD2DC0 /* YHApplyActivityResultViewController.swift in Sources */,
045C0FC72D12CA5F00BD2DC0 /* YhOverlayView.swift in Sources */,
04D8FFB62DAE489A00703C75 /* YHVisitHKAlertView.swift in Sources */,
04AE20372D13B7CF00891D24 /* YHGCChildInfoContainerVC.swift in Sources */,
045C0FC82D12CA5F00BD2DC0 /* YHCollectionModel.swift in Sources */,
045C0FC92D12CA5F00BD2DC0 /* YHOtherLanguageSelecteView.swift in Sources */,
......@@ -8490,7 +8494,7 @@
CODE_SIGN_ENTITLEMENTS = galaxy/galaxyTestEnv.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 3;
CURRENT_PROJECT_VERSION = 4;
DEVELOPMENT_TEAM = RXHYW88XR7;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
FRAMEWORK_SEARCH_PATHS = (
......@@ -8517,10 +8521,12 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 2.2.0;
MARKETING_VERSION = 2.2.1;
PRODUCT_BUNDLE_IDENTIFIER = com.intelligence.galaxy;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = TESTENV;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/$(TARGET_NAME)/Res/galaxy-Bridge-Header.h";
......@@ -8636,7 +8642,7 @@
CODE_SIGN_ENTITLEMENTS = galaxy/galaxy.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 3;
CURRENT_PROJECT_VERSION = 4;
DEVELOPMENT_TEAM = RXHYW88XR7;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
FRAMEWORK_SEARCH_PATHS = (
......@@ -8663,10 +8669,12 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 2.2.0;
MARKETING_VERSION = 2.2.1;
PRODUCT_BUNDLE_IDENTIFIER = com.intelligence.galaxy;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = UATENV;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/$(TARGET_NAME)/Res/galaxy-Bridge-Header.h";
......@@ -8844,7 +8852,7 @@
CODE_SIGN_ENTITLEMENTS = galaxy/galaxyDebug.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 3;
CURRENT_PROJECT_VERSION = 4;
DEVELOPMENT_TEAM = RXHYW88XR7;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
FRAMEWORK_SEARCH_PATHS = (
......@@ -8871,10 +8879,12 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 2.2.0;
MARKETING_VERSION = 2.2.1;
PRODUCT_BUNDLE_IDENTIFIER = com.intelligence.galaxy;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/$(TARGET_NAME)/Res/galaxy-Bridge-Header.h";
SWIFT_VERSION = 5.0;
......@@ -8892,7 +8902,7 @@
CODE_SIGN_ENTITLEMENTS = galaxy/galaxy.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 3;
CURRENT_PROJECT_VERSION = 4;
DEVELOPMENT_TEAM = RXHYW88XR7;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
FRAMEWORK_SEARCH_PATHS = (
......@@ -8919,10 +8929,12 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 2.2.0;
MARKETING_VERSION = 2.2.1;
PRODUCT_BUNDLE_IDENTIFIER = com.intelligence.galaxy;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/$(TARGET_NAME)/Res/galaxy-Bridge-Header.h";
SWIFT_VERSION = 5.0;
......
......@@ -43,6 +43,24 @@ class YHTabBarViewController: ESTabBarController {
shareView.frame = self.tabBar.frame
view.addSubview(shareView)
/*
if UIDevice.current.userInterfaceIdiom == .pad {
if #available(iOS 18.0, *) {
traitOverrides.horizontalSizeClass = .compact
// 2. 遍历子视图,找到可能是 _UITabContainerView 的视图
for subview in view.subviews {
let className = String(describing: type(of: subview))
if className.contains("TabContainer") { // 模糊匹配类名
subview.isHidden = true // 或其他操作
break
}
}
view.addSubview(tabBar)
}
}
*/
shareView.block = { tag in
if let model = self.shareModel {
......
......@@ -75,18 +75,18 @@ class YHHKEventCenterViewController: YHBaseViewController {
gk_navTitle = "香港办事"
gk_navBackgroundColor = .white
gk_navBarAlpha = 1.0
homeViewModel.getHKEvent {[weak self] _, _ in
guard let self = self else { return }
homeViewModel.getHKEvent { _, _ in
// guard let self = self else { return }
self.hkList = self.homeViewModel.hkList ?? []
self.arrItemTitles.removeAll()
for item in self.hkList {
self.arrItemTitles.append(item.tag)
let vc = YHHKEventWebViewController()
vc.model = item
arrItemVCs.append(vc)
self.arrItemVCs.append(vc)
}
self.segmentedDataSource.titles = arrItemTitles
self.segmentedView.dataSource = segmentedDataSource
self.segmentedDataSource.titles = self.arrItemTitles
self.segmentedView.dataSource = self.segmentedDataSource
self.segmentedView.reloadData()
}
}
......@@ -140,6 +140,15 @@ class YHHKEventCenterViewController: YHBaseViewController {
}
}
task.resume()
} else if model.tag.contains("香港行程") {
guard let urlString = model.list.first else {
return
}
var currentUrl = urlString
if let orderID = UserDefaults.standard.value(forKey: "orderIdForPreview") as? Int {
currentUrl = urlString + "?paramO=\(orderID)" + "&param=" + YHLoginManager.shared.h5Token
}
YHShareManager.shared.sendLinkContent("一图看清香港办事", "", UIImage(named: "AppIcon") ?? UIImage(), link: currentUrl)
} else {
guard let urlString = model.list.first else {
return
......@@ -150,6 +159,10 @@ class YHHKEventCenterViewController: YHBaseViewController {
YHOneKeyLoginManager.shared.oneKeyLogin()
}
}
deinit {
}
}
extension YHHKEventCenterViewController: JXSegmentedViewDelegate {
......
......@@ -11,8 +11,8 @@ import Photos
import WebKit
import JXSegmentedView
class YHHKEventWebViewController: YHBaseViewController {
var webview = WKWebView()
class YHHKEventWebViewController: YHH5WebViewVC {
// var webview = WKWebView()
var model: YHHKEventModel = YHHKEventModel()
override func viewDidLoad() {
super.viewDidLoad()
......@@ -33,11 +33,17 @@ class YHHKEventWebViewController: YHBaseViewController {
extension YHHKEventWebViewController {
func loadData() {
guard let urlString = model.list.first else { return }
if let url = URL(string: urlString) {
var currentUrl = urlString
if model.tag.contains("香港行程") {
if let orderID = UserDefaults.standard.value(forKey: "orderIdForPreview") as? Int {
currentUrl = urlString + "?paramO=\(orderID)" + "&param=" + YHLoginManager.shared.h5Token
}
}
if let url = URL(string: currentUrl) {
let request = URLRequest(url: url)
webview.load(request)
} else {
let tmpUrl = YHURLEncodeHelper.urlEncodedString(urlString)
let tmpUrl = YHURLEncodeHelper.urlEncodedString(currentUrl)
if let url = URL(string: tmpUrl) {
let request = URLRequest(url: url)
webview.load(request)
......@@ -60,13 +66,15 @@ extension YHHKEventWebViewController {
func setupUI() {
gk_navigationBar.isHidden = true
gk_navBarAlpha = 0.0
gk_navLineHidden = false
gk_navBackgroundColor = .white
// 创建wkwebview
webview = WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - 0))
webview.navigationDelegate = self
// 添加wkwebview
view.addSubview(webview)
// webview = WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - 0))
// webview.navigationDelegate = self
// // 添加wkwebview
// view.addSubview(webview)
webview.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - 0)
view.addSubview(bottomViewForSavePic)
bottomViewForSavePic.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
......@@ -76,10 +84,12 @@ extension YHHKEventWebViewController {
self.saveImageToPhotoLib()
}
}
}
extension YHHKEventWebViewController: WKNavigationDelegate {
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
extension YHHKEventWebViewController {
override func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
super.webView(webView, didFinish: navigation)
if model.tag.contains("日历") {
bottomViewForSavePic.isHidden = false
}
......
......@@ -34,7 +34,6 @@ class YHHomeWebViewController: YHBaseViewController, WKUIDelegate, WKNavigationD
config.mediaTypesRequiringUserActionForPlayback = []
let webview = DWKWebView(frame: .zero, configuration: config)
webview.scrollView.contentInsetAdjustmentBehavior = .never
webview.navigationDelegate = self
// webview.scrollView.delegate = self
webview.setDebugMode(false)
......@@ -135,7 +134,6 @@ class YHHomeWebViewController: YHBaseViewController, WKUIDelegate, WKNavigationD
// webview = DWKWebView(frame: CGRect(x: 0, y: statusHeight + navHeight!, width: self.view.frame.width, height: self.view.frame.height - statusHeight - navHeight! - 59 - k_Height_safeAreaInsetsBottom()))
webview.navigationDelegate = self
webview.setDebugMode(false)
webview.scrollView.contentInsetAdjustmentBehavior = .never
api.delegate = self
......
......@@ -398,8 +398,12 @@ extension YHHomePageViewModel {
}
func getHKEvent(param: [String: Int] = [:], callBackBlock: @escaping (_ success: Bool, _ error: YHErrorModel?) -> Void) {
var params = param
if let orderID = UserDefaults.standard.value(forKey: "orderIdForPreview") as? Int {
params = ["order_id": orderID]
}
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Common.hklistApi
_ = YHNetRequest.getRequest(url: strUrl, params: param) { [weak self] json, _ in
_ = YHNetRequest.getRequest(url: strUrl, params: params) { [weak self] json, _ in
guard let self = self else { return }
// 1. json字符串 转 对象
if json.code == 200 {
......
......@@ -287,7 +287,7 @@ class YHSelectLookTableViewCell: UITableViewCell {
}
let a: ASAttributedString = .init("¥", .font(UIFont(name: "D-DIN-PRO-Bold", size: 14) ?? UIFont()), .foreground(UIColor.mainTextColor))
let b: ASAttributedString = .init("\(dataSource.linePrice.formattedPrice()) ", .font(UIFont(name: "D-DIN-PRO-Bold", size: 20) ?? UIFont()), .foreground(UIColor.mainTextColor))
let c: ASAttributedString = .init(\(dataSource.price.formattedPrice())", .font(UIFont(name: "D-DIN-PRO-Bold", size: 14) ?? UIFont()), .foreground(UIColor(hex: 0x8993a2)), .strikethrough(.single))
let c: ASAttributedString = .init(\(dataSource.price.formattedPrice())", .font(UIFont(name: "D-DIN-PRO-Medium", size: 14) ?? UIFont()), .foreground(UIColor(hex: 0x8993a2)), .strikethrough(.single))
if dataSource.linePrice == dataSource.price {
self.subTitleLabel.attributed.text = a + b
} else {
......
......@@ -791,6 +791,12 @@ extension YHCertificateAppointViewController {
groupModel.isNeedCheck = true
isOK = false
}
// 到访香港体验中心 未选
if groupModel.isWillVisitHkGalaxyBay == 0 {
groupModel.isNeedCheck = true
isOK = false
}
}
}
if !isOK { // 检测各批次是否有日期或办证地点未选择
......@@ -826,6 +832,7 @@ extension YHCertificateAppointViewController {
let batch: [String: Any] = ["start_time": start_time,
"end_time": end_time,
"migration_office": model.hkPlace.name,
"is_will_visit_hk_galaxy_bay": model.isWillVisitHkGalaxyBay,
"users": users]
batchs.append(batch)
}
......
......@@ -21,7 +21,7 @@ class YHReAppointViewController: YHBaseViewController {
lazy var tableView: UITableView = {
let tableView = UITableView(frame: .zero, style: .grouped)
tableView.estimatedSectionHeaderHeight = 16.0
tableView.estimatedSectionHeaderHeight = 0.01
tableView.estimatedSectionFooterHeight = 0.01
tableView.contentInsetAdjustmentBehavior = .never
tableView.showsVerticalScrollIndicator = false
......@@ -217,6 +217,12 @@ extension YHReAppointViewController {
groupModel.isNeedCheck = true
isOK = false
}
// 到访香港体验中心 未选
if groupModel.isWillVisitHkGalaxyBay == 0 {
groupModel.isNeedCheck = true
isOK = false
}
}
}
if !isOK { // 检测各批次是否有日期或办证地点未选择
......@@ -252,6 +258,7 @@ extension YHReAppointViewController {
let batch: [String: Any] = ["start_time": start_time,
"end_time": end_time,
"migration_office": model.hkPlace.name,
"is_will_visit_hk_galaxy_bay": model.isWillVisitHkGalaxyBay,
"users": users]
batchs.append(batch)
}
......
......@@ -41,7 +41,8 @@ class YHAppointMemberGroupModel: SmartCodable {
// 此处是私链URL数组
var receipts: [String] = []
var submitTime: String = ""
var isWillVisitHkGalaxyBay: Int = 0 // 0没有选择1是2否
// 自定义
// 私链反馈回执对应的公链
var publicReceipts: [String] = []
......@@ -65,6 +66,7 @@ class YHAppointMemberGroupModel: SmartCodable {
case goTime = "go_time"
case receipts = "receipts"
case submitTime = "submit_time"
case isWillVisitHkGalaxyBay = "is_will_visit_hk_galaxy_bay"
}
required init() {
......
......@@ -71,4 +71,8 @@ class YHSelectGroupMemberModel {
// 是否显示重新预约人员名单
var isShowReAppointView: Bool = false
//
var isWillVisitHkGalaxyBay: Int = 0 // 0没有选择1是2否
}
......@@ -12,6 +12,7 @@ enum YHGrabItemViewType: Int {
case info
case grab
case files
case visit
}
class YHGrabItem {
......@@ -97,9 +98,14 @@ class YHGrabNumberInfoItemView: UIView {
if item.files.count%4 != 0 {
rowCount += 1
}
collectionView.snp.remakeConstraints { make in
make.left.right.bottom.equalTo(0)
make.top.equalTo(detailLabel.snp.bottom).offset(16)
if item.type == .visit {
make.top.equalTo(titleLabel.snp.bottom).offset(16)
} else {
make.top.equalTo(detailLabel.snp.bottom).offset(16)
}
if item.type == .files {
make.height.equalTo((fileWidth+16.0)*Double(rowCount))
......@@ -122,6 +128,7 @@ class YHGrabNumberInfoItemView: UIView {
lazy var titleLabel: UILabel = {
let label = UILabel()
label.numberOfLines = 0
label.font = UIFont.PFSC_R(ofSize: 14)
label.textColor = .mainTextColor(alpha: 0.5)
return label
......
......@@ -41,8 +41,10 @@ class YHGrabingNumberListCell: UITableViewCell {
if group.wantMinTime == group.wantMaxTime {
wantTimeText = group.wantMinTime
}
let visitOption = group.isWillVisitHkGalaxyBay == 1 ? "是" : "否"
let items2 = [YHGrabItem(type: .info, title: "期望赴港时间:", detail: wantTimeText, isSingleLine: true),
YHGrabItem(type: .info, title: "期望香港办证点:", detail: group.wantImmigrationOffice, isSingleLine: false)]
YHGrabItem(type: .info, title: "期望香港办证点:", detail: group.wantImmigrationOffice, isSingleLine: false),
YHGrabItem(type: .visit, title: "到访香港体验中心:香港华润大厦 (湾仔入境处旁)", detail: visitOption, isSingleLine: false)]
listView.intentionInfoView.updateItems(items2)
......
......@@ -34,8 +34,10 @@ class YHHaveGrabbedNumberListCell: UITableViewCell {
if group.wantMinTime == group.wantMaxTime {
wantTimeText = group.wantMinTime
}
let visitOption = group.isWillVisitHkGalaxyBay == 1 ? "是" : "否"
let items2 = [YHGrabItem(type: .info, title: "期望赴港时间:", detail: wantTimeText, isSingleLine: true),
YHGrabItem(type: .info, title: "期望香港办证点:", detail: group.wantImmigrationOffice, isSingleLine: false)]
YHGrabItem(type: .info, title: "期望香港办证点:", detail: group.wantImmigrationOffice, isSingleLine: false),
YHGrabItem(type: .visit, title: "到访香港体验中心:香港华润大厦 (湾仔入境处旁)", detail: visitOption, isSingleLine: false)]
listView.intentionInfoView.updateItems(items2)
listContainView.addSubview(listView)
......
......@@ -55,6 +55,21 @@ class YHInfoItemOptionView: UIView {
}
}
var tips: String = "" {
didSet {
let isShowTips = !tips.isEmpty
tipsLabel.text = tips
tipsLabel.snp.updateConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(titleView.snp.bottom).offset(isShowTips ? 5.0 : 0.0)
make.height.equalTo(isShowTips ? 17.0 : 0.0)
make.bottom.equalTo(-titleGap)
}
self.setNeedsLayout()
self.layoutIfNeeded()
}
}
var selectIndex: Int = -1 {
didSet {
for (index, _) in options.enumerated() {
......@@ -69,8 +84,12 @@ class YHInfoItemOptionView: UIView {
didSet {
titleView.snp.updateConstraints { make in
make.top.equalTo(titleGap)
}
tipsLabel.snp.updateConstraints { make in
make.bottom.equalTo(-titleGap)
}
self.setNeedsLayout()
self.layoutIfNeeded()
}
......@@ -94,6 +113,14 @@ class YHInfoItemOptionView: UIView {
return label
}()
private lazy var tipsLabel: UILabel = {
let label = UILabel()
label.numberOfLines = 0
label.font = UIFont.PFSC_R(ofSize: 12)
label.textColor = .failColor
return label
}()
func createOptionButton() -> UIButton {
let btn = UIButton()
......@@ -139,6 +166,8 @@ class YHInfoItemOptionView: UIView {
func createUI() {
self.addSubview(titleView)
self.addSubview(tipsLabel)
titleView.addSubview(titleLabel)
let firstBtn = self.createOptionButton()
......@@ -165,10 +194,16 @@ class YHInfoItemOptionView: UIView {
titleView.snp.makeConstraints { make in
make.left.equalTo(0)
make.top.equalTo(titleGap)
make.bottom.equalTo(-titleGap)
make.width.equalTo(titleMaxWidth)
}
tipsLabel.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(titleView.snp.bottom).offset(0)
make.height.equalTo(0)
make.bottom.equalTo(-titleGap)
}
titleLabel.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
......
......@@ -25,6 +25,24 @@ class YHSelectApplicantGroupCell: UITableViewCell {
// param 选中的用户 是否选中 选中的用户是第几批
var selectBlock: ((_ member: YHHKMemberModel, _ isSelect: Bool, _ groupIndex: Int) -> Void)?
var isShowVisitOption: Bool = true {
didSet {
visitOptionView.isHidden = !isShowVisitOption
visitOptionView.snp.remakeConstraints { make in
make.top.equalTo(locationSelectView.snp.bottom).offset(0)
make.left.equalTo(18)
make.right.equalTo(-18)
if !isShowVisitOption {
make.height.equalTo(0)
}
make.bottom.equalToSuperview()
}
self.setNeedsLayout()
self.layoutIfNeeded()
}
}
var isShowSelectUserView: Bool = true {
didSet {
......@@ -99,6 +117,7 @@ class YHSelectApplicantGroupCell: UITableViewCell {
let view = UIView()
view.backgroundColor = .white
view.layer.cornerRadius = kCornerRadius6
view.clipsToBounds = true
return view
}()
......@@ -288,6 +307,34 @@ class YHSelectApplicantGroupCell: UITableViewCell {
return label
}()
lazy var visitOptionView: YHInfoItemOptionView = {
let view = YHInfoItemOptionView(frame: .zero)
view.title = "到访香港体验中心:香港华润大厦 (湾仔入境处旁)"
view.options = ["是", "否"]
view.selectIndex = 0
view.selectBlock = { [weak self] index in
guard let self = self else { return }
guard let model = dataModel?.model else { return }
if index == 1 { // 点击否
refreshBlock?()
let view = YHVisitHKAlertView.alertView()
view.confirmBlock = { [weak self] isSure in
guard let self = self else { return }
model.isWillVisitHkGalaxyBay = (isSure ? 1 : 2)
refreshBlock?()
}
view.show()
} else { // 点击是
model.isWillVisitHkGalaxyBay = (index == 0 ? 1 : 2)
refreshBlock?()
}
}
return view
}()
required init?(coder: NSCoder) {
super.init(coder: coder)
}
......@@ -310,6 +357,7 @@ class YHSelectApplicantGroupCell: UITableViewCell {
whiteContentView.addSubview(optionsView)
whiteContentView.addSubview(timeSelectView)
whiteContentView.addSubview(locationSelectView)
whiteContentView.addSubview(visitOptionView)
whiteContentView.snp.makeConstraints { make in
make.top.equalTo(16)
......@@ -360,6 +408,12 @@ class YHSelectApplicantGroupCell: UITableViewCell {
make.top.equalTo(timeSelectView.snp.bottom).offset(0)
make.left.equalTo(18)
make.right.equalTo(-18)
}
visitOptionView.snp.makeConstraints { make in
make.top.equalTo(locationSelectView.snp.bottom).offset(0)
make.left.equalTo(18)
make.right.equalTo(-18)
make.bottom.equalToSuperview()
}
}
......@@ -473,6 +527,14 @@ private extension YHSelectApplicantGroupCell {
// 办证地点是否显示红色错误提示
timeSelectView.isNeedShowErrorTips = (model.isNeedCheck && !isSelectDate)
var selectIndex = -1
if model.isWillVisitHkGalaxyBay == 1 { // 是
selectIndex = 0
} else if model.isWillVisitHkGalaxyBay == 2 { // 否
selectIndex = 1
}
visitOptionView.selectIndex = selectIndex
visitOptionView.tips = (model.isNeedCheck && selectIndex == -1) ? "请选择" : ""
self.setNeedsLayout()
self.layoutIfNeeded()
}
......
//
// YHVisitHKAlertView.swift
// galaxy
//
// Created by Dufet on 2025/4/15.
// Copyright © 2025 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import AttributedString
class YHVisitHKAlertView: UIView {
var confirmBlock: ((Bool) -> Void)?
lazy var blackMaskView: UIView = {
let view = UIView()
view.backgroundColor = UIColor.init(hex: 0x000000, alpha: 0.68)
return view
}()
lazy var whiteContentView: UIView = {
let view = UIView()
view.backgroundColor = .white
view.layer.cornerRadius = kCornerRadius6
return view
}()
lazy var titleLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.font = UIFont.PFSC_M(ofSize: 17)
label.textColor = UIColor.mainTextColor
label.text = "温馨提示"
return label
}()
lazy var lineView: UIView = {
let view = UIView()
view.backgroundColor = .separatorColor
return view
}()
lazy var messageLabel: UILabel = {
let label = UILabel()
label.numberOfLines = 0
let a = ASAttributedString.init("银河香港体验中心距离湾仔入境处", .font(UIFont.PFSC_R(ofSize: 15)), .foreground(UIColor.mainTextColor70))
let b = ASAttributedString.init("步行5分钟", .font(UIFont.PFSC_B(ofSize: 15)), .foreground(UIColor.brandMainColor))
let c = ASAttributedString.init(",办证前或办证结束,您可", .font(UIFont.PFSC_R(ofSize: 15)), .foreground(UIColor.mainTextColor70))
let d = ASAttributedString.init("预留30分钟-60分钟", .font(UIFont.PFSC_B(ofSize: 15)), .foreground(UIColor.brandMainColor))
let e = ASAttributedString.init("时间,我们将为您详细规划续签方案,欢迎您莅临香港体验中心!", .font(UIFont.PFSC_R(ofSize: 15)), .foreground(UIColor.mainTextColor70))
label.attributed.text = a+b+c+d+e
return label
}()
lazy var confirmBtn: UIButton = {
let button = UIButton(type: .custom)
button.backgroundColor = UIColor.brandMainColor
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 14)
button.setTitle("到访".local, for: .normal)
button.setTitleColor(UIColor.white, for: .normal)
button.layer.cornerRadius = kCornerRadius3
button.addTarget(self, action: #selector(agree), for: .touchUpInside)
return button
}()
lazy var unconfirmBtn: UIButton = {
let button = UIButton(type: .custom)
button.backgroundColor = UIColor.white
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 14)
button.setTitle("不到访".local, for: .normal)
button.setTitleColor( UIColor.brandMainColor, for: .normal)
button.layer.cornerRadius = kCornerRadius3
button.layer.borderWidth = 1
button.layer.borderColor = UIColor.brandMainColor.cgColor
button.addTarget(self, action: #selector(disagree), for: .touchUpInside)
return button
}()
static func alertView() -> YHVisitHKAlertView {
let view = YHVisitHKAlertView(frame: UIScreen.main.bounds)
return view
}
func show() {
UIApplication.shared.yhKeyWindow()?.addSubview(self)
}
func dismiss() {
self.removeFromSuperview()
}
@objc func agree() {
confirmBlock?(true)
dismiss()
}
@objc func disagree() {
confirmBlock?(false)
dismiss()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(frame: CGRect) {
super.init(frame: frame)
createUI()
}
func createUI() {
self.addSubview(blackMaskView)
self.addSubview(whiteContentView)
whiteContentView.addSubview(titleLabel)
whiteContentView.addSubview(lineView)
whiteContentView.addSubview(messageLabel)
whiteContentView.addSubview(unconfirmBtn)
whiteContentView.addSubview(confirmBtn)
blackMaskView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
whiteContentView.snp.makeConstraints { make in
make.left.equalTo(38)
make.right.equalTo(-38)
make.centerY.equalToSuperview()
}
titleLabel.snp.makeConstraints { make in
make.top.equalTo(16)
make.height.equalTo(24)
make.left.equalTo(21)
make.right.equalTo(-21)
}
lineView.snp.makeConstraints { make in
make.left.right.equalTo(0)
make.height.equalTo(0.5)
make.top.equalTo(titleLabel.snp.bottom).offset(12)
}
messageLabel.snp.makeConstraints { make in
make.left.equalTo(21)
make.right.equalTo(-21)
make.top.equalTo(lineView.snp.bottom).offset(16)
}
unconfirmBtn.snp.makeConstraints { make in
make.left.equalTo(21)
make.top.equalTo(messageLabel.snp.bottom).offset(21)
make.height.equalTo(45)
make.width.equalTo(confirmBtn.snp.width)
make.right.equalTo(confirmBtn.snp.left).offset(-10)
make.bottom.equalTo(-16)
}
confirmBtn.snp.makeConstraints { make in
make.right.equalTo(-21)
make.centerY.equalTo(unconfirmBtn)
make.height.equalTo(45)
}
}
}
......@@ -14,7 +14,6 @@ class YHSignatureWebViewController: YHBaseViewController {
var titleName: String = ""
lazy var webView: WKWebView = {
let webView = WKWebView(frame: CGRect(x: 0, y: k_Height_NavigationtBarAndStatuBar, width: KScreenWidth, height: KScreenHeight-k_Height_NavigationtBarAndStatuBar), configuration: self.configuaration)
webView.navigationDelegate = self
return webView
}()
......@@ -53,6 +52,7 @@ class YHSignatureWebViewController: YHBaseViewController {
func createUI() {
gk_navTitle = titleName
webView.navigationDelegate = self
webView.addSubview(progressBar)
self.view.addSubview(webView)
// 监听网页加载的进度
......
......@@ -10,6 +10,7 @@ import UIKit
@preconcurrency import WebKit
import dsBridge
import Photos
import Kingfisher
/*
快速测评 及 其他与H5交互的界面
......@@ -36,22 +37,22 @@ class YHH5WebViewVC: YHBaseViewController, WKUIDelegate, WKNavigationDelegate {
config.allowsInlineMediaPlayback = true
/// 开启让自动播放
config.mediaTypesRequiringUserActionForPlayback = []
let webview = DWKWebView(frame: .zero, configuration: config)
webview.scrollView.contentInsetAdjustmentBehavior = .never
webview.navigationDelegate = self
webview.scrollView.delegate = self
let view = DWKWebView(frame: .zero, configuration: config)
view.scrollView.contentInsetAdjustmentBehavior = .never
// view.navigationDelegate = self
// view.scrollView.delegate = self
webview.setDebugMode(false)
view.setDebugMode(false)
// webview.uiDelegate = self
return webview
return view
}()
lazy var progBar: UIProgressView = {
progBar = UIProgressView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 30))
progBar.progress = 0.0
progBar.tintColor = UIColor.brandMainColor
return progBar
let view = UIProgressView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 30))
view.progress = 0.0
view.tintColor = UIColor.brandMainColor
return view
}()
var url = ""
......@@ -82,14 +83,14 @@ class YHH5WebViewVC: YHBaseViewController, WKUIDelegate, WKNavigationDelegate {
name: UIResponder.keyboardWillHideNotification, object: nil)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
reloadUI()
}
deinit {
webview.removeObserver(self, forKeyPath: "estimatedProgress")
webview.removeObserver(self, forKeyPath: "title")
if webview.observationInfo != nil {
webview.removeObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress))
webview.removeObserver(self, forKeyPath: #keyPath(WKWebView.title))
}
// webview.removeObserver(self, forKeyPath: "estimatedProgress")
// webview.removeObserver(self, forKeyPath: "title")
webview.navigationDelegate = nil
NotificationCenter.default.removeObserver(self)
}
......@@ -306,7 +307,8 @@ private extension YHH5WebViewVC {
}
gk_navigationBar.isHidden = isHideNavigationBar
webview.navigationDelegate = self
webview.scrollView.delegate = self
NotificationCenter.default.addObserver(self, selector: #selector(updateNetWorkUI), name: .reachabilityChanged, object: nil)
view.backgroundColor = .white
......@@ -480,6 +482,7 @@ private extension YHH5WebViewVC {
let dict = ["height": "\(0)"]
webview.callHandler("onKeyboardHeightChanged", arguments: [dict])
}
}
// MARK: - WKNavigationDelegate
......@@ -742,15 +745,28 @@ extension YHH5WebViewVC {
}
func saveLocalPictureSyn(_ picUrl: String) {
let imageView = UIImageView()
imageView.kf.setImage(with: URL(string: picUrl)) { result in
guard let url = URL(string: picUrl) else {
YHHUD.flash(message: "保存失败")
return
}
KingfisherManager.shared.retrieveImage(with: url) { result in
switch result {
case .success(let value):
self.saveImage(value.image)
case .success(let imageLoadingResult):
self.saveImage(imageLoadingResult.image)
case .failure:
YHHUD.flash(message: "保存失败")
}
}
// let imageView = UIImageView()
// imageView.kf.setImage(with: URL(string: picUrl)) { result in
// switch result {
// case .success(let value):
// self.saveImage(value.image)
// case .failure:
// YHHUD.flash(message: "保存失败")
// }
// }
}
func savePicToLocal(_ data: String) {
......
......@@ -262,10 +262,12 @@ class YHLiveShopViewCell: UITableViewCell {
}
titleLabel.text = dataSource.name
messageLabel.text = dataSource.description
let a: ASAttributedString = .init("¥", .font(UIFont.PFSC_R(ofSize: 14)), .foreground(UIColor.mainTextColor))
let b: ASAttributedString = .init("\(dataSource.linePrice)", .font(UIFont(name: "DINAlternate-Bold", size: 20) ?? UIFont.PFSC_R(ofSize: 20)), .foreground(UIColor.mainTextColor))
let a: ASAttributedString = .init("¥", .font(UIFont(name: "D-DIN-PRO-Bold", size: 14) ?? UIFont.PFSC_R(ofSize: 14)), .foreground(UIColor.mainTextColor))
let linePrice = dataSource.linePrice.formattedPrice()
let b: ASAttributedString = .init("\(linePrice)", .font(UIFont(name: "D-DIN-PRO-Bold", size: 20) ?? UIFont.PFSC_R(ofSize: 20)), .foreground(UIColor.mainTextColor))
priceLabel.attributed.text = a + b
let c: ASAttributedString = .init(\(dataSource.price)", .font(UIFont.PFSC_R(ofSize: 14)), .foreground(UIColor(hex: 0x8993a2)), .strikethrough(.single))
let price = dataSource.price.formattedPrice()
let c: ASAttributedString = .init(\(price)", .font(UIFont(name: "D-DIN-PRO-Medium", size: 14) ?? UIFont.PFSC_R(ofSize: 14)), .foreground(UIColor(hex: 0x8993a2)), .strikethrough(.single))
subPriceLabel.attributed.text = c
flagLabel.text = "\(dataSource.flag)"
subPriceLabel.isHidden = dataSource.linePrice == dataSource.price
......
......@@ -5,6 +5,8 @@
// Created by davidhuangA on 2024/8/6.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import Kingfisher
import UIKit
import Photos
import PhotosUI
......@@ -238,15 +240,27 @@ private extension YHLongtapPictureSheetView {
}
func saveLocalPictureSyn(_ picUrl: String) {
let imageView = UIImageView()
imageView.kf.setImage(with: URL(string: picUrl)) { result in
guard let url = URL(string: picUrl) else {
YHHUD.flash(message: "保存失败")
return
}
KingfisherManager.shared.retrieveImage(with: url) { result in
switch result {
case .success(let value):
self.saveImage(value.image)
case .success(let imageLoadingResult):
self.saveImage(imageLoadingResult.image)
case .failure:
YHHUD.flash(message: "保存失败")
}
}
// let imageView = UIImageView()
// imageView.kf.setImage(with: URL(string: picUrl)) { result in
// switch result {
// case .success(let value):
// self.saveImage(value.image)
// case .failure:
// YHHUD.flash(message: "保存失败")
// }
// }
}
func saveImage(_ image: UIImage) {
......
......@@ -6,6 +6,7 @@
// Copyright © 2025 https://www.galaxy-immi.com. All rights reserved.
//
import Kingfisher
import UIKit
import JXPhotoBrowser
import Photos
......@@ -68,15 +69,28 @@ class YHPictureBrowserViewController: JXPhotoBrowser {
}
func saveLocalPictureSyn(_ picUrl: String) {
let imageView = UIImageView()
imageView.kf.setImage(with: URL(string: picUrl)) { result in
guard let url = URL(string: picUrl) else {
YHHUD.flash(message: "保存失败")
return
}
KingfisherManager.shared.retrieveImage(with: url) { result in
switch result {
case .success(let value):
self.saveImage(value.image)
case .success(let imageLoadingResult):
self.saveImage(imageLoadingResult.image)
case .failure:
YHHUD.flash(message: "保存失败")
}
}
// let imageView = UIImageView()
// imageView.kf.setImage(with: URL(string: picUrl)) { result in
// switch result {
// case .success(let value):
// self.saveImage(value.image)
// case .failure:
// YHHUD.flash(message: "保存失败")
// }
// }
}
func saveImage(_ image: UIImage) {
......
......@@ -13,7 +13,7 @@ class YHMakePlanViewController: YHBaseViewController {
let viewModel = YHMakePlanViewModel()
lazy var headView: YHMakePlanHeadView = {
let view = YHMakePlanHeadView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 333.fix + 44))
let view = YHMakePlanHeadView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 333.fix + 44 + 35))
view.block = { tag in
self.topView.custtomView.updataData(tag)
let indexPath = IndexPath(row: tag, section: 0)
......
......@@ -121,7 +121,7 @@ class YHMakePlanCell: UITableViewCell {
}
var y = 0
for i in 0 ..< (dataSource?.count ?? 0) {
if i != 0 || i != (dataSource?.count ?? 0) - 1 {
if i != 0 {
let line = UIView()
line.backgroundColor = UIColor.separatorColor
mainItemView.addSubview(line)
......@@ -133,7 +133,7 @@ class YHMakePlanCell: UITableViewCell {
}
y += 1
}
var h = 121
let h = 121
let itemView = YHMakePlanCardView()
itemView.actionHandler = { product in
self.actionHandler?(product)
......
......@@ -70,13 +70,6 @@ class YHMakePlanHeadView: UIView {
make.height.equalTo(333.fix)
}
centerView.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.height.equalTo(88)
make.bottom.equalTo(centerImageView.snp.bottom).offset(-16)
}
logoImageView.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.height.equalTo(109)
......@@ -84,6 +77,13 @@ class YHMakePlanHeadView: UIView {
make.top.equalTo(96)
}
centerView.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.height.equalTo(133)
make.top.equalTo(logoImageView.snp.bottom).offset(24)
}
custtomView.snp.makeConstraints { make in
make.bottom.left.right.equalToSuperview()
make.height.equalTo(44)
......
......@@ -46,13 +46,24 @@ class YHMakePlanStateHeadView: UIView {
private let progressDescriptionLabel: UILabel = {
let label = UILabel()
label.text = "续签综合通过率"
label.text = "预测续签通过率"
label.font = UIFont.PFSC_R(ofSize: 14)
label.textColor = UIColor(hex: 0x8893a2)
label.textAlignment = .center
return label
}()
private let explainLabel: UILabel = {
let label = UILabel()
label.text = "*该概率为预估概率,最终以实际续签结果为准"
label.font = UIFont.PFSC_R(ofSize: 12)
label.textColor = UIColor(hex: 0x8893a2)
label.textAlignment = .center
label.backgroundColor = UIColor(hex: 0xf8f9fb)
label.layer.cornerRadius = kCornerRadius4
return label
}()
// MARK: - Initialization
override init(frame: CGRect) {
super.init(frame: frame)
......@@ -72,6 +83,7 @@ class YHMakePlanStateHeadView: UIView {
addSubview(yearsDescriptionLabel)
addSubview(percentageLabel)
addSubview(progressDescriptionLabel)
addSubview(explainLabel)
}
private func setupConstraints() {
......@@ -98,6 +110,13 @@ class YHMakePlanStateHeadView: UIView {
make.right.equalToSuperview().offset(-16)
make.left.equalTo(self.snp.centerX)
}
explainLabel.snp.makeConstraints { make in
make.bottom.equalTo(-16)
make.right.equalToSuperview().offset(-18)
make.left.equalToSuperview().offset(18)
make.height.equalTo(29)
}
}
// MARK: - Configuration
......
......@@ -17,10 +17,10 @@ class YHMakePlanTopView: UIView {
let year = dataSource?.year ?? 0
let rate = dataSource?.pass_rate ?? ""
let a: ASAttributedString = .init("预计可续期(年) ", .font(UIFont.PFSC_R(ofSize: 14)), .foreground(UIColor(hex: 0x6a7586)))
let b: ASAttributedString = .init("\(year)", .font(UIFont.PFSC_M(ofSize: 24)), .foreground(UIColor.mainTextColor))
let b: ASAttributedString = .init("\(year)", .font(UIFont.PFSC_M(ofSize: 16)), .foreground(UIColor.mainTextColor))
yearsLabel.attributed.text = a + b
let aa: ASAttributedString = .init("续签综合通过率 ", .font(UIFont.PFSC_R(ofSize: 14)), .foreground(UIColor(hex: 0x6a7586)))
let bb: ASAttributedString = .init("\(rate)", .font(UIFont.PFSC_M(ofSize: 24)), .foreground(UIColor.mainTextColor))
let aa: ASAttributedString = .init("预测续签通过率 ", .font(UIFont.PFSC_R(ofSize: 14)), .foreground(UIColor(hex: 0x6a7586)))
let bb: ASAttributedString = .init("\(rate)", .font(UIFont.PFSC_M(ofSize: 16)), .foreground(UIColor.mainTextColor))
// let c: ASAttributedString = .init("%", .font(UIFont.PFSC_M(ofSize: 16)), .foreground(UIColor.mainTextColor))
percentageLabel.attributed.text = aa + bb
}
......@@ -33,6 +33,7 @@ class YHMakePlanTopView: UIView {
private let percentageLabel: UILabel = {
let label = UILabel()
label.textAlignment = .right
return label
}()
......@@ -79,7 +80,7 @@ class YHMakePlanTopView: UIView {
}
percentageLabel.snp.makeConstraints { make in
make.left.equalTo(self.snp.centerX)
make.right.equalTo(-34)
make.height.equalTo(24)
make.top.equalTo(18)
}
......
......@@ -17,7 +17,7 @@ class YHAnalytics {
#if DEBUG
let options = SAConfigOptions.init(serverURL: YhConstant.SensorsAnalytics.urlForTest, launchOptions: launchOptions)
// 开启log
options.enableLog = false
options.enableLog = true
SensorsAnalyticsSDK.sharedInstance()?.set(["evn": "test"])
#elseif TESTENV
let options = SAConfigOptions.init(serverURL: YhConstant.SensorsAnalytics.urlForTest, launchOptions: launchOptions)
......
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