457 lines
18 KiB
Swift
457 lines
18 KiB
Swift
//
|
||
// ReviewFailedController.swift
|
||
// OrderScheduling
|
||
//
|
||
// Created by 中道 on 2023/8/14.
|
||
//
|
||
|
||
import Foundation
|
||
import DDAutoUIKit_Private
|
||
import DDControlsKit_Private
|
||
import SnapKit
|
||
import RxSwift
|
||
import RxRelay
|
||
import RxCocoa
|
||
import MJRefresh
|
||
import ESTabBarController_swift
|
||
|
||
extension ReviewFailedController {
|
||
func addActions() {
|
||
MCOUNT.messageCountRelay
|
||
.observe(on: MainScheduler.instance)
|
||
.subscribe(onNext: {[weak self] count in
|
||
if count > 0 {
|
||
self?.messageView.countLabel.isHidden = false
|
||
self?.messageView.countLabel.text = String(count)
|
||
self?.messageView.countLabel.snp.updateConstraints({ make in
|
||
make.width.equalTo(20)
|
||
})
|
||
}else{
|
||
self?.messageView.countLabel.isHidden = true
|
||
self?.messageView.countLabel.snp.updateConstraints({ make in
|
||
make.width.equalTo(0)
|
||
})
|
||
}
|
||
})
|
||
.disposed(by: disposeBag)
|
||
|
||
// MCOUNT.pendingCountRelay
|
||
// .observe(on: MainScheduler.instance)
|
||
// .subscribe(onNext: {[weak self] count in
|
||
// if count > 0 {
|
||
// self?.pendingView.countLabel.isHidden = false
|
||
// self?.pendingView.countLabel.text = String(count)
|
||
// self?.pendingView.countLabel.snp.updateConstraints({ make in
|
||
// make.width.equalTo(20)
|
||
// })
|
||
// }else{
|
||
// self?.pendingView.countLabel.isHidden = true
|
||
// self?.pendingView.countLabel.snp.updateConstraints({ make in
|
||
// make.width.equalTo(0)
|
||
// })
|
||
// }
|
||
// })
|
||
// .disposed(by: disposeBag)
|
||
|
||
reviewFailedView.tableView.mj_header = MJRefreshNormalHeader(refreshingBlock: {[weak self] in
|
||
self?.pageNum = 1
|
||
self?.refreshRelay.accept(self?.pageNum ?? 1)
|
||
})
|
||
|
||
reviewFailedView.tableView.mj_footer = MJRefreshBackNormalFooter(refreshingBlock: {[weak self] in
|
||
self?.pageNum+=1
|
||
self?.refreshRelay.accept(self?.pageNum ?? 1)
|
||
})
|
||
|
||
refreshRelay
|
||
.flatMapLatest {[weak self] pageNum in
|
||
return Observable.zip(RQ.orderList(parameters: self?.conditionalSearchTool.getParameters(pageNum: pageNum,queryType: .TO_AUDIT_FAILED) ?? OrderListParameters(pageNum: pageNum, queryType: .TO_AUDIT_FAILED)).asObservable(), Observable.just(pageNum))
|
||
}
|
||
.observe(on: MainScheduler.instance)
|
||
.subscribe(onNext: {[weak self] (response, pageNum) in
|
||
if response?.success == true {
|
||
if pageNum == 1 {
|
||
self?.resultArr.removeAll()
|
||
self?.reviewFailedView.tableView.mj_footer?.resetNoMoreData()
|
||
self?.reviewFailedView.tableView.mj_header?.endRefreshing()
|
||
}else{
|
||
if response?.data?.isEmpty == false {
|
||
self?.reviewFailedView.tableView.mj_footer?.endRefreshing()
|
||
}else{
|
||
self?.reviewFailedView.tableView.mj_footer?.endRefreshingWithNoMoreData()
|
||
}
|
||
}
|
||
|
||
if let array = response?.data {
|
||
self?.resultArr.append(contentsOf: array)
|
||
}
|
||
|
||
if self?.resultArr.isEmpty == false {
|
||
self?.emptyView.isHidden = true
|
||
}else{
|
||
self?.emptyView.isHidden = false
|
||
}
|
||
|
||
self?.reviewFailedView.tableView.reloadData()
|
||
}else{
|
||
if pageNum == 1 {
|
||
self?.reviewFailedView.tableView.mj_header?.endRefreshing()
|
||
}else{
|
||
self?.reviewFailedView.tableView.mj_footer?.endRefreshing()
|
||
}
|
||
self?.view.dd_makeToast(response?.msg)
|
||
}
|
||
})
|
||
.disposed(by: disposeBag)
|
||
|
||
messageTapGes.rx.event
|
||
.observe(on: MainScheduler.instance)
|
||
.subscribe(onNext: {[weak self] _ in
|
||
MESSAGETOOL.openMessageCenter(by: self?.navigationController)
|
||
})
|
||
.disposed(by: disposeBag)
|
||
|
||
// pendingTapGes.rx.event
|
||
// .observe(on: MainScheduler.instance)
|
||
// .subscribe(onNext: { _ in
|
||
// WEBTOOL.open(name: .todoList,appending: nil)
|
||
// })
|
||
// .disposed(by: disposeBag)
|
||
|
||
filterButton.rx.tap
|
||
.observe(on: MainScheduler.instance)
|
||
.subscribe(onNext: {[weak self] _ in
|
||
self?.conditionalSearchTool.showFilterView()
|
||
})
|
||
.disposed(by: disposeBag)
|
||
|
||
conditionalSearchTool.isFilterSub
|
||
.observe(on: MainScheduler.instance)
|
||
.subscribe(onNext: {[weak self] isFilter in
|
||
ConditionalSearchTool.resetFilterButton(self?.filterButton, filterState: isFilter, type: .reviewFailed)
|
||
})
|
||
.disposed(by: disposeBag)
|
||
|
||
conditionalSearchTool.searchSub
|
||
.observe(on: MainScheduler.instance)
|
||
.subscribe(onNext: {[weak self] _ in
|
||
self?.reviewFailedView.tableView.mj_header?.beginRefreshing()
|
||
})
|
||
.disposed(by: disposeBag)
|
||
|
||
preRefreshRelay
|
||
.observe(on: MainScheduler.instance)
|
||
.subscribe(onNext: {[weak self] _ in
|
||
NewTraining.default.newTrainingRelay.accept(nil)
|
||
MCOUNT.newestMessage()
|
||
self?.reviewFailedView.tableView.mj_header?.beginRefreshing()
|
||
/// 点击tabbar item重置
|
||
ConditionalSearchTool.resetFilterButton(self?.filterButton, filterState: false, type: .reviewFailed)
|
||
})
|
||
.disposed(by: disposeBag)
|
||
|
||
USERP.userPermissionRelay
|
||
.observe(on: MainScheduler.instance)
|
||
.subscribe(onNext: {[weak self] _ in
|
||
self?.reviewFailedView.tableView.reloadData()
|
||
})
|
||
.disposed(by: disposeBag)
|
||
}
|
||
}
|
||
|
||
// MARK: UITableViewDelegate,UITableViewDataSource
|
||
extension ReviewFailedController : UITableViewDelegate,UITableViewDataSource {
|
||
public func numberOfSections(in tableView: UITableView) -> Int {
|
||
return 1
|
||
}
|
||
|
||
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||
return resultArr.count
|
||
}
|
||
|
||
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||
var cell = tableView.dequeueReusableCell(withIdentifier: "cell") as? ReviewFailedCell
|
||
if cell == nil {
|
||
cell = ReviewFailedCell(style: .default, reuseIdentifier: "cell")
|
||
}
|
||
let model = resultArr[indexPath.row]
|
||
cell!.orderStatusTitleLabel.text = "状态:"
|
||
cell!.orderStatusLabel.text = model.taskOrderStatusString
|
||
cell!.descLabel.text = "不通过原因:" + (model.auditFailReason ?? "")
|
||
cell!.typeLabel.text = model.taskServiceName
|
||
cell!.orderNumLabel.text = model.orderCode
|
||
cell!.dateLabel.text = model.createTime
|
||
|
||
if model.taskOrderStatusString == "任务完成" {
|
||
cell?.orderStatusLabel.textColor = .hex("09B820")
|
||
}else{
|
||
cell?.orderStatusLabel.textColor = .hex("E64C0B")
|
||
}
|
||
|
||
cell!.additionalButton.rx.tap
|
||
.observe(on: MainScheduler.instance)
|
||
.subscribe(onNext: {[weak self] _ in
|
||
let vc = AdditionalPhotoController(userOrderId: model.userOrderId, orderCode: model.orderCode, taskOrderId: model.taskOrderId,canModify: true)
|
||
self?.navigationController?.pushViewController(vc, animated: true)
|
||
})
|
||
.disposed(by: cell!.disposeBag)
|
||
|
||
if USERP.canSupplierAuditUploadPhotoBtn == true {
|
||
cell?.additionalButton.isHidden = false
|
||
}else{
|
||
cell?.additionalButton.isHidden = true
|
||
}
|
||
return cell!
|
||
}
|
||
|
||
public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||
let model = resultArr[indexPath.row]
|
||
WEBTOOL.open(name: .workOrderDetail, appending: "&queryType=\(OrderTypeEnum.TO_AUDIT_FAILED.rawValue)&userOrderId=\(model.userOrderId)&orderCode=\(model.orderCode)&taskOrderId=\(model.taskOrderId)")
|
||
}
|
||
}
|
||
|
||
open class ReviewFailedController : ZDViewController {
|
||
private let reviewFailedView = ReviewFailedView()
|
||
private var pageNum : Int = 1
|
||
private var preRefreshRelay = ReplayRelay<Any?>.create(bufferSize: 1)
|
||
private var refreshRelay = ReplayRelay<Int>.create(bufferSize: 1)
|
||
private let disposeBag = DisposeBag()
|
||
private var resultArr : [OrderListDataModel] = []
|
||
private let messageTapGes = UITapGestureRecognizer()
|
||
private let messageView = MessageView()
|
||
// private let pendingTapGes = UITapGestureRecognizer()
|
||
// private let pendingView = MessageView()
|
||
private var emptyView = EmptyView()
|
||
|
||
private let filterButton = DDButton.dd_initCustom()
|
||
private lazy var conditionalSearchTool = ConditionalSearchTool()
|
||
|
||
public override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
|
||
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
|
||
MCOUNT.reviewFailedCountRelay
|
||
.observe(on: MainScheduler.instance)
|
||
.subscribe(onNext: {[weak self] count in
|
||
if let tabBar = self?.tabBarController?.tabBar as? ESTabBar {
|
||
let tabBarItem = tabBar.items?[1]
|
||
if count > 0 {
|
||
tabBarItem?.badgeValue = String(count)
|
||
}else{
|
||
tabBarItem?.badgeValue = nil
|
||
}
|
||
}
|
||
})
|
||
.disposed(by: disposeBag)
|
||
}
|
||
|
||
public required init?(coder: NSCoder) {
|
||
fatalError("init(coder:) has not been implemented")
|
||
}
|
||
|
||
open override func viewDidLoad() {
|
||
super.viewDidLoad()
|
||
dd_navigationItemTitle = "审核失败"
|
||
dd_navigationBarBackgroundColor = .hex("354683")
|
||
dd_navigationBarTitleTextAttributes = [.foregroundColor : UIColor.white(alpha: 0.7),.font:UIFont.mediumFont(17)]
|
||
dd_navigationBarBarButtonItemAttributes = [.foregroundColor : UIColor.white]
|
||
navigationItem.leftBarButtonItems = nil
|
||
|
||
addSubviews()
|
||
addActions()
|
||
}
|
||
|
||
func addSubviews() {
|
||
view.backgroundColor = .hex("FAFAFA")
|
||
view.addSubview(reviewFailedView)
|
||
|
||
reviewFailedView.tableView.addSubview(emptyView)
|
||
emptyView.snp.makeConstraints { make in
|
||
make.centerX.centerY.equalToSuperview()
|
||
make.width.equalTo(auto(303))
|
||
make.height.equalTo(auto(94))
|
||
}
|
||
|
||
reviewFailedView.tableView.delegate = self
|
||
reviewFailedView.tableView.dataSource = self
|
||
|
||
messageView.titleLabel.text = "消息"
|
||
messageView.addGestureRecognizer(messageTapGes)
|
||
navigationItem.leftBarButtonItem = UIBarButtonItem(customView: messageView)
|
||
messageView.snp.makeConstraints { make in
|
||
make.height.equalTo(40)
|
||
make.width.greaterThanOrEqualTo(40)
|
||
}
|
||
|
||
// pendingView.titleLabel.text = "待办"
|
||
// pendingView.addGestureRecognizer(pendingTapGes)
|
||
// navigationItem.rightBarButtonItem = UIBarButtonItem(customView: pendingView)
|
||
// pendingView.snp.makeConstraints { make in
|
||
// make.height.equalTo(40)
|
||
// make.width.greaterThanOrEqualTo(40)
|
||
// }
|
||
ConditionalSearchTool.configFilterButton(filterButton,type: .reviewFailed)
|
||
navigationItem.rightBarButtonItem = UIBarButtonItem(customView: filterButton)
|
||
}
|
||
|
||
open override func viewSafeAreaInsetsDidChange() {
|
||
super.viewSafeAreaInsetsDidChange()
|
||
// view.safeAreaInsets.bottom为0的时候是hiddenBottomBar的时候,此时不必约束,由于是首页所以view.safeAreaInsets.bottom一定是大于0的
|
||
if view.safeAreaInsets.bottom != 0 {
|
||
reviewFailedView.snp.remakeConstraints { make in
|
||
make.top.equalTo(view.safeAreaInsets.top)
|
||
make.left.right.equalToSuperview()
|
||
make.bottom.equalTo(-view.safeAreaInsets.bottom)
|
||
}
|
||
|
||
conditionalSearchTool.bottomSafeArea = view.safeAreaInsets.bottom - 49
|
||
}
|
||
}
|
||
|
||
open override var preferredStatusBarStyle: UIStatusBarStyle {
|
||
return .lightContent
|
||
}
|
||
|
||
open override func reloadData() {
|
||
super.reloadData()
|
||
preRefreshRelay.accept(nil)
|
||
}
|
||
}
|
||
|
||
open class ReviewFailedView : DDView {
|
||
public let tableView : DDTableView
|
||
public override init(frame: CGRect) {
|
||
tableView = DDTableView(frame: CGRectZero, style: .plain)
|
||
super.init(frame: frame)
|
||
|
||
tableView.backgroundColor = .hex("FAFAFA")
|
||
tableView.separatorStyle = .none
|
||
addSubview(tableView)
|
||
tableView.snp.makeConstraints { make in
|
||
make.edges.equalToSuperview()
|
||
}
|
||
}
|
||
|
||
public required init?(coder: NSCoder) {
|
||
fatalError("init(coder:) has not been implemented")
|
||
}
|
||
}
|
||
|
||
open class ReviewFailedCell : DDTableViewCell {
|
||
public let radiusView : DDView
|
||
public let typeLabel : DDLabel
|
||
public let orderNumLabel : DDLabel
|
||
public let orderStatusTitleLabel : DDLabel
|
||
public let orderStatusLabel : DDLabel
|
||
public let descLabel : DDLabel
|
||
public let dateLabel : DDLabel
|
||
public let additionalButton : DDButton
|
||
public var additionalLayer : CAGradientLayer = {
|
||
var layer = CAGradientLayer.init()
|
||
layer.startPoint = CGPoint(x: 0, y: 0)
|
||
layer.endPoint = CGPoint(x: 1, y: 1)
|
||
layer.locations = [0.0,1.0]
|
||
layer.colors = [UIColor.hex("FF5A2C").cgColor,UIColor.hex("FE9D4D").cgColor]
|
||
layer.cornerRadius = auto(4)
|
||
layer.masksToBounds = true
|
||
return layer
|
||
}()
|
||
public var disposeBag = DisposeBag()
|
||
|
||
public override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||
radiusView = DDView()
|
||
typeLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(14)), textColor: .hex("000000").alpha(0.85))
|
||
orderNumLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(12)), textColor: .hex("000000").alpha(0.55))
|
||
orderStatusTitleLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(12)), textColor: .hex("000000").alpha(0.5))
|
||
orderStatusLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(12)), textColor: .hex("E69B0B"))
|
||
descLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(13)), textColor: .hex("FF8F37"))
|
||
dateLabel = DDLabel.dd_init(withText: "", font: .regularFont(auto(12)), textColor: .hex("000000").alpha(0.55))
|
||
additionalButton = DDButton.dd_initCustom()
|
||
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
||
|
||
backgroundColor = .hex("F4F5F7")
|
||
selectionStyle = .none
|
||
|
||
radiusView.backgroundColor = .white
|
||
radiusView.layer.cornerRadius = auto(6)
|
||
radiusView.layer.shadowColor = UIColor.hex("D8D8D8").cgColor
|
||
radiusView.layer.shadowOffset = CGSize(width: 0, height: 3)
|
||
radiusView.layer.shadowRadius = 5
|
||
radiusView.layer.shadowOpacity = 1
|
||
contentView.addSubview(radiusView)
|
||
radiusView.addSubview(typeLabel)
|
||
radiusView.addSubview(orderNumLabel)
|
||
radiusView.addSubview(orderStatusTitleLabel)
|
||
orderStatusLabel.numberOfLines = 0
|
||
radiusView.addSubview(orderStatusLabel)
|
||
descLabel.numberOfLines = 0
|
||
radiusView.addSubview(descLabel)
|
||
radiusView.addSubview(dateLabel)
|
||
additionalButton.setTitle("补充", for: .normal)
|
||
additionalButton.setTitleColor(.white, for: .normal)
|
||
additionalButton.titleLabel?.font = .mediumFont(auto(13))
|
||
additionalButton.layer.cornerRadius = auto(4)
|
||
additionalButton.layer.masksToBounds = true
|
||
radiusView.addSubview(additionalButton)
|
||
additionalButton.layer.insertSublayer(additionalLayer, at: 0)
|
||
|
||
radiusView.snp.makeConstraints { make in
|
||
make.left.top.equalTo(auto(10))
|
||
make.right.equalTo(-auto(10))
|
||
make.bottom.equalTo(0)
|
||
}
|
||
|
||
typeLabel.snp.makeConstraints { make in
|
||
make.top.left.equalTo(auto(10))
|
||
make.height.equalTo(auto(15))
|
||
}
|
||
|
||
orderNumLabel.snp.makeConstraints { make in
|
||
make.left.equalTo(typeLabel.snp.right).offset(auto(10))
|
||
make.centerY.equalTo(typeLabel)
|
||
}
|
||
|
||
orderStatusTitleLabel.snp.makeConstraints { make in
|
||
make.left.equalTo(typeLabel)
|
||
make.top.equalTo(orderNumLabel.snp.bottom).offset(auto(10))
|
||
}
|
||
|
||
orderStatusLabel.snp.makeConstraints { make in
|
||
make.height.equalTo(orderStatusTitleLabel)
|
||
make.top.equalTo(orderStatusTitleLabel)
|
||
make.left.equalTo(orderStatusTitleLabel.snp.right).offset(auto(10))
|
||
}
|
||
|
||
descLabel.snp.makeConstraints { make in
|
||
make.top.equalTo(orderStatusTitleLabel.snp.bottom).offset(auto(10))
|
||
make.left.equalTo(typeLabel)
|
||
make.right.equalTo(-auto(20))
|
||
}
|
||
|
||
dateLabel.snp.makeConstraints { make in
|
||
make.left.equalTo(descLabel)
|
||
make.top.equalTo(descLabel.snp.bottom).offset(auto(10))
|
||
make.bottom.equalTo(-auto(15))
|
||
}
|
||
|
||
additionalButton.snp.makeConstraints { make in
|
||
make.right.equalTo(-auto(10))
|
||
make.centerY.equalTo(dateLabel)
|
||
make.width.equalTo(auto(50))
|
||
make.height.equalTo(auto(20))
|
||
}
|
||
}
|
||
|
||
public required init?(coder: NSCoder) {
|
||
fatalError("init(coder:) has not been implemented")
|
||
}
|
||
|
||
open override func prepareForReuse() {
|
||
super.prepareForReuse()
|
||
disposeBag = DisposeBag()
|
||
}
|
||
|
||
open override func layoutSubviews() {
|
||
super.layoutSubviews()
|
||
additionalLayer.frame = CGRectMake(0, 0, auto(50), auto(20))
|
||
}
|
||
}
|