Răsfoiți Sursa

feat: 补充IM下单逻辑

陈文艺 3 luni în urmă
părinte
comite
bd3683bb2f

+ 3 - 3
Lanu.xcodeproj/project.pbxproj

@@ -516,7 +516,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 5;
+				CURRENT_PROJECT_VERSION = 6;
 				DEVELOPMENT_TEAM = 5H8D98R72W;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
@@ -536,7 +536,7 @@
 					"@executable_path/Frameworks",
 				);
 				MARKETING_VERSION = 1.0.0;
-				PRODUCT_BUNDLE_IDENTIFIER = com.jiehe.gami;
+				PRODUCT_BUNDLE_IDENTIFIER = com.jiehe.gami.debug;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				STRING_CATALOG_GENERATE_SYMBOLS = YES;
 				SWIFT_APPROACHABLE_CONCURRENCY = YES;
@@ -558,7 +558,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 5;
+				CURRENT_PROJECT_VERSION = 6;
 				DEVELOPMENT_TEAM = 5H8D98R72W;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;

+ 13 - 4
Lanu/Views/IM/Chat/GameMate/LNIMChatGameMateSkillCell.swift

@@ -10,6 +10,11 @@ import UIKit
 import SnapKit
 
 
+protocol LNIMChatGameMateSkillCellDelegate: NSObject {
+    func onIMChatGameMateSkillCell(cell: LNIMChatGameMateSkillCell, didClickOrder skill: LNGameMateSkillVO)
+}
+
+
 class LNIMChatGameMateSkillCell: UIView {
     private let background = UIImageView()
     private let gameIc = UIImageView()
@@ -27,6 +32,10 @@ class LNIMChatGameMateSkillCell: UIView {
     
     private let toVoiceButton = UIButton()
     
+    private var curItem: LNGameMateSkillVO?
+    
+    weak var delegate: LNIMChatGameMateSkillCellDelegate?
+    
     override init(frame: CGRect) {
         super.init(frame: frame)
         
@@ -39,6 +48,7 @@ class LNIMChatGameMateSkillCell: UIView {
         gameIc.sd_setImage(with: URL(string: skill.icon))
         gameNameLabel.text = skill.name
         gamePriceLabel.text = "\(skill.price.toDisplay)/\(skill.unit)"
+        curItem = skill
     }
     
     required init?(coder: NSCoder) {
@@ -102,9 +112,8 @@ extension LNIMChatGameMateSkillCell {
         order.clipsToBounds = true
         order.addAction(UIAction(handler: { [weak self] _ in
             guard let self else { return }
-            let panel = LNCreateOrderFromSkillListPanel()
-//            panel.update(<#T##skills: [LNGameMateSkillVO]##[LNGameMateSkillVO]#>, selected: <#T##LNGameMateSkillVO?#>)
-            panel.showIn()
+            guard let curItem else { return }
+            delegate?.onIMChatGameMateSkillCell(cell: self, didClickOrder: curItem)
         }), for: .touchUpInside)
         gameView.addSubview(order)
         order.snp.makeConstraints { make in
@@ -128,7 +137,7 @@ extension LNIMChatGameMateSkillCell {
         let infoView = UIView()
         gameView.addSubview(infoView)
         infoView.snp.makeConstraints { make in
-            make.centerY.equalToSuperview()
+            make.verticalEdges.equalToSuperview()
             make.leading.equalToSuperview()
             make.trailing.lessThanOrEqualTo(order.snp.leading).offset(-16)
         }

+ 27 - 0
Lanu/Views/IM/Chat/GameMate/LNIMChatGameMateSkillView.swift

@@ -18,6 +18,7 @@ class LNIMChatGameMateSkillView: UIView {
     private var skills: [LNGameMateSkillVO] = []
     
     private var itemViews: [LNIMChatGameMateSkillCell] = []
+    private var curPage: Int = 0
     
     weak var viewModel: LNIMChatViewModel? {
         didSet {
@@ -52,11 +53,23 @@ extension LNIMChatGameMateSkillView {
     }
 }
 
+extension LNIMChatGameMateSkillView: LNIMChatGameMateSkillCellDelegate {
+    func onIMChatGameMateSkillCell(cell: LNIMChatGameMateSkillCell, didClickOrder skill: LNGameMateSkillVO) {
+        let panel = LNCreateOrderFromSkillListPanel()
+        panel.update(skills, selected: skill)
+        panel.showIn(self)
+    }
+}
+
 extension LNIMChatGameMateSkillView: UIScrollViewDelegate {
     func scrollViewDidScroll(_ scrollView: UIScrollView) {
         guard skills.count > 2 else { return }
         
         if scrollView.contentOffset.x < scrollView.bounds.width * 0.5 {
+            curPage -= 1
+            if curPage < 0 {
+                curPage = skills.count - 1
+            }
             let last = itemViews.removeLast()
             stackView.removeArrangedSubview(last)
             last.removeFromSuperview()
@@ -66,8 +79,16 @@ extension LNIMChatGameMateSkillView: UIScrollViewDelegate {
                 make.width.equalTo(scrollView)
                 make.height.equalToSuperview()
             }
+            
+            let skill = skills[curPage > 0 ? curPage - 1 : skills.count - 1]
+            last.update(skill)
+            
             scrollView.contentOffset.x = scrollView.contentOffset.x + scrollView.bounds.width
         } else if scrollView.contentOffset.x > scrollView.bounds.width * 1.5 {
+            curPage += 1
+            if curPage > skills.count - 1 {
+                curPage = 0
+            }
             let first = itemViews.removeFirst()
             stackView.removeArrangedSubview(first)
             first.removeFromSuperview()
@@ -77,6 +98,10 @@ extension LNIMChatGameMateSkillView: UIScrollViewDelegate {
                 make.width.equalTo(scrollView)
                 make.height.equalToSuperview()
             }
+            
+            let skill = skills[curPage < skills.count - 1 ? curPage + 1 : 0]
+            first.update(skill)
+            
             scrollView.contentOffset.x = scrollView.contentOffset.x - scrollView.bounds.width
         }
     }
@@ -106,6 +131,7 @@ extension LNIMChatGameMateSkillView {
             itemViews[1].update(skills[0])
             itemViews[2].update(skills[1])
         }
+        curPage = 0
     }
     
     private func setupViews() {
@@ -144,6 +170,7 @@ extension LNIMChatGameMateSkillView {
         
         for _ in 0..<3 {
             let itemView = LNIMChatGameMateSkillCell()
+            itemView.delegate = self
             stackView.addArrangedSubview(itemView)
             itemView.snp.makeConstraints { make in
                 make.width.equalTo(scrollView)

+ 22 - 7
Lanu/Views/Order/Create/LNCreateOrderFromSkillListPanel.swift

@@ -12,7 +12,7 @@ import SnapKit
 
 class LNCreateOrderFromSkillListPanel: LNPopupView {
     private let skillListView = UIStackView()
-    private let priceLabel = UILabel()
+    private let costLabel = UILabel()
     
     private let minusButton = UIButton()
     private let countLabel = UILabel()
@@ -26,6 +26,7 @@ class LNCreateOrderFromSkillListPanel: LNPopupView {
             } else {
                 minusButton.isEnabled = true
             }
+            updatePrice()
         }
     }
     
@@ -80,7 +81,7 @@ extension LNCreateOrderFromSkillListPanel {
         let attrStr = NSMutableAttributedString(string: text)
         let range = (text as NSString).range(of: "\(cost.toDisplay)")
         attrStr.addAttribute(.font, value: UIFont.heading_h2, range: range)
-        priceLabel.attributedText = attrStr
+        costLabel.attributedText = attrStr
     }
     
     private func setupViews() {
@@ -181,10 +182,24 @@ extension LNCreateOrderFromSkillListPanel {
         }
         
         let orderButton = UIButton()
-        orderButton.setBackgroundImage(.init(named: "ic_skill_order"), for: .normal)
+        orderButton.setBackgroundImage(.init(named: "ic_skill_order_long"), for: .normal)
         orderButton.setTitle(.init(key: "Order"), for: .normal)
         orderButton.setTitleColor(.text_1, for: .normal)
         orderButton.titleLabel?.font = .heading_h3
+        orderButton.addAction(UIAction(handler: { [weak self] _ in
+            guard let self else { return }
+            guard let curSelected else { return }
+            
+            LNOrderManager.shared.createOrder(
+                skillId: curSelected.id, count: curCount,
+                remark: "")
+            { [weak self] orderNo in
+                guard let self else { return }
+                guard orderNo != nil else { return }
+                
+                dismiss()
+            }
+        }), for: .touchUpInside)
         buttonView.addSubview(orderButton)
         orderButton.snp.makeConstraints { make in
             make.trailing.equalToSuperview()
@@ -211,10 +226,10 @@ extension LNCreateOrderFromSkillListPanel {
             make.width.height.equalTo(20)
         }
         
-        priceLabel.font = .body_s
-        priceLabel.textColor = .text_4
-        priceView.addSubview(priceLabel)
-        priceLabel.snp.makeConstraints { make in
+        costLabel.font = .body_s
+        costLabel.textColor = .text_4
+        priceView.addSubview(costLabel)
+        costLabel.snp.makeConstraints { make in
             make.verticalEdges.trailing.equalToSuperview()
             make.leading.equalTo(coin.snp.trailing).offset(4)
         }