Commit 4a480e08 authored by Steven杜宇's avatar Steven杜宇

Merge branch 'develop' of http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS into develop

parents 3c4e7cc5 2c3c5480
...@@ -15,8 +15,7 @@ class YHInvitationWithGiftsViewController: YHBaseViewController { ...@@ -15,8 +15,7 @@ class YHInvitationWithGiftsViewController: YHBaseViewController {
var viewModel: YHInvitationWithGiftsViewModel = YHInvitationWithGiftsViewModel() var viewModel: YHInvitationWithGiftsViewModel = YHInvitationWithGiftsViewModel()
lazy var headView : YHInvitationWithGiftsHeadView = { lazy var headView : YHInvitationWithGiftsHeadView = {
let height = KScreenWidth/0.56 let headView = YHInvitationWithGiftsHeadView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 861.fix))
let headView = YHInvitationWithGiftsHeadView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: height))
return headView return headView
}() }()
......
...@@ -100,7 +100,7 @@ class YHInvitationWithGiftsDetailView: UIView { ...@@ -100,7 +100,7 @@ class YHInvitationWithGiftsDetailView: UIView {
scrollView = { scrollView = {
let view = UIScrollView() let view = UIScrollView()
view.bounds = CGRect(x: 0, y: 0, width: 287, height: 883) view.bounds = CGRect(x: 0, y: 0, width: 287, height: 850)
// 去除弹簧效果 // 去除弹簧效果
view.bounces = false view.bounces = false
...@@ -127,22 +127,7 @@ class YHInvitationWithGiftsDetailView: UIView { ...@@ -127,22 +127,7 @@ class YHInvitationWithGiftsDetailView: UIView {
bgImageView.snp.makeConstraints { make in bgImageView.snp.makeConstraints { make in
make.right.bottom.left.top.equalToSuperview() make.right.bottom.left.top.equalToSuperview()
} }
titleLabel = {
let label = UILabel()
label.text = "规则说明"
label.font = UIFont.PFSC_M(ofSize: 15)
label.textColor = UIColor.mainTextColor
return label
}()
scrollView.addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.left.equalTo(14)
make.right.equalTo(-14)
make.height.equalTo(21)
make.top.equalTo(9)
}
titleImage = { titleImage = {
let imageView = UIImageView() let imageView = UIImageView()
imageView.image = UIImage(named: "invitation_with_gifts_detail_title") imageView.image = UIImage(named: "invitation_with_gifts_detail_title")
...@@ -152,8 +137,8 @@ class YHInvitationWithGiftsDetailView: UIView { ...@@ -152,8 +137,8 @@ class YHInvitationWithGiftsDetailView: UIView {
titleImage.snp.makeConstraints { make in titleImage.snp.makeConstraints { make in
make.width.equalTo(259) make.width.equalTo(259)
make.centerX.equalToSuperview() make.centerX.equalToSuperview()
make.height.equalTo(843) make.height.equalTo(857)
make.top.equalTo(42) make.top.equalTo(9)
} }
closeButton = { closeButton = {
......
...@@ -67,7 +67,6 @@ class YHInvitationWithGiftsHeadView: UIView { ...@@ -67,7 +67,6 @@ class YHInvitationWithGiftsHeadView: UIView {
func setUpView() { func setUpView() {
self.backgroundColor = UIColor(hex: 0xebf4fe) self.backgroundColor = UIColor(hex: 0xebf4fe)
let height = KScreenWidth / 0.735
centerImageView = { centerImageView = {
let view = UIImageView() let view = UIImageView()
view.image = UIImage(named: "invitation_with_gifts_head") view.image = UIImage(named: "invitation_with_gifts_head")
...@@ -76,10 +75,9 @@ class YHInvitationWithGiftsHeadView: UIView { ...@@ -76,10 +75,9 @@ class YHInvitationWithGiftsHeadView: UIView {
addSubview(centerImageView) addSubview(centerImageView)
centerImageView.snp.makeConstraints { make in centerImageView.snp.makeConstraints { make in
make.left.right.top.equalToSuperview() make.left.right.top.equalToSuperview()
make.height.equalTo(height) make.height.equalTo(510.fix)
} }
let bottomHeight = (KScreenWidth - 24) / 1.34
bottomImageView = { bottomImageView = {
let view = UIImageView() let view = UIImageView()
view.image = UIImage(named: "invitation_with_gifts_head_bottom") view.image = UIImage(named: "invitation_with_gifts_head_bottom")
...@@ -87,7 +85,7 @@ class YHInvitationWithGiftsHeadView: UIView { ...@@ -87,7 +85,7 @@ class YHInvitationWithGiftsHeadView: UIView {
}() }()
addSubview(bottomImageView) addSubview(bottomImageView)
bottomImageView.snp.makeConstraints { make in bottomImageView.snp.makeConstraints { make in
make.height.equalTo(bottomHeight) make.height.equalTo(465.fix)
make.left.equalTo(12) make.left.equalTo(12)
make.right.equalTo(-12) make.right.equalTo(-12)
make.bottom.equalTo(-8) make.bottom.equalTo(-8)
......
...@@ -139,13 +139,11 @@ class YHServiceOrderAlertView: UIView { ...@@ -139,13 +139,11 @@ class YHServiceOrderAlertView: UIView {
make.top.equalTo(157) make.top.equalTo(157)
} }
let a: ASAttributedString = .init("尊敬的银河用户,为了您的信息安全,银河港生活APP服务订单默认仅关联", .font(UIFont.PFSC_R(ofSize: 15)),.foreground(UIColor.mainTextColor.withAlphaComponent(0.7))) let a: ASAttributedString = .init("尊敬的银河用户,为了您的信息安全,银河港生活APP服务订单默认仅关联【签约手机号】", .font(UIFont.PFSC_R(ofSize: 15)),.foreground(UIColor.mainTextColor.withAlphaComponent(0.7)))
let aa: ASAttributedString = .init(NSAttributedString(string: "【签约手机号】"), .font(UIFont.PFSC_R(ofSize: 15)),.foreground(UIColor.brandMainColor)) let bb: ASAttributedString = .init("*如您已签约银河服务,请改用签约手机号重新登录", .font(UIFont.PFSC_R(ofSize: 15)),.foreground(UIColor(hex:0x8893a2)))
let bb: ASAttributedString = .init("如您已签约银河服务,请改用签约手机号重新登录", .font(UIFont.PFSC_R(ofSize: 15)),.foreground(UIColor.brandMainColor))
measageLabel.attributed.text = a + aa measageLabel.attributed.text = a
subMeasageLabel.attributed.text = bb subMeasageLabel.attributed.text = bb
knowButton.backgroundColor = .brandMainColor knowButton.backgroundColor = .brandMainColor
......
...@@ -118,11 +118,10 @@ class YHServiceCenterViewController: YHBaseViewController { ...@@ -118,11 +118,10 @@ class YHServiceCenterViewController: YHBaseViewController {
NotificationCenter.default.addObserver(self, selector: #selector(endDragging), name:Notification.Name(rawValue: "scrollViewDidEndDragging0"), object: nil) NotificationCenter.default.addObserver(self, selector: #selector(endDragging), name:Notification.Name(rawValue: "scrollViewDidEndDragging0"), object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(didJumpToServiceProgess), name: YhConstant.YhNotification.didJumpToServiceProgressNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(didJumpToServiceProgess(_:)), name: YhConstant.YhNotification.didJumpToServiceProgressNotification, object: nil)
} }
private func goToServiceProgressVC(){
private func goToServiceProgressVC() {
let vc = YHOrderDetailViewController() let vc = YHOrderDetailViewController()
vc.model = oldModel vc.model = oldModel
vc.backDate = { [weak self] model in vc.backDate = { [weak self] model in
...@@ -135,9 +134,19 @@ class YHServiceCenterViewController: YHBaseViewController { ...@@ -135,9 +134,19 @@ class YHServiceCenterViewController: YHBaseViewController {
self.navigationController?.pushViewController(vc) self.navigationController?.pushViewController(vc)
} }
@objc func didJumpToServiceProgess() { @objc func didJumpToServiceProgess(_ notification: Notification) {
/// 服务进度 if let userInfo = notification.userInfo, let value = userInfo["value"] as? String {
goToServiceProgressVC() var currentModel = YHContactItemModel()
currentModel.id = value.intValue()
self.model = currentModel
self.state = 0
self.headIndex = 0
self.isCanSelectStep = false
self.loadData()
} else {
/// 服务进度
goToServiceProgressVC()
}
} }
@objc func logoutSuccess() { @objc func logoutSuccess() {
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
// //
import UIKit import UIKit
import AttributedString
class YHServiceNoOrderView: UIView { class YHServiceNoOrderView: UIView {
public var clickBackBtnClickBlock : (()->())? public var clickBackBtnClickBlock : (()->())?
...@@ -21,11 +22,11 @@ class YHServiceNoOrderView: UIView { ...@@ -21,11 +22,11 @@ class YHServiceNoOrderView: UIView {
private lazy var tipsLab : UILabel = { private lazy var tipsLab : UILabel = {
let lable = UILabel() let lable = UILabel()
lable.textColor = UIColor.mainTextColor
lable.font = UIFont.PFSC_M(ofSize: 14)
lable.textAlignment = .center lable.textAlignment = .center
lable.numberOfLines = 0 lable.numberOfLines = 0
lable.text = "暂未识别到与您登录手机号相关联的签约订单,如您已签约银河服务,请改用签约手机号重新登录" let a: ASAttributedString = .init("暂无关联签约订单\n", .font(UIFont.PFSC_R(ofSize: 16)),.foreground(UIColor.mainTextColor))
let b: ASAttributedString = .init("请尝试签约手机号重新登陆", .font(UIFont.PFSC_R(ofSize: 14)),.foreground(UIColor(hex:0x8893a2)))
lable.attributed.text = a + b
return lable return lable
}() }()
......
...@@ -26,6 +26,7 @@ class YHHKPlanDoctumentVC: YHBaseViewController { ...@@ -26,6 +26,7 @@ class YHHKPlanDoctumentVC: YHBaseViewController {
private var timer : Timer? private var timer : Timer?
private var finishHandleFlag : Bool = true private var finishHandleFlag : Bool = true
private var isSaving: Bool = false
override func viewDidLoad() { override func viewDidLoad() {
...@@ -50,6 +51,38 @@ class YHHKPlanDoctumentVC: YHBaseViewController { ...@@ -50,6 +51,38 @@ class YHHKPlanDoctumentVC: YHBaseViewController {
cancelTimer() cancelTimer()
} }
override func backItemClick(_ sender: Any) {
guard !isSaving else {
return
}
isSaving = true
saveOp { [weak self] _ in
self?.isSaving = false
if let navigationController = self?.navigationController {
navigationController.popViewController(animated: true)
} else {
self?.dismiss(animated: true)
}
}
}
/// 是否可以返回,包括点击返回和手势返回,默认YES
override func navigationShouldPop() -> Bool {
guard !isSaving else {
return false
}
isSaving = true
saveOp { [weak self] _ in
self?.isSaving = false
if let navigationController = self?.navigationController {
navigationController.popViewController(animated: true)
} else {
self?.dismiss(animated: true)
}
}
return false
}
private var bottomView : UIView = { private var bottomView : UIView = {
let view = UIView() let view = UIView()
view.backgroundColor = .white view.backgroundColor = .white
...@@ -155,6 +188,41 @@ extension YHHKPlanDoctumentVC { ...@@ -155,6 +188,41 @@ extension YHHKPlanDoctumentVC {
return false return false
} }
//保存数据
private func saveOp(completion: @escaping (Bool) -> Void) {
if let orderID = UserDefaults.standard.value(forKey: "orderIdForPreview") {
let params = ["order_id":orderID,
"supplement_id":supplement_id,
"career_achievement":viewModel.arrHKPlanData[0].content,
"academic_achievement":viewModel.arrHKPlanData[1].content,
"qualifications_and_awards":viewModel.arrHKPlanData[2].content,
"professional_skills":viewModel.arrHKPlanData[3].content,
"visa_contribution":viewModel.arrHKPlanData[4].content,
"plan_detail":viewModel.arrHKPlanData[5].content,
"other":viewModel.arrHKPlanData[6].content,
"content_save":0]
YHHUD.show(.progress(message: ""))
viewModel.submitHKPlanDocument(params) {[weak self ] success, error in
guard let self = self else { return }
YHHUD.hide()
if success {
YHHUD.flash(message: "保存成功")
self.getData()
completion(true)
} else {
YHHUD.flash(message: error?.errorMsg ?? "保存失败")
completion(false)
}
}
} else {
YHHUD.flash(message: "订单ID 为空")
completion(false)
}
}
//提交数据 //提交数据
private func submitOp() { private func submitOp() {
......
...@@ -28,6 +28,7 @@ class YHMySignatureDetailModel: SmartCodable { ...@@ -28,6 +28,7 @@ class YHMySignatureDetailModel: SmartCodable {
var signedDocument: [YHMySignedDocumentModel] = [] var signedDocument: [YHMySignedDocumentModel] = []
var templateUrl: String = "" var templateUrl: String = ""
var commonFile: String = "" var commonFile: String = ""
var template_file_url: String = ""
required init() { required init() {
} }
} }
......
...@@ -39,14 +39,14 @@ class YHWorkActionView: UIView { ...@@ -39,14 +39,14 @@ class YHWorkActionView: UIView {
photoButton.snp.makeConstraints { make in photoButton.snp.makeConstraints { make in
make.centerY.equalToSuperview() make.centerY.equalToSuperview()
make.left.equalTo(16) make.left.equalTo(16)
make.height.width.equalTo(31) make.height.width.equalTo(21)
} }
wxButton = { wxButton = {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
button.setTitle("扫描快捷录入", for: .normal) button.setTitle("扫描录入", for: .normal)
button.setTitleColor(UIColor.brandMainColor, for: .normal) button.setTitleColor(UIColor.mainTextColor, for: .normal)
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 15) button.titleLabel?.font = UIFont.PFSC_M(ofSize: 13)
button.addTarget(self, action: #selector(photoClick), for: .touchUpInside) button.addTarget(self, action: #selector(photoClick), for: .touchUpInside)
return button return button
}() }()
...@@ -55,7 +55,7 @@ class YHWorkActionView: UIView { ...@@ -55,7 +55,7 @@ class YHWorkActionView: UIView {
make.centerY.equalToSuperview() make.centerY.equalToSuperview()
make.left.equalTo(photoButton.snp.right) make.left.equalTo(photoButton.snp.right)
make.height.equalTo(31) make.height.equalTo(31)
make.width.equalTo(100) make.width.equalTo(52)
} }
exampleButton = { exampleButton = {
......
...@@ -273,6 +273,42 @@ class YHGCMySignatureDetailViewController: YHBaseViewController { ...@@ -273,6 +273,42 @@ class YHGCMySignatureDetailViewController: YHBaseViewController {
} }
} }
private func downloadRemoteFile(url: URL, completiton: @escaping (_ destination: URL?) -> Void) {
let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration)
DispatchQueue.main.async {
YHHUD.show(.progress(message: "加载文件中..."))
}
let task = session.downloadTask(with: url) { (tempLocalUrl, response, error) in
DispatchQueue.main.async {
YHHUD.hide()
}
if let tempLocalUrl = tempLocalUrl, error == nil {
// 下载完成,尝试打开文件
let fileManager = FileManager.default
let destination = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(response?.suggestedFilename ?? UUID().uuidString)
do {
if fileManager.fileExists(atPath: destination.path) {
try fileManager.removeItem(at: destination)
}
try fileManager.moveItem(at: tempLocalUrl, to: destination)
completiton(destination)
} catch {
completiton(nil)
DispatchQueue.main.async {
YHHUD.flash(message: "下载文件失败")
}
}
} else {
completiton(nil)
DispatchQueue.main.async {
YHHUD.flash(message: "下载文件失败")
}
}
}
task.resume()
}
deinit { deinit {
removeNotify() removeNotify()
} }
...@@ -336,7 +372,8 @@ extension YHGCMySignatureDetailViewController: UITableViewDelegate, UITableViewD ...@@ -336,7 +372,8 @@ extension YHGCMySignatureDetailViewController: UITableViewDelegate, UITableViewD
if type == .downLoad { if type == .downLoad {
//弹窗 选择发送邮箱 //弹窗 选择发送邮箱
let items = [YHCertificateEditItem(type:.sendEmail, title:"发送至邮箱"), let items = [YHCertificateEditItem(type:.sendToWechat, title:"分享至微信"),
YHCertificateEditItem(type:.sendEmail, title:"发送至邮箱"),
YHCertificateEditItem(type:.cancel, title:"取消")] YHCertificateEditItem(type:.cancel, title:"取消")]
YHCertificateEditSheetView.sheetView(items:items,sheetTitle: "请选择下载方式") { YHCertificateEditSheetView.sheetView(items:items,sheetTitle: "请选择下载方式") {
[weak self] editType in [weak self] editType in
...@@ -347,6 +384,42 @@ extension YHGCMySignatureDetailViewController: UITableViewDelegate, UITableViewD ...@@ -347,6 +384,42 @@ extension YHGCMySignatureDetailViewController: UITableViewDelegate, UITableViewD
emailInputView.textField.text = "" emailInputView.textField.text = ""
emailInputView.textField.becomeFirstResponder() emailInputView.textField.becomeFirstResponder()
} }
if editType == .sendToWechat {
self.viewModel.getPublicImageUrl(self.viewModel.mainModel?.commonFile ?? "") { [weak self] success, error in
YHHUD.hide()
guard let self = self else {
return
}
if let success = success, let url = URL(string: success) {
//self.previewFile(url)
//YHShareManager.shared.sendLinkContent(self.name, "", UIImage(), link: success)
self.downloadRemoteFile(url: url) { [weak self] destination in
guard let self = self else {
return
}
if let destination = destination, !destination.absoluteString.isEmpty {
var name = ""
if self.viewModel.mainModel?.docType == 1000 {
name = "代理委托书"
} else if self.viewModel.mainModel?.docType == 1001 {
name = "赴港同意书"
} else if self.viewModel.mainModel?.docType == 1002 {
name = "声明书"
}
DispatchQueue.main.async {
YHShareManager.shared.shareFileToWeChat(fileUrl: destination, filename: name + "." + destination.pathExtension.lowercased(), ext: destination.pathExtension.lowercased())
}
}
}
} else {
var errorMsg = "文书正在生成中,请稍后再试"
if let error = error, error.errorMsg.count > 0 {
errorMsg = error.errorMsg
}
YHHUD.flash(message: errorMsg)
}
}
}
}.show() }.show()
} }
...@@ -511,7 +584,8 @@ extension YHGCMySignatureDetailViewController: UITableViewDelegate, UITableViewD ...@@ -511,7 +584,8 @@ extension YHGCMySignatureDetailViewController: UITableViewDelegate, UITableViewD
if type == .downLoad { if type == .downLoad {
//弹窗 选择发送邮箱 //弹窗 选择发送邮箱
let items = [YHCertificateEditItem(type:.sendEmail, title:"发送至邮箱"), let items = [YHCertificateEditItem(type:.sendToWechat, title:"分享至微信"),
YHCertificateEditItem(type:.sendEmail, title:"发送至邮箱"),
YHCertificateEditItem(type:.cancel, title:"取消")] YHCertificateEditItem(type:.cancel, title:"取消")]
YHCertificateEditSheetView.sheetView(items:items,sheetTitle: "请选择下载方式") { YHCertificateEditSheetView.sheetView(items:items,sheetTitle: "请选择下载方式") {
[weak self] editType in [weak self] editType in
...@@ -522,6 +596,42 @@ extension YHGCMySignatureDetailViewController: UITableViewDelegate, UITableViewD ...@@ -522,6 +596,42 @@ extension YHGCMySignatureDetailViewController: UITableViewDelegate, UITableViewD
emailInputView.textField.text = "" emailInputView.textField.text = ""
emailInputView.textField.becomeFirstResponder() emailInputView.textField.becomeFirstResponder()
} }
if editType == .sendToWechat {
self.viewModel.getPublicImageUrl(self.viewModel.mainModel?.commonFile ?? "") { [weak self] success, error in
YHHUD.hide()
guard let self = self else {
return
}
if let success = success, let url = URL(string: success) {
//self.previewFile(url)
//YHShareManager.shared.sendLinkContent(self.name, "", UIImage(), link: success)
self.downloadRemoteFile(url: url) { [weak self] destination in
guard let self = self else {
return
}
if let destination = destination, !destination.absoluteString.isEmpty {
var name = ""
if self.viewModel.mainModel?.docType == 1000 {
name = "代理委托书"
} else if self.viewModel.mainModel?.docType == 1001 {
name = "赴港同意书"
} else if self.viewModel.mainModel?.docType == 1002 {
name = "声明书"
}
DispatchQueue.main.async {
YHShareManager.shared.shareFileToWeChat(fileUrl: destination, filename: name + "." + destination.pathExtension.lowercased(), ext: destination.pathExtension.lowercased())
}
}
}
} else {
var errorMsg = "文书正在生成中,请稍后再试"
if let error = error, error.errorMsg.count > 0 {
errorMsg = error.errorMsg
}
YHHUD.flash(message: errorMsg)
}
}
}
}.show() }.show()
} }
} }
......
...@@ -725,5 +725,13 @@ extension YHJsApi { ...@@ -725,5 +725,13 @@ extension YHJsApi {
} }
} }
@objc func goServiceByOrderId(_ tag: String) {
DispatchQueue.main.async {
UIViewController.current?.navigationController?.popToRootViewController(animated: false)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.35) {
UIViewController.current?.tabBarController?.selectedIndex = 1
NotificationCenter.default.post(name: YhConstant.YhNotification.didJumpToServiceProgressNotification, object: nil, userInfo: ["value":tag])
}
}
}
} }
...@@ -5,12 +5,12 @@ ...@@ -5,12 +5,12 @@
"scale" : "1x" "scale" : "1x"
}, },
{ {
"filename" : "Frame 2033194996@2x.png", "filename" : "规则说明@2x.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "2x" "scale" : "2x"
}, },
{ {
"filename" : "Frame 2033194996@3x.png", "filename" : "规则说明@3x.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "3x" "scale" : "3x"
} }
......
...@@ -5,12 +5,12 @@ ...@@ -5,12 +5,12 @@
"scale" : "1x" "scale" : "1x"
}, },
{ {
"filename" : "invitation_with_gifts_head_bottom@2x.png", "filename" : "设计切图@2x.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "2x" "scale" : "2x"
}, },
{ {
"filename" : "invitation_with_gifts_head_bottom@3x.png", "filename" : "设计切图@3x.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "3x" "scale" : "3x"
} }
......
...@@ -5,12 +5,12 @@ ...@@ -5,12 +5,12 @@
"scale" : "1x" "scale" : "1x"
}, },
{ {
"filename" : "service_no_order_alert@2x.png", "filename" : "寄件模板@2x.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "2x" "scale" : "2x"
}, },
{ {
"filename" : "service_no_order_alert@3x.png", "filename" : "寄件模板@3x.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "3x" "scale" : "3x"
} }
......
...@@ -5,12 +5,12 @@ ...@@ -5,12 +5,12 @@
"scale" : "1x" "scale" : "1x"
}, },
{ {
"filename" : "work_experience_photo@2x.png", "filename" : "Frame 3460@2x.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "2x" "scale" : "2x"
}, },
{ {
"filename" : "work_experience_photo@3x.png", "filename" : "Frame 3460@3x.png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "3x" "scale" : "3x"
} }
......
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