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)",
import UIKit
class BaseTC:UITabBarController{
-
-
override func viewDidLoad() {
super.viewDidLoad()
func setupUI(){
if CCDevice.isJoy{
let homeVC = HomeDeviceVC()
-// let homeVC = SportHomeVC()
+// let homeVC = CustomerVC()
let modeVC = ModeVC()
let sleepVC = SleepVC()
//
-// 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{
}
}
-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()
}
}
}
-class FeedbackContentImageCell:BaseTableViewCell{
+class CustomerImageCell:BaseTableViewCell{
let bgView = UIView()
let imgView = UIImageView()
let icon = UIImageView()
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(_:)))
-//
-// 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()
}
-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)
- }
- }
- }
- }
-}
//
-// 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{
}
}
}
-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
}
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)
}
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)
}
}
-
-
}
--- /dev/null
+//
+// 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
+ }
+}
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])
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() {
}
}
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(){
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
}
+++ /dev/null
-//
-// 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)
- }
- }
-}
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
--- /dev/null
+//
+// 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)
+ }
+ }
+}
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() {
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)
}
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() {
}
}
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(){
}
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
}