Commit 41597cdd authored by Alex朱枝文's avatar Alex朱枝文

优才收入记录UI相关

parent 8d355ba5
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
}
}
{
"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