Add scenic application flow aligned with Android.
Implement scenic apply models, API, upload, UI, and tests; wire entry from permission apply pages and include related permission/scenic selection UI fixes. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@ -16,9 +16,19 @@ final class PermissionApplyViewController: BaseViewController {
|
||||
private let scrollView = UIScrollView()
|
||||
private let contentStack = UIStackView()
|
||||
private let bannerView = PermissionApplyBannerView()
|
||||
private let roleSelector = PermissionFormSelectorRow(title: "角色信息", subtitle: "单选 · 请选择您需要申请权限的角色", placeholder: "请选择角色")
|
||||
private let existingScenicTags = PermissionSelectedTagsView()
|
||||
private let scenicSelector = PermissionFormSelectorRow(title: "新增景区", subtitle: "多选 · 请选择需要新增权限的景区", placeholder: "请选择景区")
|
||||
private let roleSelector = PermissionFormSelectorRow(
|
||||
title: "角色信息",
|
||||
tag: "单选",
|
||||
description: "请选择您需要申请权限的角色",
|
||||
placeholder: "请选择角色"
|
||||
)
|
||||
private let newRoleTags = PermissionSelectedTagsView()
|
||||
private let scenicSelector = PermissionFormSelectorRow(
|
||||
title: "选择景区",
|
||||
tag: "可多选",
|
||||
description: "请选择您需要申请权限的景区",
|
||||
placeholder: "请选择景区"
|
||||
)
|
||||
private let selectedScenicTags = PermissionSelectedTagsView()
|
||||
private let submitButton = PermissionSubmitButton()
|
||||
|
||||
@ -49,7 +59,7 @@ final class PermissionApplyViewController: BaseViewController {
|
||||
let card = UIView()
|
||||
card.backgroundColor = .white
|
||||
card.layer.cornerRadius = 8
|
||||
let cardStack = UIStackView(arrangedSubviews: [roleSelector, existingScenicTags, scenicSelector, selectedScenicTags])
|
||||
let cardStack = UIStackView(arrangedSubviews: [roleSelector, newRoleTags, scenicSelector, selectedScenicTags])
|
||||
cardStack.axis = .vertical
|
||||
cardStack.spacing = 20
|
||||
card.addSubview(cardStack)
|
||||
@ -89,7 +99,7 @@ final class PermissionApplyViewController: BaseViewController {
|
||||
}
|
||||
|
||||
bannerView.onApplyNewScenic = { [weak self] in
|
||||
self?.showToast("功能开发中")
|
||||
self?.navigationController?.pushViewController(ScenicApplicationViewController(), animated: true)
|
||||
}
|
||||
roleSelector.onTap = { [weak self] in self?.presentRolePicker() }
|
||||
scenicSelector.onTap = { [weak self] in
|
||||
@ -112,12 +122,11 @@ final class PermissionApplyViewController: BaseViewController {
|
||||
private func applyViewModel() {
|
||||
if viewModel.selectedRoleName.isEmpty {
|
||||
roleSelector.setValue("请选择角色", isPlaceholder: true)
|
||||
existingScenicTags.isHidden = true
|
||||
newRoleTags.isHidden = true
|
||||
} else {
|
||||
roleSelector.setValue(viewModel.selectedRoleName, isPlaceholder: false)
|
||||
if let roleId = viewModel.selectedRoleId {
|
||||
let names = viewModel.existingScenics(for: roleId).map(\.name)
|
||||
existingScenicTags.apply(title: "已开通景区", names: names, onRemove: nil)
|
||||
newRoleTags.apply(title: "新增角色", names: [viewModel.selectedRoleName]) { [weak self] _ in
|
||||
self?.viewModel.clearRoleSelection()
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,9 +134,15 @@ final class PermissionApplyViewController: BaseViewController {
|
||||
scenicSelector.setValue("请选择景区", isPlaceholder: true)
|
||||
selectedScenicTags.isHidden = true
|
||||
} else {
|
||||
scenicSelector.setValue("已选 \(viewModel.selectedScenicNames.count) 个景区", isPlaceholder: false)
|
||||
let displayText: String
|
||||
if viewModel.selectedScenicNames.count == 1 {
|
||||
displayText = viewModel.selectedScenicNames[0]
|
||||
} else {
|
||||
displayText = "已选中\(viewModel.selectedScenicNames.count)个景区"
|
||||
}
|
||||
scenicSelector.setValue(displayText, isPlaceholder: false)
|
||||
selectedScenicTags.apply(
|
||||
title: "待申请景区",
|
||||
title: "新增景区",
|
||||
names: viewModel.selectedScenicNames
|
||||
) { [weak self] index in
|
||||
guard let self else { return }
|
||||
@ -186,7 +201,7 @@ final class PermissionApplyViewController: BaseViewController {
|
||||
self?.viewModel.toggleScenic(scenic)
|
||||
})
|
||||
}
|
||||
alert.addAction(UIAlertAction(title: "完成", style: .cancel))
|
||||
alert.addAction(UIAlertAction(title: "取消", style: .cancel))
|
||||
present(alert, animated: true)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user