Files
OrderScheduling/OrderScheduling/Mine/ViewController/MineController.swift
DDIsFriend d13c882b98 update
2023-08-24 14:29:52 +08:00

489 lines
19 KiB
Swift

//
// MineController.swift
// OrderScheduling
//
// Created by on 2023/8/18.
//
import Foundation
import DDAutoUIKit_Private
import DDControlsKit_Private
import SnapKit
import RxSwift
import RxRelay
import RxCocoa
import DDToastKit_Private
import DDProgressHUDKit_Private
import MJRefresh
extension MineController {
func addActions() {
mineView.scrollView.mj_header = MJRefreshNormalHeader(refreshingBlock: {[weak self] in
self?.refreshRelay.accept(nil)
})
mineView.logoutButton.rx.tap
.observe(on: MainScheduler.instance)
.do(onNext: {[weak self] _ in
self?.view.dd_showHUD()
})
.flatMapLatest({ _ in
return RQ.logout(parameters: LogoutParameters(deviceId: 1))
})
.observe(on: MainScheduler.instance)
.do(onNext: {[weak self] _ in
self?.view.dd_hideHUD()
})
.observe(on: MainScheduler.instance)
.subscribe(onNext: {[weak self] response in
if response?.success == true {
USER.clear()
NotificationCenter.default.post(name: NSNotification.Name(rawValue: Notification_logoutSuccessToLoginController), object: nil)
}else{
self?.view.dd_makeToast(response?.msg)
}
})
.disposed(by: disposeBag)
refreshRelay
.flatMapLatest { _ in
return RQ.generalInfo()
}
.observe(on: MainScheduler.instance)
.subscribe(onNext: {[weak self] response in
if response?.success == true {
self?.mineView.scrollView.mj_header?.endRefreshing()
self?.mineView.carInfoView.descLabel.text = String(response?.data?.vehicleCount ?? 0)+""
self?.mineView.driverInfoView.descLabel.text = String(response?.data?.driverCount ?? 0)+""
if let icon = response?.data?.icon {
self?.mineView.avatar.sd_setImage(with: URL(string: icon),placeholderImage: UIImage(named: "placeholder_gender_man"))
}
if let phone = response?.data?.phone{
self?.mineView.accountLabel.text = "账号:\(phone)"
}
if let company = response?.data?.supplierName {
self?.mineView.companyLabel.text = company
}
}else{
self?.view.dd_makeToast(response?.msg)
}
})
.disposed(by: disposeBag)
mineView.carInfoGes.rx.event
.observe(on: MainScheduler.instance)
.subscribe(onNext: { _ in
WEBTOOL.open(name: .vehicleManage, appending: nil)
})
.disposed(by: disposeBag)
mineView.driverInfoGes.rx.event
.observe(on: MainScheduler.instance)
.subscribe(onNext: { _ in
WEBTOOL.open(name: .driverManage, appending: nil)
})
.disposed(by: disposeBag)
mineView.gongdanduizhangGes.rx.event
.observe(on: MainScheduler.instance)
.subscribe(onNext: { _ in
WEBTOOL.open(name: .workOrderReconciliation, appending: nil)
})
.disposed(by: disposeBag)
mineView.kaipiaotongzhiGes.rx.event
.observe(on: MainScheduler.instance)
.subscribe(onNext: { _ in
WEBTOOL.open(name: .invoicingNotify, appending: nil)
})
.disposed(by: disposeBag)
mineView.wendangziliaoGes.rx.event
.observe(on: MainScheduler.instance)
.subscribe(onNext: { _ in
})
.disposed(by: disposeBag)
mineView.peixunwendangGes.rx.event
.observe(on: MainScheduler.instance)
.subscribe(onNext: { _ in
})
.disposed(by: disposeBag)
mineView.banbenjianceGes.rx.event
.observe(on: MainScheduler.instance)
.subscribe(onNext: { _ in
APPUPDATE.requestAppUpdateRelay.accept(.manual)
})
.disposed(by: disposeBag)
mineView.tongzhitixingGes.rx.event
.observe(on: MainScheduler.instance)
.subscribe(onNext: { _ in
NOTIAUTHTOOL.openSetting()
})
.disposed(by: disposeBag)
preRefreshRelay
.observe(on: MainScheduler.instance)
.subscribe(onNext: {[weak self] _ in
self?.mineView.scrollView.mj_header?.beginRefreshing()
})
.disposed(by: disposeBag)
}
}
open class MineController : ZDViewController {
private let mineView = MineView()
private let disposeBag = DisposeBag()
private let preRefreshRelay = ReplayRelay<Any?>.create(bufferSize: 1)
private let refreshRelay = ReplayRelay<Any?>.create(bufferSize: 1)
open override func viewDidLoad() {
super.viewDidLoad()
dd_navigationBarBackgroundColor = .hex("354683")
dd_navigationBarTitleTextAttributes = [.foregroundColor : UIColor.white(alpha: 0.7),.font:UIFont.mediumFont(auto(15))]
dd_navigationItemTitle = "我的"
dd_navigationBarShadowColor = .hex("354683")
navigationItem.leftBarButtonItems = nil
view.addSubview(mineView)
mineView.snp.makeConstraints { make in
make.top.equalTo(CGRectGetHeight(UIApplication.shared.dd_statusBarFrame) + CGRectGetHeight(navigationController?.navigationBar.frame ?? .zero))
make.left.right.equalToSuperview()
make.bottom.equalTo(-view.safeAreaInsets.bottom - CGRectGetHeight(tabBarController?.tabBar.frame ?? .zero))
}
mineView.carInfoView.titleLabel.text = "车辆管理"
mineView.carInfoView.imageView.image = UIImage(named: "mine_info_car")
mineView.driverInfoView.titleLabel.text = "司机管理"
mineView.driverInfoView.imageView.image = UIImage(named: "mine_info_driver")
mineView.gongdanduizhang.titleLabel.text = "工单对账"
mineView.kaipiaotongzhi.titleLabel.text = "开票通知"
mineView.peixunwendang.titleLabel.text = "培训文档"
mineView.wendangziliao.titleLabel.text = "文档资料"
mineView.banbenjiance.titleLabel.text = "版本检测"
mineView.tongzhitixing.titleLabel.text = "通知提醒"
addActions()
}
open override func reloadData() {
super.reloadData()
preRefreshRelay.accept(nil)
}
}
open class MineView : DDView {
public let scrollView : DDScrollView
private let scrollContentView : DDView
private let topBackgroundImageView : DDImageView
public let avatar : DDImageView
public let accountLabel : DDLabel
public let companyLabel : DDLabel
public let carInfoGes : UITapGestureRecognizer
public let carInfoView : MineInfoView
public let driverInfoGes : UITapGestureRecognizer
public let driverInfoView : MineInfoView
public let infoRadiusView : DDView
public let infoRadiusSeparate : DDImageView
public let orderRadiusView : DDView
public let materialRadiusView : DDView
public let settingsRadiusView : DDView
public let gongdanduizhangGes : UITapGestureRecognizer
public let gongdanduizhang : MineCell
public let kaipiaotongzhiGes : UITapGestureRecognizer
public let kaipiaotongzhi : MineCell
public let peixunwendangGes : UITapGestureRecognizer
public let peixunwendang : MineCell
public let wendangziliaoGes : UITapGestureRecognizer
public let wendangziliao : MineCell
public let banbenjianceGes : UITapGestureRecognizer
public let banbenjiance : MineCell
public let tongzhitixingGes : UITapGestureRecognizer
public let tongzhitixing : MineCell
public let logoutButton : DDButton
public override init(frame: CGRect) {
scrollView = DDScrollView()
scrollContentView = DDView()
topBackgroundImageView = DDImageView()
avatar = DDImageView(image: UIImage(named: "placeholder_gender_man"))
accountLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(15)), textColor: .hex("FFFFFF").alpha(0.8))
companyLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(12)), textColor: .hex("FFFFFF").alpha(0.5))
carInfoView = MineInfoView()
carInfoGes = UITapGestureRecognizer()
driverInfoView = MineInfoView()
driverInfoGes = UITapGestureRecognizer()
infoRadiusView = DDView()
infoRadiusSeparate = DDImageView(image: UIImage(named: "mine_info_separate"))
orderRadiusView = DDView()
materialRadiusView = DDView()
settingsRadiusView = DDView()
gongdanduizhangGes = UITapGestureRecognizer()
gongdanduizhang = MineCell()
kaipiaotongzhiGes = UITapGestureRecognizer()
kaipiaotongzhi = MineCell()
peixunwendangGes = UITapGestureRecognizer()
peixunwendang = MineCell()
wendangziliaoGes = UITapGestureRecognizer()
wendangziliao = MineCell()
banbenjianceGes = UITapGestureRecognizer()
banbenjiance = MineCell()
tongzhitixingGes = UITapGestureRecognizer()
tongzhitixing = MineCell()
logoutButton = DDButton.dd_initCustom()
super.init(frame: frame)
backgroundColor = .hex("F4F5F7")
addSubview(scrollView)
scrollView.addSubview(scrollContentView)
topBackgroundImageView.backgroundColor = .hex("354683")
scrollContentView.addSubview(topBackgroundImageView)
avatar.layer.cornerRadius = auto(27)
avatar.layer.masksToBounds = true
scrollContentView.addSubview(avatar)
scrollContentView.addSubview(accountLabel)
scrollContentView.addSubview(companyLabel)
infoRadiusView.backgroundColor = .hex("FFFFFF")
infoRadiusView.layer.cornerRadius = auto(12)
scrollContentView.addSubview(infoRadiusView)
carInfoView.addGestureRecognizer(carInfoGes)
infoRadiusView.addSubview(carInfoView)
driverInfoView.addGestureRecognizer(driverInfoGes)
infoRadiusView.addSubview(driverInfoView)
scrollContentView.addSubview(infoRadiusSeparate)
orderRadiusView.backgroundColor = .hex("FFFFFF")
orderRadiusView.layer.cornerRadius = auto(6)
scrollContentView.addSubview(orderRadiusView)
materialRadiusView.backgroundColor = .hex("FFFFFF")
materialRadiusView.layer.cornerRadius = auto(6)
scrollContentView.addSubview(materialRadiusView)
settingsRadiusView.backgroundColor = .hex("FFFFFF")
settingsRadiusView.layer.cornerRadius = auto(6)
scrollContentView.addSubview(settingsRadiusView)
gongdanduizhang.addGestureRecognizer(gongdanduizhangGes)
orderRadiusView.addSubview(gongdanduizhang)
kaipiaotongzhi.line.isHidden = true
kaipiaotongzhi.addGestureRecognizer(kaipiaotongzhiGes)
orderRadiusView.addSubview(kaipiaotongzhi)
peixunwendang.addGestureRecognizer(peixunwendangGes)
materialRadiusView.addSubview(peixunwendang)
wendangziliao.line.isHidden = true
wendangziliao.addGestureRecognizer(wendangziliaoGes)
materialRadiusView.addSubview(wendangziliao)
banbenjiance.addGestureRecognizer(banbenjianceGes)
settingsRadiusView.addSubview(banbenjiance)
tongzhitixing.line.isHidden = true
settingsRadiusView.addSubview(tongzhitixing)
tongzhitixing.addGestureRecognizer(tongzhitixingGes)
logoutButton.backgroundColor = .hex("545D78").alpha(0.25)
logoutButton.layer.cornerRadius = auto(17.5)
logoutButton.setTitle("退出登录", for: .normal)
logoutButton.setTitleColor(.white, for: .normal)
logoutButton.titleLabel?.font = .mediumFont(auto(13))
scrollContentView.addSubview(logoutButton)
scrollView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
scrollContentView.snp.makeConstraints { make in
make.edges.equalToSuperview()
make.width.equalToSuperview()
}
topBackgroundImageView.snp.makeConstraints { make in
make.left.top.right.equalToSuperview()
make.height.equalTo(auto(115))
}
avatar.snp.makeConstraints { make in
make.top.equalTo(auto(10))
make.left.equalTo(auto(25))
make.width.height.equalTo(auto(54))
}
accountLabel.snp.makeConstraints { make in
make.centerY.equalTo(avatar).offset(-auto(10))
make.left.equalTo(avatar.snp.right).offset(auto(15))
}
companyLabel.snp.makeConstraints { make in
make.left.equalTo(avatar.snp.right).offset(auto(15))
make.centerY.equalTo(avatar).offset(auto(10))
}
infoRadiusView.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.top.equalTo(topBackgroundImageView.snp.bottom).offset(-auto(37.5))
make.height.equalTo(auto(73))
make.width.equalTo(auto(350))
}
carInfoView.snp.makeConstraints { make in
make.left.top.bottom.equalToSuperview()
make.width.equalToSuperview().multipliedBy(0.5)
}
driverInfoView.snp.makeConstraints { make in
make.right.top.bottom.equalToSuperview()
make.width.equalToSuperview().multipliedBy(0.5)
}
infoRadiusSeparate.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.centerY.equalToSuperview()
}
orderRadiusView.snp.makeConstraints { make in
make.top.equalTo(infoRadiusView.snp.bottom).offset(auto(10))
make.width.equalTo(infoRadiusView)
make.centerX.equalToSuperview()
make.height.equalTo(auto(110))
}
materialRadiusView.snp.makeConstraints { make in
make.top.equalTo(orderRadiusView.snp.bottom).offset(auto(10))
make.width.equalTo(infoRadiusView)
make.centerX.equalToSuperview()
make.height.equalTo(auto(110))
}
settingsRadiusView.snp.makeConstraints { make in
make.top.equalTo(materialRadiusView.snp.bottom).offset(auto(10))
make.width.equalTo(infoRadiusView)
make.centerX.equalToSuperview()
make.height.equalTo(auto(110))
}
gongdanduizhang.snp.makeConstraints { make in
make.left.right.top.equalToSuperview()
make.height.equalTo(auto(55))
}
kaipiaotongzhi.snp.makeConstraints { make in
make.top.equalTo(gongdanduizhang.snp.bottom)
make.left.bottom.right.equalToSuperview()
}
peixunwendang.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.height.equalTo(auto(55))
}
wendangziliao.snp.makeConstraints { make in
make.top.equalTo(peixunwendang.snp.bottom)
make.left.bottom.right.equalToSuperview()
}
banbenjiance.snp.makeConstraints { make in
make.left.top.right.equalToSuperview()
make.height.equalTo(auto(55))
}
tongzhitixing.snp.makeConstraints { make in
make.top.equalTo(banbenjiance.snp.bottom)
make.left.bottom.right.equalToSuperview()
}
logoutButton.snp.makeConstraints { make in
make.top.equalTo(settingsRadiusView.snp.bottom).offset(auto(20))
make.bottom.equalToSuperview().offset(-auto(20))
make.centerX.equalToSuperview()
make.width.equalTo(auto(110))
make.height.equalTo(auto(35))
}
}
public required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
open class MineCell : DDView {
public let titleLabel : DDLabel
public let arrow : DDImageView
public let line : DDView
override init(frame: CGRect) {
titleLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(14)), textColor: .hex("323643"))
arrow = DDImageView(image: UIImage(named: "mine_info_arrow"))
line = DDView()
super.init(frame: frame)
addSubview(titleLabel)
addSubview(arrow)
line.backgroundColor = .hex("E9E9EA")
addSubview(line)
titleLabel.snp.makeConstraints { make in
make.left.equalTo(auto(20))
make.centerY.equalToSuperview()
}
arrow.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.right.equalTo(-auto(20))
}
line.snp.makeConstraints { make in
make.bottom.equalToSuperview()
make.left.equalTo(titleLabel)
make.right.equalTo(arrow)
make.height.equalTo(1)
}
}
public required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
public class MineInfoView : DDView {
public let imageView : DDImageView
public let titleLabel : DDLabel
public let descLabel : DDLabel
public let arrow : DDImageView
public override init(frame: CGRect) {
imageView = DDImageView()
titleLabel = DDLabel.dd_init(withText: "", font: .mediumFont(auto(14)), textColor: .hex("203152"))
descLabel = DDLabel.dd_init(withText: "", font: .regularFont(auto(12)), textColor: .hex("000000").alpha(0.55))
arrow = DDImageView(image: UIImage(named: "mine_info_arrow"))
super.init(frame: frame)
addSubview(imageView)
addSubview(titleLabel)
addSubview(descLabel)
addSubview(arrow)
imageView.snp.makeConstraints { make in
make.left.top.equalTo(auto(20))
}
titleLabel.snp.makeConstraints { make in
make.left.equalTo(imageView.snp.right).offset(auto(10))
make.top.equalTo(imageView.snp.top).offset(auto(5))
}
descLabel.snp.makeConstraints { make in
make.left.equalTo(titleLabel)
make.top.equalTo(titleLabel.snp.bottom).offset(auto(5))
}
arrow.snp.makeConstraints { make in
make.right.equalTo(-auto(20))
make.centerY.equalTo(titleLabel)
}
}
public required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}