Commit 93d6d856 authored by DavidHuang's avatar DavidHuang

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

parents b6caaf6e 4a7f2882
This diff is collapsed.
......@@ -150,7 +150,7 @@ extension YHHomeInformationViewController : CollectionViewWaterfallLayoutDelegat
return 0.0
}
var row = self.sectionItems.count/3
if row%3 != 0 {
if self.sectionItems.count%3 != 0 {
row = row + 1
}
let listHeight = Float(Double(row) * kHomeItemHeight)
......
......@@ -20,7 +20,7 @@ class YHHomeInfoSectionHeadView: UICollectionReusableView {
didSet {
self.collectView.reloadData()
var row = items.count/3
if row%3 != 0 {
if items.count%3 != 0 {
row = row + 1
}
let totalHeight = Double(row) * kHomeItemHeight
......
......@@ -619,11 +619,7 @@ extension YHInformationPerfectListVC : UITableViewDelegate,UITableViewDataSource
self.showTipsAlert()
return
}
if serviceCenterMainReqVM.myInfoFillStep > 0 {
gotoApplyTypeVC(.typeA)
} else {
gotoApplyTypeVC(nil)
}
gotoApplyTypeVC()
//高A- 申请类别
} else if tapIndex == 1 {
//高A- 主申请人信息
......@@ -661,17 +657,7 @@ extension YHInformationPerfectListVC : UITableViewDelegate,UITableViewDataSource
self.showTipsAlert()
return
}
if serviceCenterMainReqVM.myInfoFillStep > 0 {
var type: YHGCApplicationType = .typeB
if productType == 2 {
type = .typeB
} else if productType == 3 {
type = .typeC
}
gotoApplyTypeVC(type)
} else {
gotoApplyTypeVC(nil)
}
gotoApplyTypeVC()
//高才BC- 申请类别
} else if tapIndex == 1 {
//高才BC- 主申请人信息
......@@ -710,13 +696,29 @@ extension YHInformationPerfectListVC : UITableViewDelegate,UITableViewDataSource
}
}
private func gotoApplyTypeVC(_ type: YHGCApplicationType?) {
if let type = type {
let ctl = YHGCApplicationTypeResultController(type: type)
navigationController?.pushViewController(ctl)
} else {
let ctl = YHGCApplicationTypeController(orderId: orderId ?? 0)
navigationController?.pushViewController(ctl)
private func gotoApplyTypeVC() {
let orderId = orderId ?? 0
YHHUD.show(.progress(message: "加载中..."))
YHGCApplicationTypeViewModel().getApplyType(orderId: orderId) { [weak self] model, error in
YHHUD.hide()
guard let self = self else {
return
}
guard let model = model else {
if let errorMsg = error?.errorMsg, errorMsg.count > 0 {
YHHUD.flash(message: errorMsg)
}
return
}
let type = YHGCApplicationType(rawValue: model.apply_type)
if let type = type {
let ctl = YHGCApplicationTypeResultController(type: type)
self.navigationController?.pushViewController(ctl)
} else {
let ctl = YHGCApplicationTypeController(orderId: orderId)
self.navigationController?.pushViewController(ctl)
}
}
}
}
......@@ -283,8 +283,13 @@ class YHServiceOrderListViewController: YHBaseViewController {
} else if type == 202 {
//高才我的方案
} else if type == 203 {
//高才我的证件
let vc = YHGCMineCertificateEntryViewController()
vc.orderId = orderId
UIViewController.current?.navigationController?.pushViewController(vc)
} else if type == 204 {
//高才我的签字
}
......
......@@ -44,7 +44,9 @@ class YHEducationInfo: SmartCodable {
var admissionTime: String?
var graduateTime: String?
var vacantNum: Int = 0
var majorOther: String?
var hasBachelorDegree: Int = 0
enum CodingKeys: String, CodingKey {
case id = "id"
case college = "college"
......@@ -53,11 +55,30 @@ class YHEducationInfo: SmartCodable {
case admissionTime = "admission_time"
case graduateTime = "graduate_time"
case vacantNum = "vacant_num"
case majorOther = "major_other"
case hasBachelorDegree = "has_bachelor_degree"
}
required init() {
}
func getDegree() -> String {
if hasBachelorDegree == 1 {
return "学士学位"
}
if hasBachelorDegree == 2 {
return "无学位"
}
return ""
}
func getRealMajor() -> String? {
if let major = major, major == "其他" {
return majorOther
}
return major
}
}
class YHQualificationInfo: SmartCodable {
......@@ -94,6 +115,20 @@ class YHEducationDetailInfo: SmartCodable {
// 证件提供确认 0 未选择 1 是 2 否
var certConfirm: Int = 0
func isNeedInputMajor() -> Bool {
return major == "其他"
}
func getDegree() -> String {
if hasBachelorDegree == 1 {
return "学士学位"
}
if hasBachelorDegree == 2 {
return "无学位"
}
return ""
}
enum CodingKeys: String, CodingKey {
case id = "id"
......
......@@ -182,6 +182,8 @@ enum YHFormDetailItemType:Int {
case graduateTime
// 专业
case educationMajor
// 具体专业
case detailMajor
// 学位
case educationDegree
// 学位类型
......@@ -508,6 +510,8 @@ class YHFormDetailItem : YHFormItemProtocol {
return "毕业年月".local
case .educationMajor:
return "专业".local
case .detailMajor:
return "具体专业".local
case .educationDegree:
return "学位".local
case .degreeType:
......
//
// YHDynamicSheetPickerView.swift
// galaxy
//
// Created by alexzzw on 2024/12/23.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHDynamicSheetPickerView: UIView {
let dataSource: [String]
// 选择的行
var selectRow: Int = 0
private var selectBlock: ((Int) -> Void)?
var title: String? {
didSet {
titleLabel.text = title
}
}
lazy var pickerView: UIPickerView = {
let view = UIPickerView()
view.dataSource = self
view.delegate = self
return view
}()
lazy var blackMaskView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hex: 0x0F1214, alpha: 0.5)
let tap = UITapGestureRecognizer(target: self, action: #selector(dismiss))
view.addGestureRecognizer(tap)
return view
}()
lazy var whiteContentView: UIView = {
let view = UIView()
view.backgroundColor = .white
return view
}()
lazy var topView: UIView = {
let view = UIView()
view.addSubview(titleLabel)
view.addSubview(cancelBtn)
view.addSubview(confirmBtn)
view.addSubview(topLineView)
titleLabel.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
cancelBtn.snp.makeConstraints { make in
make.left.equalToSuperview().offset(21)
make.centerY.equalToSuperview()
make.size.equalTo(CGSizeMake(30, 20))
}
confirmBtn.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-21)
make.centerY.equalToSuperview()
make.size.equalTo(CGSizeMake(30, 20))
}
topLineView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(21)
make.right.equalToSuperview().offset(-21)
make.bottom.equalToSuperview()
make.height.equalTo(1)
}
return view
}()
lazy var topLineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#F0F0F0")
return view
}()
lazy var titleLabel: UILabel = {
let label = UILabel()
label.textColor = UIColor.mainTextColor
label.textAlignment = .center
label.font = UIFont.PFSC_M(ofSize: 17)
label.text = "请选择"
return label
}()
lazy var cancelBtn: UIButton = {
let btn = UIButton()
btn.setTitle("取消".local, for: .normal)
btn.titleLabel?.font = UIFont.PFSC_M(ofSize: 14)
btn.setTitleColor(UIColor.mainTextColor, for: .normal)
btn.addTarget(self, action: #selector(didClickCancelButton), for: .touchUpInside)
btn.YH_clickEdgeInsets = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
return btn
}()
lazy var confirmBtn: UIButton = {
let btn = UIButton()
btn.setTitle("确定".local, for: .normal)
btn.titleLabel?.font = UIFont.PFSC_M(ofSize: 14)
btn.setTitleColor(UIColor.brandMainColor, for: .normal)
btn.addTarget(self, action: #selector(didClickConfirmButton), for: .touchUpInside)
btn.YH_clickEdgeInsets = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
return btn
}()
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
init(dataSource: [String]) {
self.dataSource = dataSource
super.init(frame: UIScreen.main.bounds)
createUI()
}
func show() {
showSelectRow()
UIApplication.shared.yhKeyWindow()?.addSubview(self)
}
func showSelectRow() {
if selectRow < dataSource.count {
pickerView.selectRow(selectRow, inComponent: 0, animated: true)
} else {
selectRow = 0
pickerView.selectRow(0, inComponent: 0, animated: true)
}
}
static func show(dataSource: [String], title: String, selectIndex: Int, callBack: @escaping ((Int) -> Void)) {
let picker = YHDynamicSheetPickerView(dataSource: dataSource)
picker.title = title
picker.selectRow = selectIndex < dataSource.count ? selectIndex : 0
picker.selectBlock = callBack
picker.show()
}
static func show(dataSource: [String], title: String, selectTitle: String?, callBack: @escaping ((Int) -> Void)) {
let picker = YHDynamicSheetPickerView(dataSource: dataSource)
picker.title = title
if let selectTitle = selectTitle, let firstIndex = dataSource.firstIndex(of: selectTitle) {
picker.selectRow = firstIndex
} else {
picker.selectRow = 0
}
picker.selectBlock = callBack
picker.show()
}
func createUI() {
addSubview(blackMaskView)
addSubview(whiteContentView)
whiteContentView.addSubview(topView)
whiteContentView.addSubview(pickerView)
let corner = UIRectCorner(rawValue: UIRectCorner.topLeft.rawValue | UIRectCorner.topRight.rawValue)
let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corner, cornerRadii: CGSizeMake(kCornerRadius6, kCornerRadius6))
let layer = CAShapeLayer()
layer.frame = whiteContentView.bounds
layer.path = path.cgPath
whiteContentView.layer.mask = layer
if let title = title {
titleLabel.text = title
}
blackMaskView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
let whiteContentHeight = 322.0
whiteContentView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.height.equalTo(whiteContentHeight)
}
topView.snp.makeConstraints { make in
make.left.right.top.equalToSuperview()
make.height.equalTo(52)
}
pickerView.snp.makeConstraints { make in
make.top.equalTo(topView.snp.bottom)
make.left.right.bottom.equalToSuperview()
}
}
}
extension YHDynamicSheetPickerView {
@objc func didClickCancelButton() {
dismiss()
}
@objc func didClickConfirmButton() {
selectBlock?(selectRow)
dismiss()
}
@objc func dismiss() {
removeFromSuperview()
}
}
// MARK: - UIPickerViewDelegate
extension YHDynamicSheetPickerView: UIPickerViewDelegate, UIPickerViewDataSource {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if !dataSource.isEmpty {
return dataSource.count
}
return 0
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if 0 <= row && row < dataSource.count {
return dataSource[row]
}
return ""
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if 0 <= row && row < dataSource.count {
selectRow = row
// 刷新picker,看上面的代理
pickerView.reloadComponent(component)
}
}
func pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {
return KScreenWidth - 16 * 2
}
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
return 42.0
}
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let label = UILabel()
label.textColor = UIColor.mainTextColor
label.font = UIFont.PFSC_R(ofSize: 14)
label.textAlignment = .center
label.numberOfLines = 2
label.text = ""
if 0 <= row && row < dataSource.count {
label.text = dataSource[row]
}
if selectRow == row {
label.font = UIFont.PFSC_M(ofSize: 14)
} else {
label.font = UIFont.PFSC_R(ofSize: 14)
}
// 选中背景色
if #available(iOS 14.0, *), pickerView.subviews.count > 1 {
pickerView.subviews[1].backgroundColor = UIColor.brandMainColor6
}
return label
}
}
......@@ -179,6 +179,10 @@ class YHSheetPickerView: UIView {
YHSheetPickerViewItem(title:"硕士学位".local, index:2),
YHSheetPickerViewItem(title:"博士学位".local, index:3)
],
.degree2:
[YHSheetPickerViewItem(title:"无学位".local, index:2),
YHSheetPickerViewItem(title:"学士学位".local, index:1),
],
// 学位2
.educationDegree:
......@@ -317,6 +321,22 @@ class YHSheetPickerView: UIView {
YHSheetPickerViewItem(title:"社会科学".local, index:10),
YHSheetPickerViewItem(title:"其他".local, index:11),
],
.major:
[YHSheetPickerViewItem(title:"艺术与人文学科".local, index:0),
YHSheetPickerViewItem(title:"经济及工商管理".local, index:1),
YHSheetPickerViewItem(title:"教育".local, index:2),
YHSheetPickerViewItem(title:"法学".local, index:3),
YHSheetPickerViewItem(title:"社会科学".local, index:4),
YHSheetPickerViewItem(title:"电脑科学".local, index:5),
YHSheetPickerViewItem(title:"工程学".local, index:6),
YHSheetPickerViewItem(title:"生命科学及医学".local, index:7),
YHSheetPickerViewItem(title:"物理/自然科学".local, index:8),
YHSheetPickerViewItem(title:"心理学".local, index:9),
YHSheetPickerViewItem(title:"其他".local, index:9),
],
]
func createUI() {
......@@ -399,6 +419,8 @@ extension YHSheetPickerView {
return ""
case .degree:
return "选择学位"
case .degree2:
return "选择学位"
case .educationDegree:
return "选择学位"
case .marriageText:
......@@ -427,6 +449,9 @@ extension YHSheetPickerView {
return "选择学位类型"
case .selectAdress:
return "选择国家地区"
case .major:
return "选择专业"
}
}
......
......@@ -14,7 +14,8 @@ enum YHSheetPickerViewType: Int {
case none = 0
// 学位
case degree
// 学位2 (包含无学位类型)
case degree2
// 学位(包含无学位类型)
case educationDegree
// 学位有无
case ownDegree
......@@ -42,6 +43,8 @@ enum YHSheetPickerViewType: Int {
case degreeCategory
// 国家地区
case selectAdress
// 专业
case major
}
class YHSheetPickerViewItem {
......
......@@ -209,6 +209,25 @@ class YHFormItemDoubleChoiceCell: UITableViewCell {
func setTips(_ tips:String?, isShow:Bool) {
tipsLabel.text = tips
tipsLabel.isHidden = !isShow
if isShow {
tipsLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(horizonalGap)
make.right.equalToSuperview().offset(-horizonalGap)
make.top.equalTo(titleLabel.snp.bottom)
make.bottom.equalToSuperview().offset(-16).priority(.medium)
}
} else {
tipsLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(horizonalGap)
make.right.equalToSuperview().offset(-horizonalGap)
make.height.equalTo(0)
make.top.equalTo(titleLabel.snp.bottom)
make.bottom.equalToSuperview().offset(-16).priority(.medium)
}
}
self.setNeedsLayout()
self.layoutIfNeeded()
}
// 更新答案按钮选中状态
......
......@@ -88,6 +88,8 @@ extension YHEmploymentVerificationAvailableCell {
infoTitleLabel.snp.makeConstraints { make in
make.left.equalTo(dotIcon.snp.right).offset(2)
make.centerY.equalToSuperview()
make.top.greaterThanOrEqualToSuperview().offset(16)
make.bottom.lessThanOrEqualToSuperview().offset(-16)
}
rightArrowIcon.snp.makeConstraints { make in
......
......@@ -132,9 +132,10 @@ class YHOtherPickerView: UIView {
}()
init(type: YHOtherPickerViewType) {
init(type: YHOtherPickerViewType, _ dataSource: [YHOtherPickerViewItemData] = []) {
super.init(frame: UIScreen.main.bounds)
self.createUI()
self.arrData = dataSource
self.type = type
initDataSource()
......@@ -151,11 +152,11 @@ class YHOtherPickerView: UIView {
UIApplication.shared.yhKeyWindow()?.addSubview(self)
}
static func show(type:YHOtherPickerViewType, selectTitle: String = "", callBack: @escaping ((YHOtherPickerViewItemData)->Void)) {
static func show(type:YHOtherPickerViewType, selectTitle: String = "", _ dataSource: [YHOtherPickerViewItemData] = [],callBack: @escaping ((YHOtherPickerViewItemData)->Void)) {
IQKeyboardManager.shared.resignFirstResponder()
let picker = YHOtherPickerView(type: type)
let picker = YHOtherPickerView(type: type, dataSource)
picker.selectBlock = callBack
picker.show()
picker.selectTitle = selectTitle
......@@ -250,6 +251,10 @@ class YHOtherPickerView: UIView {
return "选择国家地区"
case .field:
return "选择经验领域"
case .myCompany:
return "选择可提供的在职公司"
case .position:
return "选择职位界别"
default:
return "请选择"
}
......@@ -277,7 +282,7 @@ extension YHOtherPickerView: UIPickerViewDelegate, UIPickerViewDataSource {
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
switch type {
case .nature,.certificate,.structure,.level,.prove,.idType,.sex,.marry,.constellation,.field:
case .nature,.certificate,.structure,.level,.prove,.idType,.sex,.marry,.constellation,.field,.myCompany,.position:
return 50
default:
return 70
......@@ -287,7 +292,7 @@ extension YHOtherPickerView: UIPickerViewDelegate, UIPickerViewDataSource {
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
switch type {
case .nature,.certificate,.structure,.level,.prove,.idType,.travelIdType,.sex,.marry,.constellation,.selectAddress,.field:
case .nature,.certificate,.structure,.level,.prove,.idType,.travelIdType,.sex,.marry,.constellation,.selectAddress,.field,.myCompany,.position:
let label = UILabel()
label.textColor = UIColor.mainTextColor
label.font = UIFont.PFSC_M(ofSize: 14)
......@@ -460,6 +465,14 @@ extension YHOtherPickerView {
arrData.append(model)
}
title = getTitle(type: type)
case .position:
let arr = YHConstantArrayData.arrposition
arrData.removeAll()
arr.forEach { item in
let model = YHOtherPickerViewItemData(title: item["title"] ?? "-", subTitle: "", index: item["id"] ?? "-")
arrData.append(model)
}
title = getTitle(type: type)
default:
return
}
......
......@@ -21,6 +21,8 @@ enum YHWorkExperienceSelectType: Int {
case prove = 9
case company = 10
case field = 11
case myCompany = 12
case position = 13
}
enum YHWorkExperienceID: Int {
......
......@@ -24,6 +24,7 @@ class YHWorkExperienceItemView: UIView {
var country: String = ""
var workId: Int = 0
var orderId: Int = 0
var companyList: [YHWorkItemListModel] = []
var dataSource: YHWorkExperienceModel? {
didSet {
updateAllViews()
......@@ -260,6 +261,10 @@ class YHWorkExperienceItemView: UIView {
}
case .field:
break
case .myCompany:
break
case .position:
break
}
}
nextStepImageView.isHidden = false
......@@ -539,6 +544,29 @@ class YHWorkExperienceItemView: UIView {
block(self.dataSource ?? YHWorkExperienceModel())
}
}
case .myCompany:
var arrData: [YHOtherPickerViewItemData] = []
companyList.forEach { item in
let model = YHOtherPickerViewItemData(title: item.company_name ?? "", subTitle: "", index: "\(item.id ?? 0)")
arrData.append(model)
}
YHOtherPickerView.show(type: .myCompany, selectTitle: self.dataSource?.message ?? "", arrData) {[weak self] data in
guard let self = self else { return }
self.dataSource?.message = data.title
self.updateAllViews()
if let block = self.block {
block(self.dataSource ?? YHWorkExperienceModel())
}
}
case .position:
YHOtherPickerView.show(type: .position, selectTitle: self.dataSource?.message ?? "") {[weak self] data in
guard let self = self else { return }
self.dataSource?.message = data.title
self.updateAllViews()
if let block = self.block {
block(self.dataSource ?? YHWorkExperienceModel())
}
}
}
}
}
......
......@@ -122,6 +122,12 @@ class YHWorkExperiencePositionListTableViewCell: UITableViewCell {
block(model)
}
}
itemView.companyBlock = {[weak self] model in
guard let self = self else { return }
if let block = self.companyBlock {
block(model)
}
}
mainItemView.addSubview(itemView)
itemView.snp.makeConstraints { make in
make.left.equalTo(18)
......
//
// YHCertificateResourceUploadVC.swift
// galaxy
//
// Created by edy on 2024/3/13.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import JXSegmentedView
import UniformTypeIdentifiers
import IQKeyboardManagerSwift
import SwifterSwift
class YHGCCertificateListVC: YHBaseViewController {
var orderId : Int?
var status: YHCertificateUploadStatus = .all
var items:[YHSupplementInfo] = []
var viewModel: YHCertificateViewModel = YHCertificateViewModel()
var categoryInfo: YHCategoryData!
lazy var previewFileTool:YHFilePreviewTool = {
let tool = YHFilePreviewTool(targetVC: self)
return tool
}()
lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.grouped)
if #available(iOS 11.0, *) {
tableView.contentInsetAdjustmentBehavior = .never
}
tableView.estimatedSectionHeaderHeight = 14.0
tableView.estimatedSectionFooterHeight = 1.0
tableView.showsVerticalScrollIndicator = false
tableView.separatorStyle = .none
tableView.delegate = self
tableView.dataSource = self
tableView.backgroundColor = UIColor(hexString:"#F8F8F8")
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "UITableViewCell")
tableView.register(YHCertificateInfoCell.self, forCellReuseIdentifier: YHCertificateInfoCell.cellReuseIdentifier)
tableView.backgroundView = emptyDataTipsView
return tableView
}()
lazy var emptyDataTipsView: YHEmptyDataView = {
let view = YHEmptyDataView.createView("没有找到相关资料哦~", kEmptyCommonBgName)
view.topMargin = 130
view.isHidden = false
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
self.gk_navigationBar.isHidden = true
createUI()
requestList(status: status)
}
func createUI() {
view.addSubview(tableView)
tableView.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(KScreenHeight - k_Height_NavigationtBarAndStatuBar - YHCertificateListContainerVC.segmentHeight)
}
}
}
extension YHGCCertificateListVC: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: YHCertificateInfoCell.cellReuseIdentifier, for: indexPath) as! YHCertificateInfoCell
if 0 <= indexPath.section && indexPath.section < items.count {
let item = items[indexPath.section]
cell.updateModel(item)
cell.templateBlock = {
[weak self] in
guard let self = self else { return }
let view = YHCertificateTemplateSheetView.templateView(item.templateInfo)
view.scanTemplateBlock = {
[weak self] path in
guard let self = self else { return }
if let url = path?.url, !url.isEmpty {
print(url)
self.previewFileTool.openXLSXRemoteFile(urlString:url, fileName:"预览")
}
}
view.show()
}
}
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if 0 <= indexPath.section && indexPath.section < items.count {
let item = items[indexPath.section]
if item.checkStatus == YHCertificateUploadStatus.preUpload.rawValue { // 待上传
showUploadSheetView(supplementId:item.id)
return
}
// 非待上传的进入详情
let vc = YHGCCertificateUploadContentListVC()
vc.orderId = orderId ?? 0
vc.categoryId = categoryInfo.categoryId
vc.supplementId = item.id
self.navigationController?.pushViewController(vc)
}
}
private func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> CGFloat {
return 14.0
}
private func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> CGFloat {
return 1.0
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView()
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return UIView()
}
}
// MARK: - JXSegmentedListContainerViewListDelegate
extension YHGCCertificateListVC: JXSegmentedListContainerViewListDelegate {
func listView() -> UIView {
return view
}
}
extension YHGCCertificateListVC {
func requestList(status: YHCertificateUploadStatus, extra:[String:Any] = [:]) {
/*
// 状态
"status_all": "",
// 类型
"template_cate_id": "",
// 搜索
"keywork": "",
*/
var params:[String:Any] = [
"order_id" : orderId ?? 0,
"node": "1",
"state": "1",
"category_id": categoryInfo.categoryId,
"supplement_ids": []]
if !extra.isEmpty {
params += extra
}
print(params)
// state: 3:待上传 2:已驳回 1:已完成 0:审核中
viewModel.getCertificateList(params: params) {
[weak self] listInfo, error in
guard let self = self else { return }
items.removeAll()
if let listInfo = listInfo {
let arr = listInfo.supplementList
var results: [YHSupplementInfo] = []
if status == .all {
results.append(contentsOf:arr)
} else {
for item in arr {
if item.checkStatus == status.rawValue {
results.append(item)
}
}
}
items.append(contentsOf: results)
}
// 数量统计
NotificationCenter.default.post(name: countStatisticsNotify, object: [self.status: items.count])
emptyDataTipsView.isHidden = items.count > 0
self.tableView.reloadData()
if let errorMsg = error?.errorMsg, errorMsg.count > 0 {
YHHUD.flash(message: errorMsg, duration:3)
}
}
}
func showUploadSheetView(supplementId: Int) {
let orderID = self.orderId ?? 0
self.viewModel.showUploadSheetView(supplementId: supplementId) {
[weak self] in
guard let self = self else { return }
DispatchQueue.main.async {
let vc = YHGCCertificateUploadContentListVC()
vc.orderId = orderID
vc.categoryId = self.categoryInfo.categoryId
vc.supplementId = supplementId
self.navigationController?.pushViewController(vc)
}
}
}
}
//
// YHCertificateSearchViewController.swift
// galaxy
//
// Created by edy on 2024/3/18.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHGCCertificateSearchViewController: YHBaseViewController {
var items:[YHSupplementInfo] = []
var viewModel: YHCertificateViewModel = YHCertificateViewModel()
var orderId : Int?
var categoryInfo: YHCategoryData?
lazy var tableView: UITableView = {
let tableView = UITableView(frame:.zero, style:.grouped)
if #available(iOS 11.0, *) {
tableView.contentInsetAdjustmentBehavior = .never
}
tableView.estimatedSectionHeaderHeight = 14.0
tableView.estimatedSectionFooterHeight = 1.0
tableView.showsVerticalScrollIndicator = false
tableView.separatorStyle = .none
tableView.delegate = self
tableView.dataSource = self
tableView.backgroundColor = UIColor(hexString:"#F8F8F8")
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "UITableViewCell")
tableView.register(YHCertificateInfoCell.self, forCellReuseIdentifier: YHCertificateInfoCell.cellReuseIdentifier)
tableView.backgroundView = emptyDataTipsView
return tableView
}()
lazy var previewFileTool:YHFilePreviewTool = {
let tool = YHFilePreviewTool(targetVC: self)
return tool
}()
lazy var searchView:UIView = {
let view = UIView()
view.backgroundColor = .white
view.addSubview(searchBar)
searchBar.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.left.equalToSuperview().offset(16)
make.size.equalTo(CGSize(width: KScreenWidth-32.0, height:YHCertificateSearchBar.height))
}
return view
}()
lazy var searchBar: YHCertificateSearchBar = {
let bar = YHCertificateSearchBar(frame:CGRect(x: 0, y: 0, width:KScreenWidth-32, height:YHCertificateSearchBar.height))
bar.searchBlock = {
[weak self] text in
guard let self = self else { return }
requestList(keyWord: text)
}
bar.textChange = {
[weak self] text in
guard let self = self else { return }
if isEmptyString(text) {
requestList(keyWord: "")
}
}
return bar
}()
lazy var emptyDataTipsView: YHEmptyDataView = {
let view = YHEmptyDataView.createView("没有找到相关资料哦~", kEmptySearchBgName)
view.topMargin = 130
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
self.gk_navTitle = "资料搜索".local
createUI()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.requestList(keyWord: searchBar.textField.text)
}
func createUI() {
view.addSubview(searchView)
view.addSubview(tableView)
searchView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalToSuperview().offset(k_Height_NavigationtBarAndStatuBar)
make.height.equalTo(32+YHCertificateSearchBar.height)
}
tableView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.top.equalTo(searchView.snp.bottom)
}
}
}
extension YHGCCertificateSearchViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: YHCertificateInfoCell.cellReuseIdentifier, for: indexPath) as! YHCertificateInfoCell
if 0 <= indexPath.section && indexPath.section < items.count {
let item = items[indexPath.section]
cell.updateModel(item)
cell.templateBlock = {
[weak self] in
guard let self = self else { return }
let view = YHCertificateTemplateSheetView.templateView(item.templateInfo)
view.scanTemplateBlock = {
[weak self] path in
guard let self = self else { return }
if let url = path?.url, !url.isEmpty {
print(url)
self.previewFileTool.openXLSXRemoteFile(urlString:url, fileName: "预览")
}
}
view.show()
}
}
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if 0 <= indexPath.section && indexPath.section < items.count {
let item = items[indexPath.section]
if item.checkStatus == YHCertificateUploadStatus.preUpload.rawValue { // 待上传
showUploadSheetView(supplementId: item.id)
return
}
// 非待上传的进入详情
let vc = YHGCCertificateUploadContentListVC()
vc.orderId = orderId ?? 0
vc.categoryId = self.categoryInfo?.categoryId ?? 0
vc.supplementId = item.id
self.navigationController?.pushViewController(vc)
}
}
private func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> CGFloat {
return 14.0
}
private func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> CGFloat {
return 1.0
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView()
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return UIView()
}
}
extension YHGCCertificateSearchViewController {
func requestList(keyWord:String?) {
/*
// 状态
"status_all": "",
// 类型
"template_cate_id": "",
// 搜索
"keyword": "",
*/
let keywords = keyWord ?? ""
let params:[String:Any] = [
"node": "1",
"state": "1",
"supplement_ids": [],
"order_id" : orderId ?? 0,
"keyword": keywords]
print(params)
// state: 3:待上传 2:已驳回 1:已完成 0:审核中
viewModel.getCertificateList(params: params) {
[weak self] listInfo, error in
guard let self = self else { return }
items.removeAll()
if let listInfo = listInfo {
categoryInfo = listInfo.categoryData
let arr = listInfo.supplementList
items.append(contentsOf: arr)
}
emptyDataTipsView.isHidden = items.count > 0
self.tableView.reloadData()
if let errorMsg = error?.errorMsg, errorMsg.count > 0 {
YHHUD.flash(message: errorMsg, duration:3)
}
}
}
func showUploadSheetView(supplementId: Int) {
let orderID = self.orderId ?? 0
let categoryId = self.categoryInfo?.categoryId ?? 0
self.viewModel.showUploadSheetView(supplementId: supplementId) {
[weak self] in
guard let self = self else { return }
DispatchQueue.main.async {
let vc = YHGCCertificateUploadContentListVC()
vc.orderId = orderID
vc.categoryId = categoryId
vc.supplementId = supplementId
self.navigationController?.pushViewController(vc)
}
}
}
}
//
// YHMainCertificateEntryVC.swift
// galaxy
//
// Created by davidhuangA on 2024/3/17.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
/*
我的证件 主入口页
*/
class YHGCMineCertificateEntryViewController: YHBaseViewController {
var orderId : Int = 0
private let certificateReqVM : YHCertificateViewModel = YHCertificateViewModel()
lazy var navBar: YHCustomNavigationBar = {
let bar = YHCustomNavigationBar.navBar()
bar.title = "我的证件".local
bar.showLeftSecondButtonType(.search)
bar.backBlock = {
[weak self] in
guard let self = self else { return }
self.navigationController?.popViewController(animated: true)
}
bar.leftSecondBtnClick = {
[weak self] in
guard let self = self else { return }
let vc = YHGCCertificateSearchViewController()
vc.orderId = orderId
self.navigationController?.pushViewController(vc)
}
return bar
}()
private lazy var topBkg : UIView = {
let imagV = UIImageView()
imagV.image = UIImage(named: "service_center_head_bkg3")
imagV.contentMode = .scaleAspectFill
return imagV
}()
var homeTableView: UITableView = {
let tableView = UITableView(frame: .zero, style: .grouped)
tableView.backgroundColor = .clear
tableView.separatorStyle = .none
tableView.showsHorizontalScrollIndicator = false
tableView.showsVerticalScrollIndicator = false
tableView.rowHeight = UITableView.automaticDimension
tableView.register(YHCertificateEntryCell.self,forCellReuseIdentifier: YHCertificateEntryCell.cellReuseIdentifier)
return tableView
}()
let headerView : YHCertificateEntryHeadView = YHCertificateEntryHeadView()
let bottomView : YHCertificateEntryBottomView = YHCertificateEntryBottomView()
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
loadData()
}
}
extension YHGCMineCertificateEntryViewController {
func loadData() {
if orderId != 0 {
let param = ["order_id":orderId,"node":"1","state":"1"] as [String : Any]
certificateReqVM.getCertificateStatisticData(params: param) { success, error in
if success == true {
self.headerView.dataModel = self.certificateReqVM.certificateEntryModel
} else {
YHHUD.flash(message: error?.errorMsg ?? "请求出错")
}
self.homeTableView.reloadData()
}
}
}
func setupUI() {
gk_navigationBar.isHidden = true
view.addSubview(topBkg)
topBkg.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(240)
}
view.addSubview(bottomView)
bottomView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.height.equalTo(YHCertificateEntryBottomView.viewH)
}
headerView.frame = CGRect(x: 0, y: 0, width: KScreenWidth, height: YHCertificateEntryHeadView.viewH)
homeTableView.tableHeaderView = headerView
view.addSubview(homeTableView)
homeTableView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(k_Height_NavigationtBarAndStatuBar)
make.bottom.equalTo(bottomView.snp.top)
}
// 放在最上面
view.addSubview(navBar)
navBar.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalToSuperview().offset(k_Height_statusBar())
make.height.equalTo(k_Height_NavContentBar)
}
homeTableView.delegate = self
homeTableView.dataSource = self
bottomView.block = { flag in
if flag == 0 {
//问题答疑
let vc = YHQuestionAndAnswerViewController()
self.navigationController?.pushViewController(vc)
} else {
//生成清单
let vc = YHGCMyFileListViewController()
vc.orderId = self.orderId
self.navigationController?.pushViewController(vc)
}
}
}
}
// MARK: - UITableViewDelegate 和 UITableViewDataSource
extension YHGCMineCertificateEntryViewController : UITableViewDelegate,UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
guard let model = certificateReqVM.certificateEntryModel else { return 0 }
return model.category_data.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return kMargin
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let view = UIView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: kMargin))
return view
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 0
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView()
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return YHCertificateEntryCell.cellH
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell0 = tableView.dequeueReusableCell(withClass: YHCertificateEntryCell.self)
cell0.selectionStyle = .none
guard let model = certificateReqVM.certificateEntryModel else { return cell0 }
if indexPath.section < model.category_data.count {
cell0.dataModel = model.category_data[indexPath.section]
}
return cell0
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
printLog("点击了 tableView Cell \(indexPath.section)")
guard let model = certificateReqVM.certificateEntryModel else { return }
let vc = YHGCCertificateListContainerVC()
vc.orderId = orderId
if indexPath.section < model.category_data.count {
vc.categoryInfo = model.category_data[indexPath.section]
}
self.navigationController?.pushViewController(vc)
}
}
......@@ -126,6 +126,11 @@ class YHGCEducationDetailVC: YHBaseViewController {
item04.placeHolder = "请选择专业".local
item04.value = detailInfo.major
let item09 = YHFormDetailItem(type: .detailMajor)
item09.tips = "请输入专业".local
item09.placeHolder = "请输入专业".local
item09.value = detailInfo.majorOther
let item01 = YHFormDetailItem(type: .educationStyle)
item01.tips = "请选择授课形式".local
item01.placeHolder = "请选择授课形式"
......@@ -134,7 +139,7 @@ class YHGCEducationDetailVC: YHBaseViewController {
let item05 = YHFormDetailItem(type: .educationDegree)
item05.tips = "请选择学位".local
item05.placeHolder = "请选择学位".local
item05.value = detailInfo.degree
item05.value = detailInfo.getDegree()
// let item02 = YHFormDetailItem(type: .educationTime)
// item02.tips = "请选择年月".local
......@@ -162,12 +167,16 @@ class YHGCEducationDetailVC: YHBaseViewController {
item08.tips = "请选择城市".local
}
let arr0:[YHFormItemProtocol] = [title0, item00, item03, item04, item05, item07, item08]
var arr0:[YHFormItemProtocol] = [title0, item00, item03, item04, item05, item07, item08]
if detailInfo.isNeedInputMajor() {
arr0 = [title0, item00, item03, item04, item09, item05, item07, item08]
}
items.append(arr0)
let item10 = YHFormDetailItem(type: .cerUpload)
let arr1:[YHFormItemProtocol] = [item10]
items.append(arr1)
// let item10 = YHFormDetailItem(type: .cerUpload)
// let arr1:[YHFormItemProtocol] = [item10]
// items.append(arr1)
self.tableView.reloadData()
}
......@@ -220,7 +229,7 @@ extension YHGCEducationDetailVC : UITableViewDelegate, UITableViewDataSource {
textField in
var max = -1
if detailItem.type == .educationMajor {
if detailItem.type == .detailMajor {
max = 50
} else if detailItem.type == .educationCity {
max = 100
......@@ -245,11 +254,11 @@ extension YHGCEducationDetailVC : UITableViewDelegate, UITableViewDataSource {
detailInfo.schoolAddress.foreign = ""
}
} else if detailItem.type == .educationMajor {
} else if detailItem.type == .detailMajor {
if let text = text, !text.isEmpty {
detailInfo.major = text
detailInfo.majorOther = text
} else {
detailInfo.major = ""
detailInfo.majorOther = ""
}
} else if detailItem.type == .universityFullName {
if let text = text, !text.isEmpty {
......@@ -418,10 +427,10 @@ extension YHGCEducationDetailVC : UITableViewDelegate, UITableViewDataSource {
} else if detailItem.type == .educationDegree { // 学位
YHSheetPickerView.show(type:.degree, selectTitle:detailInfo.degree) {
YHSheetPickerView.show(type:.degree2, selectTitle:detailInfo.degree) {
[weak self] item in
guard let self = self else { return }
detailInfo.degree = item.title
detailInfo.hasBachelorDegree = item.index
loadInfo()
saveInfoSilent()
}
......@@ -471,22 +480,31 @@ extension YHGCEducationDetailVC : UITableViewDelegate, UITableViewDataSource {
self.present(vc, animated: true)
} else if detailItem.type == .educationMajor { // 专业
YHSheetPickerView.show(type:.major, selectTitle: detailInfo.major) {
[weak self] item in
guard let self = self else { return }
detailInfo.major = item.title
loadInfo()
saveInfoSilent()
}
let vc = YHMajorSearchViewController()
vc.orderId = self.orderId
vc.searchMajorName = detailInfo.major
vc.selectBlock = {
[weak self] text in
guard let self = self else { return }
if let text = text, !text.isEmpty {
detailInfo.major = text
} else {
detailInfo.major = ""
}
loadInfo()
saveInfoSilent()
}
self.navigationController?.pushViewController(vc)
// let vc = YHMajorSearchViewController()
// vc.orderId = self.orderId
// vc.searchMajorName = detailInfo.major
// vc.selectBlock = {
// [weak self] text in
// guard let self = self else { return }
// if let text = text, !text.isEmpty {
// detailInfo.major = text
// } else {
// detailInfo.major = ""
// }
// loadInfo()
// saveInfoSilent()
// }
// self.navigationController?.pushViewController(vc)
}
}
}
......@@ -554,6 +572,10 @@ extension YHGCEducationDetailVC : UITableViewDelegate, UITableViewDataSource {
return .selectSheet
}
if detailItem.type == .detailMajor {
return .inputText
}
if detailItem.type == .educationMajor
|| detailItem.type == .educationStyle
|| detailItem.type == .educationTime
......@@ -572,7 +594,8 @@ extension YHGCEducationDetailVC : UITableViewDelegate, UITableViewDataSource {
extension YHGCEducationDetailVC {
func getDetailInfo() {
self.educationRequest.getEducationDetailInfo(params: ["id": self.detailId]) {
self.educationRequest.getEducationDetailInfo(params: ["id": self.detailId,
"order_id": self.orderId]) {
[weak self] success, error in
guard let self = self else { return }
if success {
......@@ -602,8 +625,6 @@ extension YHGCEducationDetailVC {
if detailInfo.college.isEmpty
|| detailInfo.graduateTime.isEmpty
|| detailInfo.major.isEmpty
|| detailInfo.degree.isEmpty
|| detailInfo.schoolAddress.country.isEmpty
{
return false
......@@ -613,6 +634,14 @@ extension YHGCEducationDetailVC {
// return false
// }
if detailInfo.getDegree().isEmpty {
return false
}
if detailInfo.isNeedInputMajor(), detailInfo.majorOther.isEmpty {
return false
}
if detailInfo.isSchoolInAboard(), detailInfo.schoolAddress.foreign.isEmpty {
return false
}
......
......@@ -336,13 +336,14 @@ extension YHGCEducationInfoListVC : UITableViewDelegate, UITableViewDataSource {
let cell = tableView.dequeueReusableCell(withIdentifier: YHEducationInfoCell.cellReuseIdentifier, for: indexPath) as! YHEducationInfoCell
cell.titleLabel.text = eduInfo.college
cell.subTitleLabel.text = ""
if let major = eduInfo.major, let degree = eduInfo.degree {
let degree = eduInfo.getDegree()
if let major = eduInfo.getRealMajor(), !degree.isEmpty {
cell.subTitleLabel.text = String("\(degree)-\(major)")
}
cell.timeLabel.text = ""
if let admissionTime = eduInfo.admissionTime, let graduateTime = eduInfo.graduateTime {
cell.timeLabel.text = String("\(admissionTime) ~ \(graduateTime)")
}
// if let admissionTime = eduInfo.admissionTime, let graduateTime = eduInfo.graduateTime {
// cell.timeLabel.text = String("\(admissionTime) ~ \(graduateTime)")
// }
cell.isShowDeleteBtn = (isDegreeEditMode == .canCancel)
cell.deleteBlock = {
var title = "确定删除该学历吗?"
......
//
// YHInfoQuestionSelectionCell.swift
// galaxy
//
// Created by alexzzw on 2024/12/21.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHInfoQuestionSelectionCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHInfoQuestionSelectionCell"
var didSelectSureButton: ((YHCheckboxSelectType) -> Void)?
var selectedSureButton: YHCheckboxSelectType = .unknown {
didSet {
updateButtonsState(selectedSureButton)
}
}
private lazy var dotIcon: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "red_dot_6"))
return imageView
}()
private lazy var infoQuestionLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 14)
label.textColor = UIColor.mainTextColor
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
return label
}()
private lazy var sureButton: UIButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = .PFSC_M(ofSize: 13)
button.setTitle("是", for: .normal)
button.setTitleColor(.mainTextColor, for: .normal)
button.setTitleColor(.brandMainColor, for: .selected)
button.addTarget(self, action: #selector(sureButtonDidClick(_:)), for: .touchUpInside)
button.layer.cornerRadius = 16.0
button.clipsToBounds = true
return button
}()
private lazy var cancelButton: UIButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = .PFSC_M(ofSize: 13)
button.setTitle("否", for: .normal)
button.setTitleColor(.mainTextColor, for: .normal)
button.setTitleColor(.brandMainColor, for: .selected)
button.addTarget(self, action: #selector(cancelButtonDidClick(_:)), for: .touchUpInside)
button.layer.cornerRadius = 16
button.clipsToBounds = true
return button
}()
private lazy var infoFailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 12)
label.textColor = .failColor
label.text = "请选择"
return label
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupCellInfo(question: String, showBottomLine: Bool = false, needShowFailButton: Bool) {
infoQuestionLabel.text = question
updateFailLabel(needShowFailButton)
}
}
extension YHInfoQuestionSelectionCell {
private func updateFailLabel(_ needShowFailButton: Bool) {
if needShowFailButton {
infoFailLabel.isHidden = false
infoQuestionLabel.snp.remakeConstraints { make in
make.left.equalTo(dotIcon.snp.right).offset(2)
make.top.equalToSuperview().offset(16)
make.height.greaterThanOrEqualTo(40)
make.width.lessThanOrEqualTo(113)
}
infoFailLabel.snp.remakeConstraints { make in
make.top.equalTo(infoQuestionLabel.snp.bottom).offset(6)
make.left.equalToSuperview().offset(18)
make.right.lessThanOrEqualToSuperview().offset(-18)
make.bottom.equalToSuperview().offset(-16)
}
} else {
infoFailLabel.isHidden = true
infoQuestionLabel.snp.remakeConstraints { make in
make.left.equalTo(dotIcon.snp.right).offset(2)
make.top.equalToSuperview().offset(16)
make.height.greaterThanOrEqualTo(40)
make.width.lessThanOrEqualTo(113)
make.bottom.equalToSuperview().offset(-16)
}
infoFailLabel.snp.remakeConstraints { make in
make.left.equalToSuperview().offset(18)
make.right.lessThanOrEqualToSuperview().offset(-18)
make.bottom.equalToSuperview().offset(-16)
}
}
}
@objc private func cancelButtonDidClick(_ sender: UIButton) {
guard !sender.isSelected else {
return
}
selectedSureButton = .false
didSelectSureButton?(.false)
}
@objc private func sureButtonDidClick(_ sender: UIButton) {
guard !sender.isSelected else {
return
}
selectedSureButton = .true
didSelectSureButton?(.true)
}
private func setupUI() {
updateCellCorner(.mid)
subContainerView.addSubview(dotIcon)
subContainerView.addSubview(infoQuestionLabel)
subContainerView.addSubview(sureButton)
subContainerView.addSubview(cancelButton)
subContainerView.addSubview(infoFailLabel)
sureButton.setContentCompressionResistancePriority(.required, for: .horizontal)
cancelButton.setContentCompressionResistancePriority(.required, for: .horizontal)
infoQuestionLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
dotIcon.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.height.width.equalTo(6)
make.top.equalTo(infoQuestionLabel.snp.top).offset(7)
}
infoQuestionLabel.snp.makeConstraints { make in
make.left.equalTo(dotIcon.snp.right).offset(2)
make.top.equalToSuperview().offset(16)
make.height.greaterThanOrEqualTo(40)
make.width.lessThanOrEqualTo(113)
make.bottom.equalToSuperview().offset(-16)
}
cancelButton.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-18)
make.height.equalTo(32)
make.width.equalTo(69)
make.centerY.equalTo(infoQuestionLabel)
}
sureButton.snp.makeConstraints { make in
make.right.equalTo(cancelButton.snp.left).offset(-8)
make.height.equalTo(32)
make.width.equalTo(69)
make.centerY.equalTo(infoQuestionLabel)
make.left.greaterThanOrEqualTo(infoQuestionLabel.snp.right).offset(8)
}
infoFailLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.right.lessThanOrEqualToSuperview().offset(-18)
make.bottom.equalToSuperview().offset(-16)
}
infoFailLabel.isHidden = true
selectedSureButton = .unknown
}
private func updateButtonsState(_ state: YHCheckboxSelectType) {
switch state {
case .unknown:
sureButton.isSelected = false
sureButton.backgroundColor = .contentBkgColor
sureButton.layer.borderColor = nil
sureButton.layer.borderWidth = 0
cancelButton.isSelected = false
cancelButton.backgroundColor = .contentBkgColor
cancelButton.layer.borderColor = nil
cancelButton.layer.borderWidth = 0
case .true:
sureButton.isSelected = true
sureButton.backgroundColor = UIColor(hexString: "#EBF0F9")
sureButton.layer.borderColor = UIColor.brandMainColor.cgColor
sureButton.layer.borderWidth = 1
cancelButton.isSelected = false
cancelButton.backgroundColor = .contentBkgColor
cancelButton.layer.borderColor = nil
cancelButton.layer.borderWidth = 0
case .false:
cancelButton.isSelected = true
cancelButton.backgroundColor = UIColor(hexString: "#EBF0F9")
cancelButton.layer.borderColor = UIColor.brandMainColor.cgColor
cancelButton.layer.borderWidth = 1
sureButton.isSelected = false
sureButton.backgroundColor = .contentBkgColor
sureButton.layer.borderColor = nil
sureButton.layer.borderWidth = 0
}
}
}
//
// YHInfoQuestionSelectionCell.swift
// galaxy
//
// Created by alexzzw on 2024/12/21.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHInfoQuestionSelectionCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHInfoQuestionSelectionCell"
var didSelectSureButton: ((YHCheckboxSelectType) -> Void)?
var selectedSureButton: YHCheckboxSelectType = .unknown {
didSet {
updateButtonsState(selectedSureButton)
}
}
private lazy var dotIcon: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "red_dot_6"))
return imageView
}()
private lazy var infoQuestionLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 14)
label.textColor = UIColor.mainTextColor
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
return label
}()
private lazy var sureButton: UIButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = .PFSC_M(ofSize: 13)
button.setTitle("是", for: .normal)
button.setTitleColor(.mainTextColor, for: .normal)
button.setTitleColor(.brandMainColor, for: .selected)
button.addTarget(self, action: #selector(sureButtonDidClick(_:)), for: .touchUpInside)
button.layer.cornerRadius = 16.0
button.clipsToBounds = true
return button
}()
private lazy var cancelButton: UIButton = {
let button = UIButton(type: .custom)
button.titleLabel?.font = .PFSC_M(ofSize: 13)
button.setTitle("否", for: .normal)
button.setTitleColor(.mainTextColor, for: .normal)
button.setTitleColor(.brandMainColor, for: .selected)
button.addTarget(self, action: #selector(cancelButtonDidClick(_:)), for: .touchUpInside)
button.layer.cornerRadius = 16
button.clipsToBounds = true
return button
}()
private lazy var infoFailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 12)
label.textColor = .failColor
label.text = "请选择"
return label
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupCellInfo(question: String, showBottomLine: Bool = false, needShowFailButton: Bool) {
infoQuestionLabel.text = question
updateFailLabel(needShowFailButton)
}
}
extension YHInfoQuestionSelectionCell {
private func updateFailLabel(_ needShowFailButton: Bool) {
if needShowFailButton {
infoFailLabel.isHidden = false
infoQuestionLabel.snp.remakeConstraints { make in
make.left.equalTo(dotIcon.snp.right).offset(2)
make.top.equalToSuperview().offset(16)
make.height.greaterThanOrEqualTo(40)
make.width.lessThanOrEqualTo(113)
}
infoFailLabel.snp.remakeConstraints { make in
make.top.equalTo(infoQuestionLabel.snp.bottom).offset(6)
make.left.equalToSuperview().offset(18)
make.right.lessThanOrEqualToSuperview().offset(-18)
make.bottom.equalToSuperview().offset(-16)
}
} else {
infoFailLabel.isHidden = true
infoQuestionLabel.snp.remakeConstraints { make in
make.left.equalTo(dotIcon.snp.right).offset(2)
make.top.equalToSuperview().offset(16)
make.height.greaterThanOrEqualTo(40)
make.width.lessThanOrEqualTo(113)
make.bottom.equalToSuperview().offset(-16)
}
infoFailLabel.snp.remakeConstraints { make in
make.left.equalToSuperview().offset(18)
make.right.lessThanOrEqualToSuperview().offset(-18)
make.bottom.equalToSuperview().offset(-16)
}
}
}
@objc private func cancelButtonDidClick(_ sender: UIButton) {
guard !sender.isSelected else {
return
}
selectedSureButton = .false
didSelectSureButton?(.false)
}
@objc private func sureButtonDidClick(_ sender: UIButton) {
guard !sender.isSelected else {
return
}
selectedSureButton = .true
didSelectSureButton?(.true)
}
private func setupUI() {
updateCellCorner(.mid)
subContainerView.addSubview(dotIcon)
subContainerView.addSubview(infoQuestionLabel)
subContainerView.addSubview(sureButton)
subContainerView.addSubview(cancelButton)
subContainerView.addSubview(infoFailLabel)
sureButton.setContentCompressionResistancePriority(.required, for: .horizontal)
cancelButton.setContentCompressionResistancePriority(.required, for: .horizontal)
infoQuestionLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
dotIcon.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.height.width.equalTo(6)
make.top.equalTo(infoQuestionLabel.snp.top).offset(7)
}
infoQuestionLabel.snp.makeConstraints { make in
make.left.equalTo(dotIcon.snp.right).offset(2)
make.top.equalToSuperview().offset(16)
make.height.greaterThanOrEqualTo(40)
make.width.lessThanOrEqualTo(113)
make.bottom.equalToSuperview().offset(-16)
}
cancelButton.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-18)
make.height.equalTo(32)
make.width.equalTo(69)
make.centerY.equalTo(infoQuestionLabel)
}
sureButton.snp.makeConstraints { make in
make.right.equalTo(cancelButton.snp.left).offset(-8)
make.height.equalTo(32)
make.width.equalTo(69)
make.centerY.equalTo(infoQuestionLabel)
make.left.greaterThanOrEqualTo(infoQuestionLabel.snp.right).offset(8)
}
infoFailLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.right.lessThanOrEqualToSuperview().offset(-18)
make.bottom.equalToSuperview().offset(-16)
}
infoFailLabel.isHidden = true
selectedSureButton = .unknown
}
private func updateButtonsState(_ state: YHCheckboxSelectType) {
switch state {
case .unknown:
sureButton.isSelected = false
sureButton.backgroundColor = .contentBkgColor
sureButton.layer.borderColor = nil
sureButton.layer.borderWidth = 0
cancelButton.isSelected = false
cancelButton.backgroundColor = .contentBkgColor
cancelButton.layer.borderColor = nil
cancelButton.layer.borderWidth = 0
case .true:
sureButton.isSelected = true
sureButton.backgroundColor = UIColor(hexString: "#EBF0F9")
sureButton.layer.borderColor = UIColor.brandMainColor.cgColor
sureButton.layer.borderWidth = 1
cancelButton.isSelected = false
cancelButton.backgroundColor = .contentBkgColor
cancelButton.layer.borderColor = nil
cancelButton.layer.borderWidth = 0
case .false:
cancelButton.isSelected = true
cancelButton.backgroundColor = UIColor(hexString: "#EBF0F9")
cancelButton.layer.borderColor = UIColor.brandMainColor.cgColor
cancelButton.layer.borderWidth = 1
sureButton.isSelected = false
sureButton.backgroundColor = .contentBkgColor
sureButton.layer.borderColor = nil
sureButton.layer.borderWidth = 0
}
}
}
......@@ -36,17 +36,18 @@ class YHGCWorkExperienceListViewController: YHBaseViewController {
}
func getData() {
baseData = viewModel.getBaseDataSource(showPrompt)
docData = viewModel.getDocDataSource(showPrompt)
viewModel?.requestWorkList("\(orderId)", callBackBlock: {[weak self] success, error in
guard let self = self else { return }
self.dataSource = success
self.baseData = viewModel.getBaseDataSource(showPrompt)
self.docData = viewModel.getDocDataSource(showPrompt)
self.tableView.reloadData()
})
}
func updateDataSource() {
self.baseData = viewModel.getBaseDataSource(showPrompt)
self.docData = viewModel.getDocDataSource(showPrompt)
self.tableView.reloadData()
}
......@@ -131,6 +132,14 @@ class YHGCWorkExperienceListViewController: YHBaseViewController {
extension YHGCWorkExperienceListViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// var count = 1
// if self.viewModel.mainModel.has_work_experience == 1 {
// count = count + 1
// }
// if self.viewModel.mainModel.is_consent_required == 1 {
// count = count + 1
// }
// return count
return 3
}
......@@ -140,11 +149,8 @@ extension YHGCWorkExperienceListViewController: UITableViewDelegate, UITableView
cell.dataSource = baseData
cell.workExperienceBlock = {[weak self] model in
guard let self = self else { return }
// self.viewModel.updateModel(model)
// let id = model.id
// if id != .id1 {
// self.updateDataSource()
// }
self.viewModel.updateModel(model)
self.updateDataSource()
}
return cell
} else if indexPath.row == 1 {
......@@ -158,7 +164,6 @@ extension YHGCWorkExperienceListViewController: UITableViewDelegate, UITableView
}
cell.clickBlock = {[weak self] model in
guard let self = self else { return }
let firstModel = self.dataSource?.first
let vc = YHGCWorkExperienceViewController()
vc.workID = model.id ?? 0
vc.orderID = self.orderId
......@@ -193,14 +198,13 @@ extension YHGCWorkExperienceListViewController: UITableViewDelegate, UITableView
return cell
} else if indexPath.row == 2 {
let cell = tableView.dequeueReusableCell(withClass: YHGCWorkListHasDocTableViewCell.self)
cell.companyList = self.viewModel.mainModel.list ?? []
cell.url = self.viewModel.mainModel.consent_template_url
cell.dataSource = docData
cell.workExperienceBlock = {[weak self] model in
guard let self = self else { return }
// self.viewModel.updateModel(model)
// let id = model.id
// if id != .id1 {
// self.updateDataSource()
// }
self.viewModel.updateModel(model)
self.updateDataSource()
}
return cell
}
......@@ -215,7 +219,7 @@ extension YHGCWorkExperienceListViewController: UITableViewDelegate, UITableView
let data = array[i]
let message = data.message ?? ""
let isShow = data.isShowPrompts ?? false
h = h + 52
h = h + 62
if isShow && message.count == 0 {
h = h + 20
}
......@@ -230,7 +234,7 @@ extension YHGCWorkExperienceListViewController: UITableViewDelegate, UITableView
let data = array[i]
let message = data.message ?? ""
let isShow = data.isShowPrompts ?? false
h = h + 52
h = h + 62
if isShow && message.count == 0 {
h = h + 20
}
......
......@@ -18,7 +18,6 @@ class YHGCWorkExperienceViewController: YHBaseViewController {
var fileDataSource: [YHWorkExperienceFileModel]?
var workID: Int = 0
var orderID: Int = 0
var positionId: Int = 0
var isMore: Bool = false
var isShowPrompt: Bool = false
var isShowMessageSelect: Bool = true
......@@ -138,10 +137,14 @@ extension YHGCWorkExperienceViewController: UITableViewDelegate, UITableViewData
guard let self = self else { return }
self.viewModel.updateModel(model)
let id = model.id
if id != .id1 && id != .id2 && id != .id6 && id != .id10 && id != .id11 {
if id != .id4 && id != .id5 && id != .id8 {
self.updateDataSource()
}
}
cell.companyBlock = {[weak self] model in
guard let self = self else { return }
self.viewModel.updateCompanyModel(model.company_name ?? "")
}
return cell
}
......@@ -154,7 +157,7 @@ extension YHGCWorkExperienceViewController: UITableViewDelegate, UITableViewData
let data = array[i]
let message = data.message ?? ""
let isShow = data.isShowPrompts ?? false
if data.id == .id7 {
if data.id == .id6 {
h = h + 72
} else {
h = h + 52
......
......@@ -23,7 +23,7 @@ class YHGCWorkModel: SmartCodable {
var why_work_time_overlap: String = "" //高才使用 关于工作时间重叠的说明
var has_work_experience: Int = 0 //高BC使用 是否有工作经历 0.未知 1.是 2.否
var is_consent_required: Int = 0 //高才使用 是否必须提供赴港同意书 0-否 1-是
var consent_template_url: String = ""
var list: [YHWorkItemListModel]?
required init() {
}
......
......@@ -18,6 +18,8 @@ class YHGCWorkListHasDocTableViewCell: UITableViewCell {
var mainItemView: UIView!
var workId: Int = 0
var orderId: Int = 0
var url: String = ""
var companyList: [YHWorkItemListModel] = []
var dataSource: YHSectionWorkExperienceModel?{
didSet {
updateAllViews()
......@@ -135,11 +137,12 @@ class YHGCWorkListHasDocTableViewCell: UITableViewCell {
let data = dataSource?.models?[i]
let isShow = data?.isShowPrompts ?? false
let message = data?.message ?? ""
var h = 51
var h = 61
if isShow && message.count == 0 {
h = h + 20
}
let itemView = YHWorkExperienceItemView()
itemView.companyList = companyList
itemView.dataSource = data
itemView.workId = workId
itemView.orderId = orderId
......
......@@ -105,7 +105,7 @@ class YHGCWorkListHasWorkExperienceTableViewCell: UITableViewCell {
let data = dataSource?.models?[i]
let isShow = data?.isShowPrompts ?? false
let message = data?.message ?? ""
var h = 51
var h = 61
if isShow && message.count == 0 {
h = h + 20
}
......
......@@ -33,8 +33,8 @@ class YHGCWorkExperienceViewModel: YHBaseViewModel {
let item4 = YHWorkExperienceModel(id: .id23, isNeed: true, title: "开始就职年月", isUserKeyBoard: false, prompts: "请选择", message: position.entry_time, type: .time)
let item5 = YHWorkExperienceModel(id: .id24, isNeed: true, title: "结束就职年月", isUserKeyBoard: false, prompts: "请选择", message: position.departure_time, type: .time)
let item6 = YHWorkExperienceModel(id: .id6, isNeed: true, title: "工作证明是否可以提供", isUserKeyBoard: false, prompts: "", message: "\(position.has_work_certificate)", leftButtonString: "是", rightButtonString: "否")
let item7 = YHWorkExperienceModel(id: .id7, isNeed: true, title: "职业界别", isUserKeyBoard: false, prompts: "请选择", message: position.company_type, type: .field, isShowPrompts: isShowPrompt, alertMessage:"请选择")
let item77 = YHWorkExperienceModel(id: .id8, isNeed: true, title: "具体经验领域", isUserKeyBoard: true, prompts: "请输入", message: position.company_type_other, type: .country, isShowPrompts: isShowPrompt, alertMessage:"请输入")
let item7 = YHWorkExperienceModel(id: .id7, isNeed: true, title: "职业界别", isUserKeyBoard: false, prompts: "请选择", message: position.company_type, type: .position, isShowPrompts: isShowPrompt, alertMessage:"请选择")
let item77 = YHWorkExperienceModel(id: .id8, isNeed: true, title: "具体经验领域", isUserKeyBoard: true, prompts: "请输入", message: position.company_type_other, isShowPrompts: isShowPrompt, alertMessage:"请输入")
let addressCountry = position.location.country
......@@ -57,6 +57,10 @@ class YHGCWorkExperienceViewModel: YHBaseViewModel {
return [section]
}
func updateCompanyModel(_ value: String) {
position.company_name = value
}
func updateModel(_ item: YHWorkExperienceModel) {
guard let type = item.id else { return }
switch type {
......@@ -145,7 +149,7 @@ class YHGCWorkExperienceViewModel: YHBaseViewModel {
}
func requestWorkPositionDetail(_ workId: Int, callBackBlock:@escaping (_ success: Bool?, _ error:YHErrorModel?)->()) {
let param: [String: Any] = ["work_id": workId]
let param: [String: Any] = ["id": workId]
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.WorkExperience.gcworkDetail
let _ = YHNetRequest.getRequest(url: strUrl, params: param) { [weak self] json, code in
//1. json字符串 转 对象
......
......@@ -347,15 +347,25 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
// MARK: - Chat Room Methods
private func joinChatRoom(roomId: String) {
YHIMHelper.shared.joinChatRoom(roomID: roomId, leaveOtherRooms: true) { [weak self] error in
guard let self = self else { return }
func joinRoom() {
YHIMHelper.shared.joinChatRoom(roomID: roomId, leaveOtherRooms: true) { [weak self] error in
guard let self = self else { return }
if let error = error {
printLog("joinChatRoom: \(error)")
} else {
self.loadHistoryMessages(roomId: roomId)
if let error = error {
printLog("joinChatRoom: \(error)")
} else {
self.loadHistoryMessages(roomId: roomId)
}
}
}
if !YHIMHelper.shared.isCurrentUserLogin {
YHIMHelper.shared.registerAndLoginCurrentUser { _ in
joinRoom()
}
} else {
joinRoom()
}
}
private func loadHistoryMessages(roomId: 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