| | |
| | | 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 |
| | |
| | | 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() { |
| | |
| | | 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() |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | 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 { |
| | |
| | | } |
| | | |
| | | 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) |
| | |
| | | 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) |
| | |
| | | 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() |
| | | } |
| | | } |