From: liangzhenying <867174124@qq.com> Date: Mon, 2 Mar 2026 06:33:23 +0000 (+0800) Subject: 改了客服UI X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=c5ef73893dacaa16b1858751e64cc6f7035c3ef5;p=mirrors%2FShenYin.git 改了客服UI --- diff --git a/ShenYin/ShenYin.xcodeproj/project.pbxproj b/ShenYin/ShenYin.xcodeproj/project.pbxproj index 69d9ccb..441e49f 100644 --- a/ShenYin/ShenYin.xcodeproj/project.pbxproj +++ b/ShenYin/ShenYin.xcodeproj/project.pbxproj @@ -317,9 +317,11 @@ 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, @@ -408,10 +410,9 @@ 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, @@ -1297,7 +1298,7 @@ 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)", @@ -1352,7 +1353,7 @@ 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)", @@ -1529,7 +1530,7 @@ 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)", @@ -1585,7 +1586,7 @@ 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)", diff --git a/ShenYin/ShenYin/UI/Base/BaseTC.swift b/ShenYin/ShenYin/UI/Base/BaseTC.swift index 907eba5..ebd434e 100644 --- a/ShenYin/ShenYin/UI/Base/BaseTC.swift +++ b/ShenYin/ShenYin/UI/Base/BaseTC.swift @@ -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() diff --git a/ShenYin/ShenYin/UI/Mine/Feedback/FeedbackContentView.swift b/ShenYin/ShenYin/UI/Customer/CustomerCell.swift similarity index 76% rename from ShenYin/ShenYin/UI/Mine/Feedback/FeedbackContentView.swift rename to ShenYin/ShenYin/UI/Customer/CustomerCell.swift index 7604742..6cf22a9 100644 --- a/ShenYin/ShenYin/UI/Mine/Feedback/FeedbackContentView.swift +++ b/ShenYin/ShenYin/UI/Customer/CustomerCell.swift @@ -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(_:))) diff --git a/ShenYin/ShenYin/UI/Customer/CustomerHeaderView.swift b/ShenYin/ShenYin/UI/Customer/CustomerHeaderView.swift index 3fba650..c89ea32 100644 --- a/ShenYin/ShenYin/UI/Customer/CustomerHeaderView.swift +++ b/ShenYin/ShenYin/UI/Customer/CustomerHeaderView.swift @@ -1,106 +1,37 @@ -// -// 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) - } - } - } - } -} diff --git a/ShenYin/ShenYin/UI/Mine/Feedback/FeedbackQaListView.swift b/ShenYin/ShenYin/UI/Customer/CustomerTabListView.swift similarity index 64% rename from ShenYin/ShenYin/UI/Mine/Feedback/FeedbackQaListView.swift rename to ShenYin/ShenYin/UI/Customer/CustomerTabListView.swift index 10f581a..e014161 100644 --- a/ShenYin/ShenYin/UI/Mine/Feedback/FeedbackQaListView.swift +++ b/ShenYin/ShenYin/UI/Customer/CustomerTabListView.swift @@ -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 index 0000000..126b112 --- /dev/null +++ b/ShenYin/ShenYin/UI/Customer/CustomerTabView.swift @@ -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 + } +} diff --git a/ShenYin/ShenYin/UI/Customer/CustomerVC.swift b/ShenYin/ShenYin/UI/Customer/CustomerVC.swift index 39eb5b1..11c238d 100644 --- a/ShenYin/ShenYin/UI/Customer/CustomerVC.swift +++ b/ShenYin/ShenYin/UI/Customer/CustomerVC.swift @@ -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 index 900ed92..0000000 --- a/ShenYin/ShenYin/UI/Customer/QaHeaderView.swift +++ /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) - } - } -} diff --git a/ShenYin/ShenYin/UI/Mine/Feedback/FeedbackVM.swift b/ShenYin/ShenYin/UI/Mine/Feedback/FeedbackVM.swift index 4490005..f7acf53 100644 --- a/ShenYin/ShenYin/UI/Mine/Feedback/FeedbackVM.swift +++ b/ShenYin/ShenYin/UI/Mine/Feedback/FeedbackVM.swift @@ -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 index 0000000..640e708 --- /dev/null +++ b/ShenYin/ShenYin/UI/Mine/Feedback/FeekBackHeader.swift @@ -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) + } + } +} diff --git a/ShenYin/ShenYin/UI/Mine/Feedback/FeekbackVC.swift b/ShenYin/ShenYin/UI/Mine/Feedback/FeekbackVC.swift index a66da9d..7f4a5fc 100644 --- a/ShenYin/ShenYin/UI/Mine/Feedback/FeekbackVC.swift +++ b/ShenYin/ShenYin/UI/Mine/Feedback/FeekbackVC.swift @@ -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 }