Commit e36f3266ca93cb7b1c7c90b6ac1197156baf46bc

Authored by liushiyu
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