修复任务提交与弹窗交互问题
This commit is contained in:
@ -16,9 +16,11 @@ final class TaskAddViewController: BaseViewController {
|
||||
private let ossUploadService = NetworkServices.shared.ossUploadService
|
||||
|
||||
private let scrollView = UIScrollView()
|
||||
private let formCardView = UIView()
|
||||
private let contentStack = UIStackView()
|
||||
private let mediaSection = TaskAddMediaSectionView()
|
||||
private let prioritySection = TaskPrioritySectionView()
|
||||
private let orderTitleLabel = UILabel()
|
||||
private let orderButton = TaskOrderSelectButton()
|
||||
private let nameField = TaskBorderTextField(placeholder: "请输入任务标题")
|
||||
private let detailsField = TaskBorderTextView(placeholder: "请输入任务描述(必填)")
|
||||
@ -26,6 +28,7 @@ final class TaskAddViewController: BaseViewController {
|
||||
private let bottomBar = UIView()
|
||||
|
||||
private var remarkDialog: TaskFileRemarkDialogView?
|
||||
private var uploadTypeSheet: TaskUploadTypeSheetView?
|
||||
private var pickingMediaType: Int = 2
|
||||
private var detailsPlaceholder = "请输入任务描述(必填)"
|
||||
|
||||
@ -34,37 +37,56 @@ final class TaskAddViewController: BaseViewController {
|
||||
}
|
||||
|
||||
override func setupUI() {
|
||||
view.backgroundColor = AppColor.pageBackground
|
||||
scrollView.backgroundColor = AppColor.pageBackground
|
||||
scrollView.keyboardDismissMode = .interactive
|
||||
|
||||
formCardView.backgroundColor = .white
|
||||
formCardView.layer.cornerRadius = AppRadius.lg
|
||||
|
||||
contentStack.axis = .vertical
|
||||
contentStack.spacing = AppSpacing.sm
|
||||
contentStack.spacing = AppSpacing.md
|
||||
|
||||
orderTitleLabel.text = "关联订单(可选)"
|
||||
orderTitleLabel.font = .app(.bodyMedium)
|
||||
orderTitleLabel.textColor = AppColor.textPrimary
|
||||
|
||||
bottomBar.backgroundColor = .white
|
||||
view.addSubview(scrollView)
|
||||
view.addSubview(bottomBar)
|
||||
scrollView.addSubview(contentStack)
|
||||
scrollView.addSubview(formCardView)
|
||||
formCardView.addSubview(contentStack)
|
||||
|
||||
contentStack.addArrangedSubview(mediaSection)
|
||||
contentStack.addArrangedSubview(prioritySection)
|
||||
contentStack.addArrangedSubview(orderTitleLabel)
|
||||
contentStack.addArrangedSubview(orderButton)
|
||||
contentStack.addArrangedSubview(nameField)
|
||||
contentStack.addArrangedSubview(detailsField)
|
||||
contentStack.setCustomSpacing(AppSpacing.xxs, after: orderTitleLabel)
|
||||
bottomBar.addSubview(saveButton)
|
||||
}
|
||||
|
||||
override func setupConstraints() {
|
||||
bottomBar.snp.makeConstraints { make in
|
||||
make.leading.trailing.bottom.equalToSuperview()
|
||||
make.height.equalTo(80)
|
||||
}
|
||||
saveButton.snp.makeConstraints { make in
|
||||
make.edges.equalToSuperview().inset(AppSpacing.md)
|
||||
make.leading.trailing.equalToSuperview().inset(AppSpacing.md)
|
||||
make.centerY.equalToSuperview()
|
||||
}
|
||||
scrollView.snp.makeConstraints { make in
|
||||
make.top.leading.trailing.equalTo(view.safeAreaLayoutGuide)
|
||||
make.bottom.equalTo(bottomBar.snp.top)
|
||||
}
|
||||
contentStack.snp.makeConstraints { make in
|
||||
formCardView.snp.makeConstraints { make in
|
||||
make.edges.equalToSuperview().inset(AppSpacing.md)
|
||||
make.width.equalTo(scrollView.snp.width).offset(-AppSpacing.md * 2)
|
||||
}
|
||||
contentStack.snp.makeConstraints { make in
|
||||
make.edges.equalToSuperview().inset(AppSpacing.md)
|
||||
}
|
||||
}
|
||||
|
||||
override func bindActions() {
|
||||
@ -91,6 +113,7 @@ final class TaskAddViewController: BaseViewController {
|
||||
nameField.textField.addTarget(self, action: #selector(nameChanged), for: .editingChanged)
|
||||
detailsField.textView.delegate = self
|
||||
saveButton.addTarget(self, action: #selector(saveTapped), for: .touchUpInside)
|
||||
applyViewModel()
|
||||
}
|
||||
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
@ -108,11 +131,15 @@ final class TaskAddViewController: BaseViewController {
|
||||
if nameField.textField.text != viewModel.taskName {
|
||||
nameField.textField.text = viewModel.taskName
|
||||
}
|
||||
if detailsField.textView.textColor != AppColor.textTertiary,
|
||||
detailsField.textView.text != viewModel.taskDetails {
|
||||
if viewModel.taskDetails.isEmpty, !detailsField.textView.isFirstResponder {
|
||||
detailsField.textView.text = detailsPlaceholder
|
||||
detailsField.textView.textColor = AppColor.textTertiary
|
||||
} else if detailsField.textView.text != viewModel.taskDetails {
|
||||
detailsField.textView.text = viewModel.taskDetails
|
||||
detailsField.textView.textColor = AppColor.textPrimary
|
||||
}
|
||||
saveButton.isEnabled = !viewModel.isUploading
|
||||
saveButton.isEnabled = true
|
||||
saveButton.alpha = viewModel.isUploading ? 0.6 : 1
|
||||
|
||||
if viewModel.showRemarkDialog, let file = viewModel.remarkTargetFile {
|
||||
showRemarkDialog(file: file)
|
||||
@ -151,15 +178,30 @@ final class TaskAddViewController: BaseViewController {
|
||||
}
|
||||
|
||||
private func presentLocalImportSheet() {
|
||||
let sheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
|
||||
sheet.addAction(UIAlertAction(title: "图片", style: .default) { [weak self] _ in
|
||||
guard uploadTypeSheet == nil else { return }
|
||||
let sheet = TaskUploadTypeSheetView(frame: view.bounds)
|
||||
sheet.onChooseImage = { [weak self] in
|
||||
self?.hideUploadTypeSheet()
|
||||
self?.presentMediaPicker(isImage: true)
|
||||
})
|
||||
sheet.addAction(UIAlertAction(title: "视频", style: .default) { [weak self] _ in
|
||||
}
|
||||
sheet.onChooseVideo = { [weak self] in
|
||||
self?.hideUploadTypeSheet()
|
||||
self?.presentMediaPicker(isImage: false)
|
||||
})
|
||||
sheet.addAction(UIAlertAction(title: "取消", style: .cancel))
|
||||
present(sheet, animated: true)
|
||||
}
|
||||
sheet.onCancel = { [weak self] in
|
||||
self?.hideUploadTypeSheet()
|
||||
}
|
||||
uploadTypeSheet = sheet
|
||||
view.addSubview(sheet)
|
||||
sheet.snp.makeConstraints { make in make.edges.equalToSuperview() }
|
||||
sheet.show()
|
||||
}
|
||||
|
||||
private func hideUploadTypeSheet() {
|
||||
uploadTypeSheet?.dismiss { [weak self] in
|
||||
self?.uploadTypeSheet?.removeFromSuperview()
|
||||
self?.uploadTypeSheet = nil
|
||||
}
|
||||
}
|
||||
|
||||
private func presentMediaPicker(isImage: Bool) {
|
||||
@ -257,7 +299,6 @@ final class TaskAddViewController: BaseViewController {
|
||||
self?.viewModel.updateUploadProgress(uploadTaskId: uploadTaskId, progress: progress)
|
||||
}
|
||||
}
|
||||
try await taskAPI.registerUploadedFileURL(scenicId: scenicId, fileURL: fileURL, folderId: 0)
|
||||
await MainActor.run {
|
||||
self.viewModel.markUploadSucceeded(
|
||||
uploadTaskId: uploadTaskId,
|
||||
|
||||
Reference in New Issue
Block a user