155 lines
5.5 KiB
Swift
155 lines
5.5 KiB
Swift
//
|
|
// OrderSourcePickerViewController.swift
|
|
// suixinkan
|
|
//
|
|
|
|
import SnapKit
|
|
import UIKit
|
|
|
|
/// 订单来源获客员选择 Bottom Sheet 首页,点击获客员后 push 带客单页。
|
|
final class OrderSourcePickerViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
|
|
|
|
private let orderNumber: String
|
|
private let viewModel: OrderListViewModel
|
|
private let referralOrder: BoundReferralOrderEntity?
|
|
private let loadLeads: (OrderSourcePerson) async -> Void
|
|
private let onLeadBound: (OrderSourceSelection) -> Void
|
|
private let onCallPhone: (String) -> Void
|
|
|
|
private let subtitleLabel = UILabel()
|
|
private let tableView = UITableView(frame: .zero, style: .plain)
|
|
private let loadingIndicator = UIActivityIndicatorView(style: .medium)
|
|
private let emptyLabel = UILabel()
|
|
|
|
init(
|
|
orderNumber: String,
|
|
viewModel: OrderListViewModel,
|
|
referralOrder: BoundReferralOrderEntity?,
|
|
loadLeads: @escaping (OrderSourcePerson) async -> Void,
|
|
onLeadBound: @escaping (OrderSourceSelection) -> Void,
|
|
onCallPhone: @escaping (String) -> Void
|
|
) {
|
|
self.orderNumber = orderNumber
|
|
self.viewModel = viewModel
|
|
self.referralOrder = referralOrder
|
|
self.loadLeads = loadLeads
|
|
self.onLeadBound = onLeadBound
|
|
self.onCallPhone = onCallPhone
|
|
super.init(nibName: nil, bundle: nil)
|
|
}
|
|
|
|
@available(*, unavailable)
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
title = "选择获客员"
|
|
navigationItem.largeTitleDisplayMode = .never
|
|
view.backgroundColor = .white
|
|
setupUI()
|
|
applyViewModel()
|
|
}
|
|
|
|
func reloadFromViewModel() {
|
|
applyViewModel()
|
|
(navigationController?.topViewController as? OrderSourceLeadListViewController)?
|
|
.reloadFromViewModel()
|
|
}
|
|
|
|
private func setupUI() {
|
|
subtitleLabel.font = .systemFont(ofSize: 13)
|
|
subtitleLabel.textColor = AppColor.text666
|
|
subtitleLabel.text = "选择人员后,再选择该人员创建的带客单"
|
|
subtitleLabel.numberOfLines = 0
|
|
|
|
tableView.separatorStyle = .none
|
|
tableView.backgroundColor = .white
|
|
tableView.dataSource = self
|
|
tableView.delegate = self
|
|
tableView.register(OrderSourcePersonCell.self, forCellReuseIdentifier: OrderSourcePersonCell.reuseIdentifier)
|
|
|
|
loadingIndicator.hidesWhenStopped = true
|
|
loadingIndicator.color = AppColor.primary
|
|
|
|
emptyLabel.font = .systemFont(ofSize: 14)
|
|
emptyLabel.textColor = AppColor.text666
|
|
emptyLabel.textAlignment = .center
|
|
emptyLabel.numberOfLines = 0
|
|
emptyLabel.text = "暂无合作获客员"
|
|
|
|
view.addSubview(subtitleLabel)
|
|
view.addSubview(tableView)
|
|
view.addSubview(loadingIndicator)
|
|
view.addSubview(emptyLabel)
|
|
|
|
subtitleLabel.snp.makeConstraints { make in
|
|
make.top.equalTo(view.safeAreaLayoutGuide).offset(AppSpacing.md)
|
|
make.leading.trailing.equalToSuperview().inset(AppSpacing.md)
|
|
}
|
|
tableView.snp.makeConstraints { make in
|
|
make.top.equalTo(subtitleLabel.snp.bottom).offset(14)
|
|
make.leading.trailing.bottom.equalToSuperview()
|
|
}
|
|
loadingIndicator.snp.makeConstraints { make in
|
|
make.center.equalTo(tableView)
|
|
}
|
|
emptyLabel.snp.makeConstraints { make in
|
|
make.center.equalTo(tableView)
|
|
make.leading.trailing.equalTo(tableView).inset(AppSpacing.lg)
|
|
}
|
|
}
|
|
|
|
private func applyViewModel() {
|
|
if viewModel.isLoadingOrderSourcePeople {
|
|
loadingIndicator.startAnimating()
|
|
tableView.isHidden = true
|
|
emptyLabel.isHidden = true
|
|
} else {
|
|
loadingIndicator.stopAnimating()
|
|
tableView.isHidden = false
|
|
let isEmpty = viewModel.orderSourcePeople.isEmpty
|
|
emptyLabel.isHidden = !isEmpty
|
|
tableView.reloadData()
|
|
}
|
|
}
|
|
|
|
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
|
viewModel.orderSourcePeople.count
|
|
}
|
|
|
|
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
|
let cell = tableView.dequeueReusableCell(
|
|
withIdentifier: OrderSourcePersonCell.reuseIdentifier,
|
|
for: indexPath
|
|
) as! OrderSourcePersonCell
|
|
let person = viewModel.orderSourcePeople[indexPath.row]
|
|
let currentSelection = viewModel.orderSourceSelection(
|
|
orderNumber: orderNumber,
|
|
referralOrder: referralOrder
|
|
)
|
|
cell.configure(
|
|
person: person,
|
|
selected: currentSelection?.person.key == person.key
|
|
)
|
|
cell.onCallPhone = onCallPhone
|
|
return cell
|
|
}
|
|
|
|
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
|
let person = viewModel.orderSourcePeople[indexPath.row]
|
|
let leadController = OrderSourceLeadListViewController(
|
|
person: person,
|
|
orderNumber: orderNumber,
|
|
viewModel: viewModel,
|
|
referralOrder: referralOrder,
|
|
loadLeads: loadLeads,
|
|
onLeadBound: onLeadBound,
|
|
onCallPhone: onCallPhone
|
|
)
|
|
navigationController?.setNavigationBarHidden(false, animated: true)
|
|
navigationController?.pushViewController(leadController, animated: true)
|
|
}
|
|
}
|