Commit da90be9e authored by Alex朱枝文's avatar Alex朱枝文

收入记录相关接口调试

parent fc3de8cb
......@@ -50,6 +50,10 @@
04307B932D1AB66100ED8E8D /* YHGCPreviewWorkExpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04307B892D1AB66100ED8E8D /* YHGCPreviewWorkExpViewController.swift */; };
04307B962D1BAFD400ED8E8D /* YHGCIncomeRecordViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04307B952D1BAFD400ED8E8D /* YHGCIncomeRecordViewModel.swift */; };
04307B982D1BB1AD00ED8E8D /* YHGCIncomeRecordWorkExperienceViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04307B972D1BB1AD00ED8E8D /* YHGCIncomeRecordWorkExperienceViewModel.swift */; };
04307B9B2D1CF5EE00ED8E8D /* YHGCIncomeRecordSaveWorkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04307B9A2D1CF5EE00ED8E8D /* YHGCIncomeRecordSaveWorkModel.swift */; };
04307B9D2D1D48E700ED8E8D /* YHGCIncomeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04307B9C2D1D48E700ED8E8D /* YHGCIncomeType.swift */; };
04307B9F2D1D4B3600ED8E8D /* YHGCIncomeTypeSelectViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04307B9E2D1D4B3600ED8E8D /* YHGCIncomeTypeSelectViewController.swift */; };
04307BA12D1D4B9500ED8E8D /* YHGCIncomeTypeSelectModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04307BA02D1D4B9500ED8E8D /* YHGCIncomeTypeSelectModel.swift */; };
045C0F7F2D12CA5F00BD2DC0 /* submit_page_scroll.gif in Resources */ = {isa = PBXBuildFile; fileRef = 045C0F4F2D12CA5E00BD2DC0 /* submit_page_scroll.gif */; };
045C0F802D12CA5F00BD2DC0 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 045C0F762D12CA5E00BD2DC0 /* Localizable.xcstrings */; };
045C0F812D12CA5F00BD2DC0 /* img_0.png in Resources */ = {isa = PBXBuildFile; fileRef = 045C0F5E2D12CA5E00BD2DC0 /* img_0.png */; };
......@@ -1252,6 +1256,10 @@
04307B892D1AB66100ED8E8D /* YHGCPreviewWorkExpViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHGCPreviewWorkExpViewController.swift; sourceTree = "<group>"; };
04307B952D1BAFD400ED8E8D /* YHGCIncomeRecordViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHGCIncomeRecordViewModel.swift; sourceTree = "<group>"; };
04307B972D1BB1AD00ED8E8D /* YHGCIncomeRecordWorkExperienceViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHGCIncomeRecordWorkExperienceViewModel.swift; sourceTree = "<group>"; };
04307B9A2D1CF5EE00ED8E8D /* YHGCIncomeRecordSaveWorkModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHGCIncomeRecordSaveWorkModel.swift; sourceTree = "<group>"; };
04307B9C2D1D48E700ED8E8D /* YHGCIncomeType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHGCIncomeType.swift; sourceTree = "<group>"; };
04307B9E2D1D4B3600ED8E8D /* YHGCIncomeTypeSelectViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHGCIncomeTypeSelectViewController.swift; sourceTree = "<group>"; };
04307BA02D1D4B9500ED8E8D /* YHGCIncomeTypeSelectModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHGCIncomeTypeSelectModel.swift; sourceTree = "<group>"; };
045C09A12D12C2A800BD2DC0 /* YHGCMineSchemeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHGCMineSchemeViewController.swift; sourceTree = "<group>"; };
045C0A142D12CA5E00BD2DC0 /* YHBaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHBaseViewController.swift; sourceTree = "<group>"; };
045C0A152D12CA5E00BD2DC0 /* YHBaseViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHBaseViewModel.swift; sourceTree = "<group>"; };
......@@ -2607,6 +2615,16 @@
path = VM;
sourceTree = "<group>";
};
04307B992D1CF5AC00ED8E8D /* M */ = {
isa = PBXGroup;
children = (
04307B9A2D1CF5EE00ED8E8D /* YHGCIncomeRecordSaveWorkModel.swift */,
04307B9C2D1D48E700ED8E8D /* YHGCIncomeType.swift */,
04307BA02D1D4B9500ED8E8D /* YHGCIncomeTypeSelectModel.swift */,
);
path = M;
sourceTree = "<group>";
};
045C0A182D12CA5E00BD2DC0 /* C */ = {
isa = PBXGroup;
children = (
......@@ -6120,6 +6138,7 @@
children = (
047A968A2D16AA410033BB4E /* YHGCIncomeRecordViewController.swift */,
047A968B2D16AA410033BB4E /* YHGCIncomeRecordWorkExperienceViewController.swift */,
04307B9E2D1D4B3600ED8E8D /* YHGCIncomeTypeSelectViewController.swift */,
);
path = C;
sourceTree = "<group>";
......@@ -6127,6 +6146,7 @@
047A968E2D16AA410033BB4E /* IncomeRecord(收入记录) */ = {
isa = PBXGroup;
children = (
04307B992D1CF5AC00ED8E8D /* M */,
04307B942D1BAE8800ED8E8D /* VM */,
047A96942D1900D00033BB4E /* V */,
047A968D2D16AA410033BB4E /* C */,
......@@ -7188,6 +7208,7 @@
045C114A2D12CA5F00BD2DC0 /* YHAdopterCardModel.swift in Sources */,
045C114B2D12CA5F00BD2DC0 /* YHDocumentMessageTableViewCell.swift in Sources */,
045C114C2D12CA5F00BD2DC0 /* YHHUDSuccessView.swift in Sources */,
04307B9D2D1D48E700ED8E8D /* YHGCIncomeType.swift in Sources */,
045C114D2D12CA5F00BD2DC0 /* YHVisaRenewalPayContentCell.swift in Sources */,
045C114E2D12CA5F00BD2DC0 /* YHMyPermissionSettingVC.swift in Sources */,
045C114F2D12CA5F00BD2DC0 /* YHAdopterIncomeTableViewCell.swift in Sources */,
......@@ -7461,6 +7482,7 @@
045C12452D12CA5F00BD2DC0 /* YHHUDErrorView.swift in Sources */,
045C12462D12CA5F00BD2DC0 /* YHPrincleViewModel.swift in Sources */,
045C12472D12CA5F00BD2DC0 /* YHUploadCertificateListModel.swift in Sources */,
04307B9B2D1CF5EE00ED8E8D /* YHGCIncomeRecordSaveWorkModel.swift in Sources */,
04307B682D19911800ED8E8D /* YHIncomeInfoEditCell.swift in Sources */,
045C12482D12CA5F00BD2DC0 /* YHResignUploadDetailModel.swift in Sources */,
045C12492D12CA5F00BD2DC0 /* UIApplication+Extension.swift in Sources */,
......@@ -7616,6 +7638,7 @@
045C12D82D12CA5F00BD2DC0 /* YHSubmitAllInfoSuccessAlertView.swift in Sources */,
045C12D92D12CA5F00BD2DC0 /* YHPayMemberSectionItem.swift in Sources */,
045C12DA2D12CA5F00BD2DC0 /* YHPickTimeHoldView.swift in Sources */,
04307B9F2D1D4B3600ED8E8D /* YHGCIncomeTypeSelectViewController.swift in Sources */,
045C12DB2D12CA5F00BD2DC0 /* YHServiceOrderInIncubationView.swift in Sources */,
045C12DC2D12CA5F00BD2DC0 /* YHUatHelperViewModel.swift in Sources */,
045C12DD2D12CA5F00BD2DC0 /* YHServiceCenterViewModel.swift in Sources */,
......@@ -7686,6 +7709,7 @@
045C13192D12CA5F00BD2DC0 /* YHQuestionAndAnswerViewController.swift in Sources */,
045C131A2D12CA5F00BD2DC0 /* YHInvitationWithGiftsShareView.swift in Sources */,
045C131B2D12CA5F00BD2DC0 /* YHRangeDatePickerView2.swift in Sources */,
04307BA12D1D4B9500ED8E8D /* YHGCIncomeTypeSelectModel.swift in Sources */,
045C131C2D12CA5F00BD2DC0 /* YHLookResignResultPrivateView.swift in Sources */,
045C131D2D12CA5F00BD2DC0 /* YHHKPlanItemView.swift in Sources */,
045C131E2D12CA5F00BD2DC0 /* YHInvatationShareViewController.swift in Sources */,
......
......@@ -44,7 +44,7 @@ enum YHIncomeType: Int, CaseIterable {
case .businessIncome:
return "个体工商户/合伙企业/独资企业经营所得收入"
case .incomeOfOtherOverseasCompanies:
return "其他境外公司收入(持股50%及以上"
return "其他境外公司收入(持股50%及以上)"
}
}
......
......@@ -56,8 +56,8 @@ class YHEmploymentVerificationAvailableCell: YHResignDocumentCell {
}
extension YHEmploymentVerificationAvailableCell {
private func updateContentState(_ isBlank: Bool) {
if isBlank {
private func updateContentState(_ isNotBlank: Bool) {
if !isNotBlank {
infoDetailLabel.text = "请选择"
infoDetailLabel.font = .PFSC_R(ofSize: 14)
infoDetailLabel.textColor = UIColor(hexString: "#B9C1CC")
......
......@@ -125,7 +125,7 @@ extension YHGCMineSchemeViewController {
let industry = model.industry.defaultStringIfEmpty()
let model1 = YHScemeItemModel(title: "职业界别", mainMessage: "根据您目前给来的材料,初步建议您申请的行业:" + industry, lightMessage: industry, subMessage: "后续会根据您文书准备的补充情况来最终确定,如有修改会再告知您。", lightFont: UIFont.PFSC_B(ofSize: 16), hideTopLine: true)
let contentStr = model.content.reduce("") { partialResult, current in
partialResult + "\n" + current
partialResult.count > 0 ? partialResult + "\n" + current : partialResult + current
}
let model2 = YHScemeItemModel(title: "资料清单", buttonTitle: "资料清单", mainMessage: "这是您的资料清单,请您前往查看。请您在1-2周内上传基础类证件哦,需要重新办理的可以晚些提供。需要注意的点如下:", lightMessage: "1-2周内", subMessage: "按照您填报的学历信息, 证明文件如下:\(contentStr)")
self.dataSource = [model1, model2]
......
......@@ -19,8 +19,8 @@ class YHGCIncomeRecordViewController: YHBaseViewController {
case totalIncome(_ money: ASAttributedString)
case consentForHKTravel(_ title: String, _ detail: ASAttributedString, _ question: String)
case questionSelect(_ question: String)
case employmentVerification(_ employments: [YHWorkItemListModel], _ selectedId: Int?)
case workingHoursStatement(_ placeholder: String, _ detail: ASAttributedString, _ content: String)
case employmentVerification //(_ employments: [YHWorkItemListModel], _ selectedId: Int?)
case workingHoursStatement(_ placeholder: String, _ detail: ASAttributedString)
}
private lazy var datas: [[TableRow]] = []
......@@ -185,8 +185,9 @@ extension YHGCIncomeRecordViewController {
let income = Double(companyModel.income ?? "") ?? 0
money += income
let moneyStr = income == 0 ? "" : "约" + (hkdFormatter.string(from: NSNumber(value: income / rate)) ?? "0") + "港币"
let vacantNum = companyModel.vacant_num ?? 0
let timeStr: String = vacantNum == 0 ? "已填写" : "有\(vacantNum)项未填写"
// let vacantNum = companyModel.vacant_num ?? 0
// let timeStr: String = vacantNum == 0 ? "已填写" : "有\(vacantNum)项未填写"
let timeStr: String = (companyModel.entry_time ?? "") + "-" + (companyModel.departure_time ?? "")
let incomeItem: TableRow = .incomeItem(companyModel.company_name ?? "", moneyStr, timeStr, companyModel.id ?? 0, index != listCount - 1)
firstSection.append(incomeItem)
}
......@@ -200,7 +201,7 @@ extension YHGCIncomeRecordViewController {
if viewModel.mainModel.has_work_time_overlap == 1 {
let tipsIcon = ASAttributedString.init(.image(UIImage(named: "red_dot_6") ?? UIImage(), .custom(.offset(CGPoint(x: 0, y: 1)), size: .init(width: 6, height: 6))))
let tips: ASAttributedString = tipsIcon + .init(string: " 检测到您的", .font(.PFSC_R(ofSize: 13)), .foreground(UIColor(hexString: "#8993A2") ?? .gray)) + .init(string: "工作时间有重叠", .font(.PFSC_R(ofSize: 13)), .foreground(UIColor.failColor)) + .init(string: "。请确认是否正确填报,若填报无误请在此处说明工作时间重叠的原因~", .font(.PFSC_R(ofSize: 13)), .foreground(UIColor(hexString: "#8993A2") ?? .gray))
secondSection.append(.workingHoursStatement("如:工作时间灵活,可自由安排", tips, viewModel.mainModel.why_work_time_overlap))
secondSection.append(.workingHoursStatement("如:工作时间灵活,可自由安排", tips))
}
var thirdSection: [TableRow] = []
......@@ -218,8 +219,9 @@ extension YHGCIncomeRecordViewController {
})
thirdSection.append(.consentForHKTravel("赴港同意书提供", detail + actionStr, "在职公司是否可以提供赴港同意书"))
if viewModel.mainModel.has_company_consent == 1 {
let id = viewModel.mainModel.consent_work_id > 0 ? viewModel.mainModel.consent_work_id : nil
thirdSection.append(.employmentVerification(viewModel.listModel, id))
//let id = viewModel.mainModel.consent_work_id > 0 ? viewModel.mainModel.consent_work_id : nil
// thirdSection.append(.employmentVerification(viewModel.listModel, id))
thirdSection.append(.employmentVerification)
} else {
thirdSection.append(.questionSelect("人才中心是否可以提供赴港同意书"))
}
......@@ -354,7 +356,7 @@ extension YHGCIncomeRecordViewController: UITableViewDelegate, UITableViewDataSo
guard let self = self else {
return
}
let ctl = YHGCIncomeRecordWorkExperienceViewController(incomeId: 0)
let ctl = YHGCIncomeRecordWorkExperienceViewController(incomeId: 0, orderId: self.orderId)
ctl.submitSuccess = { [weak self] in
guard let self = self else {
return
......@@ -396,17 +398,30 @@ extension YHGCIncomeRecordViewController: UITableViewDelegate, UITableViewDataSo
return cell
}
case let .employmentVerification(employments, selectedId):
case .employmentVerification://(employments, selectedId):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHEmploymentVerificationAvailableCell.cellReuseIdentifier) as? YHEmploymentVerificationAvailableCell {
let employments = viewModel.listModel
let selectedId = viewModel.mainModel.consent_work_id > 0 ? viewModel.mainModel.consent_work_id : nil
let selectedEmployment = employments.first { model in
model.id == selectedId
}
cell.setupCellInfo(detail: selectedEmployment?.company_name)
return cell
}
case let .workingHoursStatement(placeholder, tips, content):
case let .workingHoursStatement(placeholder, tips):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHWorkingHoursStatementCell.cellReuseIdentifier) as? YHWorkingHoursStatementCell {
let content = viewModel.mainModel.why_work_time_overlap
cell.setupCellInfo(placeholder: placeholder, remark: content, detail: tips, isShowBottomLine: false)
cell.textDidExceedsMaxLimit = { maxCount in
YHHUD.flash(message: "不可超过\(maxCount)字")
}
cell.textViewDidChanged = { [weak self] textView in
guard let self = self else {
return
}
self.viewModel.mainModel.why_work_time_overlap = textView.text
}
return cell
}
}
......@@ -436,7 +451,7 @@ extension YHGCIncomeRecordViewController: UITableViewDelegate, UITableViewDataSo
}
let tableRow = sectionArr[indexPath.row]
if case let .incomeItem(_, _, _, incomeId, _) = tableRow {
let ctl = YHGCIncomeRecordWorkExperienceViewController(incomeId: incomeId)
let ctl = YHGCIncomeRecordWorkExperienceViewController(incomeId: incomeId, orderId: orderId)
ctl.submitSuccess = { [weak self] in
guard let self = self else {
return
......@@ -444,7 +459,10 @@ extension YHGCIncomeRecordViewController: UITableViewDelegate, UITableViewDataSo
self.requestData(isNeedLoading: true)
}
navigationController?.pushViewController(ctl, animated: true)
} else if case let .employmentVerification(employments, selectedId) = tableRow {
} else if case .employmentVerification = tableRow {
let employments = viewModel.listModel
let selectedId = viewModel.mainModel.consent_work_id > 0 ? viewModel.mainModel.consent_work_id : nil
guard employments.count > 1 else {
return
}
......@@ -454,8 +472,12 @@ extension YHGCIncomeRecordViewController: UITableViewDelegate, UITableViewDataSo
let firstIndex = employments.firstIndex { model in
model.id == selectedId
}
YHDynamicSheetPickerView.show(dataSource: companies, title: "选择可提供的在职公司", selectIndex: firstIndex ?? 0) { index in
//
YHDynamicSheetPickerView.show(dataSource: companies, title: "选择可提供的在职公司", selectIndex: firstIndex ?? 0) { [weak self] index in
guard let self = self else {
return
}
self.viewModel.mainModel.consent_work_id = employments[index].id ?? 0
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
}
}
......
......@@ -13,56 +13,33 @@ import UIKit
class YHGCIncomeRecordWorkExperienceViewController: YHBaseViewController {
enum TableRow {
case header(_ title: String)
case incomeFrom(_ title: String, _ detail: String?, _ placeholder: String)
case incomeFrom(_ title: String, _ placeholder: String)
case incomeTypeSelect(_ title: String, _ detail: String, _ isSelectedOne: Bool)
case incomeTypes(_ types: [YHIncomeType])
case incomeTypes(_ types: [YHGCIncomeType])
case inputMoney(_ title: String, _ detail: String?, _ inputStr: String?, _ showBottomLine: Bool, _ showStar: Bool, _ isIncomeMoney: Bool)
case inputRemark(_ detail: String)
case infoSelect(_ title: String, _ detail: String?, _ placeholder: String)
case infoTillNowSelect(_ title: String, _ detail: String?, _ placeholder: String, _ isTillNow: Bool)
case infoEdit(_ title: String, _ detail: String?, _ placeholder: String)
case infoSelect(_ title: String, _ placeholder: String)
case infoTillNowSelect(_ title: String, _ placeholder: String)
case infoEdit(_ title: String, _ placeholder: String)
case infoCheckbox(_ title: String)
case incomeTips(_ detail: ASAttributedString)
case uploadWorkId(_ title: String, _ detail: String)
}
private lazy var datas: [[TableRow]] = []
private var selectedTypes: [YHIncomeType] = []
private var selectedTypes: [YHGCIncomeType] = []
private let currencyRate = 0.92
private var isSaving = false
var submitSuccess: (() -> Void)?
// 校验字段控制
/// 是否选定收入类型
private var isIncomeTypeOK = true
private var incomeTypeIndexPath: IndexPath?
/// 是否选定文件
private var isHasAllFileOK = true
private var hasAllFileIndexPath: IndexPath?
/// 是否收入金额已填写
private var isIncomeMoneyOK = true
private var incomMoneyIndexPath: IndexPath?
private lazy var viewModel = YHIncomeRecordViewModel()
private var companyModel = YHIncomeCompanyDetailModel()
private lazy var saveButton: UIButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 15)
button.setTitle("保存", for: .normal)
button.setTitle("保存", for: .highlighted)
button.setTitleColor(.mainTextColor, for: .normal)
button.setTitleColor(.mainTextColor, for: .highlighted)
button.addTarget(self, action: #selector(clickSaveButton), for: .touchUpInside)
button.layer.cornerRadius = kCornerRadius3
button.clipsToBounds = true
button.backgroundColor = .contentBkgColor
return button
}()
private lazy var viewModel = YHGCIncomeRecordWorkExperienceViewModel()
private lazy var submitButton: UIButton = {
let button = UIButton(type: .custom)
......@@ -119,8 +96,10 @@ class YHGCIncomeRecordWorkExperienceViewController: YHBaseViewController {
}()
private let incomeId: Int
init(incomeId: Int) {
private let orderId: Int
init(incomeId: Int, orderId: Int) {
self.incomeId = incomeId
self.orderId = orderId
super.init(nibName: nil, bundle: nil)
}
......@@ -131,7 +110,12 @@ class YHGCIncomeRecordWorkExperienceViewController: YHBaseViewController {
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
if incomeId != 0 {
requestData(isNeedLoading: true)
} else {
viewModel.position.order_id = orderId
setupData()
}
}
override func viewWillAppear(_ animated: Bool) {
......@@ -143,39 +127,11 @@ class YHGCIncomeRecordWorkExperienceViewController: YHBaseViewController {
super.viewWillDisappear(animated)
IQKeyboardManager.shared.isEnabled = false
}
/*
override func backItemClick(_ sender: Any) {
guard !isSaving else {
return
}
isSaving = true
submitIncome(.save) { [weak self] _ in
self?.isSaving = false
}
}
/// 是否可以返回,包括点击返回和手势返回,默认YES
override func navigationShouldPop() -> Bool {
guard !isSaving else {
return false
}
isSaving = true
submitIncome(.save) { [weak self] _ in
self?.isSaving = false
}
return false
}
*/
}
extension YHGCIncomeRecordWorkExperienceViewController {
@objc private func clickSaveButton() {
submitIncome(.save, complete: { _ in })
}
@objc private func clickSubmitButton() {
submitIncome(.submit, complete: { _ in })
submitIncome(complete: { _ in })
}
private func setupUI() {
......@@ -186,7 +142,6 @@ extension YHGCIncomeRecordWorkExperienceViewController {
view.backgroundColor = UIColor.contentBkgColor
view.addSubview(tableView)
view.addSubview(bottomView)
bottomView.addSubview(saveButton)
bottomView.addSubview(submitButton)
bottomView.snp.makeConstraints { make in
......@@ -195,15 +150,8 @@ extension YHGCIncomeRecordWorkExperienceViewController {
make.top.equalTo(view.safeAreaLayoutGuide.snp.bottom).offset(-64)
}
saveButton.snp.makeConstraints { make in
make.left.equalToSuperview().offset(16)
make.top.equalToSuperview().offset(10)
make.height.equalTo(44)
make.width.equalTo(86)
}
submitButton.snp.makeConstraints { make in
make.left.equalTo(saveButton.snp.right).offset(10)
make.left.equalToSuperview().offset(16)
make.right.equalToSuperview().offset(-16)
make.top.equalToSuperview().offset(10)
make.height.equalTo(44)
......@@ -219,32 +167,66 @@ extension YHGCIncomeRecordWorkExperienceViewController {
}
private func setupData() {
selectedTypes = companyModel.income_type.compactMap {
YHIncomeType(rawValue: $0)
selectedTypes = viewModel.position.type_of_income.compactMap {
YHGCIncomeType(rawValue: $0)
}
var firstSection: [TableRow] = [.header("收入信息"), .incomeFrom("收入来源公司", companyModel.company_name, "请填写公司全称"), .incomeTypeSelect("收入类型(多选)", "请选择", selectedTypes.count > 0)]
var firstSection: [TableRow] = [.header("收入信息"), .incomeFrom("收入来源公司", "请填写公司全称"), .incomeTypeSelect("收入类型(多选)", "请选择", selectedTypes.count > 0)]
if selectedTypes.count > 0 {
firstSection.append(.incomeTypes(selectedTypes))
}
let hkdFmt = currencyFormat("")
let rmbFmt = currencyFormat("¥")
let rate = companyModel.rate > 0 ? companyModel.rate : 0.92
let rate = getCurrentRate()
if selectedTypes.contains(.incomeOfMainland) || selectedTypes.contains(.incomeOfHKCompanies) || selectedTypes.contains(.incomeOfMacauCompanies) || selectedTypes.contains(.incomeOfOtherOverseasCompanies) {
firstSection.append(.inputMoney("公司营业额(近一年)", "约\(hkdFmt.string(from: NSNumber(value: companyModel.corporate_turnover / rate)) ?? "0")港币", rmbFmt.string(from: NSNumber(value: companyModel.corporate_turnover)) ?? "0", true, false, false))
let turnover = Double(viewModel.position.turnover) ?? 0
firstSection.append(.inputMoney("公司营业额(近一年)", "约\(hkdFmt.string(from: NSNumber(value: turnover / rate)) ?? "0")港币", rmbFmt.string(from: NSNumber(value: turnover)) ?? "0", true, false, false))
}
firstSection.append(.inputMoney("收入金额", "约\(hkdFmt.string(from: NSNumber(value: companyModel.income_money / rate)) ?? "0")港币", rmbFmt.string(from: NSNumber(value: companyModel.income_money)) ?? "0", false, true, true))
let income = Double(viewModel.position.income) ?? 0
firstSection.append(.inputMoney("收入金额", "约\(hkdFmt.string(from: NSNumber(value: income / rate)) ?? "0")港币", rmbFmt.string(from: NSNumber(value: income)) ?? "0", false, true, true))
firstSection.append(.inputRemark("注:按1港币≈\(rate)人民币计算,实际金额按递交时入境处给出的汇率为准"))
let secondSection: [TableRow] = [.header("企业信息"), .infoSelect("派薪国家/地区", nil, "请选择"), .infoSelect("派薪城市", nil, "请选择"), .infoEdit("职位", nil, "请输入"), .infoSelect("入职年月", nil, "请选择"), .infoTillNowSelect("离职年月", nil, "请选择", true), .infoCheckbox("是否可以提供工作证明"), .infoSelect("职业界别", nil, "请选择"), .infoEdit("具体职业界别", nil, "请输入")]
let tips: ASAttributedString = .init(string: "备注:为了进一步确认您的具体信息,如有相关", .font(.PFSC_R(ofSize: 13)), .foreground(UIColor(hexString: "#8993A2") ?? .gray)) + .init(string: "工作/收入证明文件", .font(.PFSC_R(ofSize: 13)), .foreground(UIColor.brandMainColor)) + .init(string: ",请优先在列表上传。", .font(.PFSC_R(ofSize: 13)), .foreground(UIColor(hexString: "#8993A2") ?? .gray))
let thirdSection: [TableRow] = [.header("工作证件(选填)"), .incomeTips(tips), .uploadWorkId("上传工作证件", "去上传")]
datas = [firstSection, secondSection, thirdSection]
let secondSection = getEnterpriseInfo()
datas = [firstSection, secondSection]
tableView.reloadData()
}
private func showSelectIncomeTypePopVC(selectedTypes: [YHIncomeType]) {
let ctl = YHIncomeTypeSelectViewController(selectedTypes: selectedTypes)
@discardableResult
private func getEnterpriseInfo(needUpdateDataSource: Bool = false) -> [TableRow] {
var secondSection: [TableRow] = [.header("企业信息"), .infoSelect("派薪国家/地区", "请选择")]
if viewModel.position.location.country.contains("中国") {
secondSection.append(.infoSelect("派薪城市", "请选择"))
} else {
secondSection.append(.infoEdit("派薪城市", "请输入"))
}
secondSection.append(contentsOf: [.infoEdit("职位", "请输入"), .infoSelect("入职年月", "请选择"), .infoTillNowSelect("离职年月", "请选择"), .infoCheckbox("是否可以提供工作证明"), .infoSelect("职业界别", "请选择")])
if viewModel.position.company_type.contains("其他") {
secondSection.append(.infoEdit("具体职业界别", "请输入"))
} else {
viewModel.position.company_type_other = ""
}
if needUpdateDataSource {
if let index = datas.firstIndex(where: { arr in
if arr.contains(where: { row in
if case let .header(title) = row, title == "企业信息" {
return true
}
return false
}) {
return true
}
return false
}) {
datas[index] = secondSection
tableView.reloadSections(IndexSet(arrayLiteral: index), with: .automatic)
}
}
return secondSection
}
private func showSelectIncomeTypePopVC(selectedTypes: [YHGCIncomeType]) {
let ctl = YHGCIncomeTypeSelectViewController(selectedTypes: selectedTypes)
let bpc = YHBottomPresentationController(presentedViewController: ctl, presenting: self)
bpc.customRadius = 8.0
ctl.transitioningDelegate = bpc
......@@ -259,8 +241,8 @@ extension YHGCIncomeRecordWorkExperienceViewController {
}
private func updateSelectTypes() {
companyModel.income_type = selectedTypes.map { $0.rawValue }
if companyModel.income_type.count > 0 {
viewModel.position.type_of_income = selectedTypes.map { $0.rawValue }
if viewModel.position.type_of_income.count > 0 {
isIncomeTypeOK = true
}
var incomeTypesIndexPath: IndexPath?
......@@ -316,8 +298,9 @@ extension YHGCIncomeRecordWorkExperienceViewController {
let newIndex = incomeIndex // > 1 ? incomeIndex - 1 : 0
let hkdFmt = currencyFormat("")
let rmbFmt = currencyFormat("¥")
let rate = companyModel.rate > 0 ? companyModel.rate : 0.92
sectionArr.insert(.inputMoney("公司营业额(近一年)", "约\(hkdFmt.string(from: NSNumber(value: companyModel.corporate_turnover / rate)) ?? "0")港币", rmbFmt.string(from: NSNumber(value: companyModel.corporate_turnover)) ?? "0", true, false, false), at: newIndex)
let rate = getCurrentRate()
let turnover = Double(viewModel.position.turnover) ?? 0
sectionArr.insert(.inputMoney("公司营业额(近一年)", "约\(hkdFmt.string(from: NSNumber(value: turnover / rate)) ?? "0")港币", rmbFmt.string(from: NSNumber(value: turnover)) ?? "0", true, false, false), at: newIndex)
datas[incomeTypeSelectIndexPath.section] = sectionArr
}
}
......@@ -336,6 +319,15 @@ extension YHGCIncomeRecordWorkExperienceViewController {
}
}
}
tableView.performBatchUpdates { [weak tableView] in
tableView?.reloadSections(IndexSet(integer: incomeTypeSelectIndexPath.section), with: .automatic)
}
}
private func getCurrentRate() -> Double {
let configRate = Double(YHConfigManager.shared.reqVM.configModel?.rate ?? "") ?? 0
let rate = configRate > 0 ? configRate : 0.92
return rate
}
private func currencyFormat(_ currencySymbol: String) -> NumberFormatter {
......@@ -375,9 +367,9 @@ extension YHGCIncomeRecordWorkExperienceViewController: UITableViewDelegate, UIT
cell.setupCellInfo(title)
return cell
}
case let .incomeFrom(title, detail, placeholder):
case let .incomeFrom(title, placeholder):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeRecordFromCell.cellReuseIdentifier) as? YHIncomeRecordFromCell {
cell.setupCellInfo(title: title, detail: detail, showBottomLine: true, showRightArrow: true, placeholder: placeholder)
cell.setupCellInfo(title: title, detail: viewModel.position.company_name, showBottomLine: true, showRightArrow: true, placeholder: placeholder)
return cell
}
case let .incomeTypeSelect(title, detail, isSelectedOne):
......@@ -428,9 +420,9 @@ extension YHGCIncomeRecordWorkExperienceViewController: UITableViewDelegate, UIT
self.datas[indexPath.section][indexPath.row] = .inputMoney(title, nil, nil, showBottomLine, showStar, isIncomeMoney)
self.tableView.reloadRows(at: [indexPath], with: .automatic)
if isIncomeMoney {
self.companyModel.income_money = 0
self.viewModel.position.income = "0"
} else {
self.companyModel.corporate_turnover = 0
self.viewModel.position.turnover = "0"
}
}
}
......@@ -443,9 +435,9 @@ extension YHGCIncomeRecordWorkExperienceViewController: UITableViewDelegate, UIT
let detail = number / self.currencyRate
if isIncomeMoney {
self.isIncomeMoneyOK = true
self.companyModel.income_money = number
self.viewModel.position.income = "\(number)"
} else {
self.companyModel.corporate_turnover = number
self.viewModel.position.turnover = "\(number)"
}
let rmbFormatter = self.currencyFormat("¥")
......@@ -472,37 +464,100 @@ extension YHGCIncomeRecordWorkExperienceViewController: UITableViewDelegate, UIT
cell.setupCellInfo(detail)
return cell
}
case let .infoSelect(title, detail, placeholder):
case let .infoSelect(title, placeholder):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeInfoSelectCell.cellReuseIdentifier) as? YHIncomeInfoSelectCell {
var detail = ""
switch title {
case "派薪国家/地区":
detail = viewModel.position.location.country
case "派薪城市":
let city = viewModel.position.location.area.reduce("") { partialResult, item in
partialResult.count > 0 ? partialResult + "/" + item : partialResult + item
}
detail = city
case "入职年月":
detail = viewModel.position.entry_time
case "职业界别":
detail = viewModel.position.company_type
default:
break
}
cell.setupCellInfo(title: title, detail: detail, placeholder: placeholder, needShowFailButton: false)
return cell
}
case let .infoTillNowSelect(title, detail, placeholder, isTillNow):
case let .infoTillNowSelect(title, placeholder):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeDateTillNowCell.cellReuseIdentifier) as? YHIncomeDateTillNowCell {
cell.setupCellInfo(title: title, detail: detail, placeholder: placeholder, tillNow: isTillNow, needShowFailButton: false)
cell.tillNowButtonEvent = {
//
let detail = viewModel.position.departure_time
cell.setupCellInfo(title: title, detail: detail, placeholder: placeholder, needShowFailButton: false)
cell.tillNowButtonEvent = { [weak self] tillNow in
guard let self = self else {
return
}
if tillNow {
self.viewModel.position.departure_time = "至今"
} else {
self.viewModel.position.departure_time = ""
}
}
return cell
}
case let .infoEdit(title, detail, placeholder):
case let .infoEdit(title, placeholder):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeInfoEditCell.cellReuseIdentifier) as? YHIncomeInfoEditCell {
var detail = ""
switch title {
case "派薪城市":
detail = viewModel.position.location.foreign
case "职位":
detail = viewModel.position.position
case "具体职业界别":
detail = viewModel.position.company_type_other
default:
break
}
cell.setupCellInfo(title: title, detail: detail, placeholder: placeholder, needShowFailButton: false)
cell.didEndEditing = { [weak self] textField in
guard let self = self else {
return
}
switch title {
case "派薪城市":
self.viewModel.position.location.area = []
self.viewModel.position.location.foreign = textField.text ?? ""
case "职位":
self.viewModel.position.position = textField.text ?? ""
case "具体职业界别":
self.viewModel.position.company_type_other = textField.text ?? ""
default:
break
}
}
return cell
}
case let .infoCheckbox(title):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHInfoQuestionSelectionCell.cellReuseIdentifier) as? YHInfoQuestionSelectionCell {
cell.setupCellInfo(question: title, showBottomLine: true, needShowFailButton: false)
return cell
cell.didSelectSureButton = { [weak self] selected in
guard let self = self else {
return
}
switch selected {
case .true:
self.viewModel.position.has_work_certificate = YHCheckboxSelectType.true.rawValue
case .false:
self.viewModel.position.has_work_certificate = YHCheckboxSelectType.false.rawValue
case .unknown:
self.viewModel.position.has_work_certificate = YHCheckboxSelectType.unknown.rawValue
}
case let .incomeTips(detail):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeRecordCompanyTipsCell.cellReuseIdentifier) as? YHIncomeRecordCompanyTipsCell {
cell.setupCellInfo(tipsDetail: detail)
return cell
}
case let .uploadWorkId(title, detail):
if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeUploadWorkIDCell.cellReuseIdentifier) as? YHIncomeUploadWorkIDCell {
cell.setupCellInfo(title: title, detail: detail)
let selectType = YHCheckboxSelectType(rawValue: viewModel.position.has_work_certificate) ?? .unknown
switch selectType {
case .true:
cell.selectedSureButton = .true
case .false:
cell.selectedSureButton = .false
case .unknown:
cell.selectedSureButton = .unknown
}
return cell
}
}
......@@ -536,39 +591,122 @@ extension YHGCIncomeRecordWorkExperienceViewController: UITableViewDelegate, UIT
showSelectIncomeTypePopVC(selectedTypes: selectedTypes)
} else if case .incomeFrom = tableRow {
let vc = YHCompanySelectViewController()
vc.backLocationStringController = { _ in
// country.company_name
//
vc.backLocationStringController = { [weak self] company in
guard let self = self else {
return
}
self.viewModel.position.company_name = company.company_name ?? ""
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
navigationController?.pushViewController(vc)
} else if case let .infoSelect(title, _, _) = tableRow {
if title == "派薪国家/地区" {
} else if case let .infoSelect(title, _) = tableRow {
switch title {
case "派薪国家/地区":
let vc = YHSelectCountryViewController()
vc.backLocationStringController = { (country) in
//self.dataSource?.message = country
//
vc.backLocationStringController = { [weak self] country in
guard let self = self else {
return
}
let oldContry = self.viewModel.position.location.country
self.viewModel.position.location.country = country
self.viewModel.position.location_aboard = country.contains("中国") ? 0 : 1
if country != oldContry {
self.viewModel.position.location.area = []
self.viewModel.position.location.foreign = ""
self.getEnterpriseInfo(needUpdateDataSource: true)
} else {
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
}
navigationController?.pushViewController(vc)
} else if title == "入职年月" {
case "派薪城市":
let country = viewModel.position.location.country
var provice = ""
if country.contains("台湾") {
provice = "台湾省"
}
if country.contains("香港") {
provice = "香港特别行政区"
}
if country.contains("澳门") {
provice = "澳门特别行政区"
}
let addressPicker = YHAddressViewController(selectProvince: provice)
addressPicker.backLocationStringController = { [weak self] (address,province,city,area) in
guard let self = self else {
return
}
self.viewModel.position.location.area = [province, city]
self.viewModel.position.location.foreign = ""
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
present(addressPicker, animated: true, completion: nil)
case "入职年月":
let title = "选择入职年月"
let lastIsTaday = true
YHDatePickView.show(type: .yyyymm, title: title, lastIsTaday: lastIsTaday, currentDay: "") { date in
//
YHDatePickView.show(type: .yyyymm, title: title, lastIsTaday: lastIsTaday, currentDay: viewModel.position.entry_time) { [weak self] date in
guard let self = self else {
return
}
let format = DateFormatter()
format.dateFormat = "yyyy-MM"
if let selectDate = format.date(from: date) {
let selectTimeInterval = selectDate.timeIntervalSince1970
let currentTimeInterval = Date().timeIntervalSince1970
if selectTimeInterval > currentTimeInterval {
YHHUD.flash(message: "入职年月不能晚于当前日期")
} else {
guard let endDate = format.date(from: self.viewModel.position.departure_time) else {
self.viewModel.position.entry_time = date
self.tableView.reloadRows(at: [indexPath], with: .automatic)
return
}
let endTimeInterval = endDate.timeIntervalSince1970
if selectTimeInterval > endTimeInterval {
YHHUD.flash(message: "入职年月不能晚于离职年月")
} else {
self.viewModel.position.entry_time = date
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
}
}
}
} else if title == "职业界别" {
YHOtherPickerView.show(type: .position, selectTitle: "") {[weak self] data in
case "职业界别":
YHOtherPickerView.show(type: .position, selectTitle: viewModel.position.company_type) {[weak self] data in
guard let self = self else { return }
// data.title
//
let companyType = self.viewModel.position.company_type
self.viewModel.position.company_type = data.title
if (data.title == "其他" || companyType == "其他") && companyType != data.title {
self.getEnterpriseInfo(needUpdateDataSource: true)
} else {
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
}
default:
break
}
} else if case let .infoTillNowSelect(title, _, _, _) = tableRow {
} else if case let .infoTillNowSelect(title, _) = tableRow {
if title == "离职年月" {
let title = "选择离职年月"
let lastIsTaday = true
YHDatePickView.show(type: .yyyymm, title: title, lastIsTaday: lastIsTaday, currentDay: "") { date in
//
YHDatePickView.show(type: .yyyymm, title: title, lastIsTaday: lastIsTaday, currentDay: viewModel.position.departure_time) { [weak self] date in
guard let self = self else { return }
let format = DateFormatter()
format.dateFormat = "yyyy-MM"
if let selectDate = format.date(from: date), let startDate = format.date(from: self.viewModel.position.entry_time) {
let selectTimeInterval = selectDate.timeIntervalSince1970
let startTimeInterval = startDate.timeIntervalSince1970
if selectTimeInterval < startTimeInterval {
YHHUD.flash(message: "离职年月不能早于入职年月")
} else {
self.viewModel.position.departure_time = date
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
} else {
self.viewModel.position.departure_time = date
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
}
}
}
......@@ -579,21 +717,15 @@ extension YHGCIncomeRecordWorkExperienceViewController {
private func checkInput() -> Bool {
var retValue = true
var updateRows: [IndexPath] = []
if companyModel.has_all_file == YHIncomeRecordHasAllFile.unknown.rawValue {
isHasAllFileOK = false
if let hasAllFileIndexPath = hasAllFileIndexPath, tableView.numberOfSections > hasAllFileIndexPath.section, tableView.numberOfRows(inSection: hasAllFileIndexPath.section) > hasAllFileIndexPath.row {
updateRows.append(hasAllFileIndexPath)
}
retValue = false
}
if companyModel.income_type.count == 0 {
if viewModel.position.type_of_income.count == 0 {
isIncomeTypeOK = false
if let incomeTypeIndexPath = incomeTypeIndexPath, tableView.numberOfSections > incomeTypeIndexPath.section, tableView.numberOfRows(inSection: incomeTypeIndexPath.section) > incomeTypeIndexPath.row {
updateRows.append(incomeTypeIndexPath)
}
retValue = false
}
if companyModel.income_money == 0 {
if viewModel.position.income == "0" {
isIncomeMoneyOK = false
if let incomMoneyIndexPath = incomMoneyIndexPath, tableView.numberOfSections > incomMoneyIndexPath.section, tableView.numberOfRows(inSection: incomMoneyIndexPath.section) > incomMoneyIndexPath.row {
updateRows.append(incomMoneyIndexPath)
......@@ -602,7 +734,6 @@ extension YHGCIncomeRecordWorkExperienceViewController {
}
if updateRows.count > 0 {
tableView.reloadRows(at: updateRows, with: .none)
isHasAllFileOK = true
isIncomeTypeOK = true
isIncomeMoneyOK = true
}
......@@ -613,15 +744,14 @@ extension YHGCIncomeRecordWorkExperienceViewController {
if isNeedLoading {
YHHUD.show(.progress(message: "加载中..."))
}
viewModel.getIncomeDetail(incomeId: incomeId) { [weak self] companyModel, error in
viewModel.requestWorkPositionDetail(incomeId, orderId) { [weak self] success, error in
guard let self = self else {
return
}
if isNeedLoading {
YHHUD.hide()
}
guard let companyModel = companyModel else {
guard success else {
printLog("YHGCIncomeRecordWorkExperienceViewController: 请求失败")
if let errorMsg = error?.errorMsg, errorMsg.count > 0 {
YHHUD.flash(message: errorMsg)
......@@ -630,21 +760,18 @@ extension YHGCIncomeRecordWorkExperienceViewController {
self.tableView.reloadData()
return
}
self.companyModel = companyModel
self.setupData()
}
}
private func submitIncome(_ type: YHIncomeRecordUpdateType, complete: @escaping (Bool) -> Void) {
private func submitIncome(complete: @escaping (Bool) -> Void) {
view.endEditing(true)
let msg = type == .save ? "保存中..." : "提交中..."
if type == .submit {
let msg = "提交中..."
if checkInput() == false {
return
}
}
YHHUD.show(.progress(message: msg))
viewModel.updateDetail(incomeId: incomeId, incomeMoney: companyModel.income_money, corporateTurnover: companyModel.corporate_turnover, incomeType: companyModel.income_type, hasAllFile: companyModel.has_all_file) { [weak self] success, error in
viewModel.saveWorkPosition { [weak self] success, error in
guard let self = self else {
complete(false)
return
......@@ -652,7 +779,7 @@ extension YHGCIncomeRecordWorkExperienceViewController {
YHHUD.hide()
complete(success)
if success {
let msg = type == .save ? "保存成功" : "提交成功"
let msg = "提交成功"
YHHUD.flash(message: msg)
self.submitSuccess?()
self.navigationController?.popViewController(animated: true)
......@@ -660,9 +787,6 @@ extension YHGCIncomeRecordWorkExperienceViewController {
if let errorMsg = error?.errorMsg, errorMsg.count > 0 {
YHHUD.flash(message: errorMsg)
}
if type == .save {
self.navigationController?.popViewController(animated: true)
}
}
}
}
......
//
// YHGCIncomeTypeSelectViewController.swift
// galaxy
//
// Created by alexzzw on 2024/12/26.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHGCIncomeTypeSelectViewController: YHBaseViewController {
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 17)
label.textColor = .mainTextColor
label.text = "选择收入类型(多选)"
return label
}()
private lazy var closeButton: UIButton = {
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "work_example_close"), for: .normal)
button.addTarget(self, action: #selector(closeButtonClicked), for: .touchUpInside)
return button
}()
private lazy var topLineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#F0F0F0")
return view
}()
private lazy var tableView: UITableView = {
let view = UITableView(frame: .zero, style: .grouped)
view.estimatedSectionHeaderHeight = 0.01
view.estimatedSectionFooterHeight = 12
view.sectionHeaderHeight = 0.01
view.sectionFooterHeight = 12
view.backgroundColor = .white
view.contentInsetAdjustmentBehavior = .never
view.separatorStyle = .none
view.rowHeight = UITableView.automaticDimension
view.estimatedRowHeight = 52.0
view.dataSource = self
view.delegate = self
view.showsVerticalScrollIndicator = false
view.register(YHIncomeTypePopViewSelectCell.self, forCellReuseIdentifier: YHIncomeTypePopViewSelectCell.cellReuseIdentifier)
return view
}()
private lazy var sureButton: UIButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = UIFont.PFSC_M(ofSize: 16)
button.setTitle("确认", for: .normal)
button.setTitle("确认", for: .highlighted)
button.setTitleColor(UIColor(hex: 0xFFFFFF), for: .normal)
button.setTitleColor(UIColor(hex: 0xFFFFFF), for: .highlighted)
button.setTitleColor(UIColor(hex: 0xFFFFFF), for: .disabled)
button.addTarget(self, action: #selector(clickSureButton), for: .touchUpInside)
button.layer.cornerRadius = kCornerRadius3
button.clipsToBounds = true
button.backgroundColor = .brandMainColor
return button
}()
private lazy var bottomView: UIView = {
let view = UIView()
view.backgroundColor = .white
return view
}()
private lazy var datas: [YHGCIncomeTypeSelectModel] = {
YHGCIncomeType.allCases.map {
YHGCIncomeTypeSelectModel(type: $0, isSelected: false)
}
}()
var sureButtonEvent: (([YHGCIncomeType]) -> Void)?
private var selectedTypes: [YHGCIncomeType] = []
init(selectedTypes: [YHGCIncomeType]) {
self.selectedTypes = selectedTypes
super.init(nibName: nil, bundle: nil)
}
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
setupDatas()
}
@objc private func clickSureButton() {
sureButtonEvent?(selectedTypes.sorted(by: { $0.rawValue < $1.rawValue }))
dismiss(animated: true)
}
@objc private func closeButtonClicked() {
dismiss(animated: true)
}
private func setupUI() {
gk_navBarAlpha = 0
gk_navigationBar.isHidden = true
view.backgroundColor = UIColor.white
view.addSubview(infoTitleLabel)
view.addSubview(closeButton)
view.addSubview(topLineView)
view.addSubview(tableView)
view.addSubview(bottomView)
bottomView.addSubview(sureButton)
infoTitleLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(16)
make.centerX.equalToSuperview()
}
closeButton.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-21)
make.height.width.equalTo(24)
make.centerY.equalTo(infoTitleLabel)
}
topLineView.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-21)
make.left.equalToSuperview().offset(21)
make.height.equalTo(0.5)
make.top.equalTo(infoTitleLabel.snp.bottom).offset(12)
}
bottomView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.bottom.equalTo(view.safeAreaLayoutGuide.snp.bottom)
make.height.equalTo(64)
}
sureButton.snp.makeConstraints { make in
make.left.equalToSuperview().offset(kMargin)
make.right.equalToSuperview().offset(-kMargin)
make.centerY.equalToSuperview()
make.height.equalTo(48)
}
tableView.snp.makeConstraints { make in
make.left.equalToSuperview()
make.right.equalToSuperview()
make.top.equalTo(topLineView.snp.bottom).offset(12)
make.bottom.equalTo(bottomView.snp.top)
}
tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: CGFloat.leastNonzeroMagnitude))
tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 20))
preferredContentSize = CGSize(width: KScreenWidth, height: KScreenHeight - k_Height_NavigationtBarAndStatuBar - 44)
}
private func setupDatas() {
datas.forEach { [weak self] model in
guard let self = self else {
return
}
if self.selectedTypes.contains(model.type) {
model.isSelected = true
}
}
}
}
extension YHGCIncomeTypeSelectViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return datas.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard datas.count > section else {
return 0
}
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard datas.count > indexPath.section else {
return UITableViewCell()
}
let model = datas[indexPath.section]
if let cell = tableView.dequeueReusableCell(withIdentifier: YHIncomeTypePopViewSelectCell.cellReuseIdentifier) as? YHIncomeTypePopViewSelectCell {
cell.setupCellInfo(title: model.type.nameString(), isSelected: model.isSelected)
return cell
}
return UITableViewCell()
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return UIView()
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 0
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView()
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 12.0
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: false)
guard datas.count > indexPath.section else {
return
}
let model = datas[indexPath.section]
model.isSelected.toggle()
if model.isSelected {
if !selectedTypes.contains(model.type) {
selectedTypes.append(model.type)
}
} else {
if let index = selectedTypes.firstIndex(where: { type in
type == model.type
}) {
selectedTypes.remove(at: index)
}
}
tableView.reloadRows(at: [indexPath], with: .automatic)
}
}
//
// YHGCIncomeRecordSaveWorkModel.swift
// galaxy
//
// Created by alexzzw on 2024/12/26.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import SmartCodable
class YHGCIncomeRecordSaveWorkModel: SmartCodable {
var id: Int = 0
required init() {
}
}
//
// YHGCIncomeType.swift
// galaxy
//
// Created by alexzzw on 2024/12/26.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import Foundation
//高A使用 收入类型 1 工资薪金所得及全年一次性奖金; 2 上市公司股票期权或股权收入; 3 持股公司分红收入; 4 个体工商户/合伙企业/独资企业经营所得收入; 5 股权转让收入; 6 内地公司收入(持股50%及以上); 7 香港公司收入(持股50%及以上); 8 其他境外公司收入(持股50%及以上); 10 澳门公司收入(持股50%及以上)
enum YHGCIncomeType: Int, CaseIterable {
case salaryIncomeAndBonus = 1
case stockOrEquityIncome = 2
case dividendIncome = 3
case businessIncome = 4
case equityTransferIncome = 5
case incomeOfMainland = 6
case incomeOfHKCompanies = 7
case incomeOfOtherOverseasCompanies = 8
case incomeOfMacauCompanies = 10
func nameString() -> String {
switch self {
case .incomeOfMainland:
return "内地公司收入(持股50%及以上)"
case .incomeOfHKCompanies:
return "香港公司收入(持股50%及以上)"
case .incomeOfMacauCompanies:
return "澳门公司收入(持股50%及以上)"
case .stockOrEquityIncome:
return "上市公司股票期权或股权收入"
case .salaryIncomeAndBonus:
return "工资薪金所得及全年一次性奖金"
case .dividendIncome:
return "持股公司分红收入"
case .equityTransferIncome:
return "股权转让收入"
case .businessIncome:
return "个体工商户/合伙企业/独资企业经营所得收入"
case .incomeOfOtherOverseasCompanies:
return "其他境外公司收入(持股50%及以上)"
}
}
}
//
// YHGCIncomeTypeSelectModel.swift
// galaxy
//
// Created by alexzzw on 2024/12/26.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHGCIncomeTypeSelectModel: NSObject {
var isSelected: Bool = false
var type: YHGCIncomeType = .businessIncome
init(type: YHGCIncomeType, isSelected: Bool) {
self.type = type
self.isSelected = isSelected
}
}
......@@ -11,7 +11,8 @@ import UIKit
class YHIncomeDateTillNowCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHIncomeDateTillNowCell"
var tillNowButtonEvent: (() -> Void)?
var tillNowButtonEvent: ((Bool) -> Void)?
private var placeholder: String = ""
private lazy var dotIcon: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "red_dot_6"))
......@@ -71,8 +72,9 @@ class YHIncomeDateTillNowCell: YHResignDocumentCell {
fatalError("init(coder:) has not been implemented")
}
func setupCellInfo(title: String, detail: String?, placeholder: String = "请选择", showBottomLine: Bool = true, tillNow: Bool, needShowFailButton: Bool) {
func setupCellInfo(title: String, detail: String?, placeholder: String = "请选择", showBottomLine: Bool = true, needShowFailButton: Bool) {
infoTitleLabel.text = title
self.placeholder = placeholder
updateContentState(detail: detail, placeholder: placeholder)
bottomLineView.isHidden = !showBottomLine
infoFailLabel.text = placeholder
......@@ -82,7 +84,10 @@ class YHIncomeDateTillNowCell: YHResignDocumentCell {
extension YHIncomeDateTillNowCell {
@objc private func tillNowButtonClicked() {
tillNowButtonEvent?()
tillNowButton.isSelected.toggle()
tillNowButtonEvent?(tillNowButton.isSelected)
let detail: String? = tillNowButton.isSelected ? "至今" : nil
updateContentState(detail: detail, placeholder: self.placeholder)
}
private func updateFailLabel(_ needShowFailButton: Bool) {
......@@ -121,10 +126,57 @@ extension YHIncomeDateTillNowCell {
infoDetailLabel.font = .PFSC_M(ofSize: 14)
infoDetailLabel.textColor = UIColor.mainTextColor
infoDetailLabel.text = detail
if detail == "至今" {
tillNowButton.isSelected = true
infoDetailLabel.isHidden = true
tillNowButton.snp.remakeConstraints { make in
make.centerY.equalTo(infoTitleLabel)
make.left.equalToSuperview().offset(147)
make.width.equalTo(50)
make.height.equalTo(30)
}
infoDetailLabel.snp.remakeConstraints { make in
make.top.equalToSuperview().offset(16)
make.bottom.equalToSuperview().offset(-16)
make.left.equalToSuperview().offset(147)
}
} else {
infoDetailLabel.isHidden = false
tillNowButton.isSelected = false
tillNowButton.snp.remakeConstraints { make in
make.centerY.equalTo(infoTitleLabel)
make.right.equalToSuperview().offset(-18)
make.width.equalTo(50)
make.height.equalTo(30)
}
infoDetailLabel.snp.remakeConstraints { make in
make.top.equalToSuperview().offset(16)
make.bottom.equalToSuperview().offset(-16)
make.left.equalToSuperview().offset(147)
make.right.lessThanOrEqualTo(tillNowButton.snp.left).offset(-18)
}
}
} else {
infoDetailLabel.isHidden = false
tillNowButton.isSelected = false
infoDetailLabel.text = placeholder
infoDetailLabel.font = .PFSC_R(ofSize: 14)
infoDetailLabel.textColor = UIColor(hexString: "#B9C1CC")
tillNowButton.snp.remakeConstraints { make in
make.centerY.equalTo(infoTitleLabel)
make.right.equalToSuperview().offset(-18)
make.width.equalTo(50)
make.height.equalTo(30)
}
infoDetailLabel.snp.remakeConstraints { make in
make.top.equalToSuperview().offset(16)
make.bottom.equalToSuperview().offset(-16)
make.left.equalToSuperview().offset(147)
make.right.lessThanOrEqualTo(tillNowButton.snp.left).offset(-18)
}
}
}
......
......@@ -96,28 +96,4 @@ class YHGCIncomeRecordViewModel: YHBaseViewModel {
callBackBlock(false, err)
}
}
// 创建新的是否可用
// func requestCreateNewWork(_ orderId: Int, callBackBlock: @escaping (_ success: Int, _ error: YHErrorModel?) -> Void) {
// let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.WorkExperience.createNewWork
// let params: [String: Any] = ["order_id": orderId]
//
// _ = YHNetRequest.postRequest(url: strUrl, params: params) { [weak self] json, _ in
// // 1. json字符串 转 对象
// guard let self = self else { return }
// if json.code == 200 {
// guard let dic = json.data?.peel as? [String: Any], let result = YHWorkExperienceDetailModel.deserialize(from: dic) else {
// callBackBlock(0, nil)
// return
// }
// self.workId = result.work_id
// callBackBlock(result.work_id, nil)
// } else {
// let error: YHErrorModel = YHErrorModel(errorCode: Int32(json.code), errorMsg: json.msg)
// callBackBlock(0, error)
// }
// } failBlock: { err in
// callBackBlock(0, err)
// }
// }
}
......@@ -10,12 +10,13 @@ import UIKit
class YHGCIncomeRecordWorkExperienceViewModel: YHBaseViewModel {
var position: YHGCWorkExperienceModel = YHGCWorkExperienceModel()
var saveWorkModel: YHGCIncomeRecordSaveWorkModel = YHGCIncomeRecordSaveWorkModel()
override init() {
super.init()
}
func requestWorkPositionDetail(_ workId: Int, _ orderID: Int, callBackBlock: @escaping (_ success: Bool?, _ error: YHErrorModel?) -> Void) {
func requestWorkPositionDetail(_ workId: Int, _ orderID: Int, callBackBlock: @escaping (_ success: Bool, _ error: YHErrorModel?) -> Void) {
let param: [String: Any] = ["id": workId, "order_id": orderID]
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.WorkExperience.gcworkDetail
_ = YHNetRequest.getRequest(url: strUrl, params: param) { [weak self] json, _ in
......@@ -37,10 +38,9 @@ class YHGCIncomeRecordWorkExperienceViewModel: YHBaseViewModel {
}
}
func saveWorkPosition(callBackBlock: @escaping (_ success: Bool?, _ error: YHErrorModel?) -> Void) {
func saveWorkPosition(callBackBlock: @escaping (_ success: Bool, _ error: YHErrorModel?) -> Void) {
let address = ["area": position.location.area,
"country": position.location.country,
"details": position.location.details,
"foreign": position.location.foreign] as [String: Any]
let params: [String: Any] = ["id": position.id,
"order_id": position.order_id,
......@@ -51,15 +51,22 @@ class YHGCIncomeRecordWorkExperienceViewModel: YHBaseViewModel {
"has_work_certificate": position.has_work_certificate,
"company_type": position.company_type,
"company_type_other": position.company_type_other,
"location": address]
"location_aboard": position.location_aboard,
"location": address,
"type_of_income": position.type_of_income,
"income": position.income,
"turnover": position.turnover,
"verify": 1]
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.WorkExperience.gcWorkSave
_ = YHNetRequest.postRequest(url: strUrl, params: params) { [weak self] json, _ in
guard let self = self else { return }
if json.code == 200 {
guard let dic = json.data?.peel as? [String: Any], let result = YHWorkExperiencePositionModel.deserialize(from: dic) else {
guard let dic = json.data?.peel as? [String: Any], let result = YHGCIncomeRecordSaveWorkModel.deserialize(from: dic) else {
callBackBlock(false, nil)
return
}
self.saveWorkModel = result
self.position.id = result.id
callBackBlock(true, nil)
} else {
let error: YHErrorModel = YHErrorModel(errorCode: Int32(json.code), errorMsg: json.msg)
......
......@@ -26,7 +26,7 @@ class YHGCWorkExperienceModel: SmartCodable {
var turnover: String = ""
/// 高A使用 收入类型 1 工资薪金所得及全年一次性奖金; 2 上市公司股票期权或股权收入; 3 持股公司分红收入; 4 个体工商户/合伙企业/独资企业经营所得收入; 5
/// 股权转让收入; 6 内地公司收入(持股50%及以上); 7 香港公司收入(持股50%及以上); 8 其他境外公司收入(持股50%及以上); 10 澳门公司收入(持股50%及以上)
var typeOfIncome: [Int] = []
var type_of_income: [Int] = []
/// 高A使用 收入金额
var income: String = ""
......
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