Commit e36f3266ca93cb7b1c7c90b6ac1197156baf46bc
1 parent
d61a0385
交易记录
Showing
24 changed files
with
395 additions
and
51 deletions
metaCode/Classes/Extensions/NSString+CNLiveExtensions.swift
| @@ -36,10 +36,10 @@ extension NSString { | @@ -36,10 +36,10 @@ extension NSString { | ||
| 36 | return false; | 36 | return false; |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | - /// 时间戳转字符串 | 39 | + /// 字符串转秒数 |
| 40 | /// - Parameter dateFormat: 时间格式 | 40 | /// - Parameter dateFormat: 时间格式 |
| 41 | /// - Returns: 返回 | 41 | /// - Returns: 返回 |
| 42 | - func timeStrChangeTotimeInterval(dateFormat:String?) -> String { | 42 | + func timeStrChangeTotimeInterval(_ dateFormat:String? = "yyyy-MM-dd HH:mm:ss") -> String { |
| 43 | if !self.isNotBlank() { | 43 | if !self.isNotBlank() { |
| 44 | return "" | 44 | return "" |
| 45 | } | 45 | } |
| @@ -57,6 +57,26 @@ extension NSString { | @@ -57,6 +57,26 @@ extension NSString { | ||
| 57 | return "\(Int(date!.timeIntervalSince1970))" | 57 | return "\(Int(date!.timeIntervalSince1970))" |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | + /// 字符串转date | ||
| 61 | + /// - Parameter dateFormat: 日期格式 | ||
| 62 | + /// - Returns: 返回 | ||
| 63 | + func timeStrChangeTotimedate(_ dateFormat:String? = "yyyy-MM-dd HH:mm:ss") -> NSDate { | ||
| 64 | + if !self.isNotBlank() { | ||
| 65 | + return NSDate() | ||
| 66 | + } | ||
| 67 | + let format = DateFormatter.init() | ||
| 68 | + format.dateStyle = .medium | ||
| 69 | + format.timeStyle = .short | ||
| 70 | + format.locale = Locale(identifier: "zh_CN") | ||
| 71 | + format.timeZone = TimeZone(abbreviation: "UTC+8:00") | ||
| 72 | + if dateFormat == nil { | ||
| 73 | + format.dateFormat = "yyyy-MM-dd HH:mm:ss" | ||
| 74 | + }else{ | ||
| 75 | + format.dateFormat = dateFormat | ||
| 76 | + } | ||
| 77 | + return format.date(from: self as String)! as NSDate | ||
| 78 | + } | ||
| 79 | + | ||
| 60 | /// 保留2位小数 | 80 | /// 保留2位小数 |
| 61 | /// - Returns: 返回 | 81 | /// - Returns: 返回 |
| 62 | func keepTwoDecimalPlaces() -> String { | 82 | func keepTwoDecimalPlaces() -> String { |
metaCode/Classes/Main/MinePage/Controller/CNLiveMineViewController.swift
| @@ -45,9 +45,9 @@ class CNLiveMineViewController : CNLiveBaseViewController, UITableViewDelegate, | @@ -45,9 +45,9 @@ class CNLiveMineViewController : CNLiveBaseViewController, UITableViewDelegate, | ||
| 45 | ["name":"更多设置","icon":"mine_list_icon_set_more"]] | 45 | ["name":"更多设置","icon":"mine_list_icon_set_more"]] |
| 46 | dataArray.add(array03) | 46 | dataArray.add(array03) |
| 47 | 47 | ||
| 48 | - let array04 : [Dictionary] = [["name":"订单列表","icon":"mine_list_icon_help_feedback"], | ||
| 49 | - ["name":"交易记录","icon":"mine_list_icon_help_feedback"]] | ||
| 50 | - dataArray.add(array04) | 48 | +// let array04 : [Dictionary] = [["name":"订单列表","icon":"mine_list_icon_help_feedback"], |
| 49 | +// ["name":"交易记录","icon":"mine_list_icon_help_feedback"]] | ||
| 50 | +// dataArray.add(array04) | ||
| 51 | 51 | ||
| 52 | return dataArray | 52 | return dataArray |
| 53 | }() | 53 | }() |
| @@ -181,7 +181,7 @@ extension CNLiveMineViewController { | @@ -181,7 +181,7 @@ extension CNLiveMineViewController { | ||
| 181 | self.navigationController?.pushViewController(CNLiveShopOrderViewController.init(), animated: true) | 181 | self.navigationController?.pushViewController(CNLiveShopOrderViewController.init(), animated: true) |
| 182 | } | 182 | } |
| 183 | if indexPath.row == 1 { | 183 | if indexPath.row == 1 { |
| 184 | - | 184 | + self.navigationController?.pushViewController(CNLiveShopTransViewController.init(), animated: true) |
| 185 | } | 185 | } |
| 186 | } | 186 | } |
| 187 | 187 |
metaCode/Classes/Main/MinePage/View/CNLiveMineInfoAlertView.swift
| @@ -547,6 +547,7 @@ enum CNLiveStandListAlertShowType { | @@ -547,6 +547,7 @@ enum CNLiveStandListAlertShowType { | ||
| 547 | case text | 547 | case text |
| 548 | case date | 548 | case date |
| 549 | case string | 549 | case string |
| 550 | + case custom_date | ||
| 550 | } | 551 | } |
| 551 | class MineStandListAlertView: UIView, UIPickerViewDelegate, UIPickerViewDataSource { | 552 | class MineStandListAlertView: UIView, UIPickerViewDelegate, UIPickerViewDataSource { |
| 552 | 553 | ||
| @@ -584,7 +585,7 @@ class MineStandListAlertView: UIView, UIPickerViewDelegate, UIPickerViewDataSour | @@ -584,7 +585,7 @@ class MineStandListAlertView: UIView, UIPickerViewDelegate, UIPickerViewDataSour | ||
| 584 | datePicker.locale = Locale(identifier: "zh_CN") | 585 | datePicker.locale = Locale(identifier: "zh_CN") |
| 585 | datePicker.setValue(HexColor("#3C3C3C"), forKey: "textColor") | 586 | datePicker.setValue(HexColor("#3C3C3C"), forKey: "textColor") |
| 586 | datePicker.datePickerMode = .date | 587 | datePicker.datePickerMode = .date |
| 587 | - datePicker.isHidden = !(_show_type == .date) | 588 | + datePicker.isHidden = !(_show_type == .date || _show_type == .custom_date) |
| 588 | if #available(iOS 13.4, *) { | 589 | if #available(iOS 13.4, *) { |
| 589 | datePicker.preferredDatePickerStyle = .wheels | 590 | datePicker.preferredDatePickerStyle = .wheels |
| 590 | } else { | 591 | } else { |
| @@ -651,6 +652,14 @@ class MineStandListAlertView: UIView, UIPickerViewDelegate, UIPickerViewDataSour | @@ -651,6 +652,14 @@ class MineStandListAlertView: UIView, UIPickerViewDelegate, UIPickerViewDataSour | ||
| 651 | text = infos.firstObject as? Dictionary<String, String> | 652 | text = infos.firstObject as? Dictionary<String, String> |
| 652 | } else if _show_type == .string { | 653 | } else if _show_type == .string { |
| 653 | text = infos.firstObject as? String | 654 | text = infos.firstObject as? String |
| 655 | + } else if _show_type == .custom_date { | ||
| 656 | + let current_date = infos.firstObject as! Date | ||
| 657 | + let formatter = DateFormatter() | ||
| 658 | + formatter.locale = Locale.init(identifier: "zh_CN") | ||
| 659 | + formatter.dateFormat = (infos.lastObject as! String) | ||
| 660 | + datePicker.setDate(current_date as Date, animated: true) | ||
| 661 | + datePicker.maximumDate = current_date | ||
| 662 | + text = formatter.string(from: datePicker.date) | ||
| 654 | }else{ | 663 | }else{ |
| 655 | let formatter = DateFormatter() | 664 | let formatter = DateFormatter() |
| 656 | formatter.dateFormat = "yyyy-MM-dd" | 665 | formatter.dateFormat = "yyyy-MM-dd" |
metaCode/Classes/Main/MinePage/View/CNLiveMineInputMessageView.swift
| @@ -364,7 +364,7 @@ class MineInputTextShopCustomView: UIView, UITextViewDelegate, UITextFieldDelega | @@ -364,7 +364,7 @@ class MineInputTextShopCustomView: UIView, UITextViewDelegate, UITextFieldDelega | ||
| 364 | contentTextView.resignFirstResponder() | 364 | contentTextView.resignFirstResponder() |
| 365 | MineStandListAlertView.showStandListView(infos: dataArray, name:String(title[index...]), show_type:dataArray.count == 0 ? .date : .text, result: { [self] text in | 365 | MineStandListAlertView.showStandListView(infos: dataArray, name:String(title[index...]), show_type:dataArray.count == 0 ? .date : .text, result: { [self] text in |
| 366 | if dataArray.count == 0 { | 366 | if dataArray.count == 0 { |
| 367 | - _dict.setObject((text as! NSString).timeStrChangeTotimeInterval(dateFormat: "yyyy-MM-dd"), forKey: "content" as NSCopying) | 367 | + _dict.setObject((text as! NSString).timeStrChangeTotimeInterval("yyyy-MM-dd"), forKey: "content" as NSCopying) |
| 368 | moreBtn.setTitle(text as? String, for: .normal) | 368 | moreBtn.setTitle(text as? String, for: .normal) |
| 369 | } else { | 369 | } else { |
| 370 | let dict = text as! NSDictionary | 370 | let dict = text as! NSDictionary |
metaCode/Classes/Main/ShopPage/Controller/CNLiveShopTransListViewController.swift
| @@ -27,27 +27,47 @@ class CNLiveShopTransListViewController: CNLiveBaseViewController, UITableViewDe | @@ -27,27 +27,47 @@ class CNLiveShopTransListViewController: CNLiveBaseViewController, UITableViewDe | ||
| 27 | 27 | ||
| 28 | let kShopBodyTransListViewCellIdentifier = "kShopBodyTransListViewCellIdentifier" | 28 | let kShopBodyTransListViewCellIdentifier = "kShopBodyTransListViewCellIdentifier" |
| 29 | lazy var tableView : UITableView = { | 29 | lazy var tableView : UITableView = { |
| 30 | - let tableView = UITableView(frame: .zero, style: .grouped) | 30 | + let tableView = UITableView(frame: .zero, style: .plain) |
| 31 | tableView.dataSource = self | 31 | tableView.dataSource = self |
| 32 | tableView.delegate = self | 32 | tableView.delegate = self |
| 33 | tableView.emptyDataSetSource = self | 33 | tableView.emptyDataSetSource = self |
| 34 | tableView.emptyDataSetDelegate = self | 34 | tableView.emptyDataSetDelegate = self |
| 35 | - tableView.backgroundColor = .clear | 35 | + tableView.backgroundColor = .white |
| 36 | tableView.tableFooterView = UIView.init() | 36 | tableView.tableFooterView = UIView.init() |
| 37 | + tableView.contentInset = UIEdgeInsets(top: adapt_length(length: 82), left: 0, bottom: 0, right: 0) | ||
| 38 | + tableView.scrollIndicatorInsets = UIEdgeInsets(top: adapt_length(length: 82), left: 0, bottom: 0, right: 0) | ||
| 37 | tableView.separatorInset = UIEdgeInsets(top: 0, left: adapt_length(length: 20), bottom: 0, right: adapt_length(length: 20)) | 39 | tableView.separatorInset = UIEdgeInsets(top: 0, left: adapt_length(length: 20), bottom: 0, right: adapt_length(length: 20)) |
| 38 | tableView.register(ShopBodyTransListViewCell.self, forCellReuseIdentifier: kShopBodyTransListViewCellIdentifier) | 40 | tableView.register(ShopBodyTransListViewCell.self, forCellReuseIdentifier: kShopBodyTransListViewCellIdentifier) |
| 39 | return tableView | 41 | return tableView |
| 40 | }() | 42 | }() |
| 41 | 43 | ||
| 44 | + lazy var headerView: ShopBodyTransListHeaderView = { | ||
| 45 | + let headerView = ShopBodyTransListHeaderView.init(frame: CGRect.zero) | ||
| 46 | + headerView.clickBlcok = { [self] headerView in | ||
| 47 | + MineStandListAlertView.showStandListView(infos: [currentDate!,"YYYY年MM月"], name:"选择月份", show_type:.custom_date, result: { [self] text in | ||
| 48 | + currentDate = (text as! NSString).timeStrChangeTotimedate("YYYY-MM-dd") | ||
| 49 | + current_string = (text as! String) | ||
| 50 | + let array = (text as! NSString).components(separatedBy: "-") as NSArray | ||
| 51 | + headerView.dateLab.text = "\(array[0])年\(array[1])月" | ||
| 52 | + loadDataSourceAction() | ||
| 53 | + }) | ||
| 54 | + } | ||
| 55 | + return headerView | ||
| 56 | + }() | ||
| 57 | + | ||
| 42 | lazy var dataArray: NSMutableArray = { | 58 | lazy var dataArray: NSMutableArray = { |
| 43 | let dataArray = NSMutableArray.init() | 59 | let dataArray = NSMutableArray.init() |
| 44 | return dataArray | 60 | return dataArray |
| 45 | }() | 61 | }() |
| 46 | - | ||
| 47 | - var pageNum: NSInteger | 62 | + |
| 63 | + var currentDate: NSDate! | ||
| 64 | + var current_string: String! | ||
| 48 | var network_type: CNLiveMineResponseType! | 65 | var network_type: CNLiveMineResponseType! |
| 49 | - init() { | ||
| 50 | - self.pageNum = 1 | 66 | + var _show_type:CNLiveShopTransListShowType! |
| 67 | + init(show_type: CNLiveShopTransListShowType) { | ||
| 68 | + _show_type = show_type | ||
| 69 | + currentDate = Date() as NSDate | ||
| 70 | + current_string = NSDate.timeIntervalChangeToTimeStr(timeInterval: 0) | ||
| 51 | super.init(nibName:nil, bundle:nil) | 71 | super.init(nibName:nil, bundle:nil) |
| 52 | } | 72 | } |
| 53 | 73 | ||
| @@ -59,27 +79,49 @@ class CNLiveShopTransListViewController: CNLiveBaseViewController, UITableViewDe | @@ -59,27 +79,49 @@ class CNLiveShopTransListViewController: CNLiveBaseViewController, UITableViewDe | ||
| 59 | super.viewDidLoad() | 79 | super.viewDidLoad() |
| 60 | view.backgroundColor = HexColor("#FAFAFA") | 80 | view.backgroundColor = HexColor("#FAFAFA") |
| 61 | 81 | ||
| 82 | + loadDataSourceAction() | ||
| 83 | + | ||
| 62 | view.addSubview(tableView) | 84 | view.addSubview(tableView) |
| 63 | tableView.snp.makeConstraints { make in | 85 | tableView.snp.makeConstraints { make in |
| 64 | make.top.equalToSuperview() | 86 | make.top.equalToSuperview() |
| 65 | make.bottom.left.right.equalToSuperview() | 87 | make.bottom.left.right.equalToSuperview() |
| 66 | } | 88 | } |
| 89 | + view.addSubview(headerView) | ||
| 90 | + headerView.snp.makeConstraints { make in | ||
| 91 | + make.top.left.right.equalToSuperview() | ||
| 92 | + make.height.equalTo(adapt_length(length: 82)) | ||
| 93 | + } | ||
| 67 | } | 94 | } |
| 68 | 95 | ||
| 69 | - func loadDataSourceAction(page: NSInteger) { | ||
| 70 | - | 96 | + func loadDataSourceAction() { |
| 97 | + showLoading(message: "") | ||
| 98 | + CNLiveShopViewModel.requestAccount(date: current_string, type: _show_type) { [weak self] result, respStatue in | ||
| 99 | + if respStatue == .success { | ||
| 100 | + let baseModel = (result as! ShopOrderTransBaseDataModel) | ||
| 101 | + self!.dataArray.addObjects(from: (result as! ShopOrderTransBaseDataModel).list) | ||
| 102 | + self!.tableView.reloadData() | ||
| 103 | + if self!.dataArray.count > 0 && self!.tableView.mj_header == nil && self!.tableView.mj_footer == nil { | ||
| 104 | + self!.addRefreshView() | ||
| 105 | + } | ||
| 106 | + self!.headerView.priceLab.text = "支出 ¥\(baseModel.payment ?? "0.00") 收入 ¥\(baseModel.income ?? "0.00")" | ||
| 107 | + }else if (respStatue == .noNetwork) { | ||
| 108 | + self!.network_type = .noNetwork | ||
| 109 | + self!.tableView.reloadEmptyDataSet() | ||
| 110 | + } else { | ||
| 111 | + self!.network_type = .failed | ||
| 112 | + self!.tableView.reloadEmptyDataSet() | ||
| 113 | + } | ||
| 114 | + } | ||
| 71 | } | 115 | } |
| 72 | 116 | ||
| 73 | - | ||
| 74 | func addRefreshView() { | 117 | func addRefreshView() { |
| 75 | tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in | 118 | tableView.mj_header = MJRefreshNormalHeader.init(refreshingBlock: {[weak self] in |
| 76 | - self!.pageNum = 1 | ||
| 77 | - self!.loadDataSourceAction(page: 1) | 119 | + self!.tableView.mj_header?.endRefreshing() |
| 78 | }) | 120 | }) |
| 79 | 121 | ||
| 80 | tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in | 122 | tableView.mj_footer = MJRefreshAutoNormalFooter.init(refreshingBlock: {[weak self] in |
| 81 | - self!.pageNum = self!.pageNum + 1 | ||
| 82 | - self!.loadDataSourceAction(page: self!.pageNum) | 123 | + self!.tableView.mj_footer?.endRefreshing() |
| 124 | + self!.tableView.mj_footer?.endRefreshingWithNoMoreData() | ||
| 83 | }) | 125 | }) |
| 84 | } | 126 | } |
| 85 | 127 | ||
| @@ -98,15 +140,24 @@ extension CNLiveShopTransListViewController { | @@ -98,15 +140,24 @@ extension CNLiveShopTransListViewController { | ||
| 98 | guard let cell = tableView.dequeueReusableCell(withIdentifier: kShopBodyTransListViewCellIdentifier) as? ShopBodyTransListViewCell else { | 140 | guard let cell = tableView.dequeueReusableCell(withIdentifier: kShopBodyTransListViewCellIdentifier) as? ShopBodyTransListViewCell else { |
| 99 | return ShopBodyTransListViewCell() | 141 | return ShopBodyTransListViewCell() |
| 100 | } | 142 | } |
| 143 | + cell.setupWithDataSource(listModel: dataArray[indexPath.row] as! ShopOrderTransListDataModel) | ||
| 101 | return cell | 144 | return cell |
| 102 | } | 145 | } |
| 103 | 146 | ||
| 104 | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { | 147 | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { |
| 105 | - return adapt_length(length: 110) | 148 | + return adapt_length(length: 75) |
| 106 | } | 149 | } |
| 107 | 150 | ||
| 108 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { | 151 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| 109 | - | 152 | + let listModel = self.dataArray[indexPath.row] as! ShopOrderTransListDataModel |
| 153 | + if listModel.type == "1" { | ||
| 154 | + if listModel.title == "order" { | ||
| 155 | + self.navigationController?.pushViewController(CNLiveShopOrderDetailViewController.init(orderId: listModel.order_id!, show_type: .order, form_type: .afterSale), animated: true) | ||
| 156 | + } | ||
| 157 | + if listModel.title == "foods_order" { | ||
| 158 | + | ||
| 159 | + } | ||
| 160 | + } | ||
| 110 | } | 161 | } |
| 111 | } | 162 | } |
| 112 | 163 | ||
| @@ -150,7 +201,7 @@ extension CNLiveShopTransListViewController { | @@ -150,7 +201,7 @@ extension CNLiveShopTransListViewController { | ||
| 150 | 201 | ||
| 151 | func emptyDataSet(_ scrollView: UIScrollView, didTapView view: UIView) { | 202 | func emptyDataSet(_ scrollView: UIScrollView, didTapView view: UIView) { |
| 152 | if network_type == .failed || network_type == .noNetwork { | 203 | if network_type == .failed || network_type == .noNetwork { |
| 153 | - loadDataSourceAction(page: 1) | 204 | + loadDataSourceAction() |
| 154 | } | 205 | } |
| 155 | } | 206 | } |
| 156 | } | 207 | } |
metaCode/Classes/Main/ShopPage/Controller/CNLiveShopTransViewController.swift
| @@ -13,14 +13,15 @@ class CNLiveShopTransViewController: CNLiveBaseViewController { | @@ -13,14 +13,15 @@ class CNLiveShopTransViewController: CNLiveBaseViewController { | ||
| 13 | 13 | ||
| 14 | lazy var viewControllers: NSMutableArray = { | 14 | lazy var viewControllers: NSMutableArray = { |
| 15 | let viewControllers = NSMutableArray.init() | 15 | let viewControllers = NSMutableArray.init() |
| 16 | - viewControllers.add(CNLiveShopTransListViewController.init()) | ||
| 17 | - viewControllers.add(CNLiveShopTransListViewController.init()) | 16 | + viewControllers.add(CNLiveShopTransListViewController.init(show_type: .all)) |
| 17 | + viewControllers.add(CNLiveShopTransListViewController.init(show_type: .income)) | ||
| 18 | + viewControllers.add(CNLiveShopTransListViewController.init(show_type: .outcome)) | ||
| 18 | return viewControllers | 19 | return viewControllers |
| 19 | }() | 20 | }() |
| 20 | 21 | ||
| 21 | lazy var dataSource: JXSegmentedNumberDataSource = { | 22 | lazy var dataSource: JXSegmentedNumberDataSource = { |
| 22 | let dataSource = JXSegmentedNumberDataSource() | 23 | let dataSource = JXSegmentedNumberDataSource() |
| 23 | - dataSource.titles = ["达人","电商"] | 24 | + dataSource.titles = ["全部","收入","支出"] |
| 24 | dataSource.numbers = [0,0,0,0] | 25 | dataSource.numbers = [0,0,0,0] |
| 25 | dataSource.isTitleColorGradientEnabled = true | 26 | dataSource.isTitleColorGradientEnabled = true |
| 26 | dataSource.itemWidth = JXSegmentedViewAutomaticDimension | 27 | dataSource.itemWidth = JXSegmentedViewAutomaticDimension |
| @@ -49,18 +50,7 @@ class CNLiveShopTransViewController: CNLiveBaseViewController { | @@ -49,18 +50,7 @@ class CNLiveShopTransViewController: CNLiveBaseViewController { | ||
| 49 | 50 | ||
| 50 | return categoryView | 51 | return categoryView |
| 51 | }() | 52 | }() |
| 52 | - | ||
| 53 | - lazy var screenButton: UIButton = { | ||
| 54 | - let screenButton = UIButton.init(type: .custom) | ||
| 55 | - screenButton.frame = CGRect(x: KSreenWidth - adapt_length(length: 40), y: (get_system_nav_height() - (get_system_statusBar_height() + adapt_length(length: 30)))/2 + get_system_statusBar_height(), width: adapt_length(length: 30), height: adapt_length(length: 30)) | ||
| 56 | - screenButton.setImage(UIImage(named: "DS_order_search"), for: .normal) | ||
| 57 | - screenButton.backgroundColor = .clear | ||
| 58 | - screenButton.layer.masksToBounds = true | ||
| 59 | - screenButton.layer.cornerRadius = 5 | ||
| 60 | - screenButton.addTarget(self, action: #selector(screenButtonClick), for: .touchUpInside) | ||
| 61 | - return screenButton | ||
| 62 | - }() | ||
| 63 | - | 53 | + |
| 64 | lazy var listContainerView: JXSegmentedListContainerView! = { | 54 | lazy var listContainerView: JXSegmentedListContainerView! = { |
| 65 | return JXSegmentedListContainerView(dataSource: self) | 55 | return JXSegmentedListContainerView(dataSource: self) |
| 66 | }() | 56 | }() |
| @@ -85,9 +75,6 @@ class CNLiveShopTransViewController: CNLiveBaseViewController { | @@ -85,9 +75,6 @@ class CNLiveShopTransViewController: CNLiveBaseViewController { | ||
| 85 | 75 | ||
| 86 | categoryView.listContainer = listContainerView | 76 | categoryView.listContainer = listContainerView |
| 87 | view.addSubview(listContainerView) | 77 | view.addSubview(listContainerView) |
| 88 | - | ||
| 89 | - topNavView.addSubview(screenButton) | ||
| 90 | - | ||
| 91 | } | 78 | } |
| 92 | 79 | ||
| 93 | override func viewDidLayoutSubviews() { | 80 | override func viewDidLayoutSubviews() { |
| @@ -96,12 +83,6 @@ class CNLiveShopTransViewController: CNLiveBaseViewController { | @@ -96,12 +83,6 @@ class CNLiveShopTransViewController: CNLiveBaseViewController { | ||
| 96 | categoryView.frame = CGRect(x: 0, y: KNavigationHeight, width: view.bounds.size.width, height: CGFloat(kCNLiveShopOrderListSectionTitleHeight)) | 83 | categoryView.frame = CGRect(x: 0, y: KNavigationHeight, width: view.bounds.size.width, height: CGFloat(kCNLiveShopOrderListSectionTitleHeight)) |
| 97 | listContainerView.frame = CGRect(x: 0, y: KNavigationHeight+CGFloat(kCNLiveShopOrderListSectionTitleHeight), width: view.bounds.size.width, height: view.bounds.size.height - CGFloat(kCNLiveShopOrderListSectionTitleHeight) - KNavigationHeight) | 84 | listContainerView.frame = CGRect(x: 0, y: KNavigationHeight+CGFloat(kCNLiveShopOrderListSectionTitleHeight), width: view.bounds.size.width, height: view.bounds.size.height - CGFloat(kCNLiveShopOrderListSectionTitleHeight) - KNavigationHeight) |
| 98 | } | 85 | } |
| 99 | - | ||
| 100 | - @objc func screenButtonClick() { | ||
| 101 | - | ||
| 102 | - } | ||
| 103 | - | ||
| 104 | - | ||
| 105 | } | 86 | } |
| 106 | extension CNLiveShopTransViewController: JXSegmentedViewDelegate { | 87 | extension CNLiveShopTransViewController: JXSegmentedViewDelegate { |
| 107 | func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) { | 88 | func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) { |
metaCode/Classes/Main/ShopPage/Model/CNLiveShopBaseModel.swift
| @@ -249,5 +249,39 @@ class ShopOrderExpressDetailDateModel: BaseModel { | @@ -249,5 +249,39 @@ class ShopOrderExpressDetailDateModel: BaseModel { | ||
| 249 | }) | 249 | }) |
| 250 | } | 250 | } |
| 251 | } | 251 | } |
| 252 | +//!!!: 电商流水数据 | ||
| 253 | +class ShopOrderTransBaseDataModel: BaseModel { | ||
| 254 | + var payment: String? = ""// 支出 | ||
| 255 | + var income: String? = ""// 收入 | ||
| 256 | + var list = [ShopOrderTransListDataModel]()// 电商流水 | ||
| 257 | +} | ||
| 252 | 258 | ||
| 259 | +class ShopOrderTransListDataModel: BaseModel { | ||
| 260 | + var id: String? = ""// id | ||
| 261 | + var uid: String? = ""// 用户id | ||
| 262 | + var price: String? = ""// 金钱 | ||
| 263 | + var addtime: String? = ""// 时间戳 | ||
| 264 | + var type: String? = ""// 1 收入 2 支出 | ||
| 265 | + var title: String? = ""// order电商 foods_order美食 | ||
| 266 | + var order_id: String? = ""// 订单id | ||
| 267 | + var payment: String? = ""// 1支付宝 2微信 3银联 4钱包 | ||
| 268 | + var img: String? = ""// 头像 | ||
| 269 | + var username: String? = ""// 昵称 | ||
| 270 | + | ||
| 271 | + override func mapping(mapper: HelpingMapper) { | ||
| 272 | + mapper <<< | ||
| 273 | + self.addtime <-- TransformOf(fromJSON: { (raw) -> String in | ||
| 274 | + if raw!.count > 0 { | ||
| 275 | + let date = NSDate(timeIntervalSince1970: TimeInterval(raw!)!) | ||
| 276 | + let dateFormatter = DateFormatter() | ||
| 277 | + dateFormatter.locale = Locale.init(identifier: "zh_CN") | ||
| 278 | + dateFormatter.dateFormat = "YYYY-MM-dd hh:mm:SS" | ||
| 279 | + return dateFormatter.string(from: date as Date) | ||
| 280 | + } | ||
| 281 | + return raw! | ||
| 282 | + }, toJSON: { (tuple) -> String? in | ||
| 283 | + return tuple | ||
| 284 | + }); | ||
| 285 | + } | ||
| 286 | +} | ||
| 253 | 287 |
metaCode/Classes/Main/ShopPage/View/CNLiveShopBodyTransListView.swift
| @@ -6,6 +6,74 @@ | @@ -6,6 +6,74 @@ | ||
| 6 | // | 6 | // |
| 7 | 7 | ||
| 8 | import Foundation | 8 | import Foundation |
| 9 | +import Kingfisher | ||
| 10 | + | ||
| 11 | +typealias clickTransListHeaderCallBack = (_ headerView: ShopBodyTransListHeaderView) -> Void | ||
| 12 | +class ShopBodyTransListHeaderView: UIView { | ||
| 13 | + | ||
| 14 | + lazy var dateLab: UILabel = { | ||
| 15 | + let dateLab = UILabel.init() | ||
| 16 | + dateLab.textColor = HexColor("#333333") | ||
| 17 | + dateLab.font = medium_adapt_font(pointSize: 16) | ||
| 18 | + dateLab.text = NSDate.timeIntervalChangeToTimeStr(timeInterval: NSDate().timeIntervalSince1970, "YYYY年M月") | ||
| 19 | + return dateLab | ||
| 20 | + }() | ||
| 21 | + | ||
| 22 | + lazy var downArrowImageView: UIImageView = { | ||
| 23 | + let downArrowImageView = UIImageView.init(image: UIImage(named: "ye_xl")) | ||
| 24 | + downArrowImageView.contentMode = .scaleAspectFit | ||
| 25 | + downArrowImageView.clipsToBounds = true | ||
| 26 | + return downArrowImageView | ||
| 27 | + }() | ||
| 28 | + | ||
| 29 | + lazy var priceLab: UILabel = { | ||
| 30 | + let priceLab = UILabel.init() | ||
| 31 | + priceLab.textColor = HexColor("#9d9d9d") | ||
| 32 | + priceLab.font = medium_adapt_font(pointSize: 14) | ||
| 33 | + priceLab.text = "支出 ¥0.00 收入 ¥0.00" | ||
| 34 | + return priceLab | ||
| 35 | + }() | ||
| 36 | + | ||
| 37 | + var clickBlcok: clickTransListHeaderCallBack! | ||
| 38 | + override init(frame: CGRect) { | ||
| 39 | + super.init(frame: frame) | ||
| 40 | + backgroundColor = HexColor("#f6f6f6") | ||
| 41 | + | ||
| 42 | + addSubview(dateLab) | ||
| 43 | + dateLab.snp.makeConstraints { make in | ||
| 44 | + make.left.top.equalToSuperview().offset(adapt_length(length: 20)) | ||
| 45 | + make.height.equalTo(adapt_length(length: 23)) | ||
| 46 | + make.width.lessThanOrEqualTo(adapt_length(length: 300)) | ||
| 47 | + } | ||
| 48 | + addSubview(downArrowImageView) | ||
| 49 | + downArrowImageView.snp.makeConstraints { make in | ||
| 50 | + make.left.equalTo(dateLab.snp.right).offset(adapt_length(length: 5)) | ||
| 51 | + make.centerY.equalTo(dateLab) | ||
| 52 | + make.size.equalTo(CGSize(width: adapt_length(length: 10), height: adapt_length(length: 10))) | ||
| 53 | + } | ||
| 54 | + addSubview(priceLab) | ||
| 55 | + priceLab.snp.makeConstraints { make in | ||
| 56 | + make.left.equalToSuperview().offset(adapt_length(length: 20)) | ||
| 57 | + make.right.equalToSuperview().offset(-adapt_length(length: 20)) | ||
| 58 | + make.top.equalTo(dateLab.snp.bottom).offset(adapt_length(length: 5)) | ||
| 59 | + make.height.equalTo(adapt_length(length: 20)) | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + isUserInteractionEnabled = true | ||
| 63 | + let tap = UITapGestureRecognizer(target: self, action: #selector(selfTap)) | ||
| 64 | + addGestureRecognizer(tap) | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + @objc func selfTap() { | ||
| 68 | + if (clickBlcok != nil) { | ||
| 69 | + clickBlcok(self) | ||
| 70 | + } | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + required init?(coder: NSCoder) { | ||
| 74 | + fatalError("init(coder:) has not been implemented") | ||
| 75 | + } | ||
| 76 | +} | ||
| 9 | 77 | ||
| 10 | class ShopBodyTransListViewCell: UITableViewCell { | 78 | class ShopBodyTransListViewCell: UITableViewCell { |
| 11 | 79 | ||
| @@ -71,19 +139,38 @@ class ShopBodyTransListViewCell: UITableViewCell { | @@ -71,19 +139,38 @@ class ShopBodyTransListViewCell: UITableViewCell { | ||
| 71 | } | 139 | } |
| 72 | addSubview(payTypeImageView) | 140 | addSubview(payTypeImageView) |
| 73 | payTypeImageView.snp.makeConstraints { make in | 141 | payTypeImageView.snp.makeConstraints { make in |
| 74 | - make.right.equalToSuperview().offset(-adapt_length(length: 15)) | 142 | + make.right.equalToSuperview().offset(-adapt_length(length: 20)) |
| 75 | make.top.equalToSuperview().offset(adapt_length(length: 17)) | 143 | make.top.equalToSuperview().offset(adapt_length(length: 17)) |
| 76 | make.size.equalTo(payTypeImageView.size) | 144 | make.size.equalTo(payTypeImageView.size) |
| 77 | } | 145 | } |
| 78 | addSubview(priceLab) | 146 | addSubview(priceLab) |
| 79 | priceLab.snp.makeConstraints { make in | 147 | priceLab.snp.makeConstraints { make in |
| 80 | - make.right.equalToSuperview().offset(-adapt_length(length: 15)) | 148 | + make.right.equalToSuperview().offset(-adapt_length(length: 20)) |
| 81 | make.left.equalTo(timeLabel.snp.right).offset(adapt_length(length: 15)) | 149 | make.left.equalTo(timeLabel.snp.right).offset(adapt_length(length: 15)) |
| 82 | make.top.equalTo(payTypeImageView.snp.bottom).offset(4) | 150 | make.top.equalTo(payTypeImageView.snp.bottom).offset(4) |
| 83 | make.height.equalTo(adapt_length(length: 25)) | 151 | make.height.equalTo(adapt_length(length: 25)) |
| 84 | } | 152 | } |
| 85 | } | 153 | } |
| 86 | 154 | ||
| 155 | + func setupWithDataSource(listModel: ShopOrderTransListDataModel) { | ||
| 156 | + iconImageView.kf.setImage(with: URL(string: listModel.img!), placeholder: UIImage.imageWithColor(color: HexColor("#f9f9f9")!, size: CGSize(width: adapt_length(length: 40), height: adapt_length(length: 40)))) | ||
| 157 | + titleLabel.text = listModel.username | ||
| 158 | + timeLabel.text = listModel.addtime | ||
| 159 | + if listModel.payment == "1" { | ||
| 160 | + payTypeImageView.image = UIImage(named: "tsq_zhifubaozf") | ||
| 161 | + } | ||
| 162 | + if listModel.payment == "2" { | ||
| 163 | + payTypeImageView.image = UIImage(named: "tsq_wweixinzf") | ||
| 164 | + } | ||
| 165 | + if listModel.payment == "3" { | ||
| 166 | + payTypeImageView.image = UIImage(named: "tsq_yinlianzf") | ||
| 167 | + } | ||
| 168 | + if listModel.payment == "4" { | ||
| 169 | + payTypeImageView.image = UIImage(named: "ye_wjjzf") | ||
| 170 | + } | ||
| 171 | + priceLab.text = listModel.price | ||
| 172 | + } | ||
| 173 | + | ||
| 87 | required init?(coder: NSCoder) { | 174 | required init?(coder: NSCoder) { |
| 88 | fatalError("init(coder:) has not been implemented") | 175 | fatalError("init(coder:) has not been implemented") |
| 89 | } | 176 | } |
metaCode/Classes/Main/ShopPage/ViewModel/CNLiveShopViewModel.swift
| @@ -538,7 +538,6 @@ class CNLiveShopViewModel: NSObject { | @@ -538,7 +538,6 @@ class CNLiveShopViewModel: NSObject { | ||
| 538 | if networkType == .refundExpress { | 538 | if networkType == .refundExpress { |
| 539 | url = "/api/v1/getRefundExpress" | 539 | url = "/api/v1/getRefundExpress" |
| 540 | } | 540 | } |
| 541 | - | ||
| 542 | let custom_param = NSMutableDictionary() | 541 | let custom_param = NSMutableDictionary() |
| 543 | custom_param.setValue(APPId_wjj, forKey: "appId") | 542 | custom_param.setValue(APPId_wjj, forKey: "appId") |
| 544 | custom_param.setValue(APPKey_wjj, forKey: "appKey") | 543 | custom_param.setValue(APPKey_wjj, forKey: "appKey") |
| @@ -575,4 +574,57 @@ class CNLiveShopViewModel: NSObject { | @@ -575,4 +574,57 @@ class CNLiveShopViewModel: NSObject { | ||
| 575 | } | 574 | } |
| 576 | } | 575 | } |
| 577 | 576 | ||
| 577 | + /// 电商商家流水 | ||
| 578 | + /// - Parameters: | ||
| 579 | + /// - date: 时间 | ||
| 580 | + /// - type: 0 全部 1 收入 2 支出 | ||
| 581 | + /// - resultBlock: 返回 | ||
| 582 | + static func requestAccount(date: String, type:CNLiveShopTransListShowType, resultBlock: @escaping resultShopBlock) { | ||
| 583 | + let param = NSMutableDictionary() | ||
| 584 | + param.setValue(UserInfoManager.shared.userInfo.uid, forKey: "uid") | ||
| 585 | + param.setValue(date, forKey: "date") | ||
| 586 | + if type == .all { | ||
| 587 | + param.setValue("0", forKey: "type") | ||
| 588 | + } | ||
| 589 | + if type == .income { | ||
| 590 | + param.setValue("1", forKey: "type") | ||
| 591 | + } | ||
| 592 | + if type == .outcome { | ||
| 593 | + param.setValue("2", forKey: "type") | ||
| 594 | + } | ||
| 595 | + let custom_param = NSMutableDictionary() | ||
| 596 | + custom_param.setValue(APPId_wjj, forKey: "appId") | ||
| 597 | + custom_param.setValue(APPKey_wjj, forKey: "appKey") | ||
| 598 | + CNLiveNetworking.setAllowRequestDefaultArgument(true) | ||
| 599 | + CNLiveNetworking.setupShowDataResult(false) | ||
| 600 | + CNLiveNetworking.setupDSRequest(true) | ||
| 601 | + CNLiveNetworking.setupCustomParam(custom_param as? [String : String]) | ||
| 602 | + CNLiveNetworking.requestNetwork(with: .GET, urlString: APPBaseWjjBUrl+"/api/v1/getShopAccount", param: param as! [String : String], cacheType: .networkOnly) { task, result, error in | ||
| 603 | + hiddenLoading() | ||
| 604 | + if (error == nil) { | ||
| 605 | + let resp = result as! NSDictionary | ||
| 606 | + let errorCode = "\(resp["code"] ?? "0")" | ||
| 607 | + if (errorCode == "200") { | ||
| 608 | + if resp["data"] is NSNull { | ||
| 609 | + resultBlock(NSNull(),.failed) | ||
| 610 | + } else { | ||
| 611 | + let model = dictionaryToModel(resp as! [String : Any], ShopOrderTransBaseDataModel.self,"data") as! ShopOrderTransBaseDataModel | ||
| 612 | + resultBlock(model,.success) | ||
| 613 | + } | ||
| 614 | + } else { | ||
| 615 | + showMessage(message: resp["message"] as! String) | ||
| 616 | + resultBlock(NSNull(),.failed) | ||
| 617 | + } | ||
| 618 | + } else { | ||
| 619 | + if CNLiveNetworking.isNetworking() { | ||
| 620 | + showMessage(message: "请求失败") | ||
| 621 | + resultBlock(NSNull(),.failed) | ||
| 622 | + } else { | ||
| 623 | + showMessage(message: "似乎与网络断开链接") | ||
| 624 | + resultBlock(NSNull(),.noNetwork) | ||
| 625 | + } | ||
| 626 | + } | ||
| 627 | + } | ||
| 628 | + } | ||
| 629 | + | ||
| 578 | } | 630 | } |
metaCode/Supporting Files/Assets.xcassets/Shop/tsq_wweixinzf.imageset/Contents.json
0 → 100644
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "idiom" : "universal", | ||
| 5 | + "scale" : "1x" | ||
| 6 | + }, | ||
| 7 | + { | ||
| 8 | + "filename" : "tsq_wweixinzf@2x.png", | ||
| 9 | + "idiom" : "universal", | ||
| 10 | + "scale" : "2x" | ||
| 11 | + }, | ||
| 12 | + { | ||
| 13 | + "filename" : "tsq_wweixinzf@3x.png", | ||
| 14 | + "idiom" : "universal", | ||
| 15 | + "scale" : "3x" | ||
| 16 | + } | ||
| 17 | + ], | ||
| 18 | + "info" : { | ||
| 19 | + "author" : "xcode", | ||
| 20 | + "version" : 1 | ||
| 21 | + } | ||
| 22 | +} |
metaCode/Supporting Files/Assets.xcassets/Shop/tsq_wweixinzf.imageset/tsq_wweixinzf@2x.png
0 → 100644
7.02 KB
metaCode/Supporting Files/Assets.xcassets/Shop/tsq_wweixinzf.imageset/tsq_wweixinzf@3x.png
0 → 100644
11.4 KB
metaCode/Supporting Files/Assets.xcassets/Shop/tsq_yinlianzf.imageset/Contents.json
0 → 100644
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "idiom" : "universal", | ||
| 5 | + "scale" : "1x" | ||
| 6 | + }, | ||
| 7 | + { | ||
| 8 | + "filename" : "tsq_yinlianzf@2x.png", | ||
| 9 | + "idiom" : "universal", | ||
| 10 | + "scale" : "2x" | ||
| 11 | + }, | ||
| 12 | + { | ||
| 13 | + "filename" : "tsq_yinlianzf@3x.png", | ||
| 14 | + "idiom" : "universal", | ||
| 15 | + "scale" : "3x" | ||
| 16 | + } | ||
| 17 | + ], | ||
| 18 | + "info" : { | ||
| 19 | + "author" : "xcode", | ||
| 20 | + "version" : 1 | ||
| 21 | + } | ||
| 22 | +} |
metaCode/Supporting Files/Assets.xcassets/Shop/tsq_yinlianzf.imageset/tsq_yinlianzf@2x.png
0 → 100644
2.6 KB
metaCode/Supporting Files/Assets.xcassets/Shop/tsq_yinlianzf.imageset/tsq_yinlianzf@3x.png
0 → 100644
5.47 KB
metaCode/Supporting Files/Assets.xcassets/Shop/tsq_zhifubaozf.imageset/Contents.json
0 → 100644
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "idiom" : "universal", | ||
| 5 | + "scale" : "1x" | ||
| 6 | + }, | ||
| 7 | + { | ||
| 8 | + "filename" : "tsq_zhifubaozf@2x.png", | ||
| 9 | + "idiom" : "universal", | ||
| 10 | + "scale" : "2x" | ||
| 11 | + }, | ||
| 12 | + { | ||
| 13 | + "filename" : "tsq_zhifubaozf@3x.png", | ||
| 14 | + "idiom" : "universal", | ||
| 15 | + "scale" : "3x" | ||
| 16 | + } | ||
| 17 | + ], | ||
| 18 | + "info" : { | ||
| 19 | + "author" : "xcode", | ||
| 20 | + "version" : 1 | ||
| 21 | + } | ||
| 22 | +} |
metaCode/Supporting Files/Assets.xcassets/Shop/tsq_zhifubaozf.imageset/tsq_zhifubaozf@2x.png
0 → 100644
5.12 KB
metaCode/Supporting Files/Assets.xcassets/Shop/tsq_zhifubaozf.imageset/tsq_zhifubaozf@3x.png
0 → 100644
7.74 KB
metaCode/Supporting Files/Assets.xcassets/Shop/ye_wjjzf.imageset/Contents.json
0 → 100644
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "idiom" : "universal", | ||
| 5 | + "scale" : "1x" | ||
| 6 | + }, | ||
| 7 | + { | ||
| 8 | + "filename" : "ye_wjjzf@2x.png", | ||
| 9 | + "idiom" : "universal", | ||
| 10 | + "scale" : "2x" | ||
| 11 | + }, | ||
| 12 | + { | ||
| 13 | + "filename" : "ye_wjjzf@3x.png", | ||
| 14 | + "idiom" : "universal", | ||
| 15 | + "scale" : "3x" | ||
| 16 | + } | ||
| 17 | + ], | ||
| 18 | + "info" : { | ||
| 19 | + "author" : "xcode", | ||
| 20 | + "version" : 1 | ||
| 21 | + } | ||
| 22 | +} |
metaCode/Supporting Files/Assets.xcassets/Shop/ye_wjjzf.imageset/ye_wjjzf@2x.png
0 → 100644
4.17 KB
metaCode/Supporting Files/Assets.xcassets/Shop/ye_wjjzf.imageset/ye_wjjzf@3x.png
0 → 100644
6.9 KB
metaCode/Supporting Files/Assets.xcassets/Shop/ye_xl.imageset/Contents.json
0 → 100644
| 1 | +{ | ||
| 2 | + "images" : [ | ||
| 3 | + { | ||
| 4 | + "idiom" : "universal", | ||
| 5 | + "scale" : "1x" | ||
| 6 | + }, | ||
| 7 | + { | ||
| 8 | + "filename" : "ye_xl@2x.png", | ||
| 9 | + "idiom" : "universal", | ||
| 10 | + "scale" : "2x" | ||
| 11 | + }, | ||
| 12 | + { | ||
| 13 | + "filename" : "ye_xl@3x.png", | ||
| 14 | + "idiom" : "universal", | ||
| 15 | + "scale" : "3x" | ||
| 16 | + } | ||
| 17 | + ], | ||
| 18 | + "info" : { | ||
| 19 | + "author" : "xcode", | ||
| 20 | + "version" : 1 | ||
| 21 | + } | ||
| 22 | +} |
metaCode/Supporting Files/Assets.xcassets/Shop/ye_xl.imageset/ye_xl@2x.png
0 → 100644
1.24 KB
metaCode/Supporting Files/Assets.xcassets/Shop/ye_xl.imageset/ye_xl@3x.png
0 → 100644
1.66 KB