Commit 32a6b825 authored by Steven杜宇's avatar Steven杜宇

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

# Conflicts:
#	galaxy/galaxy.xcodeproj/project.pbxproj
parents 59f868f7 90769f6e
This diff is collapsed.
//
// YHIncomeTypeSelectViewController.swift
// galaxy
//
// Created by alexzzw on 2024/11/16.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHIncomeTypeSelectViewController: 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: .plain)
view.backgroundColor = .clear
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: [YHIncomeTypeSelectModel] = {
["工资薪金所得及全年一次性奖金",
"上市公司股票期权或股权收入",
"持股公司分红收入",
"个体工商户/合伙企业/独资企业经营所得收入",
"股权转让收入",
"内地公司收入(持股50%及以上)",
"香港公司收入(持股50%及以上)",
"澳门公司收入(持股50%及以上)",
"其他境外公司收入(持股50%及以上)"].map {
YHIncomeTypeSelectModel(title: $0, isSelected: false)
}
}()
var sureButtonEvent: (([String]) -> Void)?
private var selectedTypes: [String] = []
init(selectedTypes: [String]) {
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)
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.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.title) {
model.isSelected = true
}
}
}
}
extension YHIncomeTypeSelectViewController: 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.title, 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.title) {
selectedTypes.append(model.title)
}
} else {
if let index = selectedTypes.firstIndex(where: { title in
title == model.title
}) {
selectedTypes.remove(at: index)
}
}
tableView.reloadRows(at: [indexPath], with: .automatic)
}
}
//
// YHIncomeTypeSelectModel.swift
// galaxy
//
// Created by alexzzw on 2024/11/16.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHIncomeTypeSelectModel: NSObject {
var title: String = ""
var isSelected: Bool = false
init(title: String, isSelected: Bool) {
self.title = title
self.isSelected = isSelected
}
}
//
// YHAddIncomeRecordCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/13.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHAddIncomeRecordCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHAddIncomeRecordCell"
var addButtonClickEvent: (() -> Void)?
private lazy var addItemView: YHWorkItemAddView = {
let view = YHWorkItemAddView()
view.addBtn.setTitle("新增收入信息".local, for: .normal)
view.addBtn.setImage(UIImage(named: "income_item_add"), for: .normal)
view.clickBlock = { [weak self] in
guard let self = self else { return }
self.addButtonClickEvent?()
}
return view
}()
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")
}
}
extension YHAddIncomeRecordCell {
private func setupUI() {
updateCellCorner(.bottom)
subContainerView.addSubview(addItemView)
addItemView.snp.makeConstraints { make in
make.top.equalToSuperview().offset(16)
make.bottom.equalToSuperview().offset(-16)
make.left.equalToSuperview().offset(18)
make.right.equalToSuperview().offset(-18)
make.height.equalTo(44)
}
}
}
//
// YHEmploymentVerificationAvailableCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/13.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHEmploymentVerificationAvailableCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHEmploymentVerificationAvailableCell"
private lazy var dotIcon: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "red_dot_6"))
return imageView
}()
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 14)
label.textColor = UIColor.mainTextColor
label.text = "可提供的在职公司"
return label
}()
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 14)
label.textColor = UIColor.mainTextColor
label.text = "请选择"
label.numberOfLines = 0
label.lineBreakMode = .byCharWrapping
return label
}()
private lazy var rightArrowIcon: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "form_right_arrow"))
return imageView
}()
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(detail: String?) {
infoDetailLabel.text = detail
updateContentState((detail?.count ?? 0) > 0)
}
}
extension YHEmploymentVerificationAvailableCell {
private func updateContentState(_ isBlank: Bool) {
if isBlank {
infoDetailLabel.text = "请选择"
infoDetailLabel.font = .PFSC_R(ofSize: 14)
infoDetailLabel.textColor = UIColor(hexString: "#B9C1CC")
} else {
infoDetailLabel.font = .PFSC_M(ofSize: 14)
infoDetailLabel.textColor = UIColor.mainTextColor
}
}
private func setupUI() {
updateCellCorner(.bottom)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(infoDetailLabel)
subContainerView.addSubview(dotIcon)
subContainerView.addSubview(rightArrowIcon)
dotIcon.setContentCompressionResistancePriority(.required, for: .horizontal)
rightArrowIcon.setContentCompressionResistancePriority(.required, for: .horizontal)
infoTitleLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
infoDetailLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
dotIcon.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.height.width.equalTo(6)
make.centerY.equalToSuperview()
}
infoTitleLabel.snp.makeConstraints { make in
make.left.equalTo(dotIcon.snp.right).offset(2)
make.centerY.equalToSuperview()
}
rightArrowIcon.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-18)
make.width.height.equalTo(20)
make.centerY.equalToSuperview()
}
infoDetailLabel.snp.makeConstraints { make in
make.left.greaterThanOrEqualTo(infoTitleLabel.snp.right).offset(20)
make.centerY.equalToSuperview()
make.right.equalTo(rightArrowIcon.snp.left)
make.top.greaterThanOrEqualToSuperview().offset(16)
make.bottom.lessThanOrEqualToSuperview().offset(-16)
}
updateContentState(false)
}
}
//
// YHIncomeDocumentationConfirmationCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/16.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHIncomeDocumentationConfirmationCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHIncomeDocumentationConfirmationCell"
var didSelectSureButton: ((Bool) -> Void)?
private var documentationViews: [YHIncomeDocumentationView] = []
var selectedSureButton: Bool = true {
didSet {
updateButtonState(sureButton, selectedSureButton)
updateButtonState(cancelButton, !selectedSureButton)
}
}
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 17)
label.textColor = UIColor.mainTextColor
return label
}()
private lazy var topLineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#E9ECF0")
return view
}()
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 containerView: YHBaseDynamicCornerRadiusView = {
let view = YHBaseDynamicCornerRadiusView(cornerRadius: 3, corner: .allCorners)
view.backgroundColor = .contentBkgColor
return view
}()
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(title: String, question: String, documents: [String]) {
infoTitleLabel.text = title
infoQuestionLabel.text = question
documentationViews.forEach {
$0.removeFromSuperview()
}
documentationViews.removeAll()
let count = documents.count
documents.enumerated().forEach { [weak self] index, title in
guard let self = self else {
return
}
let documentationView = YHIncomeDocumentationView()
documentationView.setupInfo(title)
self.documentationViews.append(documentationView)
self.containerView.addSubview(documentationView)
documentationView.snp.makeConstraints { make in
if index == 0 {
make.top.equalToSuperview().offset(16)
} else {
make.top.equalTo(self.documentationViews[index - 1].snp.bottom).offset(12)
}
make.left.equalToSuperview().offset(16)
make.right.lessThanOrEqualToSuperview().offset(-8)
if index == count - 1 {
make.bottom.equalToSuperview().offset(-16)
}
}
}
}
}
extension YHIncomeDocumentationConfirmationCell {
@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(.single)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(topLineView)
subContainerView.addSubview(dotIcon)
subContainerView.addSubview(infoQuestionLabel)
subContainerView.addSubview(sureButton)
subContainerView.addSubview(cancelButton)
subContainerView.addSubview(containerView)
sureButton.setContentCompressionResistancePriority(.required, for: .horizontal)
cancelButton.setContentCompressionResistancePriority(.required, for: .horizontal)
infoQuestionLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
infoTitleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.top.equalToSuperview().offset(16)
make.right.lessThanOrEqualToSuperview().offset(-18)
}
topLineView.snp.makeConstraints { make in
make.left.equalToSuperview()
make.right.equalToSuperview()
make.height.equalTo(0.5)
make.top.equalTo(infoTitleLabel.snp.bottom).offset(12)
}
dotIcon.snp.makeConstraints { make in
make.left.equalTo(infoTitleLabel.snp.left)
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.equalTo(topLineView.snp.bottom).offset(16)
make.height.greaterThanOrEqualTo(40)
make.width.lessThanOrEqualTo(113)
}
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)
}
containerView.snp.makeConstraints { make in
make.left.equalTo(infoTitleLabel.snp.left)
make.right.equalToSuperview().offset(-18)
make.top.equalTo(infoQuestionLabel.snp.bottom).offset(16)
make.bottom.equalToSuperview().offset(-16)
}
selectedSureButton = true
}
private func updateButtonState(_ button: UIButton, _ isSelected: Bool) {
button.isSelected = isSelected
button.backgroundColor = isSelected ? UIColor(hexString: "#EBF0F9") : .contentBkgColor
button.layer.borderColor = isSelected ? UIColor.brandMainColor.cgColor : nil
button.layer.borderWidth = isSelected ? 1 : 0
}
}
private class YHIncomeDocumentationView: UIView {
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 14)
label.textColor = .mainTextColor
label.numberOfLines = 0
label.lineBreakMode = .byCharWrapping
return label
}()
private lazy var dotView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#B3C8E9")
view.layer.cornerRadius = 1
view.clipsToBounds = true
return view
}()
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupInfo(_ detail: String) {
infoDetailLabel.text = detail
}
private func setupUI() {
addSubview(dotView)
addSubview(infoDetailLabel)
dotView.snp.makeConstraints { make in
make.left.equalToSuperview()
make.height.width.equalTo(5)
make.top.equalTo(infoDetailLabel.snp.top).offset(6)
}
infoDetailLabel.snp.makeConstraints { make in
make.left.equalTo(dotView.snp.right).offset(8)
make.top.bottom.right.equalToSuperview()
}
}
}
//
// YHIncomeInputMoneyCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/15.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHIncomeInputMoneyCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHIncomeInputMoneyCell"
var didEndEditing: ((UITextField) -> Void)?
private lazy var dotIcon: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "red_dot_6"))
return imageView
}()
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 14)
label.textColor = UIColor.mainTextColor
label.numberOfLines = 0
label.lineBreakMode = .byCharWrapping
return label
}()
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 14)
label.textColor = UIColor(hexString: "#6D788A")
return label
}()
private lazy var inputTextField: UITextField = {
let textField = UITextField(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 40))
textField.textColor = .mainTextColor
textField.font = .PFSC_M(ofSize: 14)
textField.placeholder = "请输入人民币金额"
textField.borderStyle = .none
textField.delegate = self
textField.keyboardType = .numberPad
return textField
}()
private lazy var bottomLineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#E9ECF0")
return view
}()
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(title: String, detail: String?, inputValue: String?, showBottomLine: Bool = true, showStarIcon: Bool = false) {
infoTitleLabel.text = title
bottomLineView.isHidden = !showBottomLine
inputTextField.text = inputValue
dotIcon.isHidden = !showStarIcon
if showStarIcon {
infoTitleLabel.snp.remakeConstraints { make in
make.top.equalToSuperview().offset(16)
make.left.equalTo(dotIcon.snp.right).offset(2)
make.bottom.lessThanOrEqualToSuperview().offset(-16)
make.width.lessThanOrEqualTo(102)
}
} else {
infoTitleLabel.snp.remakeConstraints { make in
make.top.equalToSuperview().offset(16)
make.left.equalToSuperview().offset(18)
make.bottom.lessThanOrEqualToSuperview().offset(-16)
make.width.lessThanOrEqualTo(102)
}
}
updateDetailText(detail)
}
func updateDetailText(_ text: String?) {
infoDetailLabel.text = text
if let text = text, text.count > 0 {
infoDetailLabel.snp.remakeConstraints { make in
make.top.equalTo(inputTextField.snp.bottom).offset(4)
make.bottom.lessThanOrEqualToSuperview().offset(-16)
make.left.equalToSuperview().offset(147)
make.right.lessThanOrEqualToSuperview().offset(-18)
}
} else {
infoDetailLabel.snp.remakeConstraints { make in
make.top.equalTo(inputTextField.snp.bottom).offset(0)
make.bottom.lessThanOrEqualToSuperview().offset(-16)
make.left.equalToSuperview().offset(147)
make.right.lessThanOrEqualToSuperview().offset(-18)
}
}
}
}
extension YHIncomeInputMoneyCell {
private func setupUI() {
updateCellCorner(.mid)
subContainerView.addSubview(dotIcon)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(inputTextField)
subContainerView.addSubview(infoDetailLabel)
subContainerView.addSubview(bottomLineView)
dotIcon.setContentCompressionResistancePriority(.required, for: .horizontal)
infoTitleLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
infoDetailLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
inputTextField.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
dotIcon.snp.makeConstraints { make in
make.centerY.equalTo(infoTitleLabel)
make.left.equalToSuperview().offset(18)
make.width.height.equalTo(6)
}
infoTitleLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(16)
make.left.equalTo(dotIcon.snp.right).offset(2)
make.bottom.lessThanOrEqualToSuperview().offset(-16)
make.width.lessThanOrEqualTo(102)
}
inputTextField.snp.makeConstraints { make in
make.top.equalToSuperview().offset(16)
make.left.equalToSuperview().offset(147)
make.right.lessThanOrEqualToSuperview().offset(-18)
}
infoDetailLabel.snp.makeConstraints { make in
make.top.equalTo(inputTextField.snp.bottom).offset(4)
make.bottom.equalToSuperview().offset(-16)
make.left.equalToSuperview().offset(147)
make.right.lessThanOrEqualToSuperview().offset(-18)
}
bottomLineView.snp.makeConstraints { make in
make.bottom.equalToSuperview()
make.left.equalToSuperview().offset(18)
make.right.equalToSuperview().offset(-18)
make.height.equalTo(0.5)
}
}
}
extension YHIncomeInputMoneyCell: UITextFieldDelegate {
// MARK: - UITextFieldDelegate
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.endEditing(false)
return true
}
func textFieldDidEndEditing(_ textField: UITextField) {
if textField == inputTextField {
didEndEditing?(textField)
}
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == inputTextField {
/// 输入删除
if string == "" {
return true
}
/// 禁止拷贝非数字
let number = CharacterSet(charactersIn: "0123456789")
if (string as NSString).rangeOfCharacter(from: number.inverted).location != NSNotFound {
return false
}
}
return true
}
}
//
// YHIncomeItemOccupyingCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/14.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHIncomeItemOccupyingCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHIncomeItemOccupyingCell"
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_B(ofSize: 14)
label.textColor = UIColor.mainTextColor
label.text = "收入信息1"
return label
}()
private lazy var rightLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 12)
label.textColor = UIColor(hexString: "#8993A2")
label.text = "待填写"
return label
}()
private lazy var rightArrowIcon: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "form_right_arrow"))
return imageView
}()
private lazy var bottomLineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#E9ECF0")
return view
}()
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(title: String, rightText: String = "待填写", showBottomLine: Bool = false) {
infoTitleLabel.text = title
rightLabel.text = rightText
bottomLineView.isHidden = !showBottomLine
}
}
extension YHIncomeItemOccupyingCell {
private func setupUI() {
updateCellCorner(.mid)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(rightArrowIcon)
subContainerView.addSubview(rightLabel)
subContainerView.addSubview(bottomLineView)
infoTitleLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
rightArrowIcon.setContentCompressionResistancePriority(.required, for: .horizontal)
rightLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
infoTitleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.top.equalToSuperview().offset(16)
}
rightArrowIcon.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-18)
make.width.height.equalTo(20)
make.centerY.equalTo(infoTitleLabel)
}
rightLabel.snp.makeConstraints { make in
make.right.equalTo(rightArrowIcon.snp.left).offset(-2)
make.centerY.equalTo(infoTitleLabel)
make.left.greaterThanOrEqualTo(infoTitleLabel.snp.right).offset(10)
}
bottomLineView.snp.makeConstraints { make in
make.bottom.left.right.equalToSuperview()
make.height.equalTo(0.5)
make.top.equalTo(infoTitleLabel.snp.bottom).offset(16)
}
}
}
//
// YHIncomeRecordFromCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/15.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHIncomeRecordFromCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHIncomeRecordFromCell"
private lazy var dotIcon: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "red_dot_6"))
return imageView
}()
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 14)
label.textColor = UIColor.mainTextColor
label.text = "收入来源公司"
return label
}()
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 14)
label.textColor = UIColor.mainTextColor
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
return label
}()
private lazy var bottomLineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#E9ECF0")
return view
}()
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(title: String, detail: String, showBottomLine: Bool = true) {
infoTitleLabel.text = title
infoDetailLabel.text = detail
bottomLineView.isHidden = !showBottomLine
}
}
extension YHIncomeRecordFromCell {
private func setupUI() {
updateCellCorner(.mid)
subContainerView.addSubview(dotIcon)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(infoDetailLabel)
subContainerView.addSubview(bottomLineView)
dotIcon.setContentCompressionResistancePriority(.required, for: .horizontal)
infoTitleLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
infoDetailLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
dotIcon.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.left.equalToSuperview().offset(18)
make.width.height.equalTo(6)
}
infoTitleLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.left.equalTo(dotIcon.snp.right).offset(2)
}
infoDetailLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(16)
make.bottom.equalToSuperview().offset(-16)
make.left.equalToSuperview().offset(147)
make.right.lessThanOrEqualToSuperview().offset(-18)
}
bottomLineView.snp.makeConstraints { make in
make.bottom.equalToSuperview()
make.left.equalToSuperview().offset(18)
make.right.equalToSuperview().offset(-18)
make.height.equalTo(0.5)
}
}
}
//
// YHIncomeRecordItemCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/13.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHIncomeRecordItemCell: YHResignDocumentCell {
var deleteButtonClickEvent: (() -> Void)?
static let cellReuseIdentifier = "YHIncomeRecordItemCell"
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_B(ofSize: 14)
label.textColor = UIColor.mainTextColor
label.text = "收入信息1"
return label
}()
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 12)
label.textColor = UIColor(hexString: "#8993A2")
return label
}()
private lazy var rightLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 12)
label.textColor = UIColor(hexString: "#8993A2")
return label
}()
private lazy var rightArrowIcon: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "form_right_arrow"))
return imageView
}()
private lazy var deleteButton: UIButton = {
let button = UIButton(type: .custom)
button.setTitle("删除", for: .normal)
button.addTarget(self, action: #selector(deleteButtonDidClick(_:)), for: .touchUpInside)
return button
}()
private lazy var bottomLineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#E9ECF0")
return view
}()
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(title: String, detail: String, rightText: String, isEditing: Bool, showBottomLine: Bool) {
infoTitleLabel.text = title
infoDetailLabel.text = detail
rightLabel.text = rightText
if isEditing {
rightLabel.isHidden = true
rightArrowIcon.isHidden = true
deleteButton.isHidden = true
bottomLineView.snp.remakeConstraints { make in
make.bottom.left.right.equalToSuperview()
make.height.equalTo(0.5)
make.top.equalTo(infoDetailLabel.snp.bottom).offset(16)
}
} else {
rightLabel.isHidden = false
rightArrowIcon.isHidden = false
deleteButton.isHidden = true
bottomLineView.snp.remakeConstraints { make in
make.bottom.left.right.equalToSuperview()
make.height.equalTo(0.5)
make.top.equalTo(infoDetailLabel.snp.bottom).offset(16)
}
}
bottomLineView.isHidden = !showBottomLine
}
}
extension YHIncomeRecordItemCell {
@objc private func deleteButtonDidClick(_ sender: UIButton) {
deleteButtonClickEvent?()
}
private func setupUI() {
updateCellCorner(.mid)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(infoDetailLabel)
subContainerView.addSubview(deleteButton)
subContainerView.addSubview(rightArrowIcon)
subContainerView.addSubview(rightLabel)
subContainerView.addSubview(bottomLineView)
infoTitleLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
deleteButton.setContentCompressionResistancePriority(.required, for: .horizontal)
rightArrowIcon.setContentCompressionResistancePriority(.required, for: .horizontal)
rightLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
infoTitleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.top.equalToSuperview().offset(16)
}
deleteButton.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-18)
make.centerY.equalTo(infoTitleLabel)
make.width.equalTo(28)
make.height.equalTo(20)
make.left.greaterThanOrEqualTo(infoTitleLabel.snp.right).offset(10)
}
rightArrowIcon.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-18)
make.width.height.equalTo(20)
make.centerY.equalTo(infoTitleLabel)
}
rightLabel.snp.makeConstraints { make in
make.right.equalTo(rightArrowIcon.snp.left).offset(-2)
make.centerY.equalTo(infoTitleLabel)
make.left.greaterThanOrEqualTo(infoTitleLabel.snp.right).offset(10)
}
infoDetailLabel.snp.makeConstraints { make in
make.left.equalTo(infoTitleLabel.snp.left)
make.top.equalTo(infoTitleLabel.snp.bottom).offset(2)
make.right.lessThanOrEqualToSuperview().offset(-18)
}
bottomLineView.snp.makeConstraints { make in
make.bottom.left.right.equalToSuperview()
make.height.equalTo(0.5)
make.top.equalTo(infoDetailLabel.snp.bottom).offset(16)
}
}
}
//
// YHIncomeRecordSummaryCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/13.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHIncomeRecordSummaryCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHIncomeRecordSummaryCell"
var rightButtonClickEvent: (() -> Void)?
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 17)
label.textColor = UIColor.mainTextColor
label.text = "主申请人收入记录"
return label
}()
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 12)
label.textColor = UIColor(hexString: "#8993A2")
label.text = "(仅申报近12个月应纳税收入总额))"
return label
}()
private lazy var rightButton: UIButton = {
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "work_more"), for: .normal)
button.addTarget(self, action: #selector(rightButtonDidClick(_:)), for: .touchUpInside)
return button
}()
private lazy var bottomLineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#E9ECF0")
return view
}()
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(_ isEditing: Bool, _ isEditEnable: Bool) {
rightButton.isEnabled = isEditEnable
updateRightButtonState(isEditing)
}
}
extension YHIncomeRecordSummaryCell {
@objc private func rightButtonDidClick(_ sender: UIButton) {
rightButtonClickEvent?()
}
private func updateRightButtonState(_ isEditing: Bool) {
if isEditing {
rightButton.setImage(nil, for: .normal)
rightButton.setTitle("取消操作", for: .normal)
rightButton.setTitleColor(.brandMainColor, for: .normal)
rightButton.titleLabel?.font = .PFSC_R(ofSize: 14)
} else {
rightButton.setImage(UIImage(named: "work_more"), for: .normal)
rightButton.setTitle(nil, for: .normal)
}
}
private func setupUI() {
updateCellCorner(.top)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(infoDetailLabel)
subContainerView.addSubview(rightButton)
subContainerView.addSubview(bottomLineView)
rightButton.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-18)
make.top.equalToSuperview().offset(16)
make.width.height.equalTo(24)
}
infoTitleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.top.equalToSuperview().offset(16)
make.right.lessThanOrEqualTo(rightButton.snp.left).offset(-10)
}
infoDetailLabel.snp.makeConstraints { make in
make.left.equalTo(infoTitleLabel.snp.left)
make.top.equalTo(infoTitleLabel.snp.bottom).offset(2)
make.right.lessThanOrEqualToSuperview().offset(-18)
}
bottomLineView.snp.makeConstraints { make in
make.bottom.equalToSuperview()
make.left.equalToSuperview().offset(18)
make.right.equalToSuperview().offset(-18)
make.height.equalTo(0.5)
make.top.equalTo(infoDetailLabel.snp.bottom).offset(16)
}
}
}
//
// YHIncomeRemarkCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/16.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHIncomeRemarkCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHIncomeRemarkCell"
private lazy var containerView: YHBaseDynamicCornerRadiusView = {
let view = YHBaseDynamicCornerRadiusView(cornerRadius: 3, corner: .allCorners)
view.backgroundColor = UIColor(hexString: "#F5F6F8")
return view
}()
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 12)
label.textColor = UIColor(hexString: "#8993A2")
label.text = "注:按1港币≈0.92人民币计算,实际金额按递交时入境处给出的汇率为准"
label.numberOfLines = 0
label.lineBreakMode = .byWordWrapping
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(_ detail: String) {
infoDetailLabel.text = detail
}
}
extension YHIncomeRemarkCell {
private func setupUI() {
updateCellCorner(.bottom)
subContainerView.addSubview(containerView)
containerView.addSubview(infoDetailLabel)
containerView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.top.equalToSuperview()
make.right.equalToSuperview().offset(-18)
make.bottom.equalToSuperview().offset(-16)
}
infoDetailLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(8)
make.left.equalToSuperview().offset(10)
make.right.equalToSuperview().offset(-10)
make.bottom.equalToSuperview().offset(-8)
}
}
}
//
// YHIncomeTypePopViewSelectCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/16.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHIncomeTypePopViewSelectCell: UITableViewCell {
static let cellReuseIdentifier = "YHIncomeTypePopViewSelectCell"
var isCurrentSelected: Bool = false {
didSet {
checkIcon.image = isCurrentSelected ? UIImage(named: "income_type_check_btn_1") : UIImage(named: "income_type_check_btn_0")
containerView.lineWidth = isCurrentSelected ? 1 : nil
containerView.lineColor = isCurrentSelected ? UIColor.brandMainColor.cgColor : nil
}
}
private lazy var checkIcon: UIImageView = { // income_type_check_btn_1
let imageView = UIImageView(image: UIImage(named: "income_type_check_btn_0"))
return imageView
}()
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 14)
label.textColor = UIColor(hexString: "#141414")
label.numberOfLines = 0
label.lineBreakMode = .byCharWrapping
return label
}()
private lazy var containerView: YHBaseCornerRadiusBorderView = {
let view = YHBaseCornerRadiusBorderView.init(cornerRadius: 3, corner: .allCorners, lineWidth: nil, lineColor: nil)
view.backgroundColor = .contentBkgColor
return view
}()
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(title: String, isSelected: Bool) {
infoTitleLabel.text = title
isCurrentSelected = isSelected
}
private func setupUI() {
selectionStyle = .none
backgroundColor = .clear
contentView.addSubview(containerView)
containerView.addSubview(checkIcon)
containerView.addSubview(infoTitleLabel)
containerView.snp.makeConstraints { make in
make.top.bottom.equalToSuperview()
make.left.equalToSuperview().offset(21)
make.right.equalToSuperview().offset(-21)
}
checkIcon.snp.makeConstraints { make in
make.top.equalTo(infoTitleLabel.snp.top).offset(4)
make.left.equalToSuperview().offset(16)
make.width.height.equalTo(14)
}
infoTitleLabel.snp.makeConstraints { make in
make.left.equalTo(checkIcon.snp.right).offset(8)
make.top.equalToSuperview().offset(16)
make.bottom.equalToSuperview().offset(-16)
make.right.lessThanOrEqualToSuperview().offset(-16)
}
}
}
//
// YHIncomeTypeSelectCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/15.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import AttributedString
import UIKit
class YHIncomeTypeSelectCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHIncomeTypeSelectCell"
private lazy var dotIcon: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "red_dot_6"))
return imageView
}()
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 14)
label.textColor = UIColor.mainTextColor
label.text = "收入类型(多选)"
return label
}()
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 14)
label.textColor = UIColor(hexString: "#B9C1CC")
label.text = "请选择"
return label
}()
private lazy var rightArrowIcon: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "form_right_arrow"))
return imageView
}()
private lazy var bottomLineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#E9ECF0")
return view
}()
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(title: String, detail: String = "请选择", isSelectedOne: Bool = false, showBottomLine: Bool = false) {
infoTitleLabel.text = title
infoDetailLabel.text = detail
infoDetailLabel.isHidden = isSelectedOne
bottomLineView.isHidden = !showBottomLine
}
}
extension YHIncomeTypeSelectCell {
private func setupUI() {
updateCellCorner(.mid)
subContainerView.addSubview(dotIcon)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(infoDetailLabel)
subContainerView.addSubview(rightArrowIcon)
subContainerView.addSubview(bottomLineView)
dotIcon.setContentCompressionResistancePriority(.required, for: .horizontal)
infoTitleLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
infoDetailLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
rightArrowIcon.setContentCompressionResistancePriority(.required, for: .horizontal)
dotIcon.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.left.equalToSuperview().offset(18)
make.width.height.equalTo(6)
}
infoTitleLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.left.equalTo(dotIcon.snp.right).offset(2)
}
rightArrowIcon.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.right.equalToSuperview().offset(-18)
make.width.height.equalTo(20)
}
infoDetailLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(16)
make.bottom.equalToSuperview().offset(-16)
make.left.equalToSuperview().offset(147)
make.right.lessThanOrEqualTo(rightArrowIcon.snp.left).offset(-18)
}
bottomLineView.snp.makeConstraints { make in
make.bottom.equalToSuperview()
make.left.equalToSuperview().offset(18)
make.right.equalToSuperview().offset(-18)
make.height.equalTo(0.5)
}
}
}
//
// YHIncomeTypesCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/15.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHIncomeTypesCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHIncomeTypesCell"
var didClickTypeView: ((Int) -> Void)?
private var typeViews: [YHIncomeTypeView] = []
private lazy var bottomLineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#E9ECF0")
return view
}()
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")
}
private func setupUI() {
updateCellCorner(.mid)
subContainerView.addSubview(bottomLineView)
bottomLineView.snp.makeConstraints { make in
make.bottom.equalToSuperview()
make.left.equalToSuperview().offset(18)
make.right.equalToSuperview().offset(-18)
make.height.equalTo(0.5)
}
}
func setupCellInfo(types: [String]) {
typeViews.forEach {
$0.removeFromSuperview()
}
typeViews.removeAll()
let count = types.count
types.enumerated().forEach { [weak self] index, title in
guard let self = self else {
return
}
let typeView = YHIncomeTypeView()
typeView.setupInfo(title)
typeView.closeButtonEvent = { [weak self] in
guard let self = self else {
return
}
self.didClickTypeView?(index)
}
self.typeViews.append(typeView)
self.subContainerView.addSubview(typeView)
typeView.snp.makeConstraints { make in
if index == 0 {
make.top.equalToSuperview()
} else {
make.top.equalTo(self.typeViews[index - 1].snp.bottom).offset(8)
}
make.left.equalToSuperview().offset(18)
make.right.lessThanOrEqualToSuperview().offset(-18)
if index == count - 1 {
make.bottom.equalToSuperview().offset(-16)
}
}
}
}
}
private class YHIncomeTypeView: UIView {
var closeButtonEvent: (() -> Void)?
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 12)
label.textColor = .mainTextColor
label.numberOfLines = 0
label.lineBreakMode = .byCharWrapping
return label
}()
private lazy var closeButton: UIButton = {
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "income_type_close"), for: .normal)
button.addTarget(self, action: #selector(closeButtonClicked), for: .touchUpInside)
return button
}()
private lazy var lineView: UIView = {
let view = UIView()
view.backgroundColor = .white
return view
}()
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc private func closeButtonClicked() {
closeButtonEvent?()
}
func setupInfo(_ detail: String) {
infoDetailLabel.text = detail
}
private func setupUI() {
backgroundColor = UIColor(hexString: "#F5F6F8")
addSubview(infoDetailLabel)
addSubview(lineView)
addSubview(closeButton)
infoDetailLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(10)
make.top.equalToSuperview().offset(8)
make.bottom.equalToSuperview().offset(-8)
}
lineView.snp.makeConstraints { make in
make.left.equalTo(infoDetailLabel.snp.right).offset(8)
make.height.equalTo(20)
make.width.equalTo(1)
make.centerY.equalToSuperview()
}
closeButton.snp.makeConstraints { make in
make.right.equalToSuperview()
make.left.equalTo(lineView.snp.right)
make.width.height.equalTo(26)
make.centerY.equalToSuperview()
}
}
}
//
// YHInfoConsentForHKTravelCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/13.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import AttributedString
import UIKit
class YHInfoConsentForHKTravelCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHInfoConsentForHKTravelCell"
var didSelectSureButton: ((Bool) -> Void)?
var selectedSureButton: Bool = true {
didSet {
updateButtonState(sureButton, selectedSureButton)
updateButtonState(cancelButton, !selectedSureButton)
}
}
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 17)
label.textColor = UIColor.mainTextColor
return label
}()
private lazy var topLineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#E9ECF0")
return view
}()
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 13)
label.textColor = UIColor(hexString: "#8993A2")
label.numberOfLines = 0
label.lineBreakMode = .byCharWrapping
return label
}()
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 bottomLineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#E9ECF0")
return view
}()
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
}()
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(title: String, detail: ASAttributedString, question: String) {
infoTitleLabel.text = title
infoDetailLabel.attributed.text = detail
infoQuestionLabel.text = question
}
}
extension YHInfoConsentForHKTravelCell {
@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(.single)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(infoDetailLabel)
subContainerView.addSubview(topLineView)
subContainerView.addSubview(bottomLineView)
subContainerView.addSubview(dotIcon)
subContainerView.addSubview(infoQuestionLabel)
subContainerView.addSubview(sureButton)
subContainerView.addSubview(cancelButton)
sureButton.setContentCompressionResistancePriority(.required, for: .horizontal)
cancelButton.setContentCompressionResistancePriority(.required, for: .horizontal)
infoQuestionLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
infoTitleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.top.equalToSuperview().offset(16)
make.right.lessThanOrEqualToSuperview().offset(-18)
}
topLineView.snp.makeConstraints { make in
make.left.equalToSuperview()
make.right.equalToSuperview()
make.height.equalTo(0.5)
make.top.equalTo(infoTitleLabel.snp.bottom).offset(12)
}
infoDetailLabel.snp.makeConstraints { make in
make.left.equalTo(infoTitleLabel.snp.left)
make.top.equalTo(topLineView.snp.bottom).offset(16)
make.right.lessThanOrEqualToSuperview().offset(-18)
}
dotIcon.snp.makeConstraints { make in
make.left.equalTo(infoTitleLabel.snp.left)
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.equalTo(infoDetailLabel.snp.bottom).offset(16)
make.height.greaterThanOrEqualTo(40)
make.width.lessThanOrEqualTo(113)
}
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)
}
bottomLineView.snp.makeConstraints { make in
make.bottom.equalToSuperview()
make.left.equalToSuperview().offset(18)
make.right.equalToSuperview().offset(-18)
make.height.equalTo(0.5)
make.top.equalTo(infoQuestionLabel.snp.bottom).offset(22)
}
selectedSureButton = true
}
private func updateButtonState(_ button: UIButton, _ isSelected: Bool) {
button.isSelected = isSelected
button.backgroundColor = isSelected ? UIColor(hexString: "#EBF0F9") : .contentBkgColor
button.layer.borderColor = isSelected ? UIColor.brandMainColor.cgColor : nil
button.layer.borderWidth = isSelected ? 1 : 0
}
}
//
// YHTotalIncomeCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/13.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import AttributedString
import UIKit
class YHTotalIncomeCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHTotalIncomeCell"
var didClickInfoButton: (() -> Void)?
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_B(ofSize: 14)
label.textColor = UIColor.mainTextColor
label.text = "总收入"
return label
}()
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 16)
label.textColor = .brandMainColor
label.lineBreakMode = .byCharWrapping
return label
}()
private lazy var infoButton: UIButton = {
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "other_info_warning"), for: .normal)
button.addTarget(self, action: #selector(infoButtonDidClick(_:)), for: .touchUpInside)
return button
}()
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(detail: ASAttributedString) {
infoDetailLabel.attributed.text = detail
}
}
extension YHTotalIncomeCell {
@objc private func infoButtonDidClick(_ sender: UIButton) {
didClickInfoButton?()
}
private func setupUI() {
updateCellCorner(.mid)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(infoDetailLabel)
subContainerView.addSubview(infoButton)
infoTitleLabel.setContentCompressionResistancePriority(.required, for: .horizontal)
infoButton.setContentCompressionResistancePriority(.required, for: .horizontal)
infoDetailLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
infoTitleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.top.equalToSuperview().offset(16)
make.bottom.equalToSuperview().offset(-16)
}
infoButton.snp.makeConstraints { make in
make.left.equalTo(infoTitleLabel.snp.right).offset(4)
make.centerY.equalTo(infoTitleLabel)
make.width.height.equalTo(16)
}
infoDetailLabel.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-18)
make.centerY.equalTo(infoTitleLabel)
make.left.greaterThanOrEqualTo(infoButton.snp.right).offset(10)
}
}
}
//
// YHWorkingHourHeaderCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/14.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
class YHWorkingHourHeaderCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHWorkingHourHeaderCell"
private lazy var infoTitleLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_M(ofSize: 17)
label.textColor = UIColor.mainTextColor
label.text = "工作时间说明"
return label
}()
private lazy var bottomLineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#E9ECF0")
return view
}()
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(_ title: String) {
infoTitleLabel.text = title
}
}
extension YHWorkingHourHeaderCell {
private func setupUI() {
updateCellCorner(.top)
subContainerView.addSubview(infoTitleLabel)
subContainerView.addSubview(bottomLineView)
infoTitleLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(16)
make.left.equalToSuperview().offset(18)
make.right.lessThanOrEqualToSuperview().offset(-18)
}
bottomLineView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.height.equalTo(0.5)
make.top.equalTo(infoTitleLabel.snp.bottom).offset(12)
make.bottom.equalToSuperview()
}
}
}
//
// YHWorkingHoursStatementCell.swift
// galaxy
//
// Created by alexzzw on 2024/11/13.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import AttributedString
import UIKit
class YHWorkingHoursStatementCell: YHResignDocumentCell {
static let cellReuseIdentifier = "YHWorkingHoursStatementCell"
private let maxCount = 200
var textViewDidChanged: ((UITextView) -> Void)?
var textDidExceedsMaxLimit: ((Int) -> Void)?
private lazy var infoDetailLabel: UILabel = {
let label = UILabel()
label.font = .PFSC_R(ofSize: 13)
label.textColor = UIColor(hexString: "#8993A2")
label.numberOfLines = 0
label.lineBreakMode = .byCharWrapping
return label
}()
private lazy var remarkTextViewContainer: YHBaseDynamicCornerRadiusView = {
let view = YHBaseDynamicCornerRadiusView(cornerRadius: 1, corner: .allCorners)
view.backgroundColor = .contentBkgColor
return view
}()
private lazy var remarkTextView: UITextView = {
let view = UITextView()
view.backgroundColor = .clear
view.font = .PFSC_R(ofSize: 14)
view.textColor = .mainTextColor
view.tintColor = .mainTextColor
view.returnKeyType = .default
view.enablesReturnKeyAutomatically = true
view.delegate = self
view.textContainerInset = .zero
view.textContainer.lineFragmentPadding = 0
return view
}()
private lazy var editTipsLabel: UILabel = {
let label = UILabel()
label.isHidden = true
label.font = .PFSC_R(ofSize: 14)
label.textColor = UIColor.init(hexString: "#B9C1CC")
return label
}()
private lazy var countLabel: UILabel = {
let label = UILabel()
label.text = "0/\(maxCount)"
label.font = .PFSC_R(ofSize: 14)
label.textColor = UIColor(hexString: "#D5DAE1")
return label
}()
private lazy var bottomLineView: UIView = {
let view = UIView()
view.backgroundColor = UIColor(hexString: "#E9ECF0")
return view
}()
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(placeholder: String, remark: String?, detail: ASAttributedString, isShowBottomLine: Bool) {
editTipsLabel.text = placeholder
remarkTextView.text = remark
infoDetailLabel.attributed.text = detail
bottomLineView.isHidden = !isShowBottomLine
}
}
extension YHWorkingHoursStatementCell {
private func setupUI() {
updateCellCorner(.bottom)
subContainerView.addSubview(infoDetailLabel)
subContainerView.addSubview(remarkTextViewContainer)
subContainerView.addSubview(bottomLineView)
remarkTextViewContainer.addSubview(editTipsLabel)
remarkTextViewContainer.addSubview(remarkTextView)
remarkTextViewContainer.addSubview(countLabel)
infoDetailLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(16)
make.left.equalToSuperview().offset(18)
make.right.lessThanOrEqualToSuperview().offset(-18)
}
remarkTextViewContainer.snp.makeConstraints { make in
make.top.equalTo(infoDetailLabel.snp.bottom).offset(8)
make.left.equalTo(infoDetailLabel.snp.left)
make.right.equalToSuperview().offset(-18)
make.height.equalTo(160)
make.bottom.equalToSuperview().offset(-16)
}
editTipsLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(12)
make.top.equalToSuperview().offset(12)
make.right.lessThanOrEqualToSuperview().offset(-12)
}
countLabel.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-12)
make.bottom.equalToSuperview().offset(-12)
make.left.greaterThanOrEqualToSuperview().offset(12)
}
remarkTextView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(12)
make.top.equalToSuperview().offset(12)
make.right.equalToSuperview().offset(-12)
make.bottom.equalTo(countLabel.snp.top)
}
bottomLineView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18)
make.right.equalToSuperview().offset(-18)
make.height.equalTo(0.5)
make.bottom.equalToSuperview()
}
}
}
extension YHWorkingHoursStatementCell: UITextViewDelegate {
func textViewDidChange(_ textView: UITextView) {
editTipsLabel.isHidden = textView.text.count > 0
let textCount = textView.text?.utf16.count ?? 0
countLabel.text = "\(textCount)/\(maxCount)"
textViewDidChanged?(textView)
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if textView == remarkTextView {
/// 正在输入拼音
if let textRange = textView.markedTextRange, range.length == 0 {
/// 刚输入拼音的时候总字数
let start = textView.offset(from: textView.beginningOfDocument, to: textRange.start)
return start <= maxCount
}
let count = (textView.text?.utf16.count ?? 0) - range.length + text.utf16.count
if count > maxCount && text == "" {
return true
}
guard count > maxCount else {
return true
}
textDidExceedsMaxLimit?(maxCount)
return false
}
return true
}
}
......@@ -8,6 +8,7 @@
import UIKit
import IQKeyboardManagerSwift
import AttributedString
class YHWorkExperienceViewController: YHBaseViewController {
var stepView: YHStepView!
......@@ -130,6 +131,38 @@ class YHWorkExperienceViewController: YHBaseViewController {
self.tableView.reloadData()
}
func getTextWithType(type: Int) -> ASAttributedString {
if type == 0 {
return .init("签字盖章的推荐信", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.mainTextColor))
}
if type == 1 {
let a:ASAttributedString = .init("盖章的工作证明+签字的推荐信", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.mainTextColor))
return a
}
if type == 2 {
let a:ASAttributedString = .init("其他证明(退工单或合同+社保等证明) \n", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.mainTextColor))
let b: ASAttributedString = .init("(此类文件加分以港府审批为准)", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor(hex: 0x8993a2)))
return a + b
}
if type == 3 {
let a:ASAttributedString = .init("以上均不能提供\n", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.mainTextColor))
let b: ASAttributedString = .init("(或将导致您的该段工作经验", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor(hex: 0x8993a2)))
let c: ASAttributedString = .init("不被认可不予加分", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.failColor))
let d: ASAttributedString = .init(",请尽可能准备以上材料并修改此选项)", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor(hex: 0x8993a2)))
return a + b + c + d
}
return .init("", .font(UIFont.PFSC_R(ofSize:14)),.foreground(UIColor.mainTextColor(alpha: 0.5)))
}
func getTipsWithType() -> [ASAttributedString] {
return [self.getTextWithType(type: 0),
self.getTextWithType(type: 1),
self.getTextWithType(type: 2),
self.getTextWithType(type: 3)]
}
func setView() {
stepView = {
let step = YHStepView()
......@@ -641,6 +674,7 @@ extension YHWorkExperienceViewController: UITableViewDelegate, UITableViewDataSo
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCell(withClass: YHWorkExperienceTableViewCell.self)
cell.country = self.viewModel.mainModel.location.country
cell.selectDataSource = getTipsWithType()
cell.dataSource = baseDataSource?[indexPath.row]
cell.workExperienceBlock = {[weak self] model in
guard let self = self else { return }
......@@ -719,18 +753,12 @@ extension YHWorkExperienceViewController: UITableViewDelegate, UITableViewDataSo
let data = array[i]
let message = data.message ?? ""
let isShow = data.isShowPrompts ?? false
if data.id == .id3 || data.id == .id4 || data.id == .id18 {
h = h + 132
} else if data.id == .id13 {
h = h + 72
} else {
h = h + 52
}
h = h + 52
if isShow && message.count == 0 {
h = h + 20
}
}
return CGFloat(h + 52 + 14)
return CGFloat(h + 52 + 14 + 386)
} else {
// let number = dataSource?.count ?? 0
var height = 23 + 154
......
......@@ -147,6 +147,8 @@ class YHWorkExperiencePositionReasonTableViewCell: UITableViewCell {
} else {
button.image = UIImage(named: "login_privacy_disagree_glay")
}
button.isUserInteractionEnabled = false
return button
}()
mainItemView.addSubview(agreeButton)
......@@ -167,6 +169,7 @@ class YHWorkExperiencePositionReasonTableViewCell: UITableViewCell {
label.attributed.text = dataSource?[i]
label.numberOfLines = 0
label.tag = 1000 + i
label.isUserInteractionEnabled = false
return label
}()
mainItemView.addSubview(subTitleLabel)
......
//
// YHWorkExperienceSelectView.swift
// galaxy
//
// Created by EDY on 2024/11/16.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import UIKit
import AttributedString
class YHWorkExperienceSelectView: UIView {
typealias SelectBlock = (_ selectIndex: [Int]) -> ()
var selectBlock: SelectBlock?
var selectItem: [Int] = []
var lineView: UIView!
var subTitleLabel: UILabel!
var mainItemView: UIView!
var dataSource: [ASAttributedString]? {
didSet {
updateAllViews()
}
}
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupUI() {
backgroundColor = .clear
lineView = {
let view = UIView()
view.backgroundColor = .separatorColor
return view
}()
addSubview(lineView)
lineView.snp.makeConstraints { make in
make.left.equalTo(18)
make.top.equalTo(0)
make.height.equalTo(1)
make.right.equalTo(-18)
}
subTitleLabel = {
let label = UILabel()
label.numberOfLines = 0
let str = "*" + "您可以提供以下哪种工作证明文件:"
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont.PFSC_R(ofSize: 14),
.foregroundColor: UIColor.mainTextColor
]
let questionAttrStr = NSMutableAttributedString(string: str, attributes: attributes)
let starRange = NSRange(location: 0, length: 1)
questionAttrStr.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.failColor, range: starRange)
label.attributedText = questionAttrStr
return label
}()
addSubview(subTitleLabel)
subTitleLabel.snp.makeConstraints { make in
make.left.equalTo(18)
make.top.equalTo(0)
make.height.equalTo(52)
make.right.equalTo(-18)
}
mainItemView = {
let view = UIView()
view.backgroundColor = .white
return view
}()
addSubview(mainItemView)
mainItemView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.top.equalTo(52)
}
}
func updateAllViews() {
for i in 0 ..< (dataSource?.count ?? 0) {
let bgviewButton = {
let view = UIButton()
view.backgroundColor = UIColor.contentBkgColor
view.layer.cornerRadius = 3
view.layer.borderColor = UIColor.brandMainColor.cgColor
view.addTarget(self, action: #selector(agreeClick(sender:)), for: .touchUpInside)
view.tag = 20000 + i
return view
}()
mainItemView.addSubview(bgviewButton)
let agreeButton = {
let button = UIImageView()
button.image = UIImage(named: "login_privacy_disagree_glay")
button.tag = 10000 + i
if selectItem.contains(i) {
button.image = UIImage(named: "login_privacy_agree")
} else {
button.image = UIImage(named: "login_privacy_disagree_glay")
}
button.isUserInteractionEnabled = false
return button
}()
mainItemView.addSubview(agreeButton)
agreeButton.snp.makeConstraints { make in
if i == 0 {
make.top.equalToSuperview().offset(16)
} else {
let view = mainItemView.viewWithTag(1000 + i - 1)
make.top.equalTo(view?.snp.bottom ?? mainItemView.snp.bottom).offset(48)
}
make.left.equalTo(34)
make.height.equalTo(13)
make.width.equalTo(13)
}
let subTitleLabel = {
let label = UILabel()
label.attributed.text = dataSource?[i]
label.numberOfLines = 0
label.tag = 1000 + i
label.isUserInteractionEnabled = false
return label
}()
mainItemView.addSubview(subTitleLabel)
subTitleLabel.snp.makeConstraints { make in
make.top.equalTo(agreeButton.snp.top).offset(-3)
make.left.equalTo(56)
make.right.equalTo(-35)
}
bgviewButton.snp.makeConstraints { make in
make.top.equalTo(subTitleLabel.snp.top).offset(-16)
make.bottom.equalTo(subTitleLabel.snp.bottom).offset(16)
make.left.equalTo(18)
make.right.equalTo(-18)
}
}
}
@objc func agreeClick(sender: UIButton) {
sender.isSelected = !sender.isSelected
if sender.isSelected {
sender.layer.borderWidth = 1
sender.backgroundColor = UIColor(hex: 0xebf0f9)
selectItem.append(sender.tag - 20000)
let view = mainItemView.viewWithTag(sender.tag - 20000 + 10000) as! UIImageView
view.image = UIImage(named: "login_privacy_agree")
} else {
sender.layer.borderWidth = 0
sender.backgroundColor = UIColor.contentBkgColor
selectItem.removeAll(where: {$0 == sender.tag - 20000})
let view = mainItemView.viewWithTag(sender.tag - 20000 + 10000) as! UIImageView
view.image = UIImage(named: "login_privacy_disagree_glay")
}
if let block = selectBlock {
block(selectItem)
}
}
}
......@@ -7,6 +7,7 @@
//
import UIKit
import AttributedString
class YHWorkExperienceTableViewCell: UITableViewCell {
typealias WorkExperienceBlock = (_ model: YHWorkExperienceModel) -> ()
......@@ -22,6 +23,7 @@ class YHWorkExperienceTableViewCell: UITableViewCell {
updateAllViews()
}
}
var selectDataSource: [ASAttributedString]?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
......@@ -104,58 +106,47 @@ class YHWorkExperienceTableViewCell: UITableViewCell {
let data = dataSource?.models?[i]
let isShow = data?.isShowPrompts ?? false
let message = data?.message ?? ""
if data?.id == .id3 || data?.id == .id4 || data?.id == .id18 {
var h = 131
if isShow && message.count == 0 {
h = h + 20
}
let itemView = YHWorkExperienceTextItemView()
itemView.dataSource = data
itemView.block = {[weak self] model in
guard let self = self else { return }
if let block = self.workExperienceBlock {
block(model)
}
}
mainItemView.addSubview(itemView)
itemView.snp.makeConstraints { make in
make.left.equalTo(18)
make.top.equalTo(y)
make.height.equalTo(h)
make.right.equalTo(-18)
}
y = y + h
} else {
var h = 51
if data?.id == .id13 {
h = 71
}
if isShow && message.count == 0 {
h = h + 20
}
let itemView = YHWorkExperienceItemView()
itemView.dataSource = data
itemView.country = country
itemView.block = {[weak self] model in
guard let self = self else { return }
if let block = self.workExperienceBlock {
block(model)
}
}
itemView.companyBlock = {[weak self] company in
guard let self = self else { return }
if let block = self.companyBlock {
block(company)
}
var h = 51
if data?.id == .id13 {
h = 71
}
if isShow && message.count == 0 {
h = h + 20
}
let itemView = YHWorkExperienceItemView()
itemView.dataSource = data
itemView.country = country
itemView.block = {[weak self] model in
guard let self = self else { return }
if let block = self.workExperienceBlock {
block(model)
}
mainItemView.addSubview(itemView)
itemView.snp.makeConstraints { make in
make.left.equalTo(18)
make.top.equalTo(y)
make.height.equalTo(h)
make.right.equalTo(-18)
}
itemView.companyBlock = {[weak self] company in
guard let self = self else { return }
if let block = self.companyBlock {
block(company)
}
y = y + h
}
mainItemView.addSubview(itemView)
itemView.snp.makeConstraints { make in
make.left.equalTo(18)
make.top.equalTo(y)
make.height.equalTo(h)
make.right.equalTo(-18)
}
y = y + h
if i == 1 {
let view = YHWorkExperienceSelectView(frame: CGRect(x: 0, y: y, width: Int(KScreenWidth) - 32, height: 386))
view.dataSource = selectDataSource
mainItemView.addSubview(view)
// itemView.snp.makeConstraints { make in
// make.left.equalTo(18)
// make.top.equalTo(y)
// make.height.equalTo(386)
// make.right.equalTo(-18)
// }
y = y + 386
}
}
}
......
......@@ -19,53 +19,12 @@ class YHWorkExperienceViewModel: YHBaseViewModel {
}
func getBaseDataSource(_ isShowPrompt: Bool) -> [YHSectionWorkExperienceModel] {
let item = YHWorkExperienceModel(id: .id1, isNeed: true, title: "用人单位", isUserKeyBoard: false, prompts: "请输入", message: mainModel.company_name , type: .unit, isShowPrompts: isShowPrompt, alertMessage:"请输入用人单位")
let item1 = YHWorkExperienceModel(id: .id2, isNeed: true, title: "用人单位性质", isUserKeyBoard: false, prompts: "请输入", message: mainModel.industry, type: .nature, isShowPrompts: isShowPrompt, alertMessage:"请选择用人单位性质")
let item2 = YHWorkExperienceModel(id: .id3, isNeed: false, title: "用人单位介绍", isUserKeyBoard: true, prompts: "如方便提供,请填写", message: mainModel.company_introduce)
let item3 = YHWorkExperienceModel(id: .id4, isNeed: false, title: "用人单位官网", isUserKeyBoard: true, prompts: "如有,请输入官网链接", message: mainModel.company_website)
let item4 = YHWorkExperienceModel(id: .id5, isNeed: true, title: "工作国家/地区", isUserKeyBoard: false, prompts: "请选择", message: mainModel.location.country, type: .country, isShowPrompts: isShowPrompt, alertMessage:"请选择工作国家/地区")
var string = ""
let array = mainModel.location.area
for item in array {
if string.count != 0 {
string = string + "/" + item
} else {
string = string + item
}
}
let item5 = YHWorkExperienceModel(id: .id6, isNeed: true, title: "工作城市", isUserKeyBoard: false, prompts: "请选择", message: string, type: .address, isShowPrompts: isShowPrompt, alertMessage:"请选择工作国家/地区")
let item55 = YHWorkExperienceModel(id: .id7, isNeed: true, title: "工作城市", isUserKeyBoard: true, prompts: "请输入", message: mainModel.location.foreign, isShowPrompts: isShowPrompt, alertMessage:"请输入工作国家/地区")
let item6 = YHWorkExperienceModel(id: .id8, isNeed: true, title: "职位", isUserKeyBoard: true, prompts: "请输入", message: mainModel.position, isShowPrompts: isShowPrompt, alertMessage:"请输入职位")
let item7 = YHWorkExperienceModel(id: .id9, isNeed: true, title: "入职年月", isUserKeyBoard: false, prompts: "请选择", message: mainModel.entry_time, type: .time, isShowPrompts: isShowPrompt, alertMessage:"请选择入职年月")
let item8 = YHWorkExperienceModel(id: .id10, isNeed: true, title: "离职年月", isUserKeyBoard: false, prompts: "请选择", message: mainModel.departure_time, type: .time, isShowPrompts: isShowPrompt, alertMessage:"请选择离职年月")
let item9 = YHWorkExperienceModel(id: .id11, isNeed: true, title: "工作证明文件", isUserKeyBoard: false, prompts: "请选择", message: mainModel.work_certificate, type: .certificate, isShowPrompts: isShowPrompt, alertMessage:"请选择工作证明文件")
let item10 = YHWorkExperienceModel(id: .id12, isNeed: true, title: "职责性质", isUserKeyBoard: true, prompts: "请选择", message: mainModel.duty, isShowPrompts: isShowPrompt, alertMessage:"请输入职责性质")
let item11 = YHWorkExperienceModel(id: .id13, isNeed: false, title: "相关工作经验是否属于国际工作经验", isUserKeyBoard: false, prompts: "", message: "\(mainModel.international_work_experience)", leftButtonString: "是", rightButtonString: "否")
let addressCountry = mainModel.location.country
let item = YHWorkExperienceModel(id: .id1, isNeed: true, title: "用人单位", isUserKeyBoard: true, prompts: "请输入", message: mainModel.company_name, isShowPrompts: isShowPrompt, alertMessage:"请输入")
let item1 = YHWorkExperienceModel(id: .id2, isNeed: true, title: "公司基本情况", isUserKeyBoard: false, prompts: "请选择", message: mainModel.industry, type: .nature, isShowPrompts: isShowPrompt, alertMessage:"请选择")
let item2 = YHWorkExperienceModel(id: .id19, isNeed: true, title: "职位水平类别", isUserKeyBoard: false, prompts: "请选择", message: "\(mainModel.professional_level)", type: .level, isShowPrompts: isShowPrompt, alertMessage:"请选择")
var section = YHSectionWorkExperienceModel()
if addressCountry.contains("中国") {
section = YHSectionWorkExperienceModel(title: "企业信息", models: [item, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11])
} else {
section = YHSectionWorkExperienceModel(title: "企业信息", models: [item, item1, item2, item3, item4, item55, item6, item7, item8, item9, item10, item11])
}
let item12 = YHWorkExperienceModel(id: .id14, isNeed: true, title: "企业人数规模", isUserKeyBoard: true, prompts: "请输入", message: "\(mainModel.company_member_total)", isShowPrompts: isShowPrompt, alertMessage:"请输入企业人数规模")
let item13 = YHWorkExperienceModel(id: .id15, isNeed: false, title: "行政架构层级", isUserKeyBoard: false, prompts: "请选择", message: "\(mainModel.administrative_level)", type: .structure)
let item14 = YHWorkExperienceModel(id: .id16, isNeed: true, title: "下属管理人数", isUserKeyBoard: true, prompts: "请输入", message: "\(mainModel.company_manage_total)", isShowPrompts: isShowPrompt, alertMessage:"请输入下属管理人数")
let item15 = YHWorkExperienceModel(id: .id17, isNeed: false, title: "公司营业额/港元 (近一年)", isUserKeyBoard: true, prompts: "请输入具体数字", message: "\(mainModel.turnover)")
let item16 = YHWorkExperienceModel(id: .id18, isNeed: false, title: "公司业务性质/范畴/所属行业", isUserKeyBoard: true, prompts: "请输入,100字内", message: mainModel.business_nature)
let item17 = YHWorkExperienceModel(id: .id19, isNeed: true, title: "职位水平类别", isUserKeyBoard: false, prompts: "请选择", message: "\(mainModel.professional_level)", type: .level, isShowPrompts: isShowPrompt, alertMessage:"请选择职位水平类别")
let item18 = YHWorkExperienceModel(id: .id20, isNeed: true, title: "高管证明文件", isUserKeyBoard: false, prompts: "请选择", message: mainModel.executives_certificate, type: .prove, isShowPrompts: isShowPrompt, alertMessage:"请选择高管证明文件")
let item19 = YHWorkExperienceModel(id: .id21, isNeed: true, title: "高管在职开始时间", isUserKeyBoard: false, prompts: "请选择", message: mainModel.top_manager_start_at, type: .time, isShowPrompts: isShowPrompt, alertMessage:"请选择高管在职开始时间")
let item20 = YHWorkExperienceModel(id: .id22, isNeed: true, title: "高管在职结束时间", isUserKeyBoard: false, prompts: "请选择", message: mainModel.top_manager_end_at, type: .time, isShowPrompts: isShowPrompt, alertMessage:"请选择高管在职结束时间")
var section1 = YHSectionWorkExperienceModel()
if mainModel.professional_level == 1 {
section1 = YHSectionWorkExperienceModel(title: "企业规模", models: [item12, item13, item14, item15, item16, item17, item18, item19, item20])
} else {
section1 = YHSectionWorkExperienceModel(title: "企业规模", models: [item12, item13, item14, item15, item16, item17])
}
return [section, section1]
section = YHSectionWorkExperienceModel(title: "企业信息", models: [item, item1, item2])
return [section]
}
func updateModel(_ item: YHWorkExperienceModel) {
......
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "gc_income_item_add@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "gc_income_item_add@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "income_type_check_btn_0@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "income_type_check_btn_0@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "income_type_check_btn_1@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "income_type_check_btn_1@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "income_type_close@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "income_type_close@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "gc_red_dot@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "gc_red_dot@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment