Commit 820d2600 authored by David黄金龙's avatar David黄金龙

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

* 'develop' of http://gitlab.galaxy-immi.com/mobile-group/galaxy-iOS:
  //  旅行
  封装控件逻辑
  //  UI
  //  消息
  // 消息
  图片上传逻辑
  加载刷新
  新增加受养人一堆逻辑完善
parents b5031cdc 1f0dfcdf
......@@ -225,6 +225,8 @@ class YHMyInformationItemCell: UITableViewCell {
block(self.dataSource ?? YHUserInformationModel())
}
}
case .travel:
break
}
}
......
......@@ -122,6 +122,10 @@ extension YHAdoptedChinaTravelViewController: UITableViewDelegate, UITableViewDa
guard let self = self else { return }
self.urls[index] = url
}
cell.deleteBlock = { [weak self] url, index in
guard let self = self else { return }
self.urls[index] = url
}
return cell
}
......
......@@ -133,6 +133,10 @@ extension YHAdopterBirthViewController: UITableViewDelegate, UITableViewDataSour
guard let self = self else { return }
self.urls[index] = url
}
cell.deleteBlock = { [weak self] url, index in
guard let self = self else { return }
self.urls[index] = url
}
return cell
}
......
......@@ -122,6 +122,10 @@ extension YHAdopterChinaLifeViewController: UITableViewDelegate, UITableViewData
guard let self = self else { return }
self.urls[index] = url
}
cell.deleteBlock = { [weak self] url, index in
guard let self = self else { return }
self.urls[index] = url
}
return cell
}
......
......@@ -155,10 +155,15 @@ extension YHAdopterChinaViewController: UITableViewDelegate, UITableViewDataSour
guard let url = success else { return }
self.viewModel.requestCnIDCardMessage(url, isBack: 0) {[weak self] success, error in
guard let self = self else { return }
self.tableView.reloadSections([1], with: .none)
self.data = viewModel.getChinaDataSource(isShowPrompt)
self.tableView.reloadData()
}
}
}
cell.deleteBlock = { [weak self] url, index in
guard let self = self else { return }
self.urls[index] = url
}
return cell
}
}
......@@ -170,7 +175,7 @@ extension YHAdopterChinaViewController: UITableViewDelegate, UITableViewDataSour
let id = model.id
if id != .id21 && id != .id22 && id != .id23 {
self.data = viewModel.getChinaDataSource(isShowPrompt)
self.tableView.reloadSections([1], with: .none)
self.tableView.reloadData()
}
}
return cell
......
......@@ -123,6 +123,10 @@ extension YHAdopterIdCardViewController: UITableViewDelegate, UITableViewDataSou
guard let self = self else { return }
self.urls[index] = url
}
cell.deleteBlock = { [weak self] url, index in
guard let self = self else { return }
self.urls[index] = url
}
return cell
}
......
......@@ -131,6 +131,10 @@ extension YHAdopterMarryViewController: UITableViewDelegate, UITableViewDataSour
guard let self = self else { return }
self.urls[index] = url
}
cell.deleteBlock = { [weak self] url, index in
guard let self = self else { return }
self.urls[index] = url
}
return cell
}
......
......@@ -50,7 +50,11 @@ class YHAdopterNewPeopleViewController: YHBaseViewController {
func updateDataSource() {
if self.stepView.currentIndex == 0 {
self.dataSource = self.viewModel.getBaseDataSource(isShowPrompt)
if titleText == "新增子女" {
self.dataSource = self.viewModel.getBaseDataSource(isShowPrompt,"子女信息")
} else {
self.dataSource = self.viewModel.getBaseDataSource(isShowPrompt)
}
self.bottomView.nextButton.setTitle("下一步", for: .normal)
} else if self.stepView.currentIndex == 1 {
self.cardDataSource = self.viewModel.mainModel.docList
......
......@@ -133,6 +133,10 @@ extension YHAdopterResidentViewController: UITableViewDelegate, UITableViewDataS
guard let self = self else { return }
self.urls[index] = url
}
cell.deleteBlock = { [weak self] url, index in
guard let self = self else { return }
self.urls[index] = url
}
return cell
}
......
......@@ -108,6 +108,19 @@ class YHAdopterTravelViewController: YHBaseViewController {
}
}
func isOneYearAfter(_ dateString: String) -> Bool {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
guard let inputDate = dateFormatter.date(from: dateString) else {
return false // 输入格式不正确
}
let currentDate = Date()
let oneYearFromNow = Calendar.current.date(byAdding: .year, value: 1, to: currentDate)!
return inputDate < oneYearFromNow
}
}
extension YHAdopterTravelViewController: UITableViewDelegate, UITableViewDataSource {
......@@ -145,10 +158,15 @@ extension YHAdopterTravelViewController: UITableViewDelegate, UITableViewDataSou
guard let url = success else { return }
self.viewModel.requestHkIDCardMessage(url, isBack: 0) {[weak self] success, error in
guard let self = self else { return }
self.data = viewModel.getBaseDataSource(isShowPrompt)
self.tableView.reloadData()
}
}
}
cell.deleteBlock = { [weak self] url, index in
guard let self = self else { return }
self.urls[index] = url
}
return cell
}
}
......@@ -161,7 +179,7 @@ extension YHAdopterTravelViewController: UITableViewDelegate, UITableViewDataSou
let id = model.id
if id != .id2 && id != .id3 && id != .id4 {
self.data = viewModel.getBaseDataSource(isShowPrompt)
self.tableView.reloadSections([1], with: .none)
self.tableView.reloadData()
}
}
return cell
......@@ -170,9 +188,13 @@ extension YHAdopterTravelViewController: UITableViewDelegate, UITableViewDataSou
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.section == 0 {
if indexPath.row == 0 {
if model.reject_reason.count != 0 {
return 119
} else {
if isOneYearAfter(model.certificates_info.sign_expire_date) && model.certificates_info.sign_expire_date.count != 0 {
return 119
}
return 86
}
}
......
......@@ -57,7 +57,7 @@ class YHAdopterCardExampleView: UIView {
data = ["service_adopter_example_other1", "service_adopter_example_other2","service_adopter_example_other3","service_adopter_example_other4"]
centerView.snp.remakeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.height.equalTo(801.fix)
make.height.equalTo(701.fix)
}
}
......
......@@ -200,5 +200,27 @@ class YHAdopterIncomeTitleTableViewCell: UITableViewCell {
failLabel.text = data.reject_reason
titleLabel.text = "旅行证件"
alertLabel.text = "要求:中国籍上传港澳通行证正反面,外籍上传护照正反面"
if isOneYearAfter(data.certificates_info.sign_expire_date) && data.certificates_info.sign_expire_date.count != 0 {
failLabel.text = "证件有效期至少需1年,请更新证件后上传"
failImageView.isHidden = false
failLabel.isHidden = false
} else {
failImageView.isHidden = true
failLabel.isHidden = true
}
}
func isOneYearAfter(_ dateString: String) -> Bool {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
guard let inputDate = dateFormatter.date(from: dateString) else {
return false // 输入格式不正确
}
let currentDate = Date()
let oneYearFromNow = Calendar.current.date(byAdding: .year, value: 1, to: currentDate)!
return inputDate < oneYearFromNow
}
}
......@@ -11,6 +11,7 @@ import UIKit
class YHAdopterMarryCardTableViewCell: UITableViewCell {
typealias UrlBlock = (_ url: String, _ index: Int) -> ()
var urlBlock: UrlBlock?
var deleteBlock: UrlBlock?
var frontLabel: UILabel!
var backSurfaceLabel: UILabel!
var thirdLabel: UILabel!
......@@ -354,20 +355,32 @@ class YHAdopterMarryCardTableViewCell: UITableViewCell {
}
@objc func frontDeleteClick() {
firstUrl = ""
frontDeleteButton.isHidden = true
frontImageButton.setBackgroundImage(UIImage(named: "service_adopter_card_marry_front"), for: .normal)
frontImageButton.setContent("card_upload", "点击上传")
if let block = self.deleteBlock {
block("", 0)
}
}
@objc func backSurfaceDeleteClick() {
secondUrl = ""
backSurfaceDeleteButton.isHidden = true
backSurfaceImageButton.setBackgroundImage(UIImage(named: "service_adopter_card_marry_second"), for: .normal)
backSurfaceImageButton.setContent("card_upload", "点击上传")
if let block = self.deleteBlock {
block("", 1)
}
}
@objc func thirdDeleteClick() {
lastUrl = ""
thirdDeleteButton.isHidden = true
thirdImageButton.setBackgroundImage(UIImage(named: "service_adopter_card_marry_back"), for: .normal)
thirdImageButton.setContent("card_upload", "点击上传")
if let block = self.deleteBlock {
block("", 2)
}
}
}
......@@ -11,6 +11,7 @@ import UIKit
class YHAdopterResidentTableViewCell: UITableViewCell {
typealias UrlBlock = (_ url: String, _ index: Int) -> ()
var urlBlock: UrlBlock?
var deleteBlock: UrlBlock?
var frontLabel: UILabel!
var frontImageButton: YHCardButton!
var frontDeleteButton: UIButton!
......@@ -179,9 +180,13 @@ class YHAdopterResidentTableViewCell: UITableViewCell {
}
@objc func frontDeleteClick() {
firstUrl = ""
frontDeleteButton.isHidden = true
frontImageButton.setBackgroundImage(UIImage(named: firstImageName), for: .normal)
frontImageButton.setContent("card_upload", "点击上传")
if let block = self.deleteBlock {
block("", 0)
}
}
}
......@@ -11,6 +11,7 @@ import UIKit
class YHAdopterTravelCardTableViewCell: UITableViewCell {
typealias UrlBlock = (_ url: String, _ index: Int) -> ()
var urlBlock: UrlBlock?
var deleteBlock: UrlBlock?
var frontLabel: UILabel!
var backSurfaceLabel: UILabel!
var frontImageButton: YHCardButton!
......@@ -283,14 +284,22 @@ class YHAdopterTravelCardTableViewCell: UITableViewCell {
}
@objc func frontDeleteClick() {
firstUrl = ""
frontDeleteButton.isHidden = true
frontImageButton.setBackgroundImage(UIImage(named: firstImageName), for: .normal)
frontImageButton.setContent("card_upload", "点击上传")
if let block = self.deleteBlock {
block("", 0)
}
}
@objc func backSurfaceDeleteClick() {
lastUrl = ""
backSurfaceDeleteButton.isHidden = true
backSurfaceImageButton.setBackgroundImage(UIImage(named: lastImageName), for: .normal)
backSurfaceImageButton.setContent("card_upload", "点击上传")
if let block = self.deleteBlock {
block("", 1)
}
}
}
......@@ -145,6 +145,7 @@ class YHCardUploadView: UIView {
}
@objc func frontDeleteClick() {
firstUrl = ""
frontDeleteButton.isHidden = true
frontImageButton.setBackgroundImage(UIImage(named: defaultImageName), for: .normal)
frontImageButton.setContent("card_upload", "点击上传")
......
......@@ -15,7 +15,7 @@ class YHAdopterNewPeopleViewModel: YHBaseViewModel {
super.init()
}
func getBaseDataSource(_ isShowPrompt: Bool) -> [YHSectionItemModel] {
func getBaseDataSource(_ isShowPrompt: Bool, _ title: String = "配偶信息") -> [YHSectionItemModel] {
let item = YHItemModel(id: .id1, isNeed: true, title: "姓名", isUserKeyBoard: true, prompts: "请输入", message: mainModel.info.dep_name, isShowPrompts: isShowPrompt, alertMessage:"请输入姓名")
var string = ""
if mainModel.info.dep_nationality == 0 {
......@@ -28,7 +28,8 @@ class YHAdopterNewPeopleViewModel: YHBaseViewModel {
string = "海外地区"
}
let item1 = YHItemModel(id: .id2, isNeed: true, title: "国家/地区", isUserKeyBoard: false, prompts: "请选择", message: string, type: .selectAddress, isShowPrompts: isShowPrompt, alertMessage:"请选择国家/地区")
let section = YHSectionItemModel(title: "配偶信息", models: [item, item1])
let section = YHSectionItemModel(title: title, models: [item, item1])
return [section]
}
......
......@@ -16,7 +16,7 @@ class YHYHAdopterTravelViewModel: YHBaseViewModel {
}
func getBaseDataSource(_ isShowPrompt: Bool) -> [YHItemModel] {
let item = YHItemModel(id: .id1, isNeed: true, title: "旅行证件类型", isUserKeyBoard: false, prompts: "请选择", message: "\(mainModel.certificates_info.travel_papers_type)", type: .id, isShowPrompts: isShowPrompt, alertMessage:"请选择旅行证件类型")
let item = YHItemModel(id: .id1, isNeed: true, title: "旅行证件类型", isUserKeyBoard: false, prompts: "请选择", message: "\(mainModel.certificates_info.travel_papers_type)", type: .travel, isShowPrompts: isShowPrompt, alertMessage:"请选择旅行证件类型")
let item1 = YHItemModel(id: .id2, isNeed: true, title: "英文姓名", isUserKeyBoard: true, prompts: "请输入", message: mainModel.certificates_info.en_name, isShowPrompts: isShowPrompt, alertMessage:"请输入英文姓名")
let item2 = YHItemModel(id: .id3, isNeed: true, title: "旅行证件号码", isUserKeyBoard: true, prompts: "请输入", message: mainModel.certificates_info.travel_papers_number, isShowPrompts: isShowPrompt, alertMessage:"请输入旅行证件号码")
let item3 = YHItemModel(id: .id4, isNeed: true, title: "签发地点", isUserKeyBoard: true, prompts: "请输入", message: mainModel.certificates_info.sign_address, isShowPrompts: isShowPrompt, alertMessage:"请输入签发地点")
......@@ -66,7 +66,8 @@ class YHYHAdopterTravelViewModel: YHBaseViewModel {
func updateModel(_ model: YHHKIDCardModel) {
if model.name.count != 0 {
mainModel.certificates_info.en_name = model.name
mainModel.certificates_info.en_name = model.pingyin
mainModel.certificates_info.travel_papers_type = 1
}
if model.birth.count != 0 {
mainModel.certificates_info.birthday = model.birth
......
......@@ -224,7 +224,7 @@ class YHTravelDocsPreparationDetailVC: YHBaseViewController {
item.cerDetailModel.isNeedCheckDate = false
if item.cerDetailModel.isOCR_failed {
hasError = true
// 无法识别不能当做无法提交的错误 所以 此处 hasError 不必设置为true
item.cerDetailModel.isNeedCheckCer = true
item.cerDetailModel.checkTips = "无法识别,请核查文件"
......
......@@ -69,7 +69,7 @@ class YHTravelCertificateUploadCell: UITableViewCell {
lazy var templateButton: UIButton = {
let btn = UIButton()
btn.frame = CGRect(x: 0, y: 0, width: 48, height: 16)
btn.setTitle("资料模版", for: .normal)
btn.setTitle("示例模版", for: .normal)
btn.titleLabel?.font = .PFSC_M(ofSize: 10)
btn.setTitleColor(.brandMainColor, for: .normal)
btn.layer.cornerRadius = kCornerRadius3
......@@ -108,8 +108,8 @@ class YHTravelCertificateUploadCell: UITableViewCell {
label.font = UIFont.PFSC_R(ofSize: 12)
label.textColor = UIColor.failColor
let a: ASAttributedString = .init("温馨提示:", .font(UIFont.PFSC_R(ofSize: 12)),.foreground(UIColor.mainTextColor50))
let b: ASAttributedString = .init("具体根据当地出入境规定办理并提交相关证件,如有疑问,可联系银河客服经理咨询", .font(UIFont.PFSC_R(ofSize: 12)),.foreground(UIColor.brandMainColor))
let a: ASAttributedString = .init("温馨提示:", .font(UIFont.PFSC_R(ofSize: 12)),.foreground(UIColor.brandMainColor))
let b: ASAttributedString = .init("具体根据当地出入境规定办理并提交相关证件,如有疑问,可联系银河客服经理咨询", .font(UIFont.PFSC_R(ofSize: 12)),.foreground(UIColor.mainTextColor(alpha: 0.5)))
label.attributed.text = a+b
return label
}()
......
......@@ -133,7 +133,7 @@ extension YHTravelDocsPreparationViewModel {
}
if type == 2 {
return .init("上传《护照》(需有效期≥签证时长+3个月)", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.mainTextColor(alpha: 0.5)))
return .init("上传《护照》(需有效期≥\(date))", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.mainTextColor(alpha: 0.5)))
}
if type == 3 {
......
......@@ -21,6 +21,7 @@ enum YHItemSelectType: Int {
case school = 9
case degree = 10
case selectAddress = 11
case travel = 12
}
enum YHItemID: Int {
......
......@@ -22,12 +22,12 @@ class YHItemView: UIView {
var country: String = ""
var state: Int = 0 {
didSet {
if state == 1 || state == 2 {
if state == 1 || state == 3 {
nextStepImageView.isHidden = true
messageTextField.isEnabled = false
} else {
nextStepImageView.isHidden = false
messageTextField.isEnabled = true
// nextStepImageView.isHidden = false
// messageTextField.isEnabled = true
}
}
}
......@@ -235,6 +235,16 @@ class YHItemView: UIView {
messageTextField.text = item["title"]
}
}
case .travel:
if dataSource.message == "0" {
messageTextField.text = ""
}
let arr = YHConstantArrayData.arrTravelIdType
arr.forEach { item in
if item["id"] == dataSource.message {
messageTextField.text = item["title"]
}
}
case .sex:
if dataSource.message == "0" {
messageTextField.text = ""
......@@ -490,6 +500,16 @@ class YHItemView: UIView {
block(self.dataSource ?? YHItemModel())
}
}
case .travel:
YHOtherPickerView.show(type: .travelIdType, selectTitle: self.dataSource?.message ?? "") {[weak self] data in
guard let self = self else { return }
self.dataSource?.message = data.title
self.dataSource?.value = [data.index]
self.updateAllViews()
if let block = self.block {
block(self.dataSource ?? YHItemModel())
}
}
case .country:
let vc = YHSelectCountryViewController()
vc.backLocationStringController = { (country) in
......
......@@ -238,6 +238,8 @@ class YHOtherPickerView: UIView {
return "高管证明文件"
case .idType:
return "选择证件类别"
case .travelIdType:
return "选择证件类别"
case .sex:
return "选择性别"
case .marry:
......@@ -283,7 +285,7 @@ extension YHOtherPickerView: UIPickerViewDelegate, UIPickerViewDataSource {
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
switch type {
case .nature,.certificate,.structure,.level,.prove,.idType,.sex,.marry,.constellation,.selectAddress:
case .nature,.certificate,.structure,.level,.prove,.idType,.travelIdType,.sex,.marry,.constellation,.selectAddress:
let label = UILabel()
label.textColor = UIColor.mainTextColor
label.font = UIFont.PFSC_M(ofSize: 14)
......@@ -408,6 +410,14 @@ extension YHOtherPickerView {
arrData.append(model)
}
title = getTitle(type: type)
case .travelIdType:
let arr = YHConstantArrayData.arrTravelIdType
arrData.removeAll()
arr.forEach { item in
let model = YHOtherPickerViewItemData(title: item["title"] ?? "-", subTitle: "", index: item["id"] ?? "-")
arrData.append(model)
}
title = getTitle(type: type)
case .sex:
let arr = YHConstantArrayData.arrSex
arrData.removeAll()
......
......@@ -269,13 +269,47 @@ extension YHMessageDetailListVC: UITableViewDelegate, UITableViewDataSource {
self.navigationController?.popToRootViewController(animated: false)
goTabBarBy(tabType: .service)
} else if self.type == YHMessageType.identityApproved.rawValue { // 身份获批
self.navigationController?.popToRootViewController(animated: false)
goTabBarBy(tabType: .service)
} else if (self.type == YHMessageType.identityApproved.rawValue ||
self.type == YHMessageType.goToHK.rawValue)
{ // 身份获批 或 赴港办证
let orderId = Int(item.orderId) ?? 0
} else if self.type == YHMessageType.goToHK.rawValue { // 赴港办证
if item.redirectPage == "add_dependent" { // 新增受养人
let vc = YHAddAdoptersViewController()
vc.orderId = orderId
navigationController?.pushViewController(vc)
} else if item.redirectPage == "principal_approval_success" { // 原则批获批成功
let vc = YHPrincipleApprovedWaitSubmitVC()
vc.orderId = orderId
navigationController?.pushViewController(vc)
} else if item.redirectPage == "pay_electronic_visa" { // 电子签证缴费
let vc = YHVisaPaymentVC()
vc.orderID = orderId
navigationController?.pushViewController(vc)
} else if item.redirectPage == "prepare_travel_certificate" { // 旅行证件准备
let vc = YHTravelDocsPreparationListViewController()
vc.orderId = orderId
navigationController?.pushViewController(vc)
} else if item.redirectPage == "upload_pass_certificate" { // 上传过关证件
let vc = YHUploadCertificateVC()
vc.orderId = orderId
navigationController?.pushViewController(vc)
} else if item.redirectPage == "appoint_for_id_card" { // 赴港办证预约
let vc = YHCertificateAppointViewController()
vc.orderId = orderId
navigationController?.pushViewController(vc)
} else { // 其余条件进入服务页
self.navigationController?.popToRootViewController(animated: false)
goTabBarBy(tabType: .service)
}
} else if self.type == YHMessageType.renewal.rawValue { // 身份续签
}
......
......@@ -196,9 +196,9 @@ class YHMessageListVC: YHBaseViewController {
}
// 身份续签
if !self.viewModel.msgList.renewal.lastMessage.isEmpty {
hasUnreadMsg = true
}
// if !self.viewModel.msgList.renewal.lastMessage.isEmpty {
// hasUnreadMsg = true
// }
if hasUnreadMsg {
if !isHidden {
......@@ -211,7 +211,7 @@ class YHMessageListVC: YHBaseViewController {
msgArr.append(self.viewModel.msgList.approval)
msgArr.append(self.viewModel.msgList.goToHK)
msgArr.append(self.viewModel.msgList.renewal)
// msgArr.append(self.viewModel.msgList.renewal)
}
}
......
......@@ -104,6 +104,7 @@ class YHDetailMessageModel: SmartCodable {
var isRead: Bool = false
var orderId: String = ""
var url: String = ""
var redirectPage: String = ""
required init() {
......@@ -113,5 +114,6 @@ class YHDetailMessageModel: SmartCodable {
case id, title, content, time, url
case isRead = "is_read"
case orderId = "order_id"
case redirectPage = "redirect_page"
}
}
......@@ -27,6 +27,8 @@ enum YHOtherPickerViewType: Int {
case prove
// 证件类别
case idType
// 旅行证件类别
case travelIdType
// 性别
case sex
// 婚姻状况
......@@ -322,6 +324,36 @@ class YHConstantArrayData {
]
]
static let arrTravelIdType : [[String : String]] = [
["title": "往来港澳通行证",
"id": "1"
],
["title": "护照",
"id": "3"
],
["title": "外交护照",
"id": "4"
],
["title": "公务护照",
"id": "5"
],
["title": "中国发无国籍旅游证件",
"id": "6"
],
["title": "旅游通行证",
"id": "7"
],
["title": "联合国通行证",
"id": "8"
],
["title": "其他无国籍旅行证件",
"id": "9"
],
["title": "其他",
"id": "10"
]
]
static let arrSex : [[String : String]] = [
["title": "男",
"id": "1"
......@@ -454,6 +486,8 @@ class YHConstantArrayData {
arrData = YHConstantArrayData.arrSex
case .idType:
arrData = YHConstantArrayData.arrIdType
case .travelIdType:
arrData = YHConstantArrayData.arrTravelIdType
case .structure:
arrData = YHConstantArrayData.arrStructure
case .level:
......
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