Commit aea2e0e4 authored by Steven杜宇's avatar Steven杜宇

// 预约

parent 1a3bbcc2
......@@ -99,12 +99,32 @@ class YHResignAppointTimeMultipleCell: UITableViewCell {
view.clickBlock = {
[weak self] in
guard let self = self else { return }
self.selectDetailDate(title: "选择在港递交时间") {
[weak self] dateStr in
self.getDateInfo { [weak self] startDate, endDate in
guard let self = self else { return }
self.model.ready_to_submit_at = "2024-11-04 14:00"
let view = YHRangeDatePickerSheetView2.sheetView()
view.viewTitle = "选择预约在港递交时间"
view.minDateStr = startDate
view.maxDateStr = endDate
view.block = {
[weak self] (selectDateStr, hourTime) in
guard let self = self else { return }
let selectTimeStr = "\(selectDateStr):\(hourTime)"
printLog("\(selectTimeStr)")
// 选择在港递交时间
if self.model.leave_hk_at.isEmpty {
self.model.ready_to_submit_at = selectTimeStr
} else {
if self.compareDates(selectTimeStr, self.model.leave_hk_at) == .large {
// selectTimeStr > leave_hk_at
YHHUD.flash(message: "预约在港递交时间必须不大于预计离港时间")
return
}
self.model.ready_to_submit_at = selectTimeStr
}
self.refreshBlock?()
}
view.show()
}
}
return view
}()
......@@ -119,11 +139,33 @@ class YHResignAppointTimeMultipleCell: UITableViewCell {
view.clickBlock = {
[weak self] in
guard let self = self else { return }
self.selectDetailDate(title: "选择离港时间") {
[weak self] dateStr in
self.getDateInfo { [weak self] startDate, endDate in
guard let self = self else { return }
self.model.leave_hk_at = "2024-12-04 17:00"
let view = YHRangeDatePickerSheetView2.sheetView()
view.viewTitle = "选择预计离港时间"
view.minDateStr = startDate
view.maxDateStr = endDate
view.block = {
[weak self] (selectDateStr, hourTime) in
guard let self = self else { return }
let selectTimeStr = "\(selectDateStr):\(hourTime)"
printLog("\(selectTimeStr)")
// 选择离港时间
if self.model.ready_to_submit_at.isEmpty {
self.model.leave_hk_at = selectTimeStr
} else {
if self.compareDates(selectTimeStr, self.model.ready_to_submit_at) == .small {
// selectTimeStr < ready_to_submit_at
YHHUD.flash(message: "预计离港时间预约必须不小于在港递交时间")
return
}
self.model.leave_hk_at = selectTimeStr
}
self.refreshBlock?()
}
view.show()
}
}
return view
......@@ -140,6 +182,7 @@ class YHResignAppointTimeMultipleCell: UITableViewCell {
return view
}()
required init?(coder: NSCoder) {
super.init(coder: coder)
}
......@@ -149,76 +192,6 @@ class YHResignAppointTimeMultipleCell: UITableViewCell {
setupUI()
}
func updateModel(_ model: YHResignAppointTimeSettingModel) {
self.model = model
let mustTag: ASAttributedString = .init("* ", .font(UIFont.PFSC_M(ofSize: 17)),.foreground(UIColor.failColor))
var title: ASAttributedString = .init("请确认第\(String.convertNumberToChineseText(model.itemIndex+1))批赴港递交信息", .font(UIFont.PFSC_M(ofSize: 17)),.foreground(UIColor.mainTextColor))
title = mustTag + title
titleLabel.attributed.text = title
subTitleLabel.text = "选择第\(String.convertNumberToChineseText(model.itemIndex+1))批赴港递交的申请人"
self.leaveHKSwithView.switchBtn.setOn(self.model.notleaveHK, animated: false)
self.arr.removeAll()
self.arr.append(contentsOf: model.users)
// 预计离港时间控件显示逻辑
let isHiddenLeaveHKTime = self.model.notleaveHK
// 时间控件显示
submitTimeItemView.detail = model.getSubmitHKTime()
leaveTimeItemView.detail = model.getLeaveHKTime()
// 时间控件红色提示显示
submitTimeItemView.isNeedShowErrorTips = (model.isClickSubmit && model.ready_to_submit_at.isEmpty)
leaveTimeItemView.isNeedShowErrorTips = (model.isClickSubmit && model.leave_hk_at.isEmpty)
leaveTimeItemView.removeFromSuperview()
leaveTimeItemView.snp.removeConstraints()
if isHiddenLeaveHKTime {
leaveHKSwithView.snp.remakeConstraints { make in
make.left.equalTo(18)
make.right.equalTo(-18)
make.top.equalTo(submitTimeItemView.snp.bottom)
make.bottom.equalToSuperview()
}
} else {
whiteContentView.addSubview(leaveTimeItemView)
leaveTimeItemView.snp.remakeConstraints { make in
make.left.equalTo(18)
make.right.equalTo(-18)
make.top.equalTo(submitTimeItemView.snp.bottom)
}
leaveHKSwithView.snp.remakeConstraints { make in
make.left.equalTo(18)
make.right.equalTo(-18)
make.top.equalTo(leaveTimeItemView.snp.bottom)
make.bottom.equalToSuperview()
}
}
// 申请人选择列表高度显示
collectionView.reloadData()
collectionView.snp.updateConstraints { make in
make.height.equalTo(self.getCollectionViewHeight())
}
self.setNeedsLayout()
self.layoutIfNeeded()
}
func selectDetailDate(title: String, selectBlock:((_ dateStr: String)->())?) {
YHDatePickView.show(type: .yyyymmdd, title:title, lastIsTaday: false, currentDay:"") {
[weak self] dateStr in
guard let self = self else { return }
selectBlock?(dateStr)
}
}
func setupUI() {
self.selectionStyle = .none
......@@ -299,6 +272,139 @@ class YHResignAppointTimeMultipleCell: UITableViewCell {
}
return height
}
func updateModel(_ model: YHResignAppointTimeSettingModel) {
self.model = model
let mustTag: ASAttributedString = .init("* ", .font(UIFont.PFSC_M(ofSize: 17)),.foreground(UIColor.failColor))
var title: ASAttributedString = .init("请确认第\(String.convertNumberToChineseText(model.itemIndex+1))批赴港递交信息", .font(UIFont.PFSC_M(ofSize: 17)),.foreground(UIColor.mainTextColor))
title = mustTag + title
titleLabel.attributed.text = title
subTitleLabel.text = "选择第\(String.convertNumberToChineseText(model.itemIndex+1))批赴港递交的申请人"
self.leaveHKSwithView.switchBtn.setOn(self.model.notleaveHK, animated: false)
self.arr.removeAll()
self.arr.append(contentsOf: model.users)
// 预计离港时间控件显示逻辑
let isHiddenLeaveHKTime = self.model.notleaveHK
// 时间控件显示
submitTimeItemView.detail = model.getSubmitHKTime()
leaveTimeItemView.detail = model.getLeaveHKTime()
// 时间控件红色提示显示
submitTimeItemView.isNeedShowErrorTips = (model.isClickSubmit && model.ready_to_submit_at.isEmpty)
leaveTimeItemView.isNeedShowErrorTips = (model.isClickSubmit && model.leave_hk_at.isEmpty)
leaveTimeItemView.removeFromSuperview()
leaveTimeItemView.snp.removeConstraints()
if isHiddenLeaveHKTime {
leaveHKSwithView.snp.remakeConstraints { make in
make.left.equalTo(18)
make.right.equalTo(-18)
make.top.equalTo(submitTimeItemView.snp.bottom)
make.bottom.equalToSuperview()
}
} else {
whiteContentView.addSubview(leaveTimeItemView)
leaveTimeItemView.snp.remakeConstraints { make in
make.left.equalTo(18)
make.right.equalTo(-18)
make.top.equalTo(submitTimeItemView.snp.bottom)
}
leaveHKSwithView.snp.remakeConstraints { make in
make.left.equalTo(18)
make.right.equalTo(-18)
make.top.equalTo(leaveTimeItemView.snp.bottom)
make.bottom.equalToSuperview()
}
}
// 申请人选择列表高度显示
collectionView.reloadData()
collectionView.snp.updateConstraints { make in
make.height.equalTo(self.getCollectionViewHeight())
}
self.setNeedsLayout()
self.layoutIfNeeded()
}
func getDateInfo(_ result: ((_ startTime: String, _ endTime: String)->())?) {
// 开始时间和结束时间 都有则都取服务器model时间
// 若开始时间为空则取当前时间
// 若结束时间为空则取当前时间+28天的时间
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm"
var startTimeStr = formatter.string(from: Date())
var endTimeStr = ""
if let date = formatter.date(from: startTimeStr) {
let endTimeStamp = date.timeIntervalSince1970 + (28.0 * 24.0 * 60.0 * 60.0)
endTimeStr = formatter.string(from: Date(timeIntervalSince1970: endTimeStamp))
}
if let firstUser = self.model.users.first {
if !firstUser.stay_deadline_start.isEmpty { // 服务器起始时间不为空
startTimeStr = firstUser.stay_deadline_start
}
if !firstUser.stay_deadline.isEmpty { // 服务器结束时间不为空
endTimeStr = firstUser.stay_deadline
} else {
// 结束时间为空 则设置为开始时间后的28天
// 将字符串转换为 Date 对象
if let date = formatter.date(from: startTimeStr) {
let endTimeStamp = date.timeIntervalSince1970 + (28.0 * 24.0 * 60.0 * 60.0)
endTimeStr = formatter.string(from: Date(timeIntervalSince1970: endTimeStamp))
}
}
}
let duration = "START_DATE: \(startTimeStr) END_DATE: \(endTimeStr)"
printLog("\(duration)")
YHHUD.flash(message:"\(duration)")
result?(startTimeStr, endTimeStr)
}
// dateStr1 >= dateStr2 return true 否则 return false
func compareDates(_ dateStr1: String, _ dateStr2: String) -> YHDateCompareResult {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm"
let dateFormatCount = dateFormatter.dateFormat.count
var dateString1 = dateStr1
if dateString1.count > dateFormatCount {
dateString1 = String(dateString1.prefix(dateFormatCount))
}
var dateString2 = dateStr2
if dateString2.count > dateFormatCount {
dateString2 = String(dateString2.prefix(dateFormatCount))
}
// 将字符串转换为 Date 对象
guard let date1 = dateFormatter.date(from: dateString1),
let date2 = dateFormatter.date(from: dateString2) else {
print("日期格式错误")
YHHUD.flash(message: "日期格式错误")
return .same
}
// 比较日期
if date1 < date2 {
return .small
} else if date1 > date2 {
return .large
}
return .same
}
}
extension YHResignAppointTimeMultipleCell: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
......
......@@ -9,6 +9,12 @@
import UIKit
import AttributedString
enum YHDateCompareResult: Int {
case same = 1
case large = 2
case small = 3
}
class YHResignAppointTimeSingleCell: UITableViewCell {
static let cellReuseIdentifier = "YHResignAppointTimeSingleCell"
......@@ -44,12 +50,32 @@ class YHResignAppointTimeSingleCell: UITableViewCell {
view.clickBlock = {
[weak self] in
guard let self = self else { return }
self.selectDetailDate(title: "选择在港递交时间") {
[weak self] dateStr in
self.getDateInfo { [weak self] startDate, endDate in
guard let self = self else { return }
let view = YHRangeDatePickerSheetView2.sheetView()
view.viewTitle = "选择预约在港递交时间"
view.minDateStr = startDate
view.maxDateStr = endDate
view.block = {
[weak self] (selectDateStr, hourTime) in
guard let self = self else { return }
self.model.ready_to_submit_at = "2024-11-04 17:00"
let selectTimeStr = "\(selectDateStr):\(hourTime)"
printLog("\(selectTimeStr)")
// 选择在港递交时间
if self.model.leave_hk_at.isEmpty {
self.model.ready_to_submit_at = selectTimeStr
} else {
if self.compareDates(selectTimeStr, self.model.leave_hk_at) == .large {
// selectTimeStr > leave_hk_at
YHHUD.flash(message: "预约在港递交时间必须不大于预计离港时间")
return
}
self.model.ready_to_submit_at = selectTimeStr
}
self.refreshBlock?()
}
view.show()//for test hjl
}
}
return view
}()
......@@ -64,11 +90,33 @@ class YHResignAppointTimeSingleCell: UITableViewCell {
view.clickBlock = {
[weak self] in
guard let self = self else { return }
self.selectDetailDate(title: "选择离港时间") {
[weak self] dateStr in
self.getDateInfo { [weak self] startDate, endDate in
guard let self = self else { return }
let view = YHRangeDatePickerSheetView2.sheetView()
view.viewTitle = "选择预计离港时间"
view.minDateStr = startDate
view.maxDateStr = endDate
view.block = {
[weak self] (selectDateStr, hourTime) in
guard let self = self else { return }
self.model.leave_hk_at = "2024-12-04 17:00"
let selectTimeStr = "\(selectDateStr):\(hourTime)"
printLog("\(selectTimeStr)")
// 选择离港时间
if self.model.ready_to_submit_at.isEmpty {
self.model.leave_hk_at = selectTimeStr
} else {
if self.compareDates(selectTimeStr, self.model.ready_to_submit_at) == .small {
// selectTimeStr < ready_to_submit_at
YHHUD.flash(message: "预计离港时间预约必须不小于在港递交时间")
return
}
self.model.leave_hk_at = selectTimeStr
}
self.refreshBlock?()
}
view.show()
}
}
return view
......@@ -139,14 +187,6 @@ class YHResignAppointTimeSingleCell: UITableViewCell {
self.layoutIfNeeded()
}
func selectDetailDate(title: String, selectBlock:((_ dateStr: String)->())?) {
YHDatePickView.show(type: .yyyymmdd, title:title, lastIsTaday: false, currentDay:"") {
[weak self] dateStr in
guard let self = self else { return }
selectBlock?(dateStr)
}
}
func setupUI() {
self.selectionStyle = .none
......@@ -191,4 +231,70 @@ class YHResignAppointTimeSingleCell: UITableViewCell {
make.bottom.equalToSuperview()
}
}
func getDateInfo(_ result: ((_ startTime: String, _ endTime: String)->())?) {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm"
var startTimeStr = formatter.string(from: Date())
var endTimeStr = ""
if let date = formatter.date(from: startTimeStr) {
let endTimeStamp = date.timeIntervalSince1970 + (28.0 * 24.0 * 60.0 * 60.0)
endTimeStr = formatter.string(from: Date(timeIntervalSince1970: endTimeStamp))
}
if let firstUser = self.model.users.first {
if !firstUser.stay_deadline_start.isEmpty { // 服务器起始时间不为空
startTimeStr = firstUser.stay_deadline_start
}
if !firstUser.stay_deadline.isEmpty { // 服务器结束时间不为空
endTimeStr = firstUser.stay_deadline
} else {
// 结束时间为空 则设置为开始时间后的28天
// 将字符串转换为 Date 对象
if let date = formatter.date(from: startTimeStr) {
let endTimeStamp = date.timeIntervalSince1970 + (28.0 * 24.0 * 60.0 * 60.0)
endTimeStr = formatter.string(from: Date(timeIntervalSince1970: endTimeStamp))
}
}
}
let duration = "START_DATE: \(startTimeStr) END_DATE: \(endTimeStr)"
printLog("\(duration)")
YHHUD.flash(message:"\(duration)")
result?(startTimeStr, endTimeStr)
}
// dateStr1 >= dateStr2 return true 否则 return false
func compareDates(_ dateStr1: String, _ dateStr2: String) -> YHDateCompareResult {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm"
let dateFormatCount = dateFormatter.dateFormat.count
var dateString1 = dateStr1
if dateString1.count > dateFormatCount {
dateString1 = String(dateString1.prefix(dateFormatCount))
}
var dateString2 = dateStr2
if dateString2.count > dateFormatCount {
dateString2 = String(dateString2.prefix(dateFormatCount))
}
// 将字符串转换为 Date 对象
guard let date1 = dateFormatter.date(from: dateString1),
let date2 = dateFormatter.date(from: dateString2) else {
print("日期格式错误")
YHHUD.flash(message: "日期格式错误")
return .same
}
// 比较日期
if date1 < date2 {
return .small
} else if date1 > date2 {
return .large
}
return .same
}
}
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