宽窄优行-由【嘉易行】项目成品而来
younger_times
2023-07-05 0d8f5fc8a516bfd07e425909e4a4432600572ee7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
//
//  InvoiceMoreViewController.swift
//  OKProject
//
//  Created by 无故事王国 on 2022/5/30.
//  Copyright © 2022 yangwang. All rights reserved.
//
 
import UIKit
 
class InvoiceMoreViewController: YYViewController {
    @IBOutlet weak var containerVIew: UIView!
    @IBOutlet weak var leftCons: NSLayoutConstraint!
    @IBOutlet weak var startTimeField: UITextField!
    @IBOutlet weak var endTimeField: UITextField!
    @IBOutlet weak var minimumField: UITextField!
    @IBOutlet weak var maxmumField: UITextField!
    @IBOutlet weak var orderTypeCollectionView: UICollectionView!
    private var selectIndex = -1
    private var items = ["快车/专车","出租车","跨城出行","景区直通车","机场专线","公务用车"]
    var viewMoel:InvoiceOrderViewModel?
    var completeClouse:(()->Void)?
    var minDate:Date?
    var maxDate:Date?
 
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        leftCons.constant = ScreenWidth
        view.layoutIfNeeded()
    }
 
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
 
        selectIndex = (viewMoel?.orderType.value?.rawValue ?? 0) - 1
        startTimeField.text = viewMoel?.startTime.value
        endTimeField.text = viewMoel?.endTime.value
 
        if let startMoney = viewMoel?.startMoney.value,startMoney > 0{
            minimumField.text = startMoney.string()
        }
 
        if let endMoney = viewMoel?.endMoney.value,endMoney > 0{
            maxmumField.text = endMoney.string()
        }
 
        UIView.animate(withDuration: 0.3, delay: 0, options: .layoutSubviews) {
            self.leftCons.constant = ScreenWidth - 294
            self.view.layoutIfNeeded()
        } completion: { _ in
            self.orderTypeCollectionView.reloadData()
        }
    }
 
    override func viewDidLoad() {
        super.viewDidLoad()
 
        startTimeField.delegate = self
        endTimeField.delegate = self
        orderTypeCollectionView.delegate = self
        orderTypeCollectionView.dataSource = self
        orderTypeCollectionView.register(UINib(nibName: "Common_SingleText_CCell", bundle: nil), forCellWithReuseIdentifier: "_Common_SingleText_CCell")
        view.backgroundColor = .black.withAlphaComponent(0.5)
        view.alpha = 0
        UIView.animate(withDuration: 0.4) {
            self.view.alpha = 1.0
            self.view.layoutIfNeeded()
        }
    }
 
    override func bindRx() {
        minimumField.rx.text.orEmpty.subscribe(onNext: {[weak self] text in
            if text.wy_toDouble() > 0{
                self?.viewMoel?.startMoney.accept(text.wy_toDouble())
            }
        }).disposed(by: disposeBag)
 
        maxmumField.rx.text.orEmpty.subscribe(onNext: {[weak self] text in
            if text.wy_toDouble() > 0{
                self?.viewMoel?.endMoney.accept(text.wy_toDouble())
            }
 
        }).disposed(by: disposeBag)
    }
 
    @IBAction func resetAction(_ sender: UIButton) {
        startTimeField.text = ""
        endTimeField.text = ""
        minimumField.text = ""
        maxmumField.text = ""
        selectIndex = -1
        orderTypeCollectionView.reloadData()
 
        viewMoel?.orderType.accept(nil)
        viewMoel?.startTime.accept(nil)
        viewMoel?.endTime.accept(nil)
        viewMoel?.startMoney.accept(nil)
        viewMoel?.endMoney.accept(nil)
 
    }
 
    @IBAction func completeAction(_ sender: UIButton) {
 
        if startTimeField.isEmpty && !endTimeField.isEmpty{
            alert(text: "请选择起始时间");return
        }
 
        if !startTimeField.isEmpty && endTimeField.isEmpty{
            alert(text: "请选择终止时间");return
        }
 
        if minimumField.isEmpty && !maxmumField.isEmpty{
            alert(text: "请输入最低价");return
        }
 
        if !minimumField.isEmpty && maxmumField.isEmpty{
            alert(text: "请输入最高价");return
        }
 
 
        completeClouse?()
        UIView.animate(withDuration: 0.4, delay: 0, options: .layoutSubviews) {
            self.view.alpha = 0
            self.leftCons.constant = ScreenWidth
            self.view.layoutIfNeeded()
        } completion: { _ in
            self.removeFromParent()
        }
    }
 
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        guard let touchPoint = touches.first?.location(in: self.view) else { return }
        let rect = CGRect(x: 0, y: 0, width: 80, height: ScreenHeight)
        if rect.contains(touchPoint){
            UIView.animate(withDuration: 0.4, delay: 0, options: .layoutSubviews) {
                self.view.alpha = 0
                self.leftCons.constant = ScreenWidth
                self.view.layoutIfNeeded()
            } completion: { _ in
                self.removeFromParent()
            }
        }
    }
}
 
