改了客服UI
authorliangzhenying <867174124@qq.com>
Mon, 2 Mar 2026 06:33:23 +0000 (14:33 +0800)
committerliangzhenying <867174124@qq.com>
Mon, 2 Mar 2026 06:33:23 +0000 (14:33 +0800)
ShenYin/ShenYin.xcodeproj/project.pbxproj
ShenYin/ShenYin/UI/Base/BaseTC.swift
ShenYin/ShenYin/UI/Customer/CustomerCell.swift [moved from ShenYin/ShenYin/UI/Mine/Feedback/FeedbackContentView.swift with 76% similarity]
ShenYin/ShenYin/UI/Customer/CustomerHeaderView.swift
ShenYin/ShenYin/UI/Customer/CustomerTabListView.swift [moved from ShenYin/ShenYin/UI/Mine/Feedback/FeedbackQaListView.swift with 64% similarity]
ShenYin/ShenYin/UI/Customer/CustomerTabView.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Customer/CustomerVC.swift
ShenYin/ShenYin/UI/Customer/QaHeaderView.swift [deleted file]
ShenYin/ShenYin/UI/Mine/Feedback/FeedbackVM.swift
ShenYin/ShenYin/UI/Mine/Feedback/FeekBackHeader.swift [new file with mode: 0644]
ShenYin/ShenYin/UI/Mine/Feedback/FeekbackVC.swift

index 69d9ccb..441e49f 100644 (file)
                                UI/common/SendToolBar.swift,
                                UI/common/YLprogressHUD.swift,
                                UI/common/YLProgressMB.swift,
+                               UI/Customer/CustomerCell.swift,
                                UI/Customer/CustomerHeaderView.swift,
+                               UI/Customer/CustomerTabListView.swift,
+                               UI/Customer/CustomerTabView.swift,
                                UI/Customer/CustomerVC.swift,
-                               UI/Customer/QaHeaderView.swift,
                                UI/Home/Chat/CCRole.swift,
                                UI/Home/Chat/ChatCell.swift,
                                UI/Home/Chat/ChatHeaderView.swift,
                                UI/Mine/Feedback/Commit/FeedbackInputView.swift,
                                UI/Mine/Feedback/Commit/FeedbackTypeView.swift,
                                UI/Mine/Feedback/FeedbackBottomView.swift,
-                               UI/Mine/Feedback/FeedbackContentView.swift,
                                UI/Mine/Feedback/FeedbackHistoryVC.swift,
-                               UI/Mine/Feedback/FeedbackQaListView.swift,
                                UI/Mine/Feedback/FeedbackVM.swift,
+                               UI/Mine/Feedback/FeekBackHeader.swift,
                                UI/Mine/Feedback/FeekbackVC.swift,
                                UI/Mine/Feedback/QaModel.swift,
                                UI/Mine/Instructions/InstructionsDetailVC.swift,
                                CODE_SIGN_ENTITLEMENTS = ShenYin/ShenYin.entitlements;
                                CODE_SIGN_IDENTITY = "Apple Development";
                                CODE_SIGN_STYLE = Automatic;
