fix
younger_times
2023-07-27 19a3cec9bbafe352d67a57ae9a1c4c601c73b6c0
WanPai/Root/Course/VC/StudentCourseDetailVC.swift
@@ -8,11 +8,32 @@
import UIKit
import JQTools
import QMUIKit
import SPPageMenu
import RxRelay
import RxSwift
class StudentCourseViewModel:RefreshModel<CourseRecordModel>{
    let stuId = BehaviorRelay<Int>(value: 0)
    let lessionId = BehaviorRelay<Int>(value: 0)
    let startTime = BehaviorRelay<Date?>(value: nil)
    let type = BehaviorRelay<Int?>(value: nil)
    override func api() -> (Observable<BaseResponse<[CourseRecordModel]>>)? {
        return Services.recordDetails(stuId: stuId.value, lessionId: lessionId.value, startTime: startTime.value?.jq_format("yyyy-MM"), type: type.value)
    }
}
class StudentCourseDetailVC: BaseVC {
    private lazy var tableView:UITableView = {
        let table = UITableView(frame: .zero, style: .plain)
    private var models = [StartClouseListModel]()
    private var studentModel:StudentSimpleProfileModel!
    private var defaultIndex = 0
    private lazy var tableView:BaseTableView = {
        let table = BaseTableView(frame: .zero, style: .plain)
        table.separatorStyle = .none
        table.delegate = self
        table.dataSource = self
@@ -23,16 +44,57 @@
        return table
    }()
    private let headView = StudentCourseDetailHeadView.jq_loadNibView()
    private var headView:StudentCourseDetailHeadView = {
        return StudentCourseDetailHeadView.jq_loadNibView()
    }()
    private let viewModel = StudentCourseViewModel()
    private lazy var sectionView:HeaderInSectionView = {
        let v = HeaderInSectionView()
        v.btn_filter.addTarget(self, action: #selector(fliterAction), for: .touchUpInside)
        v.btn_datetime.addTarget(self, action: #selector(datetimePickerAction), for: .touchUpInside)
        return v
    }()
    required init(models:[StartClouseListModel],defaultIndex:Int,studentModel:StudentSimpleProfileModel) {
        super.init(nibName: nil, bundle: nil)
        self.models = models
        self.defaultIndex = defaultIndex
        self.studentModel = studentModel
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        title = "课时详情"
        headView.renewalClouse = { [weak self] () in
            let vc = CourseDetailApplyVC(detailModel: CourseDetailModel())
            self?.push(vc: vc)
            guard let weakSelf = self else { return }
            let model = weakSelf.models[weakSelf.headView.pageMenu.selectedItemIndex]
            Services.queryCourseInfo(id: model.courseId).subscribe(onNext: {[weak self] data in
                if let m = data.data{
                    let vc = CourseDetailApplyVC(detailModel: m)
                    self?.push(vc: vc)
                }
            }).disposed(by: weakSelf.disposeBag)
        }
        viewModel.startTime.accept(Date())
        viewModel.lessionId.accept(models[defaultIndex].courseId)
        viewModel.stuId.accept(studentModel.stuId)
        headView.pageMenu.setItems(models.map({$0.courseName}), selectedItemIndex: defaultIndex)
        headView.pageMenu.delegate = self
        headView.label_stuName.text = studentModel.stuName
        headView.img_stuProfile.sd_setImage(with: URL(string: studentModel.stuImage),placeholderImage: UIImage(named: "placeholder_1"))
        viewModel.beginRefresh()
    }
    override func setUI() {
@@ -41,13 +103,36 @@
            make.edges.equalToSuperview()
        }
        tableView.tableHeaderView = headView
        headView.snp.makeConstraints { make in
            make.width.equalToSuperview()
            make.height.greaterThanOrEqualTo(0)
        }
        tableView.jq_setEmptyView()
        viewModel.configure(tableView,needMore: false)
        headView.layoutIfNeeded()
    }
    @objc func fliterAction(){
        JQ_MenuView().show(self, tapView: sectionView.btn_filter, items: ["全部","增加","扣除"],tableHei: 160) {[weak self] index, str in
            if index == 0{
                self?.sectionView.btn_filter.setTitle("全部记录", for: .normal)
                self?.viewModel.type.accept(nil)
            }else{
                self?.sectionView.btn_filter.setTitle(str, for: .normal)
                self?.viewModel.type.accept(index)
            }
            self?.viewModel.beginRefresh()
        }
    }
    @objc func datetimePickerAction(){
        CommonDatePickerView.show(before: 3, after: 0, type: .YM) { [weak self] year, month, _ in
            let date = Date.jq_format(year: year, month: month, day: 2)
            self?.sectionView.btn_datetime.setTitle(date!.jq_format("yyyy年MM月>"), for: .normal)
            self?.viewModel.startTime.accept(date)
            self?.viewModel.beginRefresh()
        }
    }
}
@@ -57,12 +142,14 @@
extension StudentCourseDetailVC:UITableViewDataSource{
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let model = viewModel.dataSource.value[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier: "_CourseChargeTCell") as! CourseChargeTCell
        cell.courseRecordModel = model
        return cell
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 50
        return viewModel.dataSource.value.count
    }
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
@@ -70,14 +157,14 @@
    }
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let v = HeaderInSectionView()
        return v
        sectionView.btn_datetime.setTitle(viewModel.startTime.value?.jq_format("yyyy年MM月>"), for: .normal)
        return sectionView
    }
}
private class HeaderInSectionView:UIView{
    private lazy var btn_datetime:QMUIButton = {
    private(set) lazy var btn_datetime:QMUIButton = {
        let btn = QMUIButton(type: .custom)
        btn.setTitle(Date().jq_format("yyyy年M月>"), for: .normal)
        btn.setTitleColor(UIColor(hexStr: "#0048FF"), for: .normal)
@@ -85,7 +172,7 @@
        return btn
    }()
    private lazy var btn_filter:QMUIButton = {
    private(set) lazy var btn_filter:QMUIButton = {
        let btn = QMUIButton(type: .custom)
        btn.setTitleColor(UIColor(hexStr: "#414141"), for: .normal)
        btn.titleLabel?.font = UIFont.systemFont(ofSize: 16)
@@ -119,24 +206,24 @@
            make.height.equalTo(22)
            make.centerY.equalTo(btn_filter)
        }
        btn_filter.addTarget(self, action: #selector(fliterAction), for: .touchUpInside)
        btn_datetime.addTarget(self, action: #selector(datetimePickerAction), for: .touchUpInside)
    }
    @objc func fliterAction(){
        JQ_MenuView().show(self, tapView: btn_filter, items: ["1","2"],tableHei: 140) { index, str in
        }
    }
    @objc func datetimePickerAction(){
        CommonDatePickerView.show { year, month, day in
        }
    }
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
extension StudentCourseDetailVC:SPPageMenuDelegate{
    func pageMenu(_ pageMenu: SPPageMenu, itemSelectedAt index: Int) {
        defaultIndex = index
        let model = models[index]
        headView.label_deductedNums.text = "\(model.deductedNums)"
        headView.label_totalNums.text = "\(model.totalNums)"
        headView.label_remainingNums.text = "\(model.remainingNums)"
        headView.label_datetime.text =  "有效期:\(model.periodOfValidity)"
        headView.label_deductedNums_1.text = "已扣课时数:\(model.deductedNums)"
        viewModel.lessionId.accept(model.courseId)
        viewModel.beginRefresh()
    }
}