| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | enum TreeTeskDetailType:Int{ |
| | | case all = 1 |
| | | case increase = 2 |
| | | case decreate = 3 |
| | | } |
| | | |
| | | enum EnergyChangeType:Int,HandyJSONEnum{ |
| | | case increase = 1 |
| | | case decreate = 2 |
| | | } |
| | |
| | | var status:ConditionType = .no //是否枯萎 |
| | | } |
| | | |
| | | //struct EnergyModel:HandyJSON{ |
| | | // var energyTotal:Int = 0 |
| | | // var list = [EnergyListModel]() |
| | | //} |
| | | |
| | | struct EnergyListModel:HandyJSON{ |
| | | var appUserId: Int = 0 |
| | | var changeType: EnergyChangeType = .decreate |
| | | var createTime:String = "" |
| | | var energyValue: Int = 0 |
| | | var id: Int = 0 |
| | | var reason: String = "" |
| | | } |
| | | |
| | | struct WateringModel:HandyJSON{ |
| | | var growthValue = 0 |
| | | var nextLevel = 0 |
| | |
| | | var status = 0 //是否枯萎 1是2否(暂时不用) |
| | | } |
| | | |
| | | struct EnergyExchangeGiftModel:HandyJSON{ |
| | | var coverUrl: String = "" |
| | | var createBy: String = "" |
| | | var createTime: String = "" |
| | | var delFlag: Int = 0 |
| | | var energyValue: Int = 0 |
| | | var id: Int = 0 |
| | | var name: String = "" |
| | | var receiveStatus:ConditionType = .no |
| | | var redemptionTime: String = "" |
| | | var sortNum: Int = 0 |
| | | var status: Int = 0 |
| | | var updateBy: String = "" |
| | | var updateTime: String = "" |
| | | var worth: Int = 0 |
| | | } |
| | | |
| | | struct EnergyExchangeRecordModel:HandyJSON{ |
| | | var coverUrl: String = "" |
| | | var energyValue: Int = 0 |
| | | var id: Int = 0 |
| | | var name: String = "" |
| | | var status:ConditionType = .no |
| | | var worth: Int = 0 |
| | | var code:String = "" |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | |
| | | var list: [T] = [] |
| | | var pages:Int = 0 |
| | | var total:Int = 0 |
| | | |
| | | var energyTotal:Int? |
| | | } |
| | | |
| | | struct BaseData<T: HandyJSON>: HandyJSON { |
| | |
| | | .append(key: "apipost_id", value: "2e763463799130") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 树苗签到 |
| | | class func treeTaskSign()->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/user/client/app-user-tree/sign") |
| | | .append(key: "apipost_id", value: "2e76346379912f") |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | /// 树苗签到 |
| | | class func energyList(page:Int,pageSize:Int = 20,type:TreeTeskDetailType)->Observable<BaseResponse<[EnergyListModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/user/client/app-user-tree/energyDetail") |
| | | .append(key: "pageCurr", value: page) |
| | | .append(key: "pageSize", value: pageSize) |
| | | .append(key: "state", value: type.rawValue) |
| | | .append(key: "apipost_id", value: "2e763462b99129") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | ///兑换礼物列表 |
| | | class func energyExchangeGift(page:Int,pageSize:Int = 20)->Observable<BaseResponse<[EnergyExchangeGiftModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/user/client/app-user-tree/goodsList") |
| | | .append(key: "pageCurr", value: page) |
| | | .append(key: "pageSize", value: pageSize) |
| | | .append(key: "apipost_id", value: "2e76346379912d") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 能量值 |
| | | class func getTotalEnergy()->Observable<BaseResponse<Int>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/user/client/app-user/getTotalEnergyValue") |
| | | .append(key: "apipost_id", value: "2fc350e9799581") |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | |
| | | /// 兑换礼物 |
| | | class func exchangeGift(prizeId:Int)->Observable<BaseResponse<SimpleModel>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/user/client/app-user-tree/exchange") |
| | | .append(key: "apipost_id", value: "2e76346339912a") |
| | | .append(key: "prizeId", value: prizeId) |
| | | return NetworkRequest.request(params: params, method: .post, progress: true) |
| | | } |
| | | |
| | | |
| | | ///兑换记录 |
| | | class func exchangeRecordList(page:Int,pageSize:Int = 20)->Observable<BaseResponse<[EnergyExchangeRecordModel]>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | params.interface(url: "/user/client/app-user-tree/exchangeRecordList") |
| | | .append(key: "apipost_id", value: "2e76346339912b") |
| | | .append(key: "pageCurr", value: page) |
| | | .append(key: "pageSize", value: pageSize) |
| | | return NetworkRequest.request(params: params, method: .post, progress: false) |
| | | } |
| | | } |
| | | |
| | | extension Services{ |
| | |
| | | return NetworkRequest.request(params: params, method: .get, progress: false) |
| | | } |
| | | |
| | | /// 获取客服二维码 |
| | | class func getCustomerCode()->Observable<BaseResponse<String>>{ |
| | | let params = ParamsAppender.build(url: All_Url) |
| | | .interface(url: "/system/system/common-question/getQrCode") |
| | | .append(key: "apipost_id", value: "2fcbf1daf99704") |
| | | return NetworkRequest.request(params: params, method: .get, progress: false) |
| | | } |
| | | |
| | | } |
| | |
| | | |
| | | class TreeTeskDetailListTCell: UITableViewCell { |
| | | |
| | | @IBOutlet weak var label_title: UILabel! |
| | | @IBOutlet weak var label_datetime: UILabel! |
| | | @IBOutlet weak var label_price: UILabel! |
| | | |
| | | override func awakeFromNib() { |
| | | super.awakeFromNib() |
| | | selectionStyle = .none |
| | | } |
| | | |
| | | func setEnergyListModel(_ model:EnergyListModel){ |
| | | label_title.text = model.reason |
| | | label_datetime.text = model.createTime |
| | | |
| | | switch model.changeType { |
| | | case .increase: |
| | | label_price.text = "+\(model.energyValue)" |
| | | label_price.textColor = UIColor(hexString: "#FE3211") |
| | | case .decreate: |
| | | label_price.text = "-\(model.energyValue)" |
| | | label_price.textColor = .black |
| | | } |
| | | } |
| | | } |
| | |
| | | <constraint firstAttribute="bottom" secondItem="d4H-i8-xi4" secondAttribute="bottom" id="x9k-J8-fj9"/> |
| | | </constraints> |
| | | </tableViewCellContentView> |
| | | <connections> |
| | | <outlet property="label_datetime" destination="gtf-gz-3zb" id="INu-AI-hlT"/> |
| | | <outlet property="label_price" destination="Glz-Zy-F1n" id="qUm-3q-2j7"/> |
| | | <outlet property="label_title" destination="jNm-iE-MEv" id="5qB-QV-bxa"/> |
| | | </connections> |
| | | <point key="canvasLocation" x="197.70992366412213" y="36.971830985915496"/> |
| | | </tableViewCell> |
| | | </objects> |
| | |
| | | @IBOutlet weak var view_info: UIView! |
| | | @IBOutlet weak var view_code: UIView! |
| | | @IBOutlet weak var view_state: UIView! |
| | | @IBOutlet weak var label_state: UILabel! |
| | | @IBOutlet weak var image_cover: UIImageView! |
| | | @IBOutlet weak var label_title: UILabel! |
| | | @IBOutlet weak var label_price: UILabel! |
| | | @IBOutlet weak var label_energy: UILabel! |
| | | @IBOutlet weak var label_code: UILabel! |
| | | |
| | | |
| | | override func awakeFromNib() { |
| | | super.awakeFromNib() |
| | | selectionStyle = .none |
| | | } |
| | | |
| | | |
| | | func setEnergyExchangeRecordModel(_ model:EnergyExchangeRecordModel){ |
| | | label_title.text = model.name |
| | | image_cover.sd_setImage(with: URL(string: model.coverUrl)) |
| | | label_price.text = "奖品价值:¥\(model.worth)" |
| | | label_energy.text = "所需能量值:\(model.energyValue)" |
| | | label_state.text = model.status == .yes ? "已领取":"待领取" |
| | | view_state.backgroundColor = model.status == .yes ? UIColor(hexString: "#B1CA99")! : UIColor(hexString: "#D0D0D0")! |
| | | |
| | | view_code.isHidden = model.code.isEmpty || model.status == .yes |
| | | label_code.text = "领取验证码:\(model.code)" |
| | | } |
| | | |
| | | override func layoutSubviews() { |
| | | super.layoutSubviews() |
| | | view_container.jq_addShadows(shadowColor: UIColor(hexString: "#EBEBEB")!, corner: 10, radius: 4, offset: CGSize(width: 0, height: 2), opacity: 1) |
| | |
| | | </constraints> |
| | | </tableViewCellContentView> |
| | | <connections> |
| | | <outlet property="image_cover" destination="owe-zF-I6L" id="hPs-4G-fan"/> |
| | | <outlet property="label_code" destination="emz-hg-MQM" id="mvX-qM-tHn"/> |
| | | <outlet property="label_energy" destination="BQ5-Kp-B8d" id="yYD-j5-INt"/> |
| | | <outlet property="label_price" destination="XYi-0C-yik" id="AJq-O5-OCM"/> |
| | | <outlet property="label_state" destination="mbs-Qr-YmI" id="oBD-po-qjK"/> |
| | | <outlet property="label_title" destination="WtU-Jl-cYE" id="dqh-E6-eUR"/> |
| | | <outlet property="view_code" destination="DZM-ob-eeu" id="b1H-JY-pFF"/> |
| | | <outlet property="view_container" destination="Kvf-jK-fIA" id="KWA-qV-HeU"/> |
| | | <outlet property="view_info" destination="qLn-vi-HZe" id="n3M-yH-GAU"/> |
| | |
| | | |
| | | class TreeTeskEnergyTCell: UITableViewCell { |
| | | |
| | | @IBOutlet weak var image_cover: UIImageView! |
| | | @IBOutlet weak var label_title: UILabel! |
| | | @IBOutlet weak var label_price: UILabel! |
| | | @IBOutlet weak var label_energy: UILabel! |
| | | @IBOutlet weak var view_container: UIView! |
| | | @IBOutlet weak var image_exchanged: UIImageView! |
| | | |
| | | override func awakeFromNib() { |
| | | super.awakeFromNib() |
| | |
| | | view_container.jq_addShadows(shadowColor: UIColor(hexString: "#EBEBEB")!, corner: 10, radius: 4, offset: CGSize(width: 0, height: 2), opacity: 1) |
| | | } |
| | | |
| | | func isExchanged(_ state:Bool){ |
| | | view_container.alpha = state == true ? 0.5:1 |
| | | func setEnergyExchangeGiftModel(_ model:EnergyExchangeGiftModel){ |
| | | image_exchanged.isHidden = model.receiveStatus == .no |
| | | view_container.alpha = model.receiveStatus == .yes ? 0.5:1 |
| | | image_cover.sd_setImage(with: URL(string: model.coverUrl)) |
| | | label_title.text = model.name |
| | | label_price.text = "奖品价值:¥\(model.worth)" |
| | | label_energy.text = "所需能量值:\(model.energyValue)" |
| | | } |
| | | } |
| | |
| | | </constraints> |
| | | </tableViewCellContentView> |
| | | <connections> |
| | | <outlet property="image_cover" destination="e5F-Yd-WS5" id="p4p-8c-hKf"/> |
| | | <outlet property="image_exchanged" destination="8Vp-5D-KCR" id="Wxw-MX-WJW"/> |
| | | <outlet property="label_energy" destination="zFc-Mw-j6J" id="smQ-Ow-T1I"/> |
| | | <outlet property="label_price" destination="Ur6-cY-xSA" id="546-cW-opS"/> |
| | | <outlet property="label_title" destination="ngg-7A-Acy" id="I5C-yP-maQ"/> |
| | | <outlet property="view_container" destination="woz-r3-sT7" id="Jjw-os-T4t"/> |
| | | </connections> |
| | | <point key="canvasLocation" x="258.77862595419845" y="57.394366197183103"/> |
| | |
| | | |
| | | Services.treeInfo().subscribe(onNext: {data in |
| | | if let m = data.data{ |
| | | try? self.cacheTreeInfoModel.save(m) |
| | | self.taskListView.setTreeInfoModel(m) |
| | | |
| | | //检查hash,进行同步 |
| | | if m.toJSON()?.jq_hash() != self.treeInfoModel?.toJSON()?.jq_hash(){ |
| | | self.treeInfoModel = m |
| | | self.updateTreeInfo() |
| | | } |
| | | |
| | | try? self.cacheTreeInfoModel.save(m) |
| | | } |
| | | }).disposed(by: disposeBag) |
| | | } |
| | |
| | | |
| | | if treeInfoModel == nil {return} |
| | | |
| | | // guard m.currentEnergyValue != 0 else{ |
| | | // alert(msg: "已经没有能量值了,快去做任务吧");return |
| | | // } |
| | | guard treeInfoModel!.currentEnergyValue != 0 else{ |
| | | alert(msg: "已经没有能量值了,快去做任务吧");return |
| | | } |
| | | |
| | | Services.watering().subscribe(onNext: {data in |
| | | if let m = data.data{ |
| | | if m.isNext{ |
| | | var type = self.treeInfoModel?.treeLevelType ?? .level_1 |
| | | let type = self.treeInfoModel?.treeLevelType ?? .level_1 |
| | | self.treeInfoModel!.treeLevelType = TreeLevel(rawValue: type.rawValue + 1) ?? .level_1 |
| | | |
| | | let h = (JQ_ScreenW - 90) * 0.7729 |
| | |
| | | make.height.equalTo(731 * scale) |
| | | } |
| | | |
| | | UIView.animate(withDuration: 1.5) { |
| | | UIView.animate(withDuration: 0.6) { |
| | | self.aPNGTreeImageView?.alpha = 0 |
| | | |
| | | }completion: { state in |
| | | if state{ |
| | | self.aPNGTreeImageView!.image = treeApngImage |
| | | UIView.animate(withDuration: 1.5, delay: 0.2) { |
| | | UIView.animate(withDuration: 0.5, delay: 0.2) { |
| | | self.aPNGTreeImageView?.alpha = 1 |
| | | }completion: { _ in |
| | | self.aPNGTreeImageView!.startAnimating() |
| | |
| | | // |
| | | |
| | | import UIKit |
| | | import RxRelay |
| | | import RxSwift |
| | | import JQTools |
| | | |
| | | enum TreeTeskDetailType{ |
| | | case all |
| | | case increase |
| | | case decreate |
| | | class TreeTaskDetailListViewModel:RefreshModel<EnergyListModel>{ |
| | | var type = BehaviorRelay<TreeTeskDetailType>(value: .all) |
| | | override func api() -> (Observable<BaseResponse<[EnergyListModel]>>)? { |
| | | return Services.energyList(page: page, type: type.value) |
| | | } |
| | | } |
| | | |
| | | class TreeTeskDetailListVC: BaseVC { |
| | | |
| | | var energyValue:BehaviorRelay<Int>! |
| | | private var tableView:UITableView! |
| | | private var type:TreeTeskDetailType! |
| | | private var viewModel = TreeTaskDetailListViewModel() |
| | | |
| | | init(type:TreeTeskDetailType) { |
| | | super.init(nibName: nil, bundle: nil) |
| | | self.type = type |
| | | self.viewModel.type.accept(type) |
| | | } |
| | | |
| | | required init?(coder: NSCoder) { |
| | |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | |
| | | } |
| | | |
| | | override func setUI() { |
| | |
| | | tableView.snp.makeConstraints { make in |
| | | make.edges.equalToSuperview() |
| | | } |
| | | |
| | | viewModel.configure(tableView) |
| | | viewModel.beginRefresh() |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | extension TreeTeskDetailListVC:UITableViewDataSource{ |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let m = viewModel.dataSource.value[indexPath.row] |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_TreeTeskDetailListTCell") as! TreeTeskDetailListTCell |
| | | cell.setEnergyListModel(m) |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return 11 |
| | | return viewModel.dataSource.value.count |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { |
| | |
| | | import UIKit |
| | | import SPPageMenu |
| | | import FFPage |
| | | import RxRelay |
| | | |
| | | class TreeTeskDetailVC: BaseVC { |
| | | @IBOutlet weak var view_top: UIView! |
| | | @IBOutlet weak var label_energy: UILabel! |
| | | |
| | | private(set) var pageMenu:SPPageMenu = { |
| | | let pageMenu = SPPageMenu(frame: .zero, trackerStyle: .line) |
| | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "能量值明细" |
| | | |
| | | Services.getTotalEnergy().subscribe(onNext: {[weak self] data in |
| | | self?.label_energy.text = "\(data.data ?? 0)" |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | override func setUI() { |
| | |
| | | make.top.equalTo(pageMenu.snp.bottom) |
| | | make.left.right.bottom.equalToSuperview() |
| | | } |
| | | } |
| | | |
| | | override func setRx() { |
| | | |
| | | } |
| | | } |
| | | |
| | |
| | | case 2:type = .decreate |
| | | default:type = .all |
| | | } |
| | | return TreeTeskDetailListVC(type: type) |
| | | let vc = TreeTeskDetailListVC(type: type) |
| | | return vc |
| | | } |
| | | } |
| | |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="TreeTeskDetailVC" customModule="XQMuse" customModuleProvider="target"> |
| | | <connections> |
| | | <outlet property="label_energy" destination="Y0k-tw-jfz" id="I5a-Qb-9KE"/> |
| | | <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> |
| | | <outlet property="view_top" destination="tXu-Ek-y6F" id="ggw-B8-TLR"/> |
| | | </connections> |
| | |
| | | // |
| | | |
| | | import UIKit |
| | | import RxSwift |
| | | |
| | | class TreeTeskRecordViewModel:RefreshModel<EnergyExchangeRecordModel>{ |
| | | override func api() -> (Observable<BaseResponse<[EnergyExchangeRecordModel]>>)? { |
| | | return Services.exchangeRecordList(page: page) |
| | | } |
| | | } |
| | | |
| | | class TreeTeskEnergyExchangeRecordVC: BaseVC { |
| | | |
| | | private var tableView:UITableView! |
| | | private var viewModel = TreeTeskRecordViewModel() |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "兑换记录" |
| | | |
| | | viewModel.configure(tableView) |
| | | viewModel.beginRefresh() |
| | | } |
| | | |
| | | override func setUI() { |
| | |
| | | |
| | | extension TreeTeskEnergyExchangeRecordVC:UITableViewDataSource{ |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let m = viewModel.dataSource.value[indexPath.row] |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_TreeTeskEnergyExchangeRecordTCell") as! TreeTeskEnergyExchangeRecordTCell |
| | | cell.setEnergyExchangeRecordModel(m) |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return 3 |
| | | return viewModel.dataSource.value.count |
| | | } |
| | | } |
| | |
| | | |
| | | import UIKit |
| | | import JQTools |
| | | import RxSwift |
| | | import RxCocoa |
| | | import RxRelay |
| | | |
| | | class TreeTeskExchangeViewModel:RefreshModel<EnergyExchangeGiftModel>{ |
| | | var energyValue = BehaviorRelay<Int>(value:0) |
| | | |
| | | override func api() -> (Observable<BaseResponse<[EnergyExchangeGiftModel]>>)? { |
| | | return Services.energyExchangeGift(page: page) |
| | | } |
| | | } |
| | | |
| | | class TreeTeskEnergyExchangeVC: BaseVC { |
| | | |
| | | @IBOutlet weak var tableView: UITableView! |
| | | @IBOutlet weak var label_energy: UILabel! |
| | | @IBOutlet weak var image_qrCode: UIImageView! |
| | | |
| | | var viewModel = TreeTeskExchangeViewModel() |
| | | |
| | | override func viewDidLoad() { |
| | | super.viewDidLoad() |
| | | title = "礼品兑换" |
| | | viewModel.configure(tableView) |
| | | viewModel.beginRefresh() |
| | | |
| | | Services.getTotalEnergy().subscribe(onNext: {[weak self] data in |
| | | self?.viewModel.energyValue.accept(data.data ?? 0) |
| | | self?.label_energy.text = "\(data.data ?? 0)" |
| | | }).disposed(by: disposeBag) |
| | | |
| | | Services.getCustomerCode().subscribe(onNext: {[weak self] data in |
| | | self?.image_qrCode.sd_setImage(with: URL(string: data.data ?? "")) |
| | | }).disposed(by: disposeBag) |
| | | } |
| | | |
| | | override func setUI() { |
| | |
| | | |
| | | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| | | |
| | | let attribute = AttributedStringbuilder.build().add(string: "是否确认使用X能量值兑换当前礼品?\n兑换后系统将自动扣除能量值", withFont: .systemFont(ofSize: 14, weight: .medium), withColor: .black.withAlphaComponent(0.59), indent: 0, lineSpace: 6).mutableAttributedString |
| | | let m = viewModel.dataSource.value[indexPath.row] |
| | | |
| | | CommonAlertView.show(title: "提示", attribute: attribute, isSingle: false, cancelStr: "再想想", completeStr: "确认") { state in |
| | | guard m.receiveStatus == .no else { |
| | | CommonAlertView.show(title: "提示", content: "你已经兑换过了", isSingle: true) { _ in |
| | | |
| | | if state{ |
| | | TreeTeskExchangeSuccessView.show() |
| | | } |
| | | return |
| | | } |
| | | |
| | | guard viewModel.energyValue.value > m.energyValue else { |
| | | CommonAlertView.show(title: "提示", content: "兑换能量值不足", isSingle: true) { _ in |
| | | |
| | | } |
| | | return |
| | | } |
| | | |
| | | let attribute = AttributedStringbuilder.build().add(string: "是否确认使用\(m.energyValue)能量值兑换当前礼品?\n兑换后系统将自动扣除能量值", withFont: .systemFont(ofSize: 14, weight: .medium), withColor: .black.withAlphaComponent(0.59), indent: 0, lineSpace: 6).mutableAttributedString |
| | | |
| | | CommonAlertView.show(title: "提示", attribute: attribute, isSingle: false, cancelStr: "再想想", completeStr: "确认") { state in |
| | | if state{ |
| | | Services.exchangeGift(prizeId: m.id).subscribe(onNext: {data in |
| | | TreeTeskExchangeSuccessView.show() |
| | | }).disposed(by: self.disposeBag) |
| | | } |
| | | } |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { |
| | | let m = viewModel.dataSource.value[indexPath.row] |
| | | let cell = tableView.dequeueReusableCell(withIdentifier: "_TreeTeskEnergyTCell") as! TreeTeskEnergyTCell |
| | | cell.isExchanged(indexPath.row == 0) |
| | | cell.setEnergyExchangeGiftModel(m) |
| | | return cell |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { |
| | | return 11 |
| | | return viewModel.dataSource.value.count |
| | | } |
| | | |
| | | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { |
| | |
| | | <objects> |
| | | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="TreeTeskEnergyExchangeVC" customModule="XQMuse" customModuleProvider="target"> |
| | | <connections> |
| | | <outlet property="image_qrCode" destination="9aI-7D-eFc" id="DWI-j2-Hxg"/> |
| | | <outlet property="label_energy" destination="Bdm-PA-8sh" id="wqz-0G-KjH"/> |
| | | <outlet property="tableView" destination="JKR-h6-LMB" id="zkA-3O-scS"/> |
| | | <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> |
| | | </connections> |
| | |
| | | class TreeTeskListView: UIView,JQNibView{ |
| | | |
| | | @IBOutlet weak var view_sign: UIView! |
| | | @IBOutlet weak var view_sign_cricle: UIView! |
| | | @IBOutlet weak var label_sign: UILabel! |
| | | @IBOutlet weak var tap_sign: TapBtn! |
| | | |
| | | private var clouse:((TreeTeskListSwipe)->Void)? |
| | | private var disposeBag = DisposeBag() |
| | | |
| | | |
| | | private var treeInfoModel:TreeInfoModel? |
| | | |
| | | override func awakeFromNib() { |
| | | super.awakeFromNib() |
| | |
| | | self.clouse = clouse |
| | | } |
| | | |
| | | @IBAction func signAction(_ sender: TapBtn) { |
| | | |
| | | func setTreeInfoModel(_ model:TreeInfoModel){ |
| | | self.treeInfoModel = model |
| | | |
| | | if model.isSign == .yes{ |
| | | tap_sign.isUserInteractionEnabled = false |
| | | label_sign.text = "已签到" |
| | | view_sign.backgroundColor = .gray.withAlphaComponent(0.2) |
| | | label_sign.textColor = .white |
| | | view_sign_cricle.jq_borderColor = .gray.withAlphaComponent(0.2) |
| | | }else{ |
| | | tap_sign.isUserInteractionEnabled = true |
| | | label_sign.text = "打卡签到" |
| | | view_sign.backgroundColor = .white |
| | | label_sign.textColor = UIColor(hexString: "#4E4E4E") |
| | | } |
| | | } |
| | | |
| | | @IBAction func signAction(_ sender: TapBtn) { |
| | | |
| | | tap_sign.isUserInteractionEnabled = false |
| | | label_sign.text = "已签到" |
| | | view_sign.backgroundColor = .gray.withAlphaComponent(0.1) |
| | | label_sign.textColor = .white |
| | | view_sign_cricle.jq_borderColor = .gray.withAlphaComponent(0.9) |
| | | |
| | | let imageView = UIImageView(image: UIImage(named: "icon_signSuccess")) |
| | | imageView.transform = .init(scaleX: 0.1, y: 0.1) |
| | |
| | | <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/> |
| | | <connections> |
| | | <outlet property="label_sign" destination="Vzb-As-8Sv" id="jv7-Zj-Xma"/> |
| | | <outlet property="tap_sign" destination="QeN-rl-gb6" id="eP4-E2-KLg"/> |
| | | <outlet property="view_sign" destination="bLC-YH-CzV" id="wAt-7y-Hql"/> |
| | | <outlet property="view_sign_cricle" destination="vuQ-La-6pi" id="jIF-NF-3jH"/> |
| | | </connections> |
| | | <point key="canvasLocation" x="64.885496183206101" y="154.22535211267606"/> |
| | | </view> |