feat: update app workflows and permissions

This commit is contained in:
2026-07-09 17:34:00 +08:00
parent 43e6133c21
commit 8e356973bd
44 changed files with 2944 additions and 307 deletions

View File

@ -17,6 +17,7 @@ final class CooperationAcquirerViewController: BaseViewController, UITableViewDa
private let refreshControl = UIRefreshControl()
private let emptyLabel = UILabel()
private var shouldRefreshOnAppear = false
private var commissionDialogView: CooperationCommissionRateDialogView?
override func setupNavigationBar() {
title = "合作获客员"
@ -32,6 +33,10 @@ final class CooperationAcquirerViewController: BaseViewController, UITableViewDa
override func setupUI() {
tableView.backgroundColor = .clear
tableView.separatorStyle = .none
tableView.rowHeight = UITableView.automaticDimension
tableView.estimatedRowHeight = 142
tableView.contentInset.top = AppSpacing.sm
tableView.verticalScrollIndicatorInsets.top = AppSpacing.sm
tableView.dataSource = self
tableView.delegate = self
tableView.register(CooperationAcquirerCell.self, forCellReuseIdentifier: CooperationAcquirerCell.reuseIdentifier)
@ -145,6 +150,7 @@ final class CooperationAcquirerViewController: BaseViewController, UITableViewDa
}
emptyLabel.isHidden = !viewModel.acquirers.isEmpty || viewModel.isRefreshing
tableView.reloadData()
applyCommissionDialogState()
}
private func presentRemarkDialog(for acquirer: CooperativeSalerEntity) {
@ -168,44 +174,56 @@ final class CooperationAcquirerViewController: BaseViewController, UITableViewDa
private func presentCommissionDialog(for acquirer: CooperativeSalerEntity) {
viewModel.startEditCommissionRate(acquirer)
let alert = UIAlertController(title: "修改分成比例", message: nil, preferredStyle: .alert)
alert.addTextField { [weak self] field in
field.placeholder = "分成比例 0-100"
field.keyboardType = .numberPad
field.text = self?.viewModel.commissionRateDraft
}
alert.addTextField { [weak self] field in
field.placeholder = "验证码"
field.keyboardType = .numberPad
field.text = self?.viewModel.commissionSmsCodeDraft
}
let phone = acquirer.salerPhone.isEmpty ? acquirer.displayPhone : acquirer.salerPhone
alert.message = "验证码将发送至 \(CooperationOrderPhoneMask.mask(phone))"
commissionDialogView?.dismiss()
alert.addAction(UIAlertAction(title: "取消", style: .cancel) { [weak self] _ in
self?.viewModel.dismissCommissionRateDialog()
})
alert.addAction(UIAlertAction(title: "获取验证码", style: .default) { [weak self] _ in
let dialog = CooperationCommissionRateDialogView()
dialog.onCommissionRateChange = { [weak self] text in
self?.viewModel.updateCommissionRateDraft(text)
}
dialog.onSmsCodeChange = { [weak self] text in
self?.viewModel.updateCommissionSmsCodeDraft(text)
}
dialog.onSendSmsCode = { [weak self, weak dialog] in
guard let self else { return }
if let rateText = alert.textFields?.first?.text {
self.viewModel.updateCommissionRateDraft(rateText)
}
if let codeText = alert.textFields?.last?.text {
self.viewModel.updateCommissionSmsCodeDraft(codeText)
if let dialog {
self.syncCommissionDialogDrafts(dialog)
}
Task { await self.viewModel.requestCommissionSmsCode(api: self.orderAPI) }
})
alert.addAction(UIAlertAction(title: "确认修改", style: .default) { [weak self] _ in
}
dialog.onCancel = { [weak self] in
self?.viewModel.dismissCommissionRateDialog()
}
dialog.onConfirm = { [weak self, weak dialog] in
guard let self else { return }
if let rateText = alert.textFields?.first?.text {
self.viewModel.updateCommissionRateDraft(rateText)
}
if let codeText = alert.textFields?.last?.text {
self.viewModel.updateCommissionSmsCodeDraft(codeText)
if let dialog {
self.syncCommissionDialogDrafts(dialog)
}
Task { await self.viewModel.saveCommissionRate(api: self.orderAPI) }
})
present(alert, animated: true)
}
commissionDialogView = dialog
applyCommissionDialogState()
dialog.show(in: view)
}
private func syncCommissionDialogDrafts(_ dialog: CooperationCommissionRateDialogView) {
viewModel.updateCommissionRateDraft(dialog.currentCommissionRate)
viewModel.updateCommissionSmsCodeDraft(dialog.currentSmsCode)
}
private func applyCommissionDialogState() {
guard let dialog = commissionDialogView else { return }
guard let acquirer = viewModel.commissionEditingAcquirer else {
dialog.dismiss()
commissionDialogView = nil
return
}
let phone = acquirer.salerPhone.isEmpty ? acquirer.displayPhone : acquirer.salerPhone
dialog.apply(
commissionRate: viewModel.commissionRateDraft,
smsCode: viewModel.commissionSmsCodeDraft,
phone: CooperationOrderPhoneMask.mask(phone),
countdown: viewModel.commissionSmsCountdown
)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {