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