extension InvoiceMoreViewController:UICollectionViewDelegate{
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        selectIndex = indexPath.row
        collectionView.reloadData()
 
        var orderType:OrderType = .special
        switch indexPath.row{
            case 0:orderType = .special
            case 1:orderType = .taxi
            case 2:orderType = .travel
            case 3:orderType = .scenic
            case 4:orderType = .plane
            case 5:orderType = .offical
            default:break
        }
        viewMoel?.orderType.accept(orderType)
    }
}
 
extension InvoiceMoreViewController:UICollectionViewDataSource{
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return items.count
    }
 
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_Common_SingleText_CCell", for: indexPath) as! Common_SingleText_CCell
        cell.titleL.cornerRadius = 3
        cell.titleL.maskToBounds = true
        cell.titleL.text = items[indexPath.row]
        if items[indexPath.row].count >= 6{
            cell.titleL.font = UIFont.systemFont(ofSize: 12,weight: .medium)
        }else{
            cell.titleL.font = UIFont.systemFont(ofSize: 13,weight: .medium)
        }
 
        if selectIndex == indexPath.row{
            cell.titleL.textColor = .white
            cell.titleL.backgroundColor = UIColor(hexString: "#00BF30")
        }else{
            cell.titleL.textColor = UIColor(hexString: "#939393")
            cell.titleL.backgroundColor = UIColor(hexString: "#F3F4F5")
        }
 
        return cell
    }
}
 
extension InvoiceMoreViewController:UICollectionViewDelegateFlowLayout{
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 7
    }
 
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 4
    }
 
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 246 / 3, height: 30)
    }
}
 
extension InvoiceMoreViewController:UITextFieldDelegate{
    func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
 
        view.endEditing(true)
        let minDate = getDateFromTime(time: String(format: "%02ld-%02ld-%02ld", Date().year - 3,1,1))
        if startTimeField == textField{
            BRDatePickerView.showDatePicker(withTitle: "", dateType: .YMD, defaultSelValue: Date().zoneFormat("yyyy-MM-dd"), minDate:minDate, maxDate: Date(), isAutoSelect: false, themeColor: .blue) { [weak self](str) in
                self?.minDate = DateClass.dateStringToDate(str!)
                self?.maxDate = nil
                self?.endTimeField.text = ""
                self?.startTimeField.text = str
                self?.viewMoel?.endTime.accept(nil)
                self?.viewMoel?.startTime.accept(str)
            }
        }
 
        if endTimeField == textField{
            if startTimeField.text!.isEmpty{
                alert(text: "请先选择起始日期");return false
            }
 
            BRDatePickerView.showDatePicker(withTitle: "", dateType: .YMD, defaultSelValue: Date().zoneFormat("yyyy-MM-dd"), minDate:minDate, maxDate: Date(), isAutoSelect: false, themeColor: .blue) {[weak self](str) in
                guard let weakSelf = self else { return }
                weakSelf.maxDate = DateClass.dateStringToDate(str!)
                if DateClass.compareOneDay(oneDay: weakSelf.maxDate!, withAnotherDay: weakSelf.minDate!) > 1{
                    alert(text: "终止时间不能小于起始时间")
                    weakSelf.maxDate = nil
                    weakSelf.endTimeField.text = ""
                }else{
                    weakSelf.endTimeField.text = str
                    weakSelf.viewMoel?.endTime.accept(str)
                }
            }
        }
        return false
    }
}
 
extension InvoiceMoreViewController{
    func getDateFromTime(time:String) ->Date{
        let dateformatter = DateFormatter()
        //自定义日期格式
        dateformatter.dateFormat="yyyy-MM-dd"
        return dateformatter.date(from: time)!
    }
}