Commit f4b6313e authored by pete谢兆麟's avatar pete谢兆麟

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

# Conflicts:
#	galaxy/galaxy/Classes/Tools/NetWork/YHAllApiName.swift
parents bc2980f9 b2dc3556
This diff is collapsed.
...@@ -34,6 +34,11 @@ class YHAppointItem { ...@@ -34,6 +34,11 @@ class YHAppointItem {
var itemIndex : Int = 0 var itemIndex : Int = 0
var type: YHAppointItemType = .none var type: YHAppointItemType = .none
var model : YHSelectGroupMemberModel? // type = .confirmGoHKInfo 时候的赋值 var model : YHSelectGroupMemberModel? // type = .confirmGoHKInfo 时候的赋值
// 办证地点选择列表
var placeList: [YHMakeCertificatePlaceModel] = []
var arrHkHolidays:[String]? //香港法定节假日
init(type: YHAppointItemType) { init(type: YHAppointItemType) {
self.type = type self.type = type
} }
...@@ -46,6 +51,9 @@ class YHSelectGroupMemberModel { ...@@ -46,6 +51,9 @@ class YHSelectGroupMemberModel {
//赴港办证时间类型 //赴港办证时间类型
var dateTye : Int = 0 //0 - 具体日期 1-具体时段 var dateTye : Int = 0 //0 - 具体日期 1-具体时段
// 具体日期
var detailDateStr : String = ""
//开始时间 //开始时间
var startDateStr : String = "" var startDateStr : String = ""
...@@ -53,5 +61,5 @@ class YHSelectGroupMemberModel { ...@@ -53,5 +61,5 @@ class YHSelectGroupMemberModel {
var endDateStr : String = "" var endDateStr : String = ""
//办证地点 //办证地点
var hkPlaceName : String = "" var hkPlace : YHMakeCertificatePlaceModel = YHMakeCertificatePlaceModel()
} }
//
// YHHKLegaldaysModel.swift
// galaxy
//
// Created by davidhuangA on 2024/8/23.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import SmartCodable
class YHHKLegaldaysModel: SmartCodable {
var legaldays: [String] = []
required init() {
}
}
...@@ -9,7 +9,20 @@ ...@@ -9,7 +9,20 @@
import UIKit import UIKit
import SmartCodable import SmartCodable
class YHHKMemberModel: SmartCodable { // [YHHKMemberModel] 数组实现神拷贝
extension Array where Element == YHHKMemberModel {
func deepCopy() -> [YHHKMemberModel] {
var results: [YHHKMemberModel] = []
for item in self {
let newItem = item.copy()
results.append(newItem as! YHHKMemberModel)
}
return results
}
}
class YHHKMemberModel: SmartCodable, NSCopying {
var id: Int = 0 var id: Int = 0
var name: String = "" var name: String = ""
...@@ -20,7 +33,8 @@ class YHHKMemberModel: SmartCodable { ...@@ -20,7 +33,8 @@ class YHHKMemberModel: SmartCodable {
var url: String = "" var url: String = ""
var approvalDate: String = "" var approvalDate: String = ""
var isSelectedFlag : Bool = false //本地使用 // 自定义
var isSelected: Bool = false //本地使用
enum CodingKeys: String, CodingKey { enum CodingKeys: String, CodingKey {
case id = "id" case id = "id"
...@@ -37,7 +51,7 @@ class YHHKMemberModel: SmartCodable { ...@@ -37,7 +51,7 @@ class YHHKMemberModel: SmartCodable {
} }
init(id: Int, name: String, type: String, fileNum: String, birthday: String, isCheck: Int, url: String, approvalDate: String) { init(id: Int, name: String, type: String, fileNum: String, birthday: String, isCheck: Int, url: String, approvalDate: String, isSelected: Bool) {
self.id = id self.id = id
self.name = name self.name = name
self.type = type self.type = type
...@@ -46,6 +60,12 @@ class YHHKMemberModel: SmartCodable { ...@@ -46,6 +60,12 @@ class YHHKMemberModel: SmartCodable {
self.isCheck = isCheck self.isCheck = isCheck
self.url = url self.url = url
self.approvalDate = approvalDate self.approvalDate = approvalDate
self.isSelected = isSelected
}
func copy(with zone: NSZone? = nil) -> Any {
return YHHKMemberModel(id: self.id, name: self.name, type: self.type, fileNum: self.fileNum, birthday: self.birthday, isCheck: self.isCheck, url: self.url, approvalDate: self.approvalDate, isSelected: isSelected)
} }
func isAtLeast11Years() -> Bool { func isAtLeast11Years() -> Bool {
......
//
// YHMakeCertificatePlaceModel.swift
// galaxy
//
// Created by edy on 2024/8/23.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import SmartCodable
class YHMakeCertificatePlaceModel: SmartCodable {
var id: Int = 0
var name: String = ""
// 自定义
var isSelect: Bool = false
required init() {
}
}
//
// YHCancelAppointAlertView.swift
// galaxy
//
// Created by edy on 2024/8/23.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import AttributedString
class YHCancelAppointAlertView: UIView {
let baseTag = 9527
var selectBlock:((Bool)->())?
var memberNamesText: String = "" {
didSet {
let a: ASAttributedString = .init("取消预约后,不可恢复,您可重新预约!成员:", .font(UIFont.PFSC_R(ofSize: 14)),.foreground(UIColor.mainTextColor(alpha: 0.7)))
let b: ASAttributedString = .init("\(memberNamesText)", .font(UIFont.PFSC_B(ofSize: 14)),.foreground(UIColor.brandMainColor))
detailLabel.attributed.text = a+b
}
}
// 底层蒙版
lazy var blackMaskView: UIView = {
let view = UIView()
view.backgroundColor = .alertMaskColor
return view
}()
lazy var whiteContentView: UIView = {
let view = UIView()
view.backgroundColor = .white
view.layer.cornerRadius = kCornerRadius6
return view
}()
lazy var iconImgView: UIImageView = {
let view = UIImageView(image: UIImage(named: "cs_family_risk"))
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 detailLabel: UILabel = {
var label = UILabel()
label.numberOfLines = 0
label.font = UIFont.PFSC_R(ofSize: 14.0)
return label
}()
lazy var cancelBtn: UIButton = {
let button = UIButton()
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 14)
button.setTitle("否", for: .normal)
button.setTitleColor(UIColor.white, for: .normal)
button.backgroundColor = .brandMainColor
button.tag = baseTag + 0
button.layer.cornerRadius = kCornerRadius3
return button
}()
lazy var confirmBtn: UIButton = {
let button = UIButton()
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 14)
button.setTitle("是", for: .normal)
button.setTitleColor(UIColor.brandMainColor, for: .normal)
button.backgroundColor = .white
button.layer.borderWidth = 1.0
button.tag = baseTag + 1
button.layer.borderColor = UIColor.brandMainColor.cgColor
button.layer.cornerRadius = kCornerRadius3
return button
}()
@objc func didConfirmBtnClicked(_ sender:UIButton) {
let tag = sender.tag-self.baseTag
dismiss()
selectBlock?(tag == 1)
}
static func alertView() -> YHCancelAppointAlertView {
let view = YHCancelAppointAlertView(frame: UIScreen.main.bounds)
return view
}
@objc func show() {
UIApplication.shared.yhKeyWindow()?.addSubview(self)
}
@objc func dismiss() {
self.removeFromSuperview()
}
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(iconImgView)
whiteContentView.addSubview(titleLabel)
whiteContentView.addSubview(detailLabel)
whiteContentView.addSubview(confirmBtn)
whiteContentView.addSubview(cancelBtn)
confirmBtn.addTarget(self, action: #selector(didConfirmBtnClicked(_:)), for: .touchUpInside)
cancelBtn.addTarget(self, action: #selector(didConfirmBtnClicked(_:)), for: .touchUpInside)
blackMaskView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
whiteContentView.snp.makeConstraints { make in
make.left.equalTo(38)
make.right.equalTo(-38)
make.centerY.equalToSuperview()
}
iconImgView.snp.makeConstraints { make in
make.width.height.equalTo(53)
make.top.equalTo(30)
make.centerX.equalToSuperview()
}
titleLabel.snp.makeConstraints { make in
make.top.equalTo(iconImgView.snp.bottom).offset(16)
make.height.equalTo(24)
make.left.equalTo(21)
make.right.equalTo(-21)
}
detailLabel.snp.makeConstraints { make in
make.left.equalTo(21)
make.right.equalTo(-21)
make.top.equalTo(titleLabel.snp.bottom).offset(8)
}
confirmBtn.snp.makeConstraints { make in
make.top.equalTo(detailLabel.snp.bottom).offset(30)
make.left.equalTo(21)
make.right.equalTo(cancelBtn.snp.left).offset(-8)
make.bottom.equalTo(-21)
make.height.equalTo(45)
make.width.equalTo(cancelBtn)
}
cancelBtn.snp.makeConstraints { make in
make.centerY.equalTo(confirmBtn)
make.height.equalTo(45)
make.right.equalTo(-21)
}
}
}
//
// YHHKPlaceInfoCell.swift
// galaxy
//
// Created by edy on 2024/8/23.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHHKPlaceInfoCell: UITableViewCell {
static let cellReuseIdentifier = "YHHKPlaceInfoCell"
let selectTextColor = UIColor.mainTextColor
let unselectTextColor = UIColor.mainTextColor(alpha: 0.3)
let selectFont = UIFont.PFSC_M(ofSize: 14)
let unselectFont = UIFont.PFSC_R(ofSize: 14)
let selectBgColor = UIColor.init(hex: 0xF0F4FB)
let unselectBgColor = UIColor.white
func updateModel(_ model: YHMakeCertificatePlaceModel) {
detailLabel.text = model.name
detailLabel.textColor = model.isSelect ? selectTextColor : unselectTextColor
detailLabel.font = model.isSelect ? selectFont : unselectFont
whiteView.backgroundColor = model.isSelect ? selectBgColor : unselectBgColor
}
lazy var whiteView: UIView = {
let view = UIView()
view.backgroundColor = unselectBgColor
view.layer.cornerRadius = 3.0
return view
}()
lazy var detailLabel: UILabel = {
let label = UILabel()
label.numberOfLines = 0
label.textColor = self.unselectTextColor
label.font = self.unselectFont
return label
}()
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
func setupUI() {
self.selectionStyle = .none
self.backgroundColor = .clear
self.contentView.backgroundColor = .clear
contentView.addSubview(self.whiteView)
self.whiteView.addSubview(detailLabel)
whiteView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
detailLabel.snp.makeConstraints { make in
make.left.equalTo(16)
make.right.equalTo(-16)
make.top.equalTo(12)
make.bottom.equalTo(-12)
}
}
}
...@@ -12,30 +12,43 @@ class YHInfoItemSelectSheetView: UIView { ...@@ -12,30 +12,43 @@ class YHInfoItemSelectSheetView: UIView {
var titleMaxWidth = 112.0 var titleMaxWidth = 112.0
var clickBlock: (()->())?
var title: String = "" { var title: String = "" {
didSet { didSet {
titleLabel.text = title titleLabel.text = title
} }
} }
var placeHolder: String = ""
var detail: String = "" { var detail: String = "" {
didSet { didSet {
if detail.isEmpty {
// 显示placeHolder
detailLabel.text = self.placeHolder
detailLabel.textColor = .placeHolderColor
detailLabel.textAlignment = .right
return
}
detailLabel.text = detail detailLabel.text = detail
detailLabel.textColor = .mainTextColor
detailLabel.textAlignment = .left
} }
} }
var isShowDetailOneline:Bool = false { var isShowDetailOneline:Bool = false {
didSet { didSet {
detailLabel.textAlignment = isShowDetailOneline ? .right : .left // detailLabel.textAlignment = isShowDetailOneline ? .right : .left
detailLabel.numberOfLines = isShowDetailOneline ? 1 : 0 detailLabel.numberOfLines = isShowDetailOneline ? 1 : 0
detailLabel.snp.remakeConstraints { make in detailLabel.snp.remakeConstraints { make in
make.top.equalTo(16) make.top.equalTo(16)
make.left.equalTo(titleLabel.snp.right)
make.right.equalTo(arrowImgView.snp.left) make.right.equalTo(arrowImgView.snp.left)
make.bottom.equalTo(-16) make.bottom.equalTo(-16)
if isShowDetailOneline { if isShowDetailOneline {
make.height.equalTo(20) make.height.equalTo(20)
} else {
make.left.equalTo(titleLabel.snp.right)
} }
} }
self.setNeedsLayout() self.setNeedsLayout()
...@@ -53,13 +66,15 @@ class YHInfoItemSelectSheetView: UIView { ...@@ -53,13 +66,15 @@ class YHInfoItemSelectSheetView: UIView {
let label = UILabel() let label = UILabel()
label.numberOfLines = 0 label.numberOfLines = 0
label.font = UIFont.PFSC_R(ofSize: 14) label.font = UIFont.PFSC_R(ofSize: 14)
label.textColor = .mainTextColor
return label return label
}() }()
lazy var detailLabel: UILabel = { private lazy var detailLabel: UILabel = {
let label = UILabel() let label = UILabel()
label.numberOfLines = 0 label.numberOfLines = 0
label.font = UIFont.PFSC_M(ofSize: 14) label.font = UIFont.PFSC_M(ofSize: 14)
label.textColor = .mainTextColor
return label return label
}() }()
...@@ -76,12 +91,19 @@ class YHInfoItemSelectSheetView: UIView { ...@@ -76,12 +91,19 @@ class YHInfoItemSelectSheetView: UIView {
required init?(coder: NSCoder) { required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
} }
@objc func didSelectView() {
clickBlock?()
}
func createUI() { func createUI() {
self.addSubview(titleLabel) self.addSubview(titleLabel)
self.addSubview(detailLabel) self.addSubview(detailLabel)
self.addSubview(arrowImgView) self.addSubview(arrowImgView)
self.addSubview(lineView) self.addSubview(lineView)
let tap = UITapGestureRecognizer(target: self, action: #selector(didSelectView))
self.addGestureRecognizer(tap)
lineView.snp.makeConstraints { make in lineView.snp.makeConstraints { make in
make.left.equalTo(0) make.left.equalTo(0)
......
...@@ -52,7 +52,7 @@ class YHSelectApplicantCell: UICollectionViewCell { ...@@ -52,7 +52,7 @@ class YHSelectApplicantCell: UICollectionViewCell {
func updateApplicantInfo(_ applicant: YHHKMemberModel) { func updateApplicantInfo(_ applicant: YHHKMemberModel) {
nameLabel.text = applicant.name nameLabel.text = applicant.name
let imgName = applicant.isSelectedFlag ? "login_privacy_agree" : "login_privacy_disagree_glay" let imgName = applicant.isSelected ? "login_privacy_agree" : "login_privacy_disagree_glay"
selectImgView.image = UIImage(named: imgName) selectImgView.image = UIImage(named: imgName)
} }
} }
...@@ -9,16 +9,6 @@ ...@@ -9,16 +9,6 @@
import UIKit import UIKit
import AttributedString import AttributedString
class YHSelectApplicantInfo {
var name: String = ""
var isSelect: Bool = false
init(name: String, isSelect: Bool) {
self.name = name
self.isSelect = isSelect
}
}
class YHSelectApplicantGroupCell: UITableViewCell { class YHSelectApplicantGroupCell: UITableViewCell {
static let cellReuseIdentifier = "YHSelectApplicantGroupCell" static let cellReuseIdentifier = "YHSelectApplicantGroupCell"
...@@ -30,6 +20,9 @@ class YHSelectApplicantGroupCell: UITableViewCell { ...@@ -30,6 +20,9 @@ class YHSelectApplicantGroupCell: UITableViewCell {
} }
} }
// param 选中的用户 是否选中 选中的用户是第几批
var selectBlock: ((_ member: YHHKMemberModel, _ isSelect: Bool, _ groupIndex: Int)->())?
var isShowSelectUserView: Bool = true { var isShowSelectUserView: Bool = true {
didSet { didSet {
...@@ -104,8 +97,8 @@ class YHSelectApplicantGroupCell: UITableViewCell { ...@@ -104,8 +97,8 @@ class YHSelectApplicantGroupCell: UITableViewCell {
lazy var collectionView: UICollectionView = { lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout() let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical layout.scrollDirection = .vertical
layout.minimumInteritemSpacing = 0 layout.minimumInteritemSpacing = 0.0
layout.minimumLineSpacing = 16 layout.minimumLineSpacing = 16.0
let collectView = UICollectionView(frame:.zero, collectionViewLayout: layout) let collectView = UICollectionView(frame:.zero, collectionViewLayout: layout)
collectView.delegate = self collectView.delegate = self
...@@ -123,7 +116,12 @@ class YHSelectApplicantGroupCell: UITableViewCell { ...@@ -123,7 +116,12 @@ class YHSelectApplicantGroupCell: UITableViewCell {
view.options = ["具体日期", "具体时段"] view.options = ["具体日期", "具体时段"]
view.selectIndex = 0 view.selectIndex = 0
view.selectBlock = { view.selectBlock = {
index in [weak self] index in
guard let self = self else { return }
if let model = dataModel?.model {
model.dateTye = index
self.updateUI()
}
} }
return view return view
}() }()
...@@ -132,14 +130,46 @@ class YHSelectApplicantGroupCell: UITableViewCell { ...@@ -132,14 +130,46 @@ class YHSelectApplicantGroupCell: UITableViewCell {
let view = YHInfoItemSelectSheetView(frame: .zero) let view = YHInfoItemSelectSheetView(frame: .zero)
view.isShowDetailOneline = true view.isShowDetailOneline = true
view.title = "具体日期" view.title = "具体日期"
view.detail = "2024-03-14 ~ 2024-03-14" view.placeHolder = "请选择具体日期"
view.detail = ""
view.clickBlock = {
[weak self] in
guard let self = self else { return }
if let model = dataModel?.model {
if model.dateTye == 0 { // 选择具体时间
self.selectDetailDate()
} else { // 具体时段
self.selectDurationTime()
}
}
}
return view return view
}() }()
lazy var locationSelectView: YHInfoItemSelectSheetView = { lazy var locationSelectView: YHInfoItemSelectSheetView = {
let view = YHInfoItemSelectSheetView(frame: .zero) let view = YHInfoItemSelectSheetView(frame: .zero)
view.title = "港府办证地点" view.title = "港府办证地点"
view.detail = "九龙办事处(长沙湾) " view.placeHolder = "请选择"
view.detail = ""
view.clickBlock = {
[weak self] in
guard let self = self else { return }
if let arr = dataModel?.placeList, arr.count > 0 {
let listView = YHSelectHKPlaceListView.listView()
listView.listArr = arr
listView.selectBlock = {
[weak self] selectPlace in
guard let self = self else { return }
view.detail = selectPlace.name
if let model = dataModel?.model {
model.hkPlace = selectPlace
self.updateUI()
}
}
listView.show()
}
}
return view return view
}() }()
...@@ -238,7 +268,8 @@ extension YHSelectApplicantGroupCell: UICollectionViewDelegate, UICollectionView ...@@ -238,7 +268,8 @@ extension YHSelectApplicantGroupCell: UICollectionViewDelegate, UICollectionView
// 返回每个单元格的大小 // 返回每个单元格的大小
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: floorl(collectionView.width/3.0), height: 20) let listWidth = KScreenWidth-(14.0+18.0+16.0)*2.0
return CGSize(width: floorl(listWidth/3.0), height: 20)
} }
// 返回自定义单元格 // 返回自定义单元格
...@@ -256,10 +287,18 @@ extension YHSelectApplicantGroupCell: UICollectionViewDelegate, UICollectionView ...@@ -256,10 +287,18 @@ extension YHSelectApplicantGroupCell: UICollectionViewDelegate, UICollectionView
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let arr = dataModel?.model?.arr { if let dataModel = self.dataModel, let model = dataModel.model {
if 0 <= indexPath.item && indexPath.item < arr.count { if 0 <= indexPath.item && indexPath.item < model.arr.count {
let text = arr[indexPath.item] let member = model.arr[indexPath.item]
printLog(text) let selectArr = model.arr.filter {
return $0.isSelected == true
}
if selectArr.count == 1, member.isSelected == true, member.id == selectArr[0].id {
// 分组中仅有一个选中用户 且点击的是该用户
YHHUD.flash(message: "一个批次最少需要选中一个申请个人")
return
}
selectBlock?(member, !member.isSelected, dataModel.itemIndex)
} }
} }
} }
...@@ -272,13 +311,35 @@ private extension YHSelectApplicantGroupCell { ...@@ -272,13 +311,35 @@ private extension YHSelectApplicantGroupCell {
return return
} }
let a: ASAttributedString = .init("*", .font(UIFont.PFSC_M(ofSize: 17)),.foreground(UIColor.failColor)) let a: ASAttributedString = .init("*", .font(UIFont.PFSC_M(ofSize: 17)),.foreground(UIColor.failColor))
let b: ASAttributedString = .init("请您确认第\(model.itemIndex + 1)批赴港信息", .font(UIFont.PFSC_M(ofSize: 17)),.foreground(UIColor.mainTextColor)) let b: ASAttributedString = .init("请您确认第\(model.itemIndex + 1)批赴港信息", .font(UIFont.PFSC_M(ofSize: 17)),.foreground(UIColor.mainTextColor))
titleLabel.attributed.text = a+b titleLabel.attributed.text = a+b
collectionView.reloadData() collectionView.reloadData()
collectionView.snp.updateConstraints { make in let isShowSelectList = self.isShowSelectUserView
make.height.equalTo(self.getCollectionViewHeight()) self.isShowSelectUserView = isShowSelectList
// 时间选择UI更新
optionsView.selectIndex = 0
if let model = dataModel?.model {
if model.dateTye == 0 { // 具体时间
optionsView.selectIndex = 0
timeSelectView.placeHolder = "请选择具体日期"
timeSelectView.detail = model.detailDateStr
} else { // 具体时段
optionsView.selectIndex = 1
timeSelectView.placeHolder = "请选择具体时段"
if !model.startDateStr.isEmpty, !model.endDateStr.isEmpty {
self.timeSelectView.detail = "\(model.startDateStr) ~ \(model.endDateStr)"
} else {
self.timeSelectView.detail = ""
}
}
// 办证地点更新
self.locationSelectView.detail = model.hkPlace.name
} }
} }
...@@ -299,4 +360,47 @@ private extension YHSelectApplicantGroupCell { ...@@ -299,4 +360,47 @@ private extension YHSelectApplicantGroupCell {
} }
return 0.0 return 0.0
} }
// 选择具体日期
func selectDetailDate() {
YHDatePickView.show(type: .yyyymmdd, title:"选择意向赴港时间".local, lastIsTaday: false, currentDay:"") {
[weak self] dateStr in
guard let self = self else { return }
timeSelectView.detail = dateStr
if let model = dataModel?.model {
model.detailDateStr = dateStr
}
}
}
// 选择时间段
func selectDurationTime() {
let view = YHRangeDatePickerSheetView.sheetView()
view.block = {
[weak self] (startDate,endDate) in
guard let self = self else { return }
let format = DateFormatter()
format.dateFormat = "yyyy-MM-dd"
let startDateStr = format.string(from: startDate)
let endDateStr = format.string(from: endDate)
printLog("\(startDateStr) ~ \(endDateStr)")
if !startDateStr.isEmpty, !endDateStr.isEmpty {
self.timeSelectView.detail = "\(startDateStr) ~ \(endDateStr)"
} else {
self.timeSelectView.detail = ""
}
if let model = dataModel?.model {
model.startDateStr = startDateStr
model.endDateStr = endDateStr
}
}
view.show() //for test hjl
}
} }
//
// YHSelectHKPlaceListView.swift
// galaxy
//
// Created by edy on 2024/8/23.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHSelectHKPlaceListView: UIView {
static func listView() -> YHSelectHKPlaceListView {
let view = YHSelectHKPlaceListView(frame: UIScreen.main.bounds)
return view
}
var selectModel: YHMakeCertificatePlaceModel? = nil
var selectBlock: ((YHMakeCertificatePlaceModel)->())?
var listArr:[YHMakeCertificatePlaceModel] = [] {
didSet {
self.tableView.reloadData()
}
}
// 底层蒙版
lazy var blackMaskView: UIView = {
let view = UIView()
view.backgroundColor = .alertMaskColor
return view
}()
lazy var whiteContentView: UIView = {
let view = UIView()
view.backgroundColor = .white
view.layer.cornerRadius = kCornerRadius6
return view
}()
lazy var tableView: UITableView = {
let tableView = UITableView(frame: CGRect.zero, style:.grouped)
if #available(iOS 15.0, *) {
tableView.sectionHeaderTopPadding = 0.0
}
tableView.estimatedSectionHeaderHeight = 0.1
tableView.estimatedSectionFooterHeight = 0.1
tableView.contentInsetAdjustmentBehavior = .never
tableView.showsVerticalScrollIndicator = false
tableView.backgroundColor = .clear
tableView.separatorStyle = .none
tableView.bounces = false
tableView.register(YHHKPlaceInfoCell.self, forCellReuseIdentifier: YHHKPlaceInfoCell.cellReuseIdentifier)
tableView.delegate = self
tableView.dataSource = self
tableView.isScrollEnabled = false
return tableView
}()
var titleLabel: UILabel = {
let label = UILabel()
label.text = "港府办证地点选择"
label.font = UIFont.PFSC_M(ofSize: 17)
label.textColor = UIColor.mainTextColor
label.textAlignment = .center
return label
}()
var cancelBtn: UIButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 14)
button.contentHorizontalAlignment = .center
button.setTitle("取消", for: .normal)
button.setTitleColor( UIColor.mainTextColor, for: .normal)
return button
}()
var confirmBtn: UIButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 14)
button.contentHorizontalAlignment = .center
button.setTitle("确定", for: .normal)
button.setTitleColor( UIColor.brandMainColor, for: .normal)
return button
}()
var lineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor.separatorColor
return view
}()
func show() {
UIApplication.shared.yhKeyWindow()?.addSubview(self)
}
@objc func dismiss() {
self.removeFromSuperview()
}
@objc func sure() {
if let model = self.selectModel {
selectBlock?(model)
}
self.dismiss()
}
override init(frame: CGRect) {
super.init(frame: frame)
createUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func createUI() {
self.addSubview(blackMaskView)
self.addSubview(whiteContentView)
whiteContentView.addSubview(titleLabel)
whiteContentView.addSubview(cancelBtn)
whiteContentView.addSubview(confirmBtn)
whiteContentView.addSubview(lineView)
whiteContentView.addSubview(tableView)
cancelBtn.addTarget(self, action: #selector(dismiss), for: .touchUpInside)
confirmBtn.addTarget(self, action: #selector(sure), for: .touchUpInside)
blackMaskView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
whiteContentView.snp.makeConstraints { make in
make.height.equalTo(403)
make.left.right.bottom.equalToSuperview()
}
titleLabel.snp.makeConstraints { make in
make.top.equalTo(0)
make.height.equalTo(51)
make.centerX.equalToSuperview()
}
cancelBtn.snp.makeConstraints { make in
make.left.equalTo(16)
make.height.equalTo(51)
make.width.equalTo(38)
make.centerY.equalTo(titleLabel)
}
confirmBtn.snp.makeConstraints { make in
make.right.equalTo(-16)
make.height.equalTo(51)
make.width.equalTo(38)
make.centerY.equalTo(titleLabel)
}
lineView.snp.makeConstraints { make in
make.left.equalTo(16)
make.top.equalTo(titleLabel.snp.bottom)
make.height.equalTo(1)
make.right.equalTo(-16)
}
tableView.snp.makeConstraints { make in
make.top.equalTo(lineView.snp.bottom).offset(12)
make.left.equalTo(16)
make.right.equalTo(-16)
make.bottom.equalTo(-34)
}
}
}
extension YHSelectHKPlaceListView: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return listArr.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: YHHKPlaceInfoCell.cellReuseIdentifier, for: indexPath) as! YHHKPlaceInfoCell
if 0 <= indexPath.row && indexPath.row < listArr.count {
let model = listArr[indexPath.row]
cell.updateModel(model)
}
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if 0 <= indexPath.row && indexPath.row < listArr.count {
let model = listArr[indexPath.row]
selectModel = model
for item in listArr {
item.isSelect = (model.id == item.id)
}
self.tableView.reloadData()
}
}
private func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> CGFloat {
return 0.1
}
private func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> CGFloat {
return 0.1
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let view = UIView()
return view
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView()
return view
}
}
...@@ -12,8 +12,63 @@ class YHCerAppointViewModel: NSObject { ...@@ -12,8 +12,63 @@ class YHCerAppointViewModel: NSObject {
var serviceArr: [YHServiceItem] = [] var serviceArr: [YHServiceItem] = []
var hkUsers: [YHHKMemberModel] = [] var hkUsers: [YHHKMemberModel] = []
var placeList: [YHMakeCertificatePlaceModel] = []
var appointResult: YHAppointHKResultModel = YHAppointHKResultModel() var appointResult: YHAppointHKResultModel = YHAppointHKResultModel()
//香港节假日
var dataModelForHkHolidays : YHHKLegaldaysModel?
var isHKHolidaysOKFlag : Bool = false
var isRequestFlag : Bool = false
// 获取香港节假日
func getHKHolidays(callback:((_ success: Bool, _ error: YHErrorModel?)->())?) {
if isHKHolidaysOKFlag {
return
}
if isRequestFlag {
return
}
isRequestFlag = true
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.AppointHK.hkholidaysApi
let _ = YHNetRequest.getRequest(url: strUrl) { [weak self] json, code in
self?.isRequestFlag = false
//1. json字符串 转 对象
guard let self = self else { return }
printLog("model 是 ==> \(json)")
if json.code == 200 {
let dic = json.data
guard let resultModel = YHHKLegaldaysModel.deserialize(dict: dic as? [AnyHashable : Any]) else {
let err = YHErrorModel(errorCode: YHErrorCode.dictParseError.rawValue, errorMsg: YHErrorCode.dictParseError.description())
callback?(false, err)
return
}
self.isHKHolidaysOKFlag = true
self.dataModelForHkHolidays = resultModel
callback?(true, nil)
} else {
let err = YHErrorModel(errorCode: Int32(json.code), errorMsg: json.msg.isEmpty ? "" : json.msg)
self.hkUsers = []
callback?(false, err)
}
} failBlock: { err in
self.isRequestFlag = false
self.hkUsers = []
callback?(false, err)
}
}
// 获取香港服务列表 // 获取香港服务列表
func getServicelist(_ callBack: @escaping (_ success: Bool,_ error: YHErrorModel?)->()) { func getServicelist(_ callBack: @escaping (_ success: Bool,_ error: YHErrorModel?)->()) {
...@@ -212,6 +267,45 @@ class YHCerAppointViewModel: NSObject { ...@@ -212,6 +267,45 @@ class YHCerAppointViewModel: NSObject {
callback?(false) callback?(false)
} }
} }
func getMakeCerPlaceList(callback:((_ success: Bool, _ error: YHErrorModel?)->())?) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.AppointHK.cerPlaceList
let _ = YHNetRequest.getRequest(url: strUrl) { [weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
printLog("model 是 ==> \(json)")
if json.code == 200 {
let dic = json.data
guard let arr = [YHMakeCertificatePlaceModel].deserialize(array: dic as? [Any]) else {
let err = YHErrorModel(errorCode: YHErrorCode.dictParseError.rawValue, errorMsg: YHErrorCode.dictParseError.description())
self.placeList = []
callback?(false, err)
return
}
self.placeList.removeAll()
for user in arr {
if let user = user {
self.placeList.append(user)
}
}
callback?(true, nil)
} else {
let err = YHErrorModel(errorCode: Int32(json.code), errorMsg: json.msg.isEmpty ? "" : json.msg)
self.placeList = []
callback?(false, err)
}
} failBlock: { err in
self.placeList = []
callback?(false, err)
}
}
} }
......
...@@ -131,7 +131,7 @@ private extension YHVisaPaymentVC { ...@@ -131,7 +131,7 @@ private extension YHVisaPaymentVC {
} }
} }
orderID = 133874//for test hjl // orderID = 133874//for test hjl
view.addSubview(tableView) view.addSubview(tableView)
view.addSubview(bottomView) view.addSubview(bottomView)
......
...@@ -90,7 +90,14 @@ extension YHPayMemberContentItems { ...@@ -90,7 +90,14 @@ extension YHPayMemberContentItems {
make.top.equalTo(lastView.snp.bottom).offset(kMargin) make.top.equalTo(lastView.snp.bottom).offset(kMargin)
make.left.right.equalToSuperview() make.left.right.equalToSuperview()
} }
item.updateUI(title: "可缴费时间段:",detail: "\(model.min_pay_time) - \(model.max_pay_time)",showBtn: false)
if model.min_pay_time.isYHEmpty() {
item.updateUI(title: "可缴费时间段:",detail: "\(model.max_pay_time)前",showBtn: false)
} else {
item.updateUI(title: "可缴费时间段:",detail: "\(model.min_pay_time) - \(model.max_pay_time)",showBtn: false)
}
lastView = item lastView = item
} }
......
...@@ -101,20 +101,43 @@ private extension YHVisaPayTypeCell { ...@@ -101,20 +101,43 @@ private extension YHVisaPayTypeCell {
PHPhotoLibrary.requestAuthorization { status in PHPhotoLibrary.requestAuthorization { status in
if status == .authorized { if status == .authorized {
// 保存图片到相册 // 保存图片到相册
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil) // 保存UIImage对象到相册
DispatchQueue.main.async { UIImageWriteToSavedPhotosAlbum(image, self, #selector(self.image(_:didFinishSavingWithError:contextInfo:)), nil)
YHHUD.flash(message: "保存成功") //
} //// DispatchQueue.main.async {
//// YHHUD.flash(message: "保存成功")
//// }
//
//
// UIImageWriteToSavedPhotosAlbum(
} else { } else {
YHHUD.flash(message: "保存失败,请检查系统权限") YHHUD.flash(message: "保存失败,请检查系统权限")
} }
} }
} }
@objc func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeMutableRawPointer?) {
// 保存完成后的处理逻辑
if let error = error {
print("保存照片失败:\(error.localizedDescription)")
YHHUD.flash(message: "保存失败")
} else {
print("保存照片成功")
YHHUD.flash(message: "保存成功")
}
}
/// 长按 /// 长按
@objc func onLongPress(_ press: UILongPressGestureRecognizer) { @objc func onLongPress(_ press: UILongPressGestureRecognizer) {
if press.state == .began { if press.state == .began {
saveImage(UIImage(named: "visaPay_qr") ?? UIImage()) if let image = self.qrCodeImageView.image {
saveImage(image)
} else {
YHHUD.flash(message: "保存失败")
}
} }
} }
......
...@@ -346,20 +346,13 @@ extension YHMyViewController : UITableViewDelegate, UITableViewDataSource { ...@@ -346,20 +346,13 @@ extension YHMyViewController : UITableViewDelegate, UITableViewDataSource {
return return
} }
if true {
// if true {
// // test dy
//// if let orderID = UserDefaults.standard.value(forKey: "orderIdForPreview") as? Int {
//// let vc = YHFamilyInfoConfirmViewController()
//// vc.orderId = orderID
//// self.navigationController?.pushViewController(vc)
//// }
//
let vc = YHCertificateAppointViewController() let vc = YHCertificateAppointViewController()
vc.orderId = 151085 vc.orderId = 151085
self.navigationController?.pushViewController(vc) self.navigationController?.pushViewController(vc)
return return
// } }
let item: PersonalModuleItem = items[indexPath.row] let item: PersonalModuleItem = items[indexPath.row]
switch item.type { switch item.type {
......
...@@ -277,5 +277,23 @@ extension String { ...@@ -277,5 +277,23 @@ extension String {
} }
return nil return nil
//方法二 保存图片的时候有问题
// let data = self.data(using: String.Encoding.ascii)
// let filter = CIFilter(name: "CIQRCodeGenerator")
// filter?.setValue(data, forKey: "inputMessage")
// filter?.setValue("H", forKey: "inputCorrectionLevel") // 设置二维码的容错率
//
// // 获取生成的二维码CIImage
// guard let outputImage = filter?.outputImage else { return nil }
//
// // 将CIImage转换为UIImage
// let scaleX = 5.0
// let scaleY = 5.0
// let transformedImage = outputImage.transformed(by: CGAffineTransform(scaleX: scaleX, y: scaleY))
// let qrCodeImage = UIImage(ciImage: transformedImage)
//
// return qrCodeImage
} }
} }
...@@ -434,7 +434,11 @@ class YHAllApiName { ...@@ -434,7 +434,11 @@ class YHAllApiName {
} }
//赴港办证预约
struct AppointHK { struct AppointHK {
// 获取香港节假日
static let hkholidaysApi = "super-app/holiday/get"
// 所有赴港人员列表 // 所有赴港人员列表
static let hkMembers = "super-app/order/hk/user" static let hkMembers = "super-app/order/hk/user"
// 获取港府预约结果 // 获取港府预约结果
...@@ -445,7 +449,8 @@ class YHAllApiName { ...@@ -445,7 +449,8 @@ class YHAllApiName {
static let saveNeedGoHK = "super-app/order/hk/save-need-to-hk" static let saveNeedGoHK = "super-app/order/hk/save-need-to-hk"
// 取消预约 // 取消预约
static let cancelAppoint = "super-app/reservation/cancel" static let cancelAppoint = "super-app/reservation/cancel"
// 港府办证地点列表
static let cerPlaceList = "super-app/order/hk/select-position-list"
} }
// 新增受养人 // 新增受养人
......
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "image 56@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "image 56@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
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