-                               CURRENT_PROJECT_VERSION = 202602241648;
+                               CURRENT_PROJECT_VERSION = 202603031420;
                                DEVELOPMENT_TEAM = MAC46RQ4KH;
                                FRAMEWORK_SEARCH_PATHS = (
                                        "$(inherited)",
                                CODE_SIGN_ENTITLEMENTS = ShenYin/ShenYin.entitlements;
                                CODE_SIGN_IDENTITY = "Apple Development";
                                CODE_SIGN_STYLE = Automatic;
-                               CURRENT_PROJECT_VERSION = 202602241648;
+                               CURRENT_PROJECT_VERSION = 202603031420;
                                DEVELOPMENT_TEAM = MAC46RQ4KH;
                                FRAMEWORK_SEARCH_PATHS = (
                                        "$(inherited)",
                                CODE_SIGN_ENTITLEMENTS = ShenYin/PLAYBOY.entitlements;
                                CODE_SIGN_IDENTITY = "Apple Development";
                                CODE_SIGN_STYLE = Automatic;
-                               CURRENT_PROJECT_VERSION = 202603021003;
+                               CURRENT_PROJECT_VERSION = 202603031403;
                                DEVELOPMENT_TEAM = JKLJ58J33Q;
                                FRAMEWORK_SEARCH_PATHS = (
                                        "$(inherited)",
                                CODE_SIGN_ENTITLEMENTS = ShenYin/PLAYBOY.entitlements;
                                CODE_SIGN_IDENTITY = "Apple Development";
                                CODE_SIGN_STYLE = Automatic;
-                               CURRENT_PROJECT_VERSION = 202603021003;
+                               CURRENT_PROJECT_VERSION = 202603031403;
                                DEVELOPMENT_TEAM = JKLJ58J33Q;
                                FRAMEWORK_SEARCH_PATHS = (
                                        "$(inherited)",
index 907eba5..ebd434e 100644 (file)
@@ -8,8 +8,6 @@
 import UIKit
 
 class BaseTC:UITabBarController{
-
-
     override func viewDidLoad() {
         super.viewDidLoad()
 
@@ -21,7 +19,7 @@ class BaseTC:UITabBarController{
     func setupUI(){
         if CCDevice.isJoy{
             let homeVC = HomeDeviceVC()
-//            let homeVC = SportHomeVC()
+//            let homeVC = CustomerVC()
 
             let modeVC = ModeVC()
             let sleepVC = SleepVC()
@@ -1,10 +1,10 @@
 //
-//  FeedbackContentView.swift
+//  Untitled.swift
 //  ShenYin
 //
-//  Created by liangshi on 2025/10/16.
+//  Created by liangshi on 2026/3/2.
 //
-
+import UIKit
 import Photos
 
 class FeedbackContentModel{
@@ -16,54 +16,7 @@ class FeedbackContentModel{
     }
 }
 
-class FeedbackContentView: BaseView {
-    let tableView = UITableView(frame: .zero, style: .plain)
-    var list = [FeedbackContentModel]()
-    
-    override func setupViews() {
-        backgroundColor = .clear
-        tableView.do { v in
-            v.backgroundColor = .clear
-            v.delegate = self
-            v.dataSource = self
-            v.separatorStyle = .none
-            v.estimatedRowHeight = 50
-            v.register(FeedbackContentViewCell.self, forCellReuseIdentifier: FeedbackContentViewCell.reuseID)
-        }
-        
-        addSubview(tableView)
-    }
-    override func setupLayout() {
-        tableView.snp.makeConstraints { make in
-            make.left.right.equalToSuperview().inset(0)
-            make.top.bottom.equalToSuperview().inset(0)
-        }
-    }
-    
-    func addData(model:FeedbackContentModel){
-        list.append(model)
-        tableView.reloadData()
-        if list.count > 0 {
-            tableView.scrollToRow(at: IndexPath(row: list.count - 1, section: 0), at: .bottom, animated: true)
-        }
-    }
-}
-extension FeedbackContentView:UITableViewDelegate,UITableViewDataSource {
-    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-        return list.count
-    }
-    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-        let cell = FeedbackContentViewCell.cell(withTableView: tableView, indexPath: indexPath)
-        cell.data = list[indexPath.row]
-        return cell
-    }
-    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-        let data = list[indexPath.row]
-        
-    }
-}
-
-class FeedbackContentViewCell:BaseTableViewCell{
+class CustomerCell:BaseTableViewCell{
     let bgView = UIView()
     let originalLabel = UILabel()
     let icon = UIImageView()
@@ -149,7 +102,7 @@ class FeedbackContentViewCell:BaseTableViewCell{
         }
     }
 }
-class FeedbackContentImageCell:BaseTableViewCell{
+class CustomerImageCell:BaseTableViewCell{
     let bgView = UIView()
     let imgView = UIImageView()
     let icon = UIImageView()
@@ -170,13 +123,13 @@ class FeedbackContentImageCell:BaseTableViewCell{
             v.yc.setCornerRadius(8)
             v.backgroundColor = .color(.cellBg)
         }
-
+        
         icon.do { v in
             v.yc.setCornerRadius(18)
         }
-//        imgView.do {v  in
-//            v.yc.setCornerRadius(12)
-//        }
+        //        imgView.do {v  in
+        //            v.yc.setCornerRadius(12)
+        //        }
         contentView.addSubviews([bgView,icon])
         bgView.addSubviews([imgView])
         let longTap = UILongPressGestureRecognizer(target: self, action: #selector(longPressAction(_:)))
index 3fba650..c89ea32 100644 (file)
-//
-//  CustomerHeaderView.swift
-//  ShenYin
-//
-//  Created by liangshi on 2025/10/31.
+////
+////  CustomerHeaderView.swift
+////  ShenYin
+////
+////  Created by liangshi on 2025/10/31.
+////
 //
 
 class CustomerHeaderView: BaseView {
-    let bgView = UIView()
-    let titleLabel = CustomerHeaderCell()
-    let vm = FeedbackVM()
-    var didSelected:((_ model:QaModelListModel)->Void)?
-    var headerHeightDigChange:((_ headerHeight:Double)->Void)?
+    let titleLabel = CustomerCell()
+    let qaView = CustomerTabView()
+    
     
     override func setupViews() {
-        //        backgroundColor = .red
-        bgView.do { v in
-            v.backgroundColor = .color(.cellBg)
-            v.yc.setCornerRadius(12)
-        }
+        backgroundColor = .color(.bgColor)
         titleLabel.do { (v) in
             v.data = FeedbackContentModel(content: "你好,请问有什么我可以帮助到您".l10n,isSend: false)
         }
-        
-        
-        addSubviews([titleLabel,bgView])
+        addSubviews([titleLabel,qaView])
     }
     override func setupLayout() {
         titleLabel.snp.makeConstraints { make in
             make.top.equalToSuperview().inset(0)
-            make.height.equalTo(68)
+            make.height.equalTo(71)
             make.left.right.equalToSuperview()
         }
-    }
-    
-    func loadData(categoryId:String){
-        vm.categoryId = categoryId
-        vm.refresh {[weak self] model in
-            guard let self = self else{return}
-            if model.isSuccess{
-                addCell()
-            }
-        }
-    }
-    func addCell(){
-        bgView.removeSubviews()
-        var totalHeight = 0.0
-        let titleLabel = UILabel()
-        titleLabel.text = "猜你想问".l10n
-        titleLabel.textColor = .color(.first)
-        titleLabel.font = .bold(16)
-        titleLabel.sizeToFit()
-        titleLabel.left = 10
-        titleLabel.top = 14
-        bgView.addSubview(titleLabel)
-        totalHeight = titleLabel.bottom + 14
-        
-        for item in vm.list {
-            let label = HeaderCell()
-            label.text = item.title
-            label.textColor = .color(.secondary)
-            label.font = .regular(14)
-            label.numberOfLines = 0
-            label.width = kScreenWid - 140
-            label.model = item
-            label.sizeToFit()
-            label.left = 10
-            label.top = totalHeight
-            bgView.addSubview(label)
-            totalHeight = label.bottom + 12
-            
-//            if item !== vm.list.last {
-//                let line = UIView()
-//                line.backgroundColor = .color(.separateLine)
-//                line.height = 1
-//                line.width = kScreenWid - 2*70
-//                line.left = 10
-//                line.top = totalHeight - 6
-//                bgView.addSubview(line)
-//            }
-            
-            label.add(target: self, action: #selector(tapAction(_:)))
-        }
-        
-        bgView.snp.remakeConstraints { make in
-            make.left.right.equalToSuperview().inset(60)
-            make.height.equalTo(totalHeight)
-            make.top.equalToSuperview().inset(80)
-        }
-        totalHeight += 80
-        headerHeightDigChange?(totalHeight)
-    }
-    @objc func tapAction(_ tap:UITapGestureRecognizer){
-        if let cell = tap.view as? HeaderCell{
-            didSelected?(cell.model)
+        qaView.snp.makeConstraints { make in
+            make.left.right.equalToSuperview()
+            make.height.equalTo(162)
+            make.top.equalToSuperview().inset(85)
         }
     }
 }
 
-fileprivate class HeaderCell: UILabel {
-    var model:QaModelListModel!
-}
-
 fileprivate class HeaderViewCell: BaseView {
     let titleLabel = UILabel()
 
@@ -125,81 +56,3 @@ fileprivate class HeaderViewCell: BaseView {
 }
 
 
-class CustomerHeaderCell:BaseView{
-    let bgView = UIView()
-    let originalLabel = UILabel()
-    let icon = UIImageView()
-    
-
-    
-    override func setupViews() {
-        backgroundColor = .color(.bgColor)
-        
-        bgView.do { v in
-            v.yc.setCornerRadius(12)
-        }
-        originalLabel.do { v in
-            v.font = .regular(14)
-            v.textColor = .color(.first)
-            v.numberOfLines = 0
-            v.textAlignment = .left
-        }
-        icon.do { v in
-            v.yc.setCornerRadius(18)
-        }
-        addSubviews([bgView,icon])
-        
-        bgView.addSubviews([originalLabel])
-    }
-    
-    override func setupLayout() {
-        bgView.snp.makeConstraints { make in
-            make.top.bottom.equalToSuperview().inset(10)
-            make.width.lessThanOrEqualTo(kScreenWid - 36)
-            make.left.equalToSuperview().inset(18)
-        }
-        
-        originalLabel.snp.makeConstraints { make in
-            make.top.bottom.equalToSuperview().inset(14)
-            make.left.right.equalToSuperview().inset(12)
-            make.width.lessThanOrEqualTo(kScreenWid - 140)
-            make.width.greaterThanOrEqualTo(20)
-            make.height.greaterThanOrEqualTo(19)
-        }
-    }
-    
-    var data:FeedbackContentModel!{
-        didSet{
-            originalLabel.text = data.content
-            if data.isSend {
-                bgView.backgroundColor = .color(.theme)
-                originalLabel.textColor = .white
-                
-                icon.snp.remakeConstraints { make in
-                    make.size.equalTo(36)
-                    make.top.equalToSuperview().inset(16)
-                    make.right.equalToSuperview().inset(18)
-                }
-                bgView.snp.remakeConstraints { make in
-                    make.top.bottom.equalToSuperview().inset(10)
-                    make.right.equalToSuperview().inset(60)
-                }
-                icon.kf.setImage(with: CacheManager.shared.user.info.avatar.yc.asUrl)
-            }
-            else{
-                bgView.backgroundColor = .clear
-                originalLabel.textColor = .color(.first)
-                icon.image = CCDevice.isJoy ? UIImage(named: "logo_2"):UIImage(named: "logo_4")
-                icon.snp.remakeConstraints { make in
-                    make.size.equalTo(36)
-                    make.top.equalToSuperview().inset(16)
-                    make.left.equalToSuperview().inset(18)
-                }
-                bgView.snp.remakeConstraints { make in
-                    make.top.bottom.equalToSuperview().inset(10)
-                    make.left.equalToSuperview().inset(60)
-                }
-            }
-        }
-    }
-}
@@ -1,37 +1,43 @@
 //
-//  FeedbackQaListView.swift
+//  QaHeaderView.swift
 //  ShenYin
 //
-//  Created by liangshi on 2025/10/16.
+//  Created by liangshi on 2025/10/20.
 //
 
-class FeedbackQaListView: BaseView {
+import JXSegmentedView
+
+class CustomerTabListView: BaseView {
     let tableView = UITableView(frame: .zero, style: .plain)
-    let vm = FeedbackVM()
+    let vm:FeedbackVM
     var didSelected:((_ model:QaModelListModel)->Void)?
     
+    init(categoryId type:String){
+        vm = FeedbackVM(categoryId: type)
+        super.init(frame: .zero)
+    }
+    
+    @MainActor required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
     override func setupViews() {
-        backgroundColor = .color(.cellBg)
-        yc.setCornerRadius(12)
         tableView.do { v in
             v.delegate = self
             v.dataSource = self
             v.separatorStyle = .none
             v.estimatedRowHeight = 50
-            v.register(FeedbackQaListViewCell.self, forCellReuseIdentifier: FeedbackQaListViewCell.reuseID)
+            v.register(CustomerTabListViewCell.self, forCellReuseIdentifier: CustomerTabListViewCell.reuseID)
+            v.backgroundColor = .color(.cellBg)
         }
-        
-        addSubview(tableView)
+        addSubviews([tableView])
     }
     override func setupLayout() {
         tableView.snp.makeConstraints { make in
-            make.left.right.equalToSuperview().inset(0)
-            make.top.bottom.equalToSuperview().inset(15)
+            make.edges.equalToSuperview()
         }
     }
- 
-    func loadData(categoryId:String){
-        vm.categoryId = categoryId
+    override func setupData() {
         vm.refresh {[weak self] model in
             guard let self = self else{return}
             if model.isSuccess{
@@ -40,12 +46,12 @@ class FeedbackQaListView: BaseView {
         }
     }
 }
-extension FeedbackQaListView:UITableViewDelegate,UITableViewDataSource {
+extension CustomerTabListView:UITableViewDelegate,UITableViewDataSource {
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
         return vm.list.count
     }
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-        let cell = FeedbackQaListViewCell.cell(withTableView: tableView, indexPath: indexPath)
+        let cell = CustomerTabListViewCell.cell(withTableView: tableView, indexPath: indexPath)
         cell.titleLabel.text = "\(indexPath.row + 1)." + vm.list[indexPath.row].title
         return cell
     }
@@ -54,10 +60,17 @@ extension FeedbackQaListView:UITableViewDelegate,UITableViewDataSource {
         didSelected?(data)
     }
 }
-class FeedbackQaListViewCell: BaseTableViewCell {
-    let titleLabel = UILabel()
 
-   
+extension CustomerTabListView: JXSegmentedListContainerViewListDelegate {
+    func listView() -> UIView {
+        return self
+    }
+}
+
+fileprivate class CustomerTabListViewCell: BaseTableViewCell {
+    let titleLabel = UILabel()
+    
+    
     override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
         super.init(style: style, reuseIdentifier: reuseIdentifier)
     }
@@ -66,23 +79,23 @@ class FeedbackQaListViewCell: BaseTableViewCell {
         fatalError("init(coder:) has not been implemented")
     }
     override func setupViews() {
-        contentView.addSubviews([titleLabel])
         contentView.backgroundColor = .color(.cellBg)
+        contentView.addSubviews([titleLabel])
+        
         titleLabel.do { (v) in
             v.textColor = .color(.secondary)
             v.font = .regular(14)
             v.textAlignment = .left
             v.numberOfLines = 0
+            v.backgroundColor = .clear
         }
     }
     
     override func setupLayout() {
         titleLabel.snp.makeConstraints { (m) in
-            m.top.bottom.equalToSuperview().inset(5)
+            m.top.bottom.equalToSuperview().inset(8)
             m.left.equalToSuperview().inset(15)
             m.right.lessThanOrEqualToSuperview().inset(10)
         }
     }
-    
-    
 }
diff --git a/ShenYin/ShenYin/UI/Customer/CustomerTabView.swift b/ShenYin/ShenYin/UI/Customer/CustomerTabView.swift
new file mode 100644 (file)
index 0000000..126b112
--- /dev/null
@@ -0,0 +1,116 @@
+//
+//  CustomerTabView.swift
+//  ShenYin
+//
+//  Created by liangshi on 2026/3/2.
+//
+import JXSegmentedView
+import UIKit
+
+class CustomerTabView: BaseView {
+    var didSelected:((_ model:QaModelListModel)->Void)?
+    
+    let bgView = UIView()
+    var list = [QaCategoryModel]()
+    private let segmentedDataSource = JXSegmentedTitleDataSource()
+    private let segmentedView = JXSegmentedView()
+    private lazy var listContainerView: JXSegmentedListContainerView! = {
+        let view = JXSegmentedListContainerView(dataSource: self, type: .scrollView)
+        return view
+    }()
+    
+    override func setupViews() {
+        backgroundColor = .color(.bgColor)
+        bgView.do { v in
+            v.backgroundColor = .color(.cellBg)
+            v.yc.setCornerRadius(12)
+        }
+        addSubviews([bgView])
+        
+        bgView.addSubview(segmentedView)
+        bgView.addSubview(listContainerView)
+        
+        segmentedView.do { (v) in
+            segmentedDataSource.titleNormalColor = .color(.secondary)
+            segmentedDataSource.titleSelectedColor = .color(.first)
+            segmentedDataSource.titleNormalFont = .regular(14)
+            segmentedDataSource.titleSelectedFont = .bold(16)
+            segmentedDataSource.isTitleZoomEnabled = true
+            //            segmentedDataSource.titleSelectedZoomScale = 1
+            segmentedDataSource.isTitleStrokeWidthEnabled = true
+            segmentedDataSource.isItemSpacingAverageEnabled = true
+            segmentedDataSource.isTitleColorGradientEnabled = true
+            //            segmentedDataSource.titles = titles.map{"\($0.name)"}
+            segmentedDataSource.titles = list.map{"\($0.name)"}
+            segmentedView.backgroundColor = .clear
+            
+            //配置指示器
+            let indicator = JXSegmentedIndicatorLineView()
+            indicator.indicatorWidth = 20
+            indicator.indicatorHeight = 4
+            indicator.verticalOffset = 6
+            indicator.indicatorColor = .color(.theme)
+            segmentedView.indicators = [indicator]
+            
+            v.dataSource = segmentedDataSource
+            v.listContainer = listContainerView
+        }
+    }
+    override func setupLayout() {
+        bgView.snp.makeConstraints { make in
+            make.left.right.equalToSuperview().inset(18)
+            make.bottom.equalToSuperview().inset(0)
+            make.top.equalToSuperview().inset(0)
+        }
+
+        segmentedView.snp.makeConstraints { (m) in
+            m.left.right.equalToSuperview()
+            m.height.equalTo(44.fitR)
+            m.top.equalToSuperview()
+        }
+        listContainerView.snp.makeConstraints { (m) in
+            m.width.left.equalToSuperview()
+            m.top.equalTo(segmentedView.snp.bottom)
+            m.bottom.equalToSuperview()
+        }
+    }
+
+    override func setupData() {
+        let api = CommomApi.qaCategory
+        HttpClient.request(api) {[weak self] (model:QaCategoryModelRoot,res) in
+            guard let self = self else {return}
+            if model.isSuccess{
+                list = model.data
+                segmentedDataSource.titles = model.data.map{"\($0.name)"}
+                segmentedView.dataSource = segmentedDataSource
+                
+                listContainerView.reloadData()
+                segmentedView.reloadData()
+            }
+        }
+    }
+}
+
+
+extension CustomerTabView: JXSegmentedListContainerViewListDelegate {
+    func listView() -> UIView {
+        return self
+    }
+}
+
+extension CustomerTabView: JXSegmentedListContainerViewDataSource {
+    func numberOfLists(in listContainerView: JXSegmentedListContainerView) -> Int {
+        if let titleDataSource = segmentedView.dataSource as? JXSegmentedBaseDataSource {
+            return titleDataSource.dataSource.count
+        }
+        return 0
+    }
+    
+    func listContainerView(_ listContainerView: JXSegmentedListContainerView, initListAt index: Int) -> JXSegmentedListContainerViewListDelegate {
+        let view = CustomerTabListView(categoryId: list[index].id)
+        view.didSelected = { [weak self] model in
+            self?.didSelected?(model)
+        }
+        return view
+    }
+}
index 39eb5b1..11c238d 100644 (file)
@@ -9,15 +9,21 @@ import UIKit
 class CustomerVC:BaseVC{
     let scrollView = UIScrollView()
     let toolBar = SendToolBar()
-    let qaView = CustomerHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWid, height: 195))
+    let qaView = CustomerHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWid, height: 260))
     let tableView = UITableView(frame: CGRectZero, style: .plain)
     var dataList:[Any] = []
     override func viewDidLoad() {
         super.viewDidLoad()
     }
+    override func viewWillAppear(_ animated: Bool) {
+        super.viewWillAppear(animated)
+        if qaView.qaView.list.count == 0 {
+            qaView.qaView.setupData()
+        }
+        
+    }
     override func setupViews() {
         self.navBar.title = "客服".l10n
-//        navBar.rightView.setImage(UIImage(named: "help_icon"), for: .normal)
         
         view.addSubviews([scrollView])
         scrollView.addSubviews([toolBar,tableView])
@@ -30,26 +36,19 @@ class CustomerVC:BaseVC{
             v.estimatedRowHeight = 60
             v.separatorStyle = .none
             v.tableHeaderView = qaView
-            v.register(FeedbackContentViewCell.self, forCellReuseIdentifier: FeedbackContentViewCell.reuseID)
-            v.register(FeedbackContentImageCell.self, forCellReuseIdentifier: FeedbackContentImageCell.reuseID)
+            v.register(CustomerCell.self, forCellReuseIdentifier: CustomerCell.reuseID)
+            v.register(CustomerImageCell.self, forCellReuseIdentifier: CustomerImageCell.reuseID)
         }
         toolBar.do { v in
             v.textField.text = ""
             v.delegate = self
             v.textField.attributedPlaceholder = NSAttributedString(string: "请用一句话简单描述下您的问题~".l10n, attributes: [NSAttributedString.Key.foregroundColor: UIColor.color(.placeholder)])
-
-//            v.backgroundColor = .green
         }
         qaView.do { v in
-            v.didSelected = {[weak self] model in
+            v.qaView.didSelected = {[weak self] model in
                 guard let self = self else{return}
                 addModel(model)
             }
-            v.headerHeightDigChange = { [weak self] headeHeight in
-                guard let self = self else{return}
-                qaView.height = headeHeight
-                tableView.tableHeaderView = qaView
-            }
         }
     }
     override func setupLayout() {
@@ -74,13 +73,7 @@ class CustomerVC:BaseVC{
         }
     }
     override func setupData() {
-        let api = CommomApi.qaCategory
-        HttpClient.request(api) {[weak self] (model:QaCategoryModelRoot,res) in
-            guard let self = self else {return}
-            if model.isSuccess,let item = model.data.first{
-                self.qaView.loadData(categoryId: item.id)
-            }
-        }
+
     }
 
     func refreshData(){
@@ -103,12 +96,12 @@ extension CustomerVC:UITableViewDelegate,UITableViewDataSource {
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let data = dataList[indexPath.row]
         if let model = data as? FeedbackContentModel  {
-            let cell = FeedbackContentViewCell.cell(withTableView: tableView, indexPath: indexPath)
+            let cell = CustomerCell.cell(withTableView: tableView, indexPath: indexPath)
             cell.data = model
             return cell
         }
         else if let model = data as? UIImage{
-            let cell = FeedbackContentImageCell.cell(withTableView: tableView, indexPath: indexPath)
+            let cell = CustomerImageCell.cell(withTableView: tableView, indexPath: indexPath)
             cell.imgView.image = model
             return cell
         }
diff --git a/ShenYin/ShenYin/UI/Customer/QaHeaderView.swift b/ShenYin/ShenYin/UI/Customer/QaHeaderView.swift
deleted file mode 100644 (file)
index 900ed92..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-//
-//  QaHeaderView.swift
-//  ShenYin
-//
-//  Created by liangshi on 2025/10/20.
-//
-
-class QaHeaderView: BaseView {
-    let bgView = UIView()
-    let titleLabel = UILabel()
-    let tableView = UITableView(frame: .zero, style: .plain)
-    let vm = FeedbackVM()
-    var didSelected:((_ model:QaModelListModel)->Void)?
-    
-    override func setupViews() {
-        backgroundColor = .color(.bgColor)
-        bgView.do { v in
-            v.backgroundColor = .color(.cellBg)
-            v.yc.setCornerRadius(12)
-        }
-        titleLabel.do { (v) in
-            v.textColor = .color(.first)
-            v.font = .regular(18)
-            v.textAlignment = .left
-            v.lineBreakMode = .byTruncatingTail
-        }
-        tableView.do { v in
-            v.delegate = self
-            v.dataSource = self
-            v.separatorStyle = .none
-            v.estimatedRowHeight = 50
-            v.register(QaHeaderViewCell.self, forCellReuseIdentifier: QaHeaderViewCell.reuseID)
-            v.backgroundColor = .color(.cellBg)
-        }
-        
-        addSubviews([titleLabel,bgView])
-        bgView.addSubview(tableView)
-    }
-    override func setupLayout() {
-        titleLabel.snp.makeConstraints { make in
-            make.top.equalToSuperview().inset(20)
-            make.left.right.equalToSuperview().inset(34)
-        }
-        bgView.snp.makeConstraints { make in
-            make.left.right.equalToSuperview().inset(18)
-            make.bottom.equalToSuperview().inset(10)
-            make.top.equalToSuperview().inset(60)
-        }
-
-        tableView.snp.makeConstraints { make in
-            make.left.right.equalToSuperview()
-            make.top.equalToSuperview().inset(10)
-            make.bottom.equalToSuperview().inset(10)
-        }
-    }
-    
-    func loadData(categoryId:String){
-        vm.categoryId = categoryId
-        vm.refresh {[weak self] model in
-            guard let self = self else{return}
-            if model.isSuccess{
-                tableView.reloadData()
-            }
-        }
-        titleLabel.text = "Hi," + CacheManager.shared.user.info.userName
-    }
-}
-extension QaHeaderView:UITableViewDelegate,UITableViewDataSource {
-    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-        return vm.list.count
-    }
-    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-        let cell = QaHeaderViewCell.cell(withTableView: tableView, indexPath: indexPath)
-        cell.titleLabel.text = vm.list[indexPath.row].title
-        return cell
-    }
-    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-        let data = vm.list[indexPath.row]
-        didSelected?(data)
-    }
-}
-class QaHeaderViewCell: BaseTableViewCell {
-    let titleLabel = UILabel()
-    
-    
-    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
-        super.init(style: style, reuseIdentifier: reuseIdentifier)
-    }
-    
-    required init?(coder: NSCoder) {
-        fatalError("init(coder:) has not been implemented")
-    }
-    override func setupViews() {
-        contentView.backgroundColor = .color(.cellBg)
-        contentView.addSubviews([titleLabel])
-        
-        titleLabel.do { (v) in
-            v.textColor = .color(.secondary)
-            v.font = .regular(14)
-            v.textAlignment = .left
-            v.numberOfLines = 0
-            v.backgroundColor = .clear
-        }
-    }
-    
-    override func setupLayout() {
-        titleLabel.snp.makeConstraints { (m) in
-            m.top.bottom.equalToSuperview().inset(5)
-            m.left.equalToSuperview().inset(15)
-            m.right.lessThanOrEqualToSuperview().inset(10)
-        }
-    }
-}
index 4490005..f7acf53 100644 (file)
@@ -9,6 +9,11 @@ class FeedbackVM:BaseVM{
     var categoryId = ""
     var list = [QaModelListModel]()
     var page = 0
+
+    
+    init(categoryId: String) {
+        self.categoryId = categoryId
+    }
     
     public func refresh(completion:@escaping (_ result:QaModelListModelroot) ->Void) {
         self.page = 1
diff --git a/ShenYin/ShenYin/UI/Mine/Feedback/FeekBackHeader.swift b/ShenYin/ShenYin/UI/Mine/Feedback/FeekBackHeader.swift
new file mode 100644 (file)
index 0000000..640e708
--- /dev/null
@@ -0,0 +1,35 @@
+//
+//  FeekBackHeader.swift
+//  ShenYin
+//
+//  Created by liangshi on 2026/3/2.
+//
+
+class FeekBackHeader: BaseView {
+    let titleLabel = UILabel()
+    let qaView = CustomerTabView()
+
+
+    override func setupViews() {
+        backgroundColor = .color(.bgColor)
+        titleLabel.do { (v) in
+            v.textColor = .color(.first)
+            v.font = .regular(18)
+            v.textAlignment = .left
+            v.lineBreakMode = .byTruncatingTail
+            v.text = "Hi," + CacheManager.shared.user.info.userName
+        }
+        addSubviews([titleLabel,qaView])
+    }
+    override func setupLayout() {
+        titleLabel.snp.makeConstraints { make in
+            make.top.equalToSuperview().inset(30)
+            make.left.right.equalToSuperview().inset(34)
+        }
+        qaView.snp.makeConstraints { make in
+            make.left.right.equalToSuperview()
+            make.height.equalTo(162)
+            make.top.equalToSuperview().inset(90)
+        }
+    }
+}
index a66da9d..7f4a5fc 100644 (file)
@@ -9,7 +9,7 @@ import UIKit
 
 class FeekbackVC:BaseVC{
     let bottomView = FeedbackBottomView()
-    let qaView =  QaHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWid, height: 175))
+    let qaView =  FeekBackHeader(frame: CGRect(x: 0, y: 0, width: kScreenWid, height: 258))
     let tableView = UITableView()
     var dataList:[FeedbackContentModel] = []
     override func viewDidLoad() {
@@ -23,7 +23,7 @@ class FeekbackVC:BaseVC{
         view.addSubviews([bottomView, tableView])
         
         qaView.do { v in
-            v.didSelected = {[weak self] model in
+            v.qaView.didSelected = {[weak self] model in
                 guard let self = self else{return}
                 addModel(model)
             }
@@ -40,7 +40,7 @@ class FeekbackVC:BaseVC{
             v.estimatedRowHeight = 60
             v.separatorStyle = .none
             v.tableHeaderView = qaView
-            v.register(FeedbackContentViewCell.self, forCellReuseIdentifier: FeedbackContentViewCell.reuseID)
+            v.register(CustomerCell.self, forCellReuseIdentifier: CustomerCell.reuseID)
         }
     }
     override func setupLayout() {
@@ -56,13 +56,7 @@ class FeekbackVC:BaseVC{
         }
     }
     override func setupData() {
-        let api = CommomApi.qaCategory
-        HttpClient.request(api) {[weak self] (model:QaCategoryModelRoot,res) in
-            guard let self = self else {return}
-            if model.isSuccess,let item = model.data.first{
-                self.qaView.loadData(categoryId: item.id)
-            }
-        }
+
     }
     
     @objc func feedbackAction(){
@@ -96,7 +90,7 @@ extension FeekbackVC:UITableViewDelegate,UITableViewDataSource {
     }
     
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
-        let cell = FeedbackContentViewCell.cell(withTableView: tableView, indexPath: indexPath)
+        let cell = CustomerCell.cell(withTableView: tableView, indexPath: indexPath)
         cell.data = dataList[indexPath.row]
         return cell
